mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
rename Type::isIntegral to Type::isInteger, eliminating the old Type::isInteger.
rename Type::getIntegralTypeMask to Type::getIntegerTypeMask. This makes naming much more consistent. For example, there are now no longer any instances of IntegerType that are not considered isInteger! :) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33225 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b25c4ca9d8
commit
42a7551725
@ -60,7 +60,7 @@ namespace llvm {
|
|||||||
/// loop (inserting one if there is none). A canonical induction variable
|
/// loop (inserting one if there is none). A canonical induction variable
|
||||||
/// starts at zero and steps by one on each iteration.
|
/// starts at zero and steps by one on each iteration.
|
||||||
Value *getOrInsertCanonicalInductionVariable(const Loop *L, const Type *Ty){
|
Value *getOrInsertCanonicalInductionVariable(const Loop *L, const Type *Ty){
|
||||||
assert((Ty->isIntegral() || Ty->isFloatingPoint()) &&
|
assert((Ty->isInteger() || Ty->isFloatingPoint()) &&
|
||||||
"Can only insert integer or floating point induction variables!");
|
"Can only insert integer or floating point induction variables!");
|
||||||
SCEVHandle H = SCEVAddRecExpr::get(SCEVUnknown::getIntegerSCEV(0, Ty),
|
SCEVHandle H = SCEVAddRecExpr::get(SCEVUnknown::getIntegerSCEV(0, Ty),
|
||||||
SCEVUnknown::getIntegerSCEV(1, Ty), L);
|
SCEVUnknown::getIntegerSCEV(1, Ty), L);
|
||||||
@ -106,9 +106,9 @@ namespace llvm {
|
|||||||
Value *expandInTy(SCEV *S, const Type *Ty) {
|
Value *expandInTy(SCEV *S, const Type *Ty) {
|
||||||
Value *V = expand(S);
|
Value *V = expand(S);
|
||||||
if (Ty && V->getType() != Ty) {
|
if (Ty && V->getType() != Ty) {
|
||||||
if (isa<PointerType>(Ty) && V->getType()->isIntegral())
|
if (isa<PointerType>(Ty) && V->getType()->isInteger())
|
||||||
return InsertCastOfTo(Instruction::IntToPtr, V, Ty);
|
return InsertCastOfTo(Instruction::IntToPtr, V, Ty);
|
||||||
else if (Ty->isIntegral() && isa<PointerType>(V->getType()))
|
else if (Ty->isInteger() && isa<PointerType>(V->getType()))
|
||||||
return InsertCastOfTo(Instruction::PtrToInt, V, Ty);
|
return InsertCastOfTo(Instruction::PtrToInt, V, Ty);
|
||||||
else if (Ty->getPrimitiveSizeInBits() ==
|
else if (Ty->getPrimitiveSizeInBits() ==
|
||||||
V->getType()->getPrimitiveSizeInBits())
|
V->getType()->getPrimitiveSizeInBits())
|
||||||
|
@ -534,7 +534,7 @@ namespace llvm {
|
|||||||
}
|
}
|
||||||
MachOSection *getConstSection(const Type *Ty) {
|
MachOSection *getConstSection(const Type *Ty) {
|
||||||
// FIXME: support cstring literals and pointer literal
|
// FIXME: support cstring literals and pointer literal
|
||||||
if (Ty->isPrimitiveType() || Ty->isIntegral()) {
|
if (Ty->isPrimitiveType() || Ty->isInteger()) {
|
||||||
unsigned Size = TM.getTargetData()->getTypeSize(Ty);
|
unsigned Size = TM.getTargetData()->getTypeSize(Ty);
|
||||||
switch(Size) {
|
switch(Size) {
|
||||||
default: break; // Fall through to __TEXT,__const
|
default: break; // Fall through to __TEXT,__const
|
||||||
|
@ -160,14 +160,9 @@ public:
|
|||||||
/// getDescription - Return the string representation of the type...
|
/// getDescription - Return the string representation of the type...
|
||||||
const std::string &getDescription() const;
|
const std::string &getDescription() const;
|
||||||
|
|
||||||
/// isInteger - Equivalent to isSigned() || isUnsigned()
|
/// isInteger - True if this is an instance of IntegerType.
|
||||||
///
|
///
|
||||||
bool isInteger() const { return ID == IntegerTyID && this != Int1Ty; }
|
bool isInteger() const { return ID == IntegerTyID; }
|
||||||
|
|
||||||
/// isIntegral - Returns true if this is an integral type, which is either
|
|
||||||
/// Int1Ty or one of the Integer types.
|
|
||||||
///
|
|
||||||
bool isIntegral() const { return ID == IntegerTyID; }
|
|
||||||
|
|
||||||
/// isFloatingPoint - Return true if this is one of the two floating point
|
/// isFloatingPoint - Return true if this is one of the two floating point
|
||||||
/// types
|
/// types
|
||||||
@ -209,8 +204,7 @@ public:
|
|||||||
///
|
///
|
||||||
bool isSized() const {
|
bool isSized() const {
|
||||||
// If it's a primitive, it is always sized.
|
// If it's a primitive, it is always sized.
|
||||||
if (ID == IntegerTyID || (ID >= FloatTyID && ID <= DoubleTyID) ||
|
if (ID == IntegerTyID || isFloatingPoint() || ID == PointerTyID)
|
||||||
ID == PointerTyID)
|
|
||||||
return true;
|
return true;
|
||||||
// If it is not something that can have a size (e.g. a function or label),
|
// If it is not something that can have a size (e.g. a function or label),
|
||||||
// it doesn't have a size.
|
// it doesn't have a size.
|
||||||
@ -228,11 +222,11 @@ public:
|
|||||||
///
|
///
|
||||||
unsigned getPrimitiveSizeInBits() const;
|
unsigned getPrimitiveSizeInBits() const;
|
||||||
|
|
||||||
/// getIntegralTypeMask - Return a bitmask with ones set for all of the bits
|
/// getIntegerTypeMask - Return a bitmask with ones set for all of the bits
|
||||||
/// that can be set by an unsigned version of this type. This is 0xFF for
|
/// that can be set by an unsigned version of this type. This is 0xFF for
|
||||||
/// sbyte/ubyte, 0xFFFF for shorts, etc.
|
/// sbyte/ubyte, 0xFFFF for shorts, etc.
|
||||||
uint64_t getIntegralTypeMask() const {
|
uint64_t getIntegerTypeMask() const {
|
||||||
assert(isIntegral() && "This only works for integral types!");
|
assert(isInteger() && "This only works for integer types!");
|
||||||
return ~uint64_t(0UL) >> (64-getPrimitiveSizeInBits());
|
return ~uint64_t(0UL) >> (64-getPrimitiveSizeInBits());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
static ConstantInt *getMaxValue(const Type *Ty, bool isSigned = false) {
|
static ConstantInt *getMaxValue(const Type *Ty, bool isSigned = false) {
|
||||||
if (Ty->isIntegral()) {
|
if (Ty->isInteger()) {
|
||||||
if (isSigned) {
|
if (isSigned) {
|
||||||
// Calculate 011111111111111...
|
// Calculate 011111111111111...
|
||||||
unsigned TypeBits = Ty->getPrimitiveSizeInBits();
|
unsigned TypeBits = Ty->getPrimitiveSizeInBits();
|
||||||
@ -46,7 +46,7 @@ static ConstantInt *getMaxValue(const Type *Ty, bool isSigned = false) {
|
|||||||
|
|
||||||
// Static constructor to create the minimum constant for an integral type...
|
// Static constructor to create the minimum constant for an integral type...
|
||||||
static ConstantInt *getMinValue(const Type *Ty, bool isSigned = false) {
|
static ConstantInt *getMinValue(const Type *Ty, bool isSigned = false) {
|
||||||
if (Ty->isIntegral()) {
|
if (Ty->isInteger()) {
|
||||||
if (isSigned) {
|
if (isSigned) {
|
||||||
// Calculate 1111111111000000000000
|
// Calculate 1111111111000000000000
|
||||||
unsigned TypeBits = Ty->getPrimitiveSizeInBits();
|
unsigned TypeBits = Ty->getPrimitiveSizeInBits();
|
||||||
@ -93,7 +93,7 @@ static ConstantInt *Max(ConstantInt *A, ConstantInt *B,
|
|||||||
/// Initialize a full (the default) or empty set for the specified type.
|
/// Initialize a full (the default) or empty set for the specified type.
|
||||||
///
|
///
|
||||||
ConstantRange::ConstantRange(const Type *Ty, bool Full) {
|
ConstantRange::ConstantRange(const Type *Ty, bool Full) {
|
||||||
assert(Ty->isIntegral() &&
|
assert(Ty->isInteger() &&
|
||||||
"Cannot make constant range of non-integral type!");
|
"Cannot make constant range of non-integral type!");
|
||||||
if (Full)
|
if (Full)
|
||||||
Lower = Upper = getMaxValue(Ty);
|
Lower = Upper = getMaxValue(Ty);
|
||||||
@ -225,7 +225,7 @@ bool ConstantRange::contains(ConstantInt *Val, bool isSigned) const {
|
|||||||
/// subtract - Subtract the specified constant from the endpoints of this
|
/// subtract - Subtract the specified constant from the endpoints of this
|
||||||
/// constant range.
|
/// constant range.
|
||||||
ConstantRange ConstantRange::subtract(ConstantInt *CI) const {
|
ConstantRange ConstantRange::subtract(ConstantInt *CI) const {
|
||||||
assert(CI->getType() == getType() && getType()->isIntegral() &&
|
assert(CI->getType() == getType() && getType()->isInteger() &&
|
||||||
"Cannot subtract from different type range or non-integer!");
|
"Cannot subtract from different type range or non-integer!");
|
||||||
// If the set is empty or full, don't modify the endpoints.
|
// If the set is empty or full, don't modify the endpoints.
|
||||||
if (Lower == Upper) return *this;
|
if (Lower == Upper) return *this;
|
||||||
|
@ -122,7 +122,7 @@ void SCEV::dump() const {
|
|||||||
/// known to have. This method is only valid on integer SCEV objects.
|
/// known to have. This method is only valid on integer SCEV objects.
|
||||||
ConstantRange SCEV::getValueRange() const {
|
ConstantRange SCEV::getValueRange() const {
|
||||||
const Type *Ty = getType();
|
const Type *Ty = getType();
|
||||||
assert(Ty->isIntegral() && "Can't get range for a non-integer SCEV!");
|
assert(Ty->isInteger() && "Can't get range for a non-integer SCEV!");
|
||||||
// Default to a full range if no better information is available.
|
// Default to a full range if no better information is available.
|
||||||
return ConstantRange(getType());
|
return ConstantRange(getType());
|
||||||
}
|
}
|
||||||
@ -194,7 +194,7 @@ static ManagedStatic<std::map<std::pair<SCEV*, const Type*>,
|
|||||||
|
|
||||||
SCEVTruncateExpr::SCEVTruncateExpr(const SCEVHandle &op, const Type *ty)
|
SCEVTruncateExpr::SCEVTruncateExpr(const SCEVHandle &op, const Type *ty)
|
||||||
: SCEV(scTruncate), Op(op), Ty(ty) {
|
: SCEV(scTruncate), Op(op), Ty(ty) {
|
||||||
assert(Op->getType()->isIntegral() && Ty->isIntegral() &&
|
assert(Op->getType()->isInteger() && Ty->isInteger() &&
|
||||||
"Cannot truncate non-integer value!");
|
"Cannot truncate non-integer value!");
|
||||||
assert(Op->getType()->getPrimitiveSizeInBits() > Ty->getPrimitiveSizeInBits()
|
assert(Op->getType()->getPrimitiveSizeInBits() > Ty->getPrimitiveSizeInBits()
|
||||||
&& "This is not a truncating conversion!");
|
&& "This is not a truncating conversion!");
|
||||||
@ -220,7 +220,7 @@ static ManagedStatic<std::map<std::pair<SCEV*, const Type*>,
|
|||||||
|
|
||||||
SCEVZeroExtendExpr::SCEVZeroExtendExpr(const SCEVHandle &op, const Type *ty)
|
SCEVZeroExtendExpr::SCEVZeroExtendExpr(const SCEVHandle &op, const Type *ty)
|
||||||
: SCEV(scZeroExtend), Op(op), Ty(ty) {
|
: SCEV(scZeroExtend), Op(op), Ty(ty) {
|
||||||
assert(Op->getType()->isIntegral() && Ty->isIntegral() &&
|
assert(Op->getType()->isInteger() && Ty->isInteger() &&
|
||||||
"Cannot zero extend non-integer value!");
|
"Cannot zero extend non-integer value!");
|
||||||
assert(Op->getType()->getPrimitiveSizeInBits() < Ty->getPrimitiveSizeInBits()
|
assert(Op->getType()->getPrimitiveSizeInBits() < Ty->getPrimitiveSizeInBits()
|
||||||
&& "This is not an extending conversion!");
|
&& "This is not an extending conversion!");
|
||||||
@ -459,7 +459,7 @@ SCEVHandle SCEVUnknown::getIntegerSCEV(int Val, const Type *Ty) {
|
|||||||
/// extended.
|
/// extended.
|
||||||
static SCEVHandle getTruncateOrZeroExtend(const SCEVHandle &V, const Type *Ty) {
|
static SCEVHandle getTruncateOrZeroExtend(const SCEVHandle &V, const Type *Ty) {
|
||||||
const Type *SrcTy = V->getType();
|
const Type *SrcTy = V->getType();
|
||||||
assert(SrcTy->isIntegral() && Ty->isIntegral() &&
|
assert(SrcTy->isInteger() && Ty->isInteger() &&
|
||||||
"Cannot truncate or zero extend with non-integer arguments!");
|
"Cannot truncate or zero extend with non-integer arguments!");
|
||||||
if (SrcTy->getPrimitiveSizeInBits() == Ty->getPrimitiveSizeInBits())
|
if (SrcTy->getPrimitiveSizeInBits() == Ty->getPrimitiveSizeInBits())
|
||||||
return V; // No conversion
|
return V; // No conversion
|
||||||
@ -1333,7 +1333,7 @@ static uint64_t GetConstantFactor(SCEVHandle S) {
|
|||||||
|
|
||||||
if (SCEVTruncateExpr *T = dyn_cast<SCEVTruncateExpr>(S))
|
if (SCEVTruncateExpr *T = dyn_cast<SCEVTruncateExpr>(S))
|
||||||
return GetConstantFactor(T->getOperand()) &
|
return GetConstantFactor(T->getOperand()) &
|
||||||
T->getType()->getIntegralTypeMask();
|
T->getType()->getIntegerTypeMask();
|
||||||
if (SCEVZeroExtendExpr *E = dyn_cast<SCEVZeroExtendExpr>(S))
|
if (SCEVZeroExtendExpr *E = dyn_cast<SCEVZeroExtendExpr>(S))
|
||||||
return GetConstantFactor(E->getOperand());
|
return GetConstantFactor(E->getOperand());
|
||||||
|
|
||||||
@ -1421,8 +1421,8 @@ SCEVHandle ScalarEvolutionsImpl::createSCEV(Value *V) {
|
|||||||
|
|
||||||
case Instruction::BitCast:
|
case Instruction::BitCast:
|
||||||
// BitCasts are no-op casts so we just eliminate the cast.
|
// BitCasts are no-op casts so we just eliminate the cast.
|
||||||
if (I->getType()->isIntegral() &&
|
if (I->getType()->isInteger() &&
|
||||||
I->getOperand(0)->getType()->isIntegral())
|
I->getOperand(0)->getType()->isInteger())
|
||||||
return getSCEV(I->getOperand(0));
|
return getSCEV(I->getOperand(0));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -2186,7 +2186,7 @@ SCEVHandle ScalarEvolutionsImpl::HowFarToZero(SCEV *V, const Loop *L) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (AddRec->isQuadratic() && AddRec->getType()->isIntegral()) {
|
} else if (AddRec->isQuadratic() && AddRec->getType()->isInteger()) {
|
||||||
// If this is a quadratic (3-term) AddRec {L,+,M,+,N}, find the roots of
|
// If this is a quadratic (3-term) AddRec {L,+,M,+,N}, find the roots of
|
||||||
// the quadratic equation to solve it.
|
// the quadratic equation to solve it.
|
||||||
std::pair<SCEVHandle,SCEVHandle> Roots = SolveQuadraticEquation(AddRec);
|
std::pair<SCEVHandle,SCEVHandle> Roots = SolveQuadraticEquation(AddRec);
|
||||||
@ -2314,7 +2314,7 @@ HowManyLessThans(SCEV *LHS, SCEV *RHS, const Loop *L) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (Cond == ICmpInst::ICMP_SLT) {
|
if (Cond == ICmpInst::ICMP_SLT) {
|
||||||
if (PreCondLHS->getType()->isIntegral()) {
|
if (PreCondLHS->getType()->isInteger()) {
|
||||||
if (RHS != getSCEV(PreCondRHS))
|
if (RHS != getSCEV(PreCondRHS))
|
||||||
return UnknownValue; // Not a comparison against 'm'.
|
return UnknownValue; // Not a comparison against 'm'.
|
||||||
|
|
||||||
@ -2567,14 +2567,14 @@ void ScalarEvolution::print(std::ostream &OS, const Module* ) const {
|
|||||||
|
|
||||||
OS << "Classifying expressions for: " << F.getName() << "\n";
|
OS << "Classifying expressions for: " << F.getName() << "\n";
|
||||||
for (inst_iterator I = inst_begin(F), E = inst_end(F); I != E; ++I)
|
for (inst_iterator I = inst_begin(F), E = inst_end(F); I != E; ++I)
|
||||||
if (I->getType()->isIntegral()) {
|
if (I->getType()->isInteger()) {
|
||||||
OS << *I;
|
OS << *I;
|
||||||
OS << " --> ";
|
OS << " --> ";
|
||||||
SCEVHandle SV = getSCEV(&*I);
|
SCEVHandle SV = getSCEV(&*I);
|
||||||
SV->print(OS);
|
SV->print(OS);
|
||||||
OS << "\t\t";
|
OS << "\t\t";
|
||||||
|
|
||||||
if ((*I).getType()->isIntegral()) {
|
if ((*I).getType()->isInteger()) {
|
||||||
ConstantRange Bounds = SV->getValueRange();
|
ConstantRange Bounds = SV->getValueRange();
|
||||||
if (!Bounds.isFullSet())
|
if (!Bounds.isFullSet())
|
||||||
OS << "Bounds: " << Bounds << " ";
|
OS << "Bounds: " << Bounds << " ";
|
||||||
|
@ -92,7 +92,7 @@ Value *SCEVExpander::visitAddRecExpr(SCEVAddRecExpr *S) {
|
|||||||
const Type *Ty = S->getType();
|
const Type *Ty = S->getType();
|
||||||
const Loop *L = S->getLoop();
|
const Loop *L = S->getLoop();
|
||||||
// We cannot yet do fp recurrences, e.g. the xform of {X,+,F} --> X+{0,+,F}
|
// We cannot yet do fp recurrences, e.g. the xform of {X,+,F} --> X+{0,+,F}
|
||||||
assert(Ty->isIntegral() && "Cannot expand fp recurrences yet!");
|
assert(Ty->isInteger() && "Cannot expand fp recurrences yet!");
|
||||||
|
|
||||||
// {X,+,F} --> X + {0,+,F}
|
// {X,+,F} --> X + {0,+,F}
|
||||||
if (!isa<SCEVConstant>(S->getStart()) ||
|
if (!isa<SCEVConstant>(S->getStart()) ||
|
||||||
|
@ -2791,7 +2791,7 @@ case 118:
|
|||||||
const llvm::Type* ElemTy = yyvsp[-1].TypeVal->get();
|
const llvm::Type* ElemTy = yyvsp[-1].TypeVal->get();
|
||||||
if ((unsigned)yyvsp[-3].UInt64Val != yyvsp[-3].UInt64Val)
|
if ((unsigned)yyvsp[-3].UInt64Val != yyvsp[-3].UInt64Val)
|
||||||
GEN_ERROR("Unsigned result not equal to signed result");
|
GEN_ERROR("Unsigned result not equal to signed result");
|
||||||
if (!ElemTy->isFloatingPoint() && !ElemTy->isIntegral())
|
if (!ElemTy->isFloatingPoint() && !ElemTy->isInteger())
|
||||||
GEN_ERROR("Element type of a PackedType must be primitive");
|
GEN_ERROR("Element type of a PackedType must be primitive");
|
||||||
if (!isPowerOf2_32(yyvsp[-3].UInt64Val))
|
if (!isPowerOf2_32(yyvsp[-3].UInt64Val))
|
||||||
GEN_ERROR("Vector length should be a power of 2!");
|
GEN_ERROR("Vector length should be a power of 2!");
|
||||||
@ -3359,9 +3359,9 @@ case 156:
|
|||||||
{
|
{
|
||||||
if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
|
if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
|
||||||
GEN_ERROR("Logical operator types must match!");
|
GEN_ERROR("Logical operator types must match!");
|
||||||
if (!yyvsp[-3].ConstVal->getType()->isIntegral()) {
|
if (!yyvsp[-3].ConstVal->getType()->isInteger()) {
|
||||||
if (!isa<PackedType>(yyvsp[-3].ConstVal->getType()) ||
|
if (!isa<PackedType>(yyvsp[-3].ConstVal->getType()) ||
|
||||||
!cast<PackedType>(yyvsp[-3].ConstVal->getType())->getElementType()->isIntegral())
|
!cast<PackedType>(yyvsp[-3].ConstVal->getType())->getElementType()->isInteger())
|
||||||
GEN_ERROR("Logical operator requires integral operands!");
|
GEN_ERROR("Logical operator requires integral operands!");
|
||||||
}
|
}
|
||||||
yyval.ConstVal = ConstantExpr::get(yyvsp[-5].BinaryOpVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
|
yyval.ConstVal = ConstantExpr::get(yyvsp[-5].BinaryOpVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
|
||||||
@ -3389,7 +3389,7 @@ case 159:
|
|||||||
{
|
{
|
||||||
if (yyvsp[-1].ConstVal->getType() != Type::Int8Ty)
|
if (yyvsp[-1].ConstVal->getType() != Type::Int8Ty)
|
||||||
GEN_ERROR("Shift count for shift constant must be i8 type!");
|
GEN_ERROR("Shift count for shift constant must be i8 type!");
|
||||||
if (!yyvsp[-3].ConstVal->getType()->isIntegral())
|
if (!yyvsp[-3].ConstVal->getType()->isInteger())
|
||||||
GEN_ERROR("Shift constant expression requires integer operand!");
|
GEN_ERROR("Shift constant expression requires integer operand!");
|
||||||
CHECK_FOR_ERROR;
|
CHECK_FOR_ERROR;
|
||||||
yyval.ConstVal = ConstantExpr::get(yyvsp[-5].OtherOpVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
|
yyval.ConstVal = ConstantExpr::get(yyvsp[-5].OtherOpVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
|
||||||
@ -4371,7 +4371,7 @@ case 261:
|
|||||||
{
|
{
|
||||||
if (!UpRefs.empty())
|
if (!UpRefs.empty())
|
||||||
GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
|
GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
|
||||||
if (!(*yyvsp[-3].TypeVal)->isIntegral() && !(*yyvsp[-3].TypeVal)->isFloatingPoint() &&
|
if (!(*yyvsp[-3].TypeVal)->isInteger() && !(*yyvsp[-3].TypeVal)->isFloatingPoint() &&
|
||||||
!isa<PackedType>((*yyvsp[-3].TypeVal).get()))
|
!isa<PackedType>((*yyvsp[-3].TypeVal).get()))
|
||||||
GEN_ERROR(
|
GEN_ERROR(
|
||||||
"Arithmetic operator requires integer, FP, or packed operands!");
|
"Arithmetic operator requires integer, FP, or packed operands!");
|
||||||
@ -4395,9 +4395,9 @@ case 262:
|
|||||||
{
|
{
|
||||||
if (!UpRefs.empty())
|
if (!UpRefs.empty())
|
||||||
GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
|
GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
|
||||||
if (!(*yyvsp[-3].TypeVal)->isIntegral()) {
|
if (!(*yyvsp[-3].TypeVal)->isInteger()) {
|
||||||
if (!isa<PackedType>(yyvsp[-3].TypeVal->get()) ||
|
if (!isa<PackedType>(yyvsp[-3].TypeVal->get()) ||
|
||||||
!cast<PackedType>(yyvsp[-3].TypeVal->get())->getElementType()->isIntegral())
|
!cast<PackedType>(yyvsp[-3].TypeVal->get())->getElementType()->isInteger())
|
||||||
GEN_ERROR("Logical operator requires integral operands!");
|
GEN_ERROR("Logical operator requires integral operands!");
|
||||||
}
|
}
|
||||||
Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
|
Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
|
||||||
@ -4447,7 +4447,7 @@ case 265:
|
|||||||
{
|
{
|
||||||
if (yyvsp[0].ValueVal->getType() != Type::Int8Ty)
|
if (yyvsp[0].ValueVal->getType() != Type::Int8Ty)
|
||||||
GEN_ERROR("Shift amount must be i8 type!");
|
GEN_ERROR("Shift amount must be i8 type!");
|
||||||
if (!yyvsp[-2].ValueVal->getType()->isIntegral())
|
if (!yyvsp[-2].ValueVal->getType()->isInteger())
|
||||||
GEN_ERROR("Shift constant expression requires integer operand!");
|
GEN_ERROR("Shift constant expression requires integer operand!");
|
||||||
CHECK_FOR_ERROR;
|
CHECK_FOR_ERROR;
|
||||||
yyval.InstVal = new ShiftInst(yyvsp[-3].OtherOpVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
|
yyval.InstVal = new ShiftInst(yyvsp[-3].OtherOpVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
|
||||||
|
@ -1274,7 +1274,7 @@ Types
|
|||||||
const llvm::Type* ElemTy = $4->get();
|
const llvm::Type* ElemTy = $4->get();
|
||||||
if ((unsigned)$2 != $2)
|
if ((unsigned)$2 != $2)
|
||||||
GEN_ERROR("Unsigned result not equal to signed result");
|
GEN_ERROR("Unsigned result not equal to signed result");
|
||||||
if (!ElemTy->isFloatingPoint() && !ElemTy->isIntegral())
|
if (!ElemTy->isFloatingPoint() && !ElemTy->isInteger())
|
||||||
GEN_ERROR("Element type of a PackedType must be primitive");
|
GEN_ERROR("Element type of a PackedType must be primitive");
|
||||||
if (!isPowerOf2_32($2))
|
if (!isPowerOf2_32($2))
|
||||||
GEN_ERROR("Vector length should be a power of 2!");
|
GEN_ERROR("Vector length should be a power of 2!");
|
||||||
@ -1756,9 +1756,9 @@ ConstExpr: CastOps '(' ConstVal TO Types ')' {
|
|||||||
| LogicalOps '(' ConstVal ',' ConstVal ')' {
|
| LogicalOps '(' ConstVal ',' ConstVal ')' {
|
||||||
if ($3->getType() != $5->getType())
|
if ($3->getType() != $5->getType())
|
||||||
GEN_ERROR("Logical operator types must match!");
|
GEN_ERROR("Logical operator types must match!");
|
||||||
if (!$3->getType()->isIntegral()) {
|
if (!$3->getType()->isInteger()) {
|
||||||
if (!isa<PackedType>($3->getType()) ||
|
if (!isa<PackedType>($3->getType()) ||
|
||||||
!cast<PackedType>($3->getType())->getElementType()->isIntegral())
|
!cast<PackedType>($3->getType())->getElementType()->isInteger())
|
||||||
GEN_ERROR("Logical operator requires integral operands!");
|
GEN_ERROR("Logical operator requires integral operands!");
|
||||||
}
|
}
|
||||||
$$ = ConstantExpr::get($1, $3, $5);
|
$$ = ConstantExpr::get($1, $3, $5);
|
||||||
@ -1777,7 +1777,7 @@ ConstExpr: CastOps '(' ConstVal TO Types ')' {
|
|||||||
| ShiftOps '(' ConstVal ',' ConstVal ')' {
|
| ShiftOps '(' ConstVal ',' ConstVal ')' {
|
||||||
if ($5->getType() != Type::Int8Ty)
|
if ($5->getType() != Type::Int8Ty)
|
||||||
GEN_ERROR("Shift count for shift constant must be i8 type!");
|
GEN_ERROR("Shift count for shift constant must be i8 type!");
|
||||||
if (!$3->getType()->isIntegral())
|
if (!$3->getType()->isInteger())
|
||||||
GEN_ERROR("Shift constant expression requires integer operand!");
|
GEN_ERROR("Shift constant expression requires integer operand!");
|
||||||
CHECK_FOR_ERROR;
|
CHECK_FOR_ERROR;
|
||||||
$$ = ConstantExpr::get($1, $3, $5);
|
$$ = ConstantExpr::get($1, $3, $5);
|
||||||
@ -2573,7 +2573,7 @@ OptTailCall : TAIL CALL {
|
|||||||
InstVal : ArithmeticOps Types ValueRef ',' ValueRef {
|
InstVal : ArithmeticOps Types ValueRef ',' ValueRef {
|
||||||
if (!UpRefs.empty())
|
if (!UpRefs.empty())
|
||||||
GEN_ERROR("Invalid upreference in type: " + (*$2)->getDescription());
|
GEN_ERROR("Invalid upreference in type: " + (*$2)->getDescription());
|
||||||
if (!(*$2)->isIntegral() && !(*$2)->isFloatingPoint() &&
|
if (!(*$2)->isInteger() && !(*$2)->isFloatingPoint() &&
|
||||||
!isa<PackedType>((*$2).get()))
|
!isa<PackedType>((*$2).get()))
|
||||||
GEN_ERROR(
|
GEN_ERROR(
|
||||||
"Arithmetic operator requires integer, FP, or packed operands!");
|
"Arithmetic operator requires integer, FP, or packed operands!");
|
||||||
@ -2594,9 +2594,9 @@ InstVal : ArithmeticOps Types ValueRef ',' ValueRef {
|
|||||||
| LogicalOps Types ValueRef ',' ValueRef {
|
| LogicalOps Types ValueRef ',' ValueRef {
|
||||||
if (!UpRefs.empty())
|
if (!UpRefs.empty())
|
||||||
GEN_ERROR("Invalid upreference in type: " + (*$2)->getDescription());
|
GEN_ERROR("Invalid upreference in type: " + (*$2)->getDescription());
|
||||||
if (!(*$2)->isIntegral()) {
|
if (!(*$2)->isInteger()) {
|
||||||
if (!isa<PackedType>($2->get()) ||
|
if (!isa<PackedType>($2->get()) ||
|
||||||
!cast<PackedType>($2->get())->getElementType()->isIntegral())
|
!cast<PackedType>($2->get())->getElementType()->isInteger())
|
||||||
GEN_ERROR("Logical operator requires integral operands!");
|
GEN_ERROR("Logical operator requires integral operands!");
|
||||||
}
|
}
|
||||||
Value* tmpVal1 = getVal(*$2, $3);
|
Value* tmpVal1 = getVal(*$2, $3);
|
||||||
@ -2637,7 +2637,7 @@ InstVal : ArithmeticOps Types ValueRef ',' ValueRef {
|
|||||||
| ShiftOps ResolvedVal ',' ResolvedVal {
|
| ShiftOps ResolvedVal ',' ResolvedVal {
|
||||||
if ($4->getType() != Type::Int8Ty)
|
if ($4->getType() != Type::Int8Ty)
|
||||||
GEN_ERROR("Shift amount must be i8 type!");
|
GEN_ERROR("Shift amount must be i8 type!");
|
||||||
if (!$2->getType()->isIntegral())
|
if (!$2->getType()->isInteger())
|
||||||
GEN_ERROR("Shift constant expression requires integer operand!");
|
GEN_ERROR("Shift constant expression requires integer operand!");
|
||||||
CHECK_FOR_ERROR;
|
CHECK_FOR_ERROR;
|
||||||
$$ = new ShiftInst($1, $2, $4);
|
$$ = new ShiftInst($1, $2, $4);
|
||||||
|
@ -1274,7 +1274,7 @@ Types
|
|||||||
const llvm::Type* ElemTy = $4->get();
|
const llvm::Type* ElemTy = $4->get();
|
||||||
if ((unsigned)$2 != $2)
|
if ((unsigned)$2 != $2)
|
||||||
GEN_ERROR("Unsigned result not equal to signed result");
|
GEN_ERROR("Unsigned result not equal to signed result");
|
||||||
if (!ElemTy->isFloatingPoint() && !ElemTy->isIntegral())
|
if (!ElemTy->isFloatingPoint() && !ElemTy->isInteger())
|
||||||
GEN_ERROR("Element type of a PackedType must be primitive");
|
GEN_ERROR("Element type of a PackedType must be primitive");
|
||||||
if (!isPowerOf2_32($2))
|
if (!isPowerOf2_32($2))
|
||||||
GEN_ERROR("Vector length should be a power of 2!");
|
GEN_ERROR("Vector length should be a power of 2!");
|
||||||
@ -1756,9 +1756,9 @@ ConstExpr: CastOps '(' ConstVal TO Types ')' {
|
|||||||
| LogicalOps '(' ConstVal ',' ConstVal ')' {
|
| LogicalOps '(' ConstVal ',' ConstVal ')' {
|
||||||
if ($3->getType() != $5->getType())
|
if ($3->getType() != $5->getType())
|
||||||
GEN_ERROR("Logical operator types must match!");
|
GEN_ERROR("Logical operator types must match!");
|
||||||
if (!$3->getType()->isIntegral()) {
|
if (!$3->getType()->isInteger()) {
|
||||||
if (!isa<PackedType>($3->getType()) ||
|
if (!isa<PackedType>($3->getType()) ||
|
||||||
!cast<PackedType>($3->getType())->getElementType()->isIntegral())
|
!cast<PackedType>($3->getType())->getElementType()->isInteger())
|
||||||
GEN_ERROR("Logical operator requires integral operands!");
|
GEN_ERROR("Logical operator requires integral operands!");
|
||||||
}
|
}
|
||||||
$$ = ConstantExpr::get($1, $3, $5);
|
$$ = ConstantExpr::get($1, $3, $5);
|
||||||
@ -1777,7 +1777,7 @@ ConstExpr: CastOps '(' ConstVal TO Types ')' {
|
|||||||
| ShiftOps '(' ConstVal ',' ConstVal ')' {
|
| ShiftOps '(' ConstVal ',' ConstVal ')' {
|
||||||
if ($5->getType() != Type::Int8Ty)
|
if ($5->getType() != Type::Int8Ty)
|
||||||
GEN_ERROR("Shift count for shift constant must be i8 type!");
|
GEN_ERROR("Shift count for shift constant must be i8 type!");
|
||||||
if (!$3->getType()->isIntegral())
|
if (!$3->getType()->isInteger())
|
||||||
GEN_ERROR("Shift constant expression requires integer operand!");
|
GEN_ERROR("Shift constant expression requires integer operand!");
|
||||||
CHECK_FOR_ERROR;
|
CHECK_FOR_ERROR;
|
||||||
$$ = ConstantExpr::get($1, $3, $5);
|
$$ = ConstantExpr::get($1, $3, $5);
|
||||||
@ -2573,7 +2573,7 @@ OptTailCall : TAIL CALL {
|
|||||||
InstVal : ArithmeticOps Types ValueRef ',' ValueRef {
|
InstVal : ArithmeticOps Types ValueRef ',' ValueRef {
|
||||||
if (!UpRefs.empty())
|
if (!UpRefs.empty())
|
||||||
GEN_ERROR("Invalid upreference in type: " + (*$2)->getDescription());
|
GEN_ERROR("Invalid upreference in type: " + (*$2)->getDescription());
|
||||||
if (!(*$2)->isIntegral() && !(*$2)->isFloatingPoint() &&
|
if (!(*$2)->isInteger() && !(*$2)->isFloatingPoint() &&
|
||||||
!isa<PackedType>((*$2).get()))
|
!isa<PackedType>((*$2).get()))
|
||||||
GEN_ERROR(
|
GEN_ERROR(
|
||||||
"Arithmetic operator requires integer, FP, or packed operands!");
|
"Arithmetic operator requires integer, FP, or packed operands!");
|
||||||
@ -2594,9 +2594,9 @@ InstVal : ArithmeticOps Types ValueRef ',' ValueRef {
|
|||||||
| LogicalOps Types ValueRef ',' ValueRef {
|
| LogicalOps Types ValueRef ',' ValueRef {
|
||||||
if (!UpRefs.empty())
|
if (!UpRefs.empty())
|
||||||
GEN_ERROR("Invalid upreference in type: " + (*$2)->getDescription());
|
GEN_ERROR("Invalid upreference in type: " + (*$2)->getDescription());
|
||||||
if (!(*$2)->isIntegral()) {
|
if (!(*$2)->isInteger()) {
|
||||||
if (!isa<PackedType>($2->get()) ||
|
if (!isa<PackedType>($2->get()) ||
|
||||||
!cast<PackedType>($2->get())->getElementType()->isIntegral())
|
!cast<PackedType>($2->get())->getElementType()->isInteger())
|
||||||
GEN_ERROR("Logical operator requires integral operands!");
|
GEN_ERROR("Logical operator requires integral operands!");
|
||||||
}
|
}
|
||||||
Value* tmpVal1 = getVal(*$2, $3);
|
Value* tmpVal1 = getVal(*$2, $3);
|
||||||
@ -2637,7 +2637,7 @@ InstVal : ArithmeticOps Types ValueRef ',' ValueRef {
|
|||||||
| ShiftOps ResolvedVal ',' ResolvedVal {
|
| ShiftOps ResolvedVal ',' ResolvedVal {
|
||||||
if ($4->getType() != Type::Int8Ty)
|
if ($4->getType() != Type::Int8Ty)
|
||||||
GEN_ERROR("Shift amount must be i8 type!");
|
GEN_ERROR("Shift amount must be i8 type!");
|
||||||
if (!$2->getType()->isIntegral())
|
if (!$2->getType()->isInteger())
|
||||||
GEN_ERROR("Shift constant expression requires integer operand!");
|
GEN_ERROR("Shift constant expression requires integer operand!");
|
||||||
CHECK_FOR_ERROR;
|
CHECK_FOR_ERROR;
|
||||||
$$ = new ShiftInst($1, $2, $4);
|
$$ = new ShiftInst($1, $2, $4);
|
||||||
|
@ -292,7 +292,7 @@ void BytecodeWriter::outputType(const Type *T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void BytecodeWriter::outputConstant(const Constant *CPV) {
|
void BytecodeWriter::outputConstant(const Constant *CPV) {
|
||||||
assert(((CPV->getType()->isPrimitiveType() || CPV->getType()->isIntegral()) ||
|
assert(((CPV->getType()->isPrimitiveType() || CPV->getType()->isInteger()) ||
|
||||||
!CPV->isNullValue()) && "Shouldn't output null constants!");
|
!CPV->isNullValue()) && "Shouldn't output null constants!");
|
||||||
|
|
||||||
// We must check for a ConstantExpr before switching by type because
|
// We must check for a ConstantExpr before switching by type because
|
||||||
|
@ -455,7 +455,7 @@ void AsmPrinter::EmitConstantValueOnly(const Constant *CV) {
|
|||||||
|
|
||||||
// We can emit the pointer value into this slot if the slot is an
|
// We can emit the pointer value into this slot if the slot is an
|
||||||
// integer slot greater or equal to the size of the pointer.
|
// integer slot greater or equal to the size of the pointer.
|
||||||
if (Ty->isIntegral() &&
|
if (Ty->isInteger() &&
|
||||||
TD->getTypeSize(Ty) >= TD->getTypeSize(Op->getType()))
|
TD->getTypeSize(Ty) >= TD->getTypeSize(Op->getType()))
|
||||||
return EmitConstantValueOnly(Op);
|
return EmitConstantValueOnly(Op);
|
||||||
|
|
||||||
|
@ -107,7 +107,7 @@ void IntrinsicLowering::AddPrototypes(Module &M) {
|
|||||||
/// LowerBSWAP - Emit the code to lower bswap of V before the specified
|
/// LowerBSWAP - Emit the code to lower bswap of V before the specified
|
||||||
/// instruction IP.
|
/// instruction IP.
|
||||||
static Value *LowerBSWAP(Value *V, Instruction *IP) {
|
static Value *LowerBSWAP(Value *V, Instruction *IP) {
|
||||||
assert(V->getType()->isIntegral() && "Can't bswap a non-integer type!");
|
assert(V->getType()->isInteger() && "Can't bswap a non-integer type!");
|
||||||
|
|
||||||
unsigned BitSize = V->getType()->getPrimitiveSizeInBits();
|
unsigned BitSize = V->getType()->getPrimitiveSizeInBits();
|
||||||
|
|
||||||
@ -193,7 +193,7 @@ static Value *LowerBSWAP(Value *V, Instruction *IP) {
|
|||||||
/// LowerCTPOP - Emit the code to lower ctpop of V before the specified
|
/// LowerCTPOP - Emit the code to lower ctpop of V before the specified
|
||||||
/// instruction IP.
|
/// instruction IP.
|
||||||
static Value *LowerCTPOP(Value *V, Instruction *IP) {
|
static Value *LowerCTPOP(Value *V, Instruction *IP) {
|
||||||
assert(V->getType()->isIntegral() && "Can't ctpop a non-integer type!");
|
assert(V->getType()->isInteger() && "Can't ctpop a non-integer type!");
|
||||||
|
|
||||||
static const uint64_t MaskValues[6] = {
|
static const uint64_t MaskValues[6] = {
|
||||||
0x5555555555555555ULL, 0x3333333333333333ULL,
|
0x5555555555555555ULL, 0x3333333333333333ULL,
|
||||||
|
@ -891,7 +891,7 @@ void Interpreter::popStackAndReturnValueToCaller (const Type *RetTy,
|
|||||||
ECStack.pop_back();
|
ECStack.pop_back();
|
||||||
|
|
||||||
if (ECStack.empty()) { // Finished main. Put result into exit code...
|
if (ECStack.empty()) { // Finished main. Put result into exit code...
|
||||||
if (RetTy && RetTy->isIntegral()) { // Nonvoid return type?
|
if (RetTy && RetTy->isInteger()) { // Nonvoid return type?
|
||||||
ExitValue = Result; // Capture the exit value of the program
|
ExitValue = Result; // Capture the exit value of the program
|
||||||
} else {
|
} else {
|
||||||
memset(&ExitValue, 0, sizeof(ExitValue));
|
memset(&ExitValue, 0, sizeof(ExitValue));
|
||||||
@ -1170,7 +1170,7 @@ void Interpreter::visitCallSite(CallSite CS) {
|
|||||||
// this by zero or sign extending the value as appropriate according to the
|
// this by zero or sign extending the value as appropriate according to the
|
||||||
// source type.
|
// source type.
|
||||||
const Type *Ty = V->getType();
|
const Type *Ty = V->getType();
|
||||||
if (Ty->isIntegral()) {
|
if (Ty->isInteger()) {
|
||||||
if (Ty->getPrimitiveSizeInBits() == 1)
|
if (Ty->getPrimitiveSizeInBits() == 1)
|
||||||
ArgVals.back().Int32Val = ArgVals.back().Int1Val;
|
ArgVals.back().Int32Val = ArgVals.back().Int1Val;
|
||||||
else if (Ty->getPrimitiveSizeInBits() <= 8)
|
else if (Ty->getPrimitiveSizeInBits() <= 8)
|
||||||
@ -1541,14 +1541,14 @@ GenericValue Interpreter::executeBitCastInst(Value *SrcVal, const Type *DstTy,
|
|||||||
if (isa<PointerType>(DstTy)) {
|
if (isa<PointerType>(DstTy)) {
|
||||||
assert(isa<PointerType>(SrcTy) && "Invalid BitCast");
|
assert(isa<PointerType>(SrcTy) && "Invalid BitCast");
|
||||||
Dest.PointerVal = Src.PointerVal;
|
Dest.PointerVal = Src.PointerVal;
|
||||||
} else if (DstTy->isIntegral()) {
|
} else if (DstTy->isInteger()) {
|
||||||
const IntegerType *DITy = cast<IntegerType>(DstTy);
|
const IntegerType *DITy = cast<IntegerType>(DstTy);
|
||||||
unsigned DBitWidth = DITy->getBitWidth();
|
unsigned DBitWidth = DITy->getBitWidth();
|
||||||
if (SrcTy == Type::FloatTy) {
|
if (SrcTy == Type::FloatTy) {
|
||||||
Dest.Int32Val = FloatToBits(Src.FloatVal);
|
Dest.Int32Val = FloatToBits(Src.FloatVal);
|
||||||
} else if (SrcTy == Type::DoubleTy) {
|
} else if (SrcTy == Type::DoubleTy) {
|
||||||
Dest.Int64Val = DoubleToBits(Src.DoubleVal);
|
Dest.Int64Val = DoubleToBits(Src.DoubleVal);
|
||||||
} else if (SrcTy->isIntegral()) {
|
} else if (SrcTy->isInteger()) {
|
||||||
const IntegerType *SITy = cast<IntegerType>(SrcTy);
|
const IntegerType *SITy = cast<IntegerType>(SrcTy);
|
||||||
unsigned SBitWidth = SITy->getBitWidth();
|
unsigned SBitWidth = SITy->getBitWidth();
|
||||||
assert(SBitWidth <= 64 && "Integer types > 64 bits not supported");
|
assert(SBitWidth <= 64 && "Integer types > 64 bits not supported");
|
||||||
@ -1566,12 +1566,12 @@ GenericValue Interpreter::executeBitCastInst(Value *SrcVal, const Type *DstTy,
|
|||||||
} else
|
} else
|
||||||
assert(0 && "Invalid BitCast");
|
assert(0 && "Invalid BitCast");
|
||||||
} else if (DstTy == Type::FloatTy) {
|
} else if (DstTy == Type::FloatTy) {
|
||||||
if (SrcTy->isIntegral())
|
if (SrcTy->isInteger())
|
||||||
Dest.FloatVal = BitsToFloat(Src.Int32Val);
|
Dest.FloatVal = BitsToFloat(Src.Int32Val);
|
||||||
else
|
else
|
||||||
Dest.FloatVal = Src.FloatVal;
|
Dest.FloatVal = Src.FloatVal;
|
||||||
} else if (DstTy == Type::DoubleTy) {
|
} else if (DstTy == Type::DoubleTy) {
|
||||||
if (SrcTy->isIntegral())
|
if (SrcTy->isInteger())
|
||||||
Dest.DoubleVal = BitsToDouble(Src.Int64Val);
|
Dest.DoubleVal = BitsToDouble(Src.Int64Val);
|
||||||
else
|
else
|
||||||
Dest.DoubleVal = Src.DoubleVal;
|
Dest.DoubleVal = Src.DoubleVal;
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
static ConstantInt *getMaxValue(const Type *Ty, bool isSigned = false) {
|
static ConstantInt *getMaxValue(const Type *Ty, bool isSigned = false) {
|
||||||
if (Ty->isIntegral()) {
|
if (Ty->isInteger()) {
|
||||||
if (isSigned) {
|
if (isSigned) {
|
||||||
// Calculate 011111111111111...
|
// Calculate 011111111111111...
|
||||||
unsigned TypeBits = Ty->getPrimitiveSizeInBits();
|
unsigned TypeBits = Ty->getPrimitiveSizeInBits();
|
||||||
@ -46,7 +46,7 @@ static ConstantInt *getMaxValue(const Type *Ty, bool isSigned = false) {
|
|||||||
|
|
||||||
// Static constructor to create the minimum constant for an integral type...
|
// Static constructor to create the minimum constant for an integral type...
|
||||||
static ConstantInt *getMinValue(const Type *Ty, bool isSigned = false) {
|
static ConstantInt *getMinValue(const Type *Ty, bool isSigned = false) {
|
||||||
if (Ty->isIntegral()) {
|
if (Ty->isInteger()) {
|
||||||
if (isSigned) {
|
if (isSigned) {
|
||||||
// Calculate 1111111111000000000000
|
// Calculate 1111111111000000000000
|
||||||
unsigned TypeBits = Ty->getPrimitiveSizeInBits();
|
unsigned TypeBits = Ty->getPrimitiveSizeInBits();
|
||||||
@ -93,7 +93,7 @@ static ConstantInt *Max(ConstantInt *A, ConstantInt *B,
|
|||||||
/// Initialize a full (the default) or empty set for the specified type.
|
/// Initialize a full (the default) or empty set for the specified type.
|
||||||
///
|
///
|
||||||
ConstantRange::ConstantRange(const Type *Ty, bool Full) {
|
ConstantRange::ConstantRange(const Type *Ty, bool Full) {
|
||||||
assert(Ty->isIntegral() &&
|
assert(Ty->isInteger() &&
|
||||||
"Cannot make constant range of non-integral type!");
|
"Cannot make constant range of non-integral type!");
|
||||||
if (Full)
|
if (Full)
|
||||||
Lower = Upper = getMaxValue(Ty);
|
Lower = Upper = getMaxValue(Ty);
|
||||||
@ -225,7 +225,7 @@ bool ConstantRange::contains(ConstantInt *Val, bool isSigned) const {
|
|||||||
/// subtract - Subtract the specified constant from the endpoints of this
|
/// subtract - Subtract the specified constant from the endpoints of this
|
||||||
/// constant range.
|
/// constant range.
|
||||||
ConstantRange ConstantRange::subtract(ConstantInt *CI) const {
|
ConstantRange ConstantRange::subtract(ConstantInt *CI) const {
|
||||||
assert(CI->getType() == getType() && getType()->isIntegral() &&
|
assert(CI->getType() == getType() && getType()->isInteger() &&
|
||||||
"Cannot subtract from different type range or non-integer!");
|
"Cannot subtract from different type range or non-integer!");
|
||||||
// If the set is empty or full, don't modify the endpoints.
|
// If the set is empty or full, don't modify the endpoints.
|
||||||
if (Lower == Upper) return *this;
|
if (Lower == Upper) return *this;
|
||||||
|
@ -366,7 +366,7 @@ void CWriter::printStructReturnPointerFunctionType(std::ostream &Out,
|
|||||||
std::ostream &
|
std::ostream &
|
||||||
CWriter::printSimpleType(std::ostream &Out, const Type *Ty, bool isSigned,
|
CWriter::printSimpleType(std::ostream &Out, const Type *Ty, bool isSigned,
|
||||||
const std::string &NameSoFar) {
|
const std::string &NameSoFar) {
|
||||||
assert((Ty->isPrimitiveType() || Ty->isIntegral()) &&
|
assert((Ty->isPrimitiveType() || Ty->isInteger()) &&
|
||||||
"Invalid type for printSimpleType");
|
"Invalid type for printSimpleType");
|
||||||
switch (Ty->getTypeID()) {
|
switch (Ty->getTypeID()) {
|
||||||
case Type::VoidTyID: return Out << "void " << NameSoFar;
|
case Type::VoidTyID: return Out << "void " << NameSoFar;
|
||||||
@ -399,7 +399,7 @@ CWriter::printSimpleType(std::ostream &Out, const Type *Ty, bool isSigned,
|
|||||||
std::ostream &CWriter::printType(std::ostream &Out, const Type *Ty,
|
std::ostream &CWriter::printType(std::ostream &Out, const Type *Ty,
|
||||||
bool isSigned, const std::string &NameSoFar,
|
bool isSigned, const std::string &NameSoFar,
|
||||||
bool IgnoreName) {
|
bool IgnoreName) {
|
||||||
if (Ty->isPrimitiveType() || Ty->isIntegral()) {
|
if (Ty->isPrimitiveType() || Ty->isInteger()) {
|
||||||
printSimpleType(Out, Ty, isSigned, NameSoFar);
|
printSimpleType(Out, Ty, isSigned, NameSoFar);
|
||||||
return Out;
|
return Out;
|
||||||
}
|
}
|
||||||
@ -1022,7 +1022,7 @@ bool CWriter::printConstExprCast(const ConstantExpr* CE) {
|
|||||||
}
|
}
|
||||||
if (NeedsExplicitCast) {
|
if (NeedsExplicitCast) {
|
||||||
Out << "((";
|
Out << "((";
|
||||||
if (Ty->isIntegral() && Ty != Type::Int1Ty)
|
if (Ty->isInteger() && Ty != Type::Int1Ty)
|
||||||
printSimpleType(Out, Ty, TypeIsSigned);
|
printSimpleType(Out, Ty, TypeIsSigned);
|
||||||
else
|
else
|
||||||
printType(Out, Ty); // not integer, sign doesn't matter
|
printType(Out, Ty); // not integer, sign doesn't matter
|
||||||
@ -1225,7 +1225,7 @@ void CWriter::writeOperandWithCast(Value* Operand, ICmpInst::Predicate predicate
|
|||||||
// operand.
|
// operand.
|
||||||
if (shouldCast) {
|
if (shouldCast) {
|
||||||
Out << "((";
|
Out << "((";
|
||||||
if (OpTy->isIntegral() && OpTy != Type::Int1Ty)
|
if (OpTy->isInteger() && OpTy != Type::Int1Ty)
|
||||||
printSimpleType(Out, OpTy, castIsSigned);
|
printSimpleType(Out, OpTy, castIsSigned);
|
||||||
else
|
else
|
||||||
printType(Out, OpTy); // not integer, sign doesn't matter
|
printType(Out, OpTy); // not integer, sign doesn't matter
|
||||||
@ -1727,7 +1727,7 @@ void CWriter::printModuleTypes(const TypeSymbolTable &TST) {
|
|||||||
void CWriter::printContainedStructs(const Type *Ty,
|
void CWriter::printContainedStructs(const Type *Ty,
|
||||||
std::set<const StructType*> &StructPrinted){
|
std::set<const StructType*> &StructPrinted){
|
||||||
// Don't walk through pointers.
|
// Don't walk through pointers.
|
||||||
if (isa<PointerType>(Ty) || Ty->isPrimitiveType() || Ty->isIntegral()) return;
|
if (isa<PointerType>(Ty) || Ty->isPrimitiveType() || Ty->isInteger()) return;
|
||||||
|
|
||||||
// Print all contained types first.
|
// Print all contained types first.
|
||||||
for (Type::subtype_iterator I = Ty->subtype_begin(),
|
for (Type::subtype_iterator I = Ty->subtype_begin(),
|
||||||
@ -1848,8 +1848,8 @@ static inline bool isFPIntBitCast(const Instruction &I) {
|
|||||||
return false;
|
return false;
|
||||||
const Type *SrcTy = I.getOperand(0)->getType();
|
const Type *SrcTy = I.getOperand(0)->getType();
|
||||||
const Type *DstTy = I.getType();
|
const Type *DstTy = I.getType();
|
||||||
return (SrcTy->isFloatingPoint() && DstTy->isIntegral()) ||
|
return (SrcTy->isFloatingPoint() && DstTy->isInteger()) ||
|
||||||
(DstTy->isFloatingPoint() && SrcTy->isIntegral());
|
(DstTy->isFloatingPoint() && SrcTy->isInteger());
|
||||||
}
|
}
|
||||||
|
|
||||||
void CWriter::printFunction(Function &F) {
|
void CWriter::printFunction(Function &F) {
|
||||||
|
@ -174,7 +174,7 @@ bool X86TargetAsmInfo::LowerToBSwap(CallInst *CI) const {
|
|||||||
// Verify this is a simple bswap.
|
// Verify this is a simple bswap.
|
||||||
if (CI->getNumOperands() != 2 ||
|
if (CI->getNumOperands() != 2 ||
|
||||||
CI->getType() != CI->getOperand(1)->getType() ||
|
CI->getType() != CI->getOperand(1)->getType() ||
|
||||||
!CI->getType()->isIntegral())
|
!CI->getType()->isInteger())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
const Type *Ty = CI->getType();
|
const Type *Ty = CI->getType();
|
||||||
|
@ -69,19 +69,19 @@ bool llvm::ExpressionConvertibleToType(Value *V, const Type *Ty,
|
|||||||
|
|
||||||
case Instruction::Add:
|
case Instruction::Add:
|
||||||
case Instruction::Sub:
|
case Instruction::Sub:
|
||||||
if (!Ty->isIntegral() && !Ty->isFloatingPoint()) return false;
|
if (!Ty->isInteger() && !Ty->isFloatingPoint()) return false;
|
||||||
if (!ExpressionConvertibleToType(I->getOperand(0), Ty, CTMap, TD) ||
|
if (!ExpressionConvertibleToType(I->getOperand(0), Ty, CTMap, TD) ||
|
||||||
!ExpressionConvertibleToType(I->getOperand(1), Ty, CTMap, TD))
|
!ExpressionConvertibleToType(I->getOperand(1), Ty, CTMap, TD))
|
||||||
return false;
|
return false;
|
||||||
break;
|
break;
|
||||||
case Instruction::LShr:
|
case Instruction::LShr:
|
||||||
case Instruction::AShr:
|
case Instruction::AShr:
|
||||||
if (!Ty->isIntegral()) return false;
|
if (!Ty->isInteger()) return false;
|
||||||
if (!ExpressionConvertibleToType(I->getOperand(0), Ty, CTMap, TD))
|
if (!ExpressionConvertibleToType(I->getOperand(0), Ty, CTMap, TD))
|
||||||
return false;
|
return false;
|
||||||
break;
|
break;
|
||||||
case Instruction::Shl:
|
case Instruction::Shl:
|
||||||
if (!Ty->isIntegral()) return false;
|
if (!Ty->isInteger()) return false;
|
||||||
if (!ExpressionConvertibleToType(I->getOperand(0), Ty, CTMap, TD))
|
if (!ExpressionConvertibleToType(I->getOperand(0), Ty, CTMap, TD))
|
||||||
return false;
|
return false;
|
||||||
break;
|
break;
|
||||||
@ -458,7 +458,7 @@ static bool OperandConvertibleToType(User *U, Value *V, const Type *Ty,
|
|||||||
|
|
||||||
case Instruction::Add:
|
case Instruction::Add:
|
||||||
case Instruction::Sub: {
|
case Instruction::Sub: {
|
||||||
if (!Ty->isIntegral() && !Ty->isFloatingPoint()) return false;
|
if (!Ty->isInteger() && !Ty->isFloatingPoint()) return false;
|
||||||
|
|
||||||
Value *OtherOp = I->getOperand((V == I->getOperand(0)) ? 1 : 0);
|
Value *OtherOp = I->getOperand((V == I->getOperand(0)) ? 1 : 0);
|
||||||
return ValueConvertibleToType(I, Ty, CTMap, TD) &&
|
return ValueConvertibleToType(I, Ty, CTMap, TD) &&
|
||||||
@ -476,7 +476,7 @@ static bool OperandConvertibleToType(User *U, Value *V, const Type *Ty,
|
|||||||
case Instruction::AShr:
|
case Instruction::AShr:
|
||||||
case Instruction::Shl:
|
case Instruction::Shl:
|
||||||
if (I->getOperand(1) == V) return false; // Cannot change shift amount type
|
if (I->getOperand(1) == V) return false; // Cannot change shift amount type
|
||||||
if (!Ty->isIntegral()) return false;
|
if (!Ty->isInteger()) return false;
|
||||||
return ValueConvertibleToType(I, Ty, CTMap, TD);
|
return ValueConvertibleToType(I, Ty, CTMap, TD);
|
||||||
|
|
||||||
case Instruction::Free:
|
case Instruction::Free:
|
||||||
@ -576,7 +576,7 @@ static bool OperandConvertibleToType(User *U, Value *V, const Type *Ty,
|
|||||||
// Can convert store if the incoming value is convertible and if the
|
// Can convert store if the incoming value is convertible and if the
|
||||||
// result will preserve semantics...
|
// result will preserve semantics...
|
||||||
const Type *Op0Ty = I->getOperand(0)->getType();
|
const Type *Op0Ty = I->getOperand(0)->getType();
|
||||||
if (!(Op0Ty->isIntegral() ^ ElTy->isIntegral()) &&
|
if (!(Op0Ty->isInteger() ^ ElTy->isInteger()) &&
|
||||||
!(Op0Ty->isFloatingPoint() ^ ElTy->isFloatingPoint()))
|
!(Op0Ty->isFloatingPoint() ^ ElTy->isFloatingPoint()))
|
||||||
return ExpressionConvertibleToType(I->getOperand(0), ElTy, CTMap, TD);
|
return ExpressionConvertibleToType(I->getOperand(0), ElTy, CTMap, TD);
|
||||||
}
|
}
|
||||||
|
@ -52,13 +52,13 @@ ModulePass *llvm::createDeadTypeEliminationPass() {
|
|||||||
//
|
//
|
||||||
static inline bool ShouldNukeSymtabEntry(const Type *Ty){
|
static inline bool ShouldNukeSymtabEntry(const Type *Ty){
|
||||||
// Nuke all names for primitive types!
|
// Nuke all names for primitive types!
|
||||||
if (Ty->isPrimitiveType() || Ty->isIntegral())
|
if (Ty->isPrimitiveType() || Ty->isInteger())
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
// Nuke all pointers to primitive types as well...
|
// Nuke all pointers to primitive types as well...
|
||||||
if (const PointerType *PT = dyn_cast<PointerType>(Ty))
|
if (const PointerType *PT = dyn_cast<PointerType>(Ty))
|
||||||
if (PT->getElementType()->isPrimitiveType() ||
|
if (PT->getElementType()->isPrimitiveType() ||
|
||||||
PT->getElementType()->isIntegral())
|
PT->getElementType()->isInteger())
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
@ -398,7 +398,7 @@ struct ExitInMainOptimization : public LibCallOptimization {
|
|||||||
// Make sure the called function looks like exit (int argument, int return
|
// Make sure the called function looks like exit (int argument, int return
|
||||||
// type, external linkage, not varargs).
|
// type, external linkage, not varargs).
|
||||||
virtual bool ValidateCalledFunction(const Function *F, SimplifyLibCalls &SLC){
|
virtual bool ValidateCalledFunction(const Function *F, SimplifyLibCalls &SLC){
|
||||||
return F->arg_size() >= 1 && F->arg_begin()->getType()->isIntegral();
|
return F->arg_size() >= 1 && F->arg_begin()->getType()->isInteger();
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual bool OptimizeCall(CallInst* ci, SimplifyLibCalls& SLC) {
|
virtual bool OptimizeCall(CallInst* ci, SimplifyLibCalls& SLC) {
|
||||||
@ -960,8 +960,8 @@ struct memcmpOptimization : public LibCallOptimization {
|
|||||||
Function::const_arg_iterator AI = F->arg_begin();
|
Function::const_arg_iterator AI = F->arg_begin();
|
||||||
if (F->arg_size() != 3 || !isa<PointerType>(AI->getType())) return false;
|
if (F->arg_size() != 3 || !isa<PointerType>(AI->getType())) return false;
|
||||||
if (!isa<PointerType>((++AI)->getType())) return false;
|
if (!isa<PointerType>((++AI)->getType())) return false;
|
||||||
if (!(++AI)->getType()->isIntegral()) return false;
|
if (!(++AI)->getType()->isInteger()) return false;
|
||||||
if (!F->getReturnType()->isIntegral()) return false;
|
if (!F->getReturnType()->isInteger()) return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1725,8 +1725,8 @@ public:
|
|||||||
: LibCallOptimization("isascii", "Number of 'isascii' calls simplified") {}
|
: LibCallOptimization("isascii", "Number of 'isascii' calls simplified") {}
|
||||||
|
|
||||||
virtual bool ValidateCalledFunction(const Function *F, SimplifyLibCalls &SLC){
|
virtual bool ValidateCalledFunction(const Function *F, SimplifyLibCalls &SLC){
|
||||||
return F->arg_size() == 1 && F->arg_begin()->getType()->isIntegral() &&
|
return F->arg_size() == 1 && F->arg_begin()->getType()->isInteger() &&
|
||||||
F->getReturnType()->isIntegral();
|
F->getReturnType()->isInteger();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @brief Perform the isascii optimization.
|
/// @brief Perform the isascii optimization.
|
||||||
|
@ -111,7 +111,7 @@ namespace {
|
|||||||
Value *Replacement;
|
Value *Replacement;
|
||||||
public:
|
public:
|
||||||
ValueInfo(const Type *Ty)
|
ValueInfo(const Type *Ty)
|
||||||
: Bounds(Ty->isIntegral() ? Ty : Type::Int32Ty), Replacement(0) {}
|
: Bounds(Ty->isInteger() ? Ty : Type::Int32Ty), Replacement(0) {}
|
||||||
|
|
||||||
// getBounds() - Return the constant bounds of the value...
|
// getBounds() - Return the constant bounds of the value...
|
||||||
const ConstantRange &getBounds() const { return Bounds; }
|
const ConstantRange &getBounds() const { return Bounds; }
|
||||||
|
@ -325,7 +325,7 @@ void IndVarSimplify::RewriteLoopExitValues(Loop *L) {
|
|||||||
if (LI->getLoopFor(L->getBlocks()[i]) == L) { // Not in a subloop...
|
if (LI->getLoopFor(L->getBlocks()[i]) == L) { // Not in a subloop...
|
||||||
BasicBlock *BB = L->getBlocks()[i];
|
BasicBlock *BB = L->getBlocks()[i];
|
||||||
for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E;) {
|
for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E;) {
|
||||||
if (I->getType()->isIntegral()) { // Is an integer instruction
|
if (I->getType()->isInteger()) { // Is an integer instruction
|
||||||
SCEVHandle SH = SE->getSCEV(I);
|
SCEVHandle SH = SE->getSCEV(I);
|
||||||
if (SH->hasComputableLoopEvolution(L) || // Varies predictably
|
if (SH->hasComputableLoopEvolution(L) || // Varies predictably
|
||||||
HasConstantItCount) {
|
HasConstantItCount) {
|
||||||
@ -460,7 +460,7 @@ void IndVarSimplify::runOnLoop(Loop *L) {
|
|||||||
|
|
||||||
for (BasicBlock::iterator I = Header->begin(); isa<PHINode>(I); ++I) {
|
for (BasicBlock::iterator I = Header->begin(); isa<PHINode>(I); ++I) {
|
||||||
PHINode *PN = cast<PHINode>(I);
|
PHINode *PN = cast<PHINode>(I);
|
||||||
if (PN->getType()->isIntegral()) { // FIXME: when we have fast-math, enable!
|
if (PN->getType()->isInteger()) { // FIXME: when we have fast-math, enable!
|
||||||
SCEVHandle SCEV = SE->getSCEV(PN);
|
SCEVHandle SCEV = SE->getSCEV(PN);
|
||||||
if (SCEV->hasComputableLoopEvolution(L))
|
if (SCEV->hasComputableLoopEvolution(L))
|
||||||
// FIXME: It is an extremely bad idea to indvar substitute anything more
|
// FIXME: It is an extremely bad idea to indvar substitute anything more
|
||||||
@ -574,7 +574,7 @@ void IndVarSimplify::runOnLoop(Loop *L) {
|
|||||||
if (LI->getLoopFor(L->getBlocks()[i]) == L) { // Not in a subloop...
|
if (LI->getLoopFor(L->getBlocks()[i]) == L) { // Not in a subloop...
|
||||||
BasicBlock *BB = L->getBlocks()[i];
|
BasicBlock *BB = L->getBlocks()[i];
|
||||||
for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I)
|
for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I)
|
||||||
if (I->getType()->isIntegral() && // Is an integer instruction
|
if (I->getType()->isInteger() && // Is an integer instruction
|
||||||
!I->use_empty() &&
|
!I->use_empty() &&
|
||||||
!Rewriter.isInsertedInstruction(I)) {
|
!Rewriter.isInsertedInstruction(I)) {
|
||||||
SCEVHandle SH = SE->getSCEV(I);
|
SCEVHandle SH = SE->getSCEV(I);
|
||||||
|
@ -495,7 +495,7 @@ static inline Value *dyn_castNotVal(Value *V) {
|
|||||||
// Otherwise, return null.
|
// Otherwise, return null.
|
||||||
//
|
//
|
||||||
static inline Value *dyn_castFoldableMul(Value *V, ConstantInt *&CST) {
|
static inline Value *dyn_castFoldableMul(Value *V, ConstantInt *&CST) {
|
||||||
if (V->hasOneUse() && V->getType()->isIntegral())
|
if (V->hasOneUse() && V->getType()->isInteger())
|
||||||
if (Instruction *I = dyn_cast<Instruction>(V)) {
|
if (Instruction *I = dyn_cast<Instruction>(V)) {
|
||||||
if (I->getOpcode() == Instruction::Mul)
|
if (I->getOpcode() == Instruction::Mul)
|
||||||
if ((CST = dyn_cast<ConstantInt>(I->getOperand(1))))
|
if ((CST = dyn_cast<ConstantInt>(I->getOperand(1))))
|
||||||
@ -558,7 +558,7 @@ static void ComputeMaskedBits(Value *V, uint64_t Mask, uint64_t &KnownZero,
|
|||||||
Instruction *I = dyn_cast<Instruction>(V);
|
Instruction *I = dyn_cast<Instruction>(V);
|
||||||
if (!I) return;
|
if (!I) return;
|
||||||
|
|
||||||
Mask &= V->getType()->getIntegralTypeMask();
|
Mask &= V->getType()->getIntegerTypeMask();
|
||||||
|
|
||||||
switch (I->getOpcode()) {
|
switch (I->getOpcode()) {
|
||||||
case Instruction::And:
|
case Instruction::And:
|
||||||
@ -624,7 +624,7 @@ static void ComputeMaskedBits(Value *V, uint64_t Mask, uint64_t &KnownZero,
|
|||||||
return;
|
return;
|
||||||
case Instruction::BitCast: {
|
case Instruction::BitCast: {
|
||||||
const Type *SrcTy = I->getOperand(0)->getType();
|
const Type *SrcTy = I->getOperand(0)->getType();
|
||||||
if (SrcTy->isIntegral()) {
|
if (SrcTy->isInteger()) {
|
||||||
ComputeMaskedBits(I->getOperand(0), Mask, KnownZero, KnownOne, Depth+1);
|
ComputeMaskedBits(I->getOperand(0), Mask, KnownZero, KnownOne, Depth+1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -633,10 +633,10 @@ static void ComputeMaskedBits(Value *V, uint64_t Mask, uint64_t &KnownZero,
|
|||||||
case Instruction::ZExt: {
|
case Instruction::ZExt: {
|
||||||
// Compute the bits in the result that are not present in the input.
|
// Compute the bits in the result that are not present in the input.
|
||||||
const Type *SrcTy = I->getOperand(0)->getType();
|
const Type *SrcTy = I->getOperand(0)->getType();
|
||||||
uint64_t NotIn = ~SrcTy->getIntegralTypeMask();
|
uint64_t NotIn = ~SrcTy->getIntegerTypeMask();
|
||||||
uint64_t NewBits = I->getType()->getIntegralTypeMask() & NotIn;
|
uint64_t NewBits = I->getType()->getIntegerTypeMask() & NotIn;
|
||||||
|
|
||||||
Mask &= SrcTy->getIntegralTypeMask();
|
Mask &= SrcTy->getIntegerTypeMask();
|
||||||
ComputeMaskedBits(I->getOperand(0), Mask, KnownZero, KnownOne, Depth+1);
|
ComputeMaskedBits(I->getOperand(0), Mask, KnownZero, KnownOne, Depth+1);
|
||||||
assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
|
assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
|
||||||
// The top bits are known to be zero.
|
// The top bits are known to be zero.
|
||||||
@ -646,10 +646,10 @@ static void ComputeMaskedBits(Value *V, uint64_t Mask, uint64_t &KnownZero,
|
|||||||
case Instruction::SExt: {
|
case Instruction::SExt: {
|
||||||
// Compute the bits in the result that are not present in the input.
|
// Compute the bits in the result that are not present in the input.
|
||||||
const Type *SrcTy = I->getOperand(0)->getType();
|
const Type *SrcTy = I->getOperand(0)->getType();
|
||||||
uint64_t NotIn = ~SrcTy->getIntegralTypeMask();
|
uint64_t NotIn = ~SrcTy->getIntegerTypeMask();
|
||||||
uint64_t NewBits = I->getType()->getIntegralTypeMask() & NotIn;
|
uint64_t NewBits = I->getType()->getIntegerTypeMask() & NotIn;
|
||||||
|
|
||||||
Mask &= SrcTy->getIntegralTypeMask();
|
Mask &= SrcTy->getIntegerTypeMask();
|
||||||
ComputeMaskedBits(I->getOperand(0), Mask, KnownZero, KnownOne, Depth+1);
|
ComputeMaskedBits(I->getOperand(0), Mask, KnownZero, KnownOne, Depth+1);
|
||||||
assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
|
assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
|
||||||
|
|
||||||
@ -766,7 +766,7 @@ static void ComputeSignedMinMaxValuesFromKnownBits(const Type *Ty,
|
|||||||
uint64_t KnownZero,
|
uint64_t KnownZero,
|
||||||
uint64_t KnownOne,
|
uint64_t KnownOne,
|
||||||
int64_t &Min, int64_t &Max) {
|
int64_t &Min, int64_t &Max) {
|
||||||
uint64_t TypeBits = Ty->getIntegralTypeMask();
|
uint64_t TypeBits = Ty->getIntegerTypeMask();
|
||||||
uint64_t UnknownBits = ~(KnownZero|KnownOne) & TypeBits;
|
uint64_t UnknownBits = ~(KnownZero|KnownOne) & TypeBits;
|
||||||
|
|
||||||
uint64_t SignBit = 1ULL << (Ty->getPrimitiveSizeInBits()-1);
|
uint64_t SignBit = 1ULL << (Ty->getPrimitiveSizeInBits()-1);
|
||||||
@ -796,7 +796,7 @@ static void ComputeUnsignedMinMaxValuesFromKnownBits(const Type *Ty,
|
|||||||
uint64_t KnownOne,
|
uint64_t KnownOne,
|
||||||
uint64_t &Min,
|
uint64_t &Min,
|
||||||
uint64_t &Max) {
|
uint64_t &Max) {
|
||||||
uint64_t TypeBits = Ty->getIntegralTypeMask();
|
uint64_t TypeBits = Ty->getIntegerTypeMask();
|
||||||
uint64_t UnknownBits = ~(KnownZero|KnownOne) & TypeBits;
|
uint64_t UnknownBits = ~(KnownZero|KnownOne) & TypeBits;
|
||||||
|
|
||||||
// The minimum value is when the unknown bits are all zeros.
|
// The minimum value is when the unknown bits are all zeros.
|
||||||
@ -831,7 +831,7 @@ bool InstCombiner::SimplifyDemandedBits(Value *V, uint64_t DemandedMask,
|
|||||||
}
|
}
|
||||||
// If this is the root being simplified, allow it to have multiple uses,
|
// If this is the root being simplified, allow it to have multiple uses,
|
||||||
// just set the DemandedMask to all bits.
|
// just set the DemandedMask to all bits.
|
||||||
DemandedMask = V->getType()->getIntegralTypeMask();
|
DemandedMask = V->getType()->getIntegerTypeMask();
|
||||||
} else if (DemandedMask == 0) { // Not demanding any bits from V.
|
} else if (DemandedMask == 0) { // Not demanding any bits from V.
|
||||||
if (V != UndefValue::get(V->getType()))
|
if (V != UndefValue::get(V->getType()))
|
||||||
return UpdateValueUsesWith(V, UndefValue::get(V->getType()));
|
return UpdateValueUsesWith(V, UndefValue::get(V->getType()));
|
||||||
@ -843,7 +843,7 @@ bool InstCombiner::SimplifyDemandedBits(Value *V, uint64_t DemandedMask,
|
|||||||
Instruction *I = dyn_cast<Instruction>(V);
|
Instruction *I = dyn_cast<Instruction>(V);
|
||||||
if (!I) return false; // Only analyze instructions.
|
if (!I) return false; // Only analyze instructions.
|
||||||
|
|
||||||
DemandedMask &= V->getType()->getIntegralTypeMask();
|
DemandedMask &= V->getType()->getIntegerTypeMask();
|
||||||
|
|
||||||
uint64_t KnownZero2 = 0, KnownOne2 = 0;
|
uint64_t KnownZero2 = 0, KnownOne2 = 0;
|
||||||
switch (I->getOpcode()) {
|
switch (I->getOpcode()) {
|
||||||
@ -1001,7 +1001,7 @@ bool InstCombiner::SimplifyDemandedBits(Value *V, uint64_t DemandedMask,
|
|||||||
assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
|
assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
|
||||||
break;
|
break;
|
||||||
case Instruction::BitCast:
|
case Instruction::BitCast:
|
||||||
if (!I->getOperand(0)->getType()->isIntegral())
|
if (!I->getOperand(0)->getType()->isInteger())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (SimplifyDemandedBits(I->getOperand(0), DemandedMask,
|
if (SimplifyDemandedBits(I->getOperand(0), DemandedMask,
|
||||||
@ -1012,10 +1012,10 @@ bool InstCombiner::SimplifyDemandedBits(Value *V, uint64_t DemandedMask,
|
|||||||
case Instruction::ZExt: {
|
case Instruction::ZExt: {
|
||||||
// Compute the bits in the result that are not present in the input.
|
// Compute the bits in the result that are not present in the input.
|
||||||
const Type *SrcTy = I->getOperand(0)->getType();
|
const Type *SrcTy = I->getOperand(0)->getType();
|
||||||
uint64_t NotIn = ~SrcTy->getIntegralTypeMask();
|
uint64_t NotIn = ~SrcTy->getIntegerTypeMask();
|
||||||
uint64_t NewBits = I->getType()->getIntegralTypeMask() & NotIn;
|
uint64_t NewBits = I->getType()->getIntegerTypeMask() & NotIn;
|
||||||
|
|
||||||
DemandedMask &= SrcTy->getIntegralTypeMask();
|
DemandedMask &= SrcTy->getIntegerTypeMask();
|
||||||
if (SimplifyDemandedBits(I->getOperand(0), DemandedMask,
|
if (SimplifyDemandedBits(I->getOperand(0), DemandedMask,
|
||||||
KnownZero, KnownOne, Depth+1))
|
KnownZero, KnownOne, Depth+1))
|
||||||
return true;
|
return true;
|
||||||
@ -1027,12 +1027,12 @@ bool InstCombiner::SimplifyDemandedBits(Value *V, uint64_t DemandedMask,
|
|||||||
case Instruction::SExt: {
|
case Instruction::SExt: {
|
||||||
// Compute the bits in the result that are not present in the input.
|
// Compute the bits in the result that are not present in the input.
|
||||||
const Type *SrcTy = I->getOperand(0)->getType();
|
const Type *SrcTy = I->getOperand(0)->getType();
|
||||||
uint64_t NotIn = ~SrcTy->getIntegralTypeMask();
|
uint64_t NotIn = ~SrcTy->getIntegerTypeMask();
|
||||||
uint64_t NewBits = I->getType()->getIntegralTypeMask() & NotIn;
|
uint64_t NewBits = I->getType()->getIntegerTypeMask() & NotIn;
|
||||||
|
|
||||||
// Get the sign bit for the source type
|
// Get the sign bit for the source type
|
||||||
uint64_t InSignBit = 1ULL << (SrcTy->getPrimitiveSizeInBits()-1);
|
uint64_t InSignBit = 1ULL << (SrcTy->getPrimitiveSizeInBits()-1);
|
||||||
int64_t InputDemandedBits = DemandedMask & SrcTy->getIntegralTypeMask();
|
int64_t InputDemandedBits = DemandedMask & SrcTy->getIntegerTypeMask();
|
||||||
|
|
||||||
// If any of the sign extended bits are demanded, we know that the sign
|
// If any of the sign extended bits are demanded, we know that the sign
|
||||||
// bit is demanded.
|
// bit is demanded.
|
||||||
@ -1174,7 +1174,7 @@ bool InstCombiner::SimplifyDemandedBits(Value *V, uint64_t DemandedMask,
|
|||||||
// Compute the new bits that are at the top now.
|
// Compute the new bits that are at the top now.
|
||||||
uint64_t HighBits = (1ULL << ShiftAmt)-1;
|
uint64_t HighBits = (1ULL << ShiftAmt)-1;
|
||||||
HighBits <<= I->getType()->getPrimitiveSizeInBits() - ShiftAmt;
|
HighBits <<= I->getType()->getPrimitiveSizeInBits() - ShiftAmt;
|
||||||
uint64_t TypeMask = I->getType()->getIntegralTypeMask();
|
uint64_t TypeMask = I->getType()->getIntegerTypeMask();
|
||||||
// Unsigned shift right.
|
// Unsigned shift right.
|
||||||
if (SimplifyDemandedBits(I->getOperand(0),
|
if (SimplifyDemandedBits(I->getOperand(0),
|
||||||
(DemandedMask << ShiftAmt) & TypeMask,
|
(DemandedMask << ShiftAmt) & TypeMask,
|
||||||
@ -1207,7 +1207,7 @@ bool InstCombiner::SimplifyDemandedBits(Value *V, uint64_t DemandedMask,
|
|||||||
// Compute the new bits that are at the top now.
|
// Compute the new bits that are at the top now.
|
||||||
uint64_t HighBits = (1ULL << ShiftAmt)-1;
|
uint64_t HighBits = (1ULL << ShiftAmt)-1;
|
||||||
HighBits <<= I->getType()->getPrimitiveSizeInBits() - ShiftAmt;
|
HighBits <<= I->getType()->getPrimitiveSizeInBits() - ShiftAmt;
|
||||||
uint64_t TypeMask = I->getType()->getIntegralTypeMask();
|
uint64_t TypeMask = I->getType()->getIntegerTypeMask();
|
||||||
// Signed shift right.
|
// Signed shift right.
|
||||||
if (SimplifyDemandedBits(I->getOperand(0),
|
if (SimplifyDemandedBits(I->getOperand(0),
|
||||||
(DemandedMask << ShiftAmt) & TypeMask,
|
(DemandedMask << ShiftAmt) & TypeMask,
|
||||||
@ -1745,7 +1745,7 @@ Instruction *InstCombiner::visitAdd(BinaryOperator &I) {
|
|||||||
// (X & 254)+1 -> (X&254)|1
|
// (X & 254)+1 -> (X&254)|1
|
||||||
uint64_t KnownZero, KnownOne;
|
uint64_t KnownZero, KnownOne;
|
||||||
if (!isa<PackedType>(I.getType()) &&
|
if (!isa<PackedType>(I.getType()) &&
|
||||||
SimplifyDemandedBits(&I, I.getType()->getIntegralTypeMask(),
|
SimplifyDemandedBits(&I, I.getType()->getIntegerTypeMask(),
|
||||||
KnownZero, KnownOne))
|
KnownZero, KnownOne))
|
||||||
return &I;
|
return &I;
|
||||||
}
|
}
|
||||||
@ -1780,7 +1780,7 @@ Instruction *InstCombiner::visitAdd(BinaryOperator &I) {
|
|||||||
// This is a sign extend if the top bits are known zero.
|
// This is a sign extend if the top bits are known zero.
|
||||||
uint64_t Mask = ~0ULL;
|
uint64_t Mask = ~0ULL;
|
||||||
Mask <<= 64-(TySizeBits-Size);
|
Mask <<= 64-(TySizeBits-Size);
|
||||||
Mask &= XorLHS->getType()->getIntegralTypeMask();
|
Mask &= XorLHS->getType()->getIntegerTypeMask();
|
||||||
if (!MaskedValueIsZero(XorLHS, Mask))
|
if (!MaskedValueIsZero(XorLHS, Mask))
|
||||||
Size = 0; // Not a sign ext, but can't be any others either.
|
Size = 0; // Not a sign ext, but can't be any others either.
|
||||||
goto FoundSExt;
|
goto FoundSExt;
|
||||||
@ -1808,7 +1808,7 @@ FoundSExt:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// X + X --> X << 1
|
// X + X --> X << 1
|
||||||
if (I.getType()->isIntegral() && I.getType() != Type::Int1Ty) {
|
if (I.getType()->isInteger() && I.getType() != Type::Int1Ty) {
|
||||||
if (Instruction *Result = AssociativeOpt(I, AddRHS(RHS))) return Result;
|
if (Instruction *Result = AssociativeOpt(I, AddRHS(RHS))) return Result;
|
||||||
|
|
||||||
if (Instruction *RHSI = dyn_cast<Instruction>(RHS)) {
|
if (Instruction *RHSI = dyn_cast<Instruction>(RHS)) {
|
||||||
@ -1876,7 +1876,7 @@ FoundSExt:
|
|||||||
|
|
||||||
// Form a mask of all bits from the lowest bit added through the top.
|
// Form a mask of all bits from the lowest bit added through the top.
|
||||||
uint64_t AddRHSHighBits = ~((AddRHSV & -AddRHSV)-1);
|
uint64_t AddRHSHighBits = ~((AddRHSV & -AddRHSV)-1);
|
||||||
AddRHSHighBits &= C2->getType()->getIntegralTypeMask();
|
AddRHSHighBits &= C2->getType()->getIntegerTypeMask();
|
||||||
|
|
||||||
// See if the and mask includes all of these bits.
|
// See if the and mask includes all of these bits.
|
||||||
uint64_t AddRHSHighBitsAnd = AddRHSHighBits & C2->getZExtValue();
|
uint64_t AddRHSHighBitsAnd = AddRHSHighBits & C2->getZExtValue();
|
||||||
@ -1933,7 +1933,7 @@ static Value *RemoveNoopCast(Value *V) {
|
|||||||
if (CastInst *CI = dyn_cast<CastInst>(V)) {
|
if (CastInst *CI = dyn_cast<CastInst>(V)) {
|
||||||
const Type *CTy = CI->getType();
|
const Type *CTy = CI->getType();
|
||||||
const Type *OpTy = CI->getOperand(0)->getType();
|
const Type *OpTy = CI->getOperand(0)->getType();
|
||||||
if (CTy->isIntegral() && OpTy->isIntegral()) {
|
if (CTy->isInteger() && OpTy->isInteger()) {
|
||||||
if (CTy->getPrimitiveSizeInBits() == OpTy->getPrimitiveSizeInBits())
|
if (CTy->getPrimitiveSizeInBits() == OpTy->getPrimitiveSizeInBits())
|
||||||
return RemoveNoopCast(CI->getOperand(0));
|
return RemoveNoopCast(CI->getOperand(0));
|
||||||
} else if (isa<PointerType>(CTy) && isa<PointerType>(OpTy))
|
} else if (isa<PointerType>(CTy) && isa<PointerType>(OpTy))
|
||||||
@ -2412,7 +2412,7 @@ Instruction *InstCombiner::visitSDiv(BinaryOperator &I) {
|
|||||||
|
|
||||||
// If the sign bits of both operands are zero (i.e. we can prove they are
|
// If the sign bits of both operands are zero (i.e. we can prove they are
|
||||||
// unsigned inputs), turn this into a udiv.
|
// unsigned inputs), turn this into a udiv.
|
||||||
if (I.getType()->isIntegral()) {
|
if (I.getType()->isInteger()) {
|
||||||
uint64_t Mask = 1ULL << (I.getType()->getPrimitiveSizeInBits()-1);
|
uint64_t Mask = 1ULL << (I.getType()->getPrimitiveSizeInBits()-1);
|
||||||
if (MaskedValueIsZero(Op1, Mask) && MaskedValueIsZero(Op0, Mask)) {
|
if (MaskedValueIsZero(Op1, Mask) && MaskedValueIsZero(Op0, Mask)) {
|
||||||
return BinaryOperator::createUDiv(Op0, Op1, I.getName());
|
return BinaryOperator::createUDiv(Op0, Op1, I.getName());
|
||||||
@ -2641,7 +2641,7 @@ static bool isMaxValueMinusOne(const ConstantInt *C, bool isSigned) {
|
|||||||
Val >>= 64-TypeBits; // Shift out unwanted 1 bits...
|
Val >>= 64-TypeBits; // Shift out unwanted 1 bits...
|
||||||
return C->getSExtValue() == Val-1;
|
return C->getSExtValue() == Val-1;
|
||||||
}
|
}
|
||||||
return C->getZExtValue() == C->getType()->getIntegralTypeMask()-1;
|
return C->getZExtValue() == C->getType()->getIntegerTypeMask()-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// isMinValuePlusOne - return true if this is Min+1
|
// isMinValuePlusOne - return true if this is Min+1
|
||||||
@ -2858,7 +2858,7 @@ Instruction *InstCombiner::OptAndOp(Instruction *Op,
|
|||||||
uint64_t AndRHSV = cast<ConstantInt>(AndRHS)->getZExtValue();
|
uint64_t AndRHSV = cast<ConstantInt>(AndRHS)->getZExtValue();
|
||||||
|
|
||||||
// Clear bits that are not part of the constant.
|
// Clear bits that are not part of the constant.
|
||||||
AndRHSV &= AndRHS->getType()->getIntegralTypeMask();
|
AndRHSV &= AndRHS->getType()->getIntegerTypeMask();
|
||||||
|
|
||||||
// If there is only one bit set...
|
// If there is only one bit set...
|
||||||
if (isOneBitSet(cast<ConstantInt>(AndRHS))) {
|
if (isOneBitSet(cast<ConstantInt>(AndRHS))) {
|
||||||
@ -3044,7 +3044,7 @@ Value *InstCombiner::FoldLogicalPlusAnd(Value *LHS, Value *RHS,
|
|||||||
// is all N is, ignore it.
|
// is all N is, ignore it.
|
||||||
unsigned MB, ME;
|
unsigned MB, ME;
|
||||||
if (isRunOfOnes(Mask, MB, ME)) { // begin/end bit of run, inclusive
|
if (isRunOfOnes(Mask, MB, ME)) { // begin/end bit of run, inclusive
|
||||||
uint64_t Mask = RHS->getType()->getIntegralTypeMask();
|
uint64_t Mask = RHS->getType()->getIntegerTypeMask();
|
||||||
Mask >>= 64-MB+1;
|
Mask >>= 64-MB+1;
|
||||||
if (MaskedValueIsZero(RHS, Mask))
|
if (MaskedValueIsZero(RHS, Mask))
|
||||||
break;
|
break;
|
||||||
@ -3083,13 +3083,13 @@ Instruction *InstCombiner::visitAnd(BinaryOperator &I) {
|
|||||||
// purpose is to compute bits we don't care about.
|
// purpose is to compute bits we don't care about.
|
||||||
uint64_t KnownZero, KnownOne;
|
uint64_t KnownZero, KnownOne;
|
||||||
if (!isa<PackedType>(I.getType()) &&
|
if (!isa<PackedType>(I.getType()) &&
|
||||||
SimplifyDemandedBits(&I, I.getType()->getIntegralTypeMask(),
|
SimplifyDemandedBits(&I, I.getType()->getIntegerTypeMask(),
|
||||||
KnownZero, KnownOne))
|
KnownZero, KnownOne))
|
||||||
return &I;
|
return &I;
|
||||||
|
|
||||||
if (ConstantInt *AndRHS = dyn_cast<ConstantInt>(Op1)) {
|
if (ConstantInt *AndRHS = dyn_cast<ConstantInt>(Op1)) {
|
||||||
uint64_t AndRHSMask = AndRHS->getZExtValue();
|
uint64_t AndRHSMask = AndRHS->getZExtValue();
|
||||||
uint64_t TypeMask = Op0->getType()->getIntegralTypeMask();
|
uint64_t TypeMask = Op0->getType()->getIntegerTypeMask();
|
||||||
uint64_t NotAndRHS = AndRHSMask^TypeMask;
|
uint64_t NotAndRHS = AndRHSMask^TypeMask;
|
||||||
|
|
||||||
// Optimize a variety of ((val OP C1) & C2) combinations...
|
// Optimize a variety of ((val OP C1) & C2) combinations...
|
||||||
@ -3386,7 +3386,7 @@ Instruction *InstCombiner::visitAnd(BinaryOperator &I) {
|
|||||||
if (CastInst *Op1C = dyn_cast<CastInst>(Op1))
|
if (CastInst *Op1C = dyn_cast<CastInst>(Op1))
|
||||||
if (Op0C->getOpcode() == Op1C->getOpcode()) { // same cast kind ?
|
if (Op0C->getOpcode() == Op1C->getOpcode()) { // same cast kind ?
|
||||||
const Type *SrcTy = Op0C->getOperand(0)->getType();
|
const Type *SrcTy = Op0C->getOperand(0)->getType();
|
||||||
if (SrcTy == Op1C->getOperand(0)->getType() && SrcTy->isIntegral() &&
|
if (SrcTy == Op1C->getOperand(0)->getType() && SrcTy->isInteger() &&
|
||||||
// Only do this if the casts both really cause code to be generated.
|
// Only do this if the casts both really cause code to be generated.
|
||||||
ValueRequiresCast(Op0C->getOpcode(), Op0C->getOperand(0),
|
ValueRequiresCast(Op0C->getOpcode(), Op0C->getOperand(0),
|
||||||
I.getType(), TD) &&
|
I.getType(), TD) &&
|
||||||
@ -3554,7 +3554,7 @@ Instruction *InstCombiner::visitOr(BinaryOperator &I) {
|
|||||||
// purpose is to compute bits we don't care about.
|
// purpose is to compute bits we don't care about.
|
||||||
uint64_t KnownZero, KnownOne;
|
uint64_t KnownZero, KnownOne;
|
||||||
if (!isa<PackedType>(I.getType()) &&
|
if (!isa<PackedType>(I.getType()) &&
|
||||||
SimplifyDemandedBits(&I, I.getType()->getIntegralTypeMask(),
|
SimplifyDemandedBits(&I, I.getType()->getIntegerTypeMask(),
|
||||||
KnownZero, KnownOne))
|
KnownZero, KnownOne))
|
||||||
return &I;
|
return &I;
|
||||||
|
|
||||||
@ -3836,7 +3836,7 @@ Instruction *InstCombiner::visitOr(BinaryOperator &I) {
|
|||||||
if (CastInst *Op1C = dyn_cast<CastInst>(Op1))
|
if (CastInst *Op1C = dyn_cast<CastInst>(Op1))
|
||||||
if (Op0C->getOpcode() == Op1C->getOpcode()) {// same cast kind ?
|
if (Op0C->getOpcode() == Op1C->getOpcode()) {// same cast kind ?
|
||||||
const Type *SrcTy = Op0C->getOperand(0)->getType();
|
const Type *SrcTy = Op0C->getOperand(0)->getType();
|
||||||
if (SrcTy == Op1C->getOperand(0)->getType() && SrcTy->isIntegral() &&
|
if (SrcTy == Op1C->getOperand(0)->getType() && SrcTy->isInteger() &&
|
||||||
// Only do this if the casts both really cause code to be generated.
|
// Only do this if the casts both really cause code to be generated.
|
||||||
ValueRequiresCast(Op0C->getOpcode(), Op0C->getOperand(0),
|
ValueRequiresCast(Op0C->getOpcode(), Op0C->getOperand(0),
|
||||||
I.getType(), TD) &&
|
I.getType(), TD) &&
|
||||||
@ -3882,7 +3882,7 @@ Instruction *InstCombiner::visitXor(BinaryOperator &I) {
|
|||||||
// purpose is to compute bits we don't care about.
|
// purpose is to compute bits we don't care about.
|
||||||
uint64_t KnownZero, KnownOne;
|
uint64_t KnownZero, KnownOne;
|
||||||
if (!isa<PackedType>(I.getType()) &&
|
if (!isa<PackedType>(I.getType()) &&
|
||||||
SimplifyDemandedBits(&I, I.getType()->getIntegralTypeMask(),
|
SimplifyDemandedBits(&I, I.getType()->getIntegerTypeMask(),
|
||||||
KnownZero, KnownOne))
|
KnownZero, KnownOne))
|
||||||
return &I;
|
return &I;
|
||||||
|
|
||||||
@ -4020,7 +4020,7 @@ Instruction *InstCombiner::visitXor(BinaryOperator &I) {
|
|||||||
if (CastInst *Op1C = dyn_cast<CastInst>(Op1))
|
if (CastInst *Op1C = dyn_cast<CastInst>(Op1))
|
||||||
if (Op0C->getOpcode() == Op1C->getOpcode()) { // same cast kind?
|
if (Op0C->getOpcode() == Op1C->getOpcode()) { // same cast kind?
|
||||||
const Type *SrcTy = Op0C->getOperand(0)->getType();
|
const Type *SrcTy = Op0C->getOperand(0)->getType();
|
||||||
if (SrcTy == Op1C->getOperand(0)->getType() && SrcTy->isIntegral() &&
|
if (SrcTy == Op1C->getOperand(0)->getType() && SrcTy->isInteger() &&
|
||||||
// Only do this if the casts both really cause code to be generated.
|
// Only do this if the casts both really cause code to be generated.
|
||||||
ValueRequiresCast(Op0C->getOpcode(), Op0C->getOperand(0),
|
ValueRequiresCast(Op0C->getOpcode(), Op0C->getOperand(0),
|
||||||
I.getType(), TD) &&
|
I.getType(), TD) &&
|
||||||
@ -4512,7 +4512,7 @@ Instruction *InstCombiner::visitICmpInst(ICmpInst &I) {
|
|||||||
// See if we can fold the comparison based on bits known to be zero or one
|
// See if we can fold the comparison based on bits known to be zero or one
|
||||||
// in the input.
|
// in the input.
|
||||||
uint64_t KnownZero, KnownOne;
|
uint64_t KnownZero, KnownOne;
|
||||||
if (SimplifyDemandedBits(Op0, Ty->getIntegralTypeMask(),
|
if (SimplifyDemandedBits(Op0, Ty->getIntegerTypeMask(),
|
||||||
KnownZero, KnownOne, 0))
|
KnownZero, KnownOne, 0))
|
||||||
return &I;
|
return &I;
|
||||||
|
|
||||||
@ -5062,7 +5062,7 @@ Instruction *InstCombiner::visitICmpInst(ICmpInst &I) {
|
|||||||
Value *CastOp = Cast->getOperand(0);
|
Value *CastOp = Cast->getOperand(0);
|
||||||
const Type *SrcTy = CastOp->getType();
|
const Type *SrcTy = CastOp->getType();
|
||||||
unsigned SrcTySize = SrcTy->getPrimitiveSizeInBits();
|
unsigned SrcTySize = SrcTy->getPrimitiveSizeInBits();
|
||||||
if (SrcTy->isIntegral() &&
|
if (SrcTy->isInteger() &&
|
||||||
SrcTySize == Cast->getType()->getPrimitiveSizeInBits()) {
|
SrcTySize == Cast->getType()->getPrimitiveSizeInBits()) {
|
||||||
// If this is an unsigned comparison, try to make the comparison use
|
// If this is an unsigned comparison, try to make the comparison use
|
||||||
// smaller constant values.
|
// smaller constant values.
|
||||||
@ -5436,7 +5436,7 @@ Instruction *InstCombiner::FoldShiftByConstant(Value *Op0, ConstantInt *Op1,
|
|||||||
// See if we can simplify any instructions used by the instruction whose sole
|
// See if we can simplify any instructions used by the instruction whose sole
|
||||||
// purpose is to compute bits we don't care about.
|
// purpose is to compute bits we don't care about.
|
||||||
uint64_t KnownZero, KnownOne;
|
uint64_t KnownZero, KnownOne;
|
||||||
if (SimplifyDemandedBits(&I, I.getType()->getIntegralTypeMask(),
|
if (SimplifyDemandedBits(&I, I.getType()->getIntegerTypeMask(),
|
||||||
KnownZero, KnownOne))
|
KnownZero, KnownOne))
|
||||||
return &I;
|
return &I;
|
||||||
|
|
||||||
@ -6038,7 +6038,7 @@ Instruction *InstCombiner::commonIntCastTransforms(CastInst &CI) {
|
|||||||
// See if we can simplify any instructions used by the LHS whose sole
|
// See if we can simplify any instructions used by the LHS whose sole
|
||||||
// purpose is to compute bits we don't care about.
|
// purpose is to compute bits we don't care about.
|
||||||
uint64_t KnownZero = 0, KnownOne = 0;
|
uint64_t KnownZero = 0, KnownOne = 0;
|
||||||
if (SimplifyDemandedBits(&CI, DestTy->getIntegralTypeMask(),
|
if (SimplifyDemandedBits(&CI, DestTy->getIntegerTypeMask(),
|
||||||
KnownZero, KnownOne))
|
KnownZero, KnownOne))
|
||||||
return &CI;
|
return &CI;
|
||||||
|
|
||||||
@ -6211,7 +6211,7 @@ Instruction *InstCombiner::commonIntCastTransforms(CastInst &CI) {
|
|||||||
if (Op1CV == 0 || isPowerOf2_64(Op1CV)) {
|
if (Op1CV == 0 || isPowerOf2_64(Op1CV)) {
|
||||||
// If Op1C some other power of two, convert:
|
// If Op1C some other power of two, convert:
|
||||||
uint64_t KnownZero, KnownOne;
|
uint64_t KnownZero, KnownOne;
|
||||||
uint64_t TypeMask = Op1->getType()->getIntegralTypeMask();
|
uint64_t TypeMask = Op1->getType()->getIntegerTypeMask();
|
||||||
ComputeMaskedBits(Op0, TypeMask, KnownZero, KnownOne);
|
ComputeMaskedBits(Op0, TypeMask, KnownZero, KnownOne);
|
||||||
|
|
||||||
// This only works for EQ and NE
|
// This only works for EQ and NE
|
||||||
@ -6333,7 +6333,7 @@ Instruction *InstCombiner::visitZExt(CastInst &CI) {
|
|||||||
// If we're actually extending zero bits and the trunc is a no-op
|
// If we're actually extending zero bits and the trunc is a no-op
|
||||||
if (MidSize < DstSize && SrcSize == DstSize) {
|
if (MidSize < DstSize && SrcSize == DstSize) {
|
||||||
// Replace both of the casts with an And of the type mask.
|
// Replace both of the casts with an And of the type mask.
|
||||||
uint64_t AndValue = CSrc->getType()->getIntegralTypeMask();
|
uint64_t AndValue = CSrc->getType()->getIntegerTypeMask();
|
||||||
Constant *AndConst = ConstantInt::get(A->getType(), AndValue);
|
Constant *AndConst = ConstantInt::get(A->getType(), AndValue);
|
||||||
Instruction *And =
|
Instruction *And =
|
||||||
BinaryOperator::createAnd(CSrc->getOperand(0), AndConst);
|
BinaryOperator::createAnd(CSrc->getOperand(0), AndConst);
|
||||||
@ -6395,7 +6395,7 @@ Instruction *InstCombiner::visitBitCast(CastInst &CI) {
|
|||||||
const Type *SrcTy = Src->getType();
|
const Type *SrcTy = Src->getType();
|
||||||
const Type *DestTy = CI.getType();
|
const Type *DestTy = CI.getType();
|
||||||
|
|
||||||
if (SrcTy->isIntegral() && DestTy->isIntegral()) {
|
if (SrcTy->isInteger() && DestTy->isInteger()) {
|
||||||
if (Instruction *Result = commonIntCastTransforms(CI))
|
if (Instruction *Result = commonIntCastTransforms(CI))
|
||||||
return Result;
|
return Result;
|
||||||
} else {
|
} else {
|
||||||
@ -6816,7 +6816,7 @@ Instruction *InstCombiner::visitSelectInst(SelectInst &SI) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// See if we can fold the select into one of our operands.
|
// See if we can fold the select into one of our operands.
|
||||||
if (SI.getType()->isIntegral()) {
|
if (SI.getType()->isInteger()) {
|
||||||
// See the comment above GetSelectFoldableOperands for a description of the
|
// See the comment above GetSelectFoldableOperands for a description of the
|
||||||
// transformation we are doing here.
|
// transformation we are doing here.
|
||||||
if (Instruction *TVI = dyn_cast<Instruction>(TrueVal))
|
if (Instruction *TVI = dyn_cast<Instruction>(TrueVal))
|
||||||
@ -7273,7 +7273,7 @@ bool InstCombiner::transformConstExprCastCall(CallSite CS) {
|
|||||||
//Either we can cast directly, or we can upconvert the argument
|
//Either we can cast directly, or we can upconvert the argument
|
||||||
bool isConvertible = ActTy == ParamTy ||
|
bool isConvertible = ActTy == ParamTy ||
|
||||||
(isa<PointerType>(ParamTy) && isa<PointerType>(ActTy)) ||
|
(isa<PointerType>(ParamTy) && isa<PointerType>(ActTy)) ||
|
||||||
(ParamTy->isIntegral() && ActTy->isIntegral() &&
|
(ParamTy->isInteger() && ActTy->isInteger() &&
|
||||||
ParamTy->getPrimitiveSizeInBits() >= ActTy->getPrimitiveSizeInBits()) ||
|
ParamTy->getPrimitiveSizeInBits() >= ActTy->getPrimitiveSizeInBits()) ||
|
||||||
(c && ParamTy->getPrimitiveSizeInBits() >= ActTy->getPrimitiveSizeInBits()
|
(c && ParamTy->getPrimitiveSizeInBits() >= ActTy->getPrimitiveSizeInBits()
|
||||||
&& c->getSExtValue() > 0);
|
&& c->getSExtValue() > 0);
|
||||||
@ -7667,7 +7667,7 @@ Instruction *InstCombiner::visitGetElementPtrInst(GetElementPtrInst &GEP) {
|
|||||||
Value *Src = CI->getOperand(0);
|
Value *Src = CI->getOperand(0);
|
||||||
const Type *SrcTy = Src->getType();
|
const Type *SrcTy = Src->getType();
|
||||||
const Type *DestTy = CI->getType();
|
const Type *DestTy = CI->getType();
|
||||||
if (Src->getType()->isIntegral()) {
|
if (Src->getType()->isInteger()) {
|
||||||
if (SrcTy->getPrimitiveSizeInBits() ==
|
if (SrcTy->getPrimitiveSizeInBits() ==
|
||||||
DestTy->getPrimitiveSizeInBits()) {
|
DestTy->getPrimitiveSizeInBits()) {
|
||||||
// We can always eliminate a cast from ulong or long to the other.
|
// We can always eliminate a cast from ulong or long to the other.
|
||||||
@ -7998,7 +7998,7 @@ static Instruction *InstCombineLoadCast(InstCombiner &IC, LoadInst &LI) {
|
|||||||
if (const PointerType *SrcTy = dyn_cast<PointerType>(CastOp->getType())) {
|
if (const PointerType *SrcTy = dyn_cast<PointerType>(CastOp->getType())) {
|
||||||
const Type *SrcPTy = SrcTy->getElementType();
|
const Type *SrcPTy = SrcTy->getElementType();
|
||||||
|
|
||||||
if (DestPTy->isIntegral() || isa<PointerType>(DestPTy) ||
|
if (DestPTy->isInteger() || isa<PointerType>(DestPTy) ||
|
||||||
isa<PackedType>(DestPTy)) {
|
isa<PackedType>(DestPTy)) {
|
||||||
// If the source is an array, the code below will not succeed. Check to
|
// If the source is an array, the code below will not succeed. Check to
|
||||||
// see if a trivial 'gep P, 0, 0' will help matters. Only do this for
|
// see if a trivial 'gep P, 0, 0' will help matters. Only do this for
|
||||||
@ -8012,7 +8012,7 @@ static Instruction *InstCombineLoadCast(InstCombiner &IC, LoadInst &LI) {
|
|||||||
SrcPTy = SrcTy->getElementType();
|
SrcPTy = SrcTy->getElementType();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((SrcPTy->isIntegral() || isa<PointerType>(SrcPTy) ||
|
if ((SrcPTy->isInteger() || isa<PointerType>(SrcPTy) ||
|
||||||
isa<PackedType>(SrcPTy)) &&
|
isa<PackedType>(SrcPTy)) &&
|
||||||
// Do not allow turning this into a load of an integer, which is then
|
// Do not allow turning this into a load of an integer, which is then
|
||||||
// casted to a pointer, this pessimizes pointer analysis a lot.
|
// casted to a pointer, this pessimizes pointer analysis a lot.
|
||||||
@ -8186,7 +8186,7 @@ static Instruction *InstCombineStoreToCast(InstCombiner &IC, StoreInst &SI) {
|
|||||||
if (const PointerType *SrcTy = dyn_cast<PointerType>(CastOp->getType())) {
|
if (const PointerType *SrcTy = dyn_cast<PointerType>(CastOp->getType())) {
|
||||||
const Type *SrcPTy = SrcTy->getElementType();
|
const Type *SrcPTy = SrcTy->getElementType();
|
||||||
|
|
||||||
if (DestPTy->isIntegral() || isa<PointerType>(DestPTy)) {
|
if (DestPTy->isInteger() || isa<PointerType>(DestPTy)) {
|
||||||
// If the source is an array, the code below will not succeed. Check to
|
// If the source is an array, the code below will not succeed. Check to
|
||||||
// see if a trivial 'gep P, 0, 0' will help matters. Only do this for
|
// see if a trivial 'gep P, 0, 0' will help matters. Only do this for
|
||||||
// constants.
|
// constants.
|
||||||
@ -8199,7 +8199,7 @@ static Instruction *InstCombineStoreToCast(InstCombiner &IC, StoreInst &SI) {
|
|||||||
SrcPTy = SrcTy->getElementType();
|
SrcPTy = SrcTy->getElementType();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((SrcPTy->isIntegral() || isa<PointerType>(SrcPTy)) &&
|
if ((SrcPTy->isInteger() || isa<PointerType>(SrcPTy)) &&
|
||||||
IC.getTargetData().getTypeSize(SrcPTy) ==
|
IC.getTargetData().getTypeSize(SrcPTy) ==
|
||||||
IC.getTargetData().getTypeSize(DestPTy)) {
|
IC.getTargetData().getTypeSize(DestPTy)) {
|
||||||
|
|
||||||
@ -8210,9 +8210,9 @@ static Instruction *InstCombineStoreToCast(InstCombiner &IC, StoreInst &SI) {
|
|||||||
Instruction::CastOps opcode = Instruction::BitCast;
|
Instruction::CastOps opcode = Instruction::BitCast;
|
||||||
Value *SIOp0 = SI.getOperand(0);
|
Value *SIOp0 = SI.getOperand(0);
|
||||||
if (isa<PointerType>(SrcPTy)) {
|
if (isa<PointerType>(SrcPTy)) {
|
||||||
if (SIOp0->getType()->isIntegral())
|
if (SIOp0->getType()->isInteger())
|
||||||
opcode = Instruction::IntToPtr;
|
opcode = Instruction::IntToPtr;
|
||||||
} else if (SrcPTy->isIntegral()) {
|
} else if (SrcPTy->isInteger()) {
|
||||||
if (isa<PointerType>(SIOp0->getType()))
|
if (isa<PointerType>(SIOp0->getType()))
|
||||||
opcode = Instruction::PtrToInt;
|
opcode = Instruction::PtrToInt;
|
||||||
}
|
}
|
||||||
|
@ -398,7 +398,7 @@ static bool IVUseShouldUsePostIncValue(Instruction *User, Instruction *IV,
|
|||||||
/// return true. Otherwise, return false.
|
/// return true. Otherwise, return false.
|
||||||
bool LoopStrengthReduce::AddUsersIfInteresting(Instruction *I, Loop *L,
|
bool LoopStrengthReduce::AddUsersIfInteresting(Instruction *I, Loop *L,
|
||||||
std::set<Instruction*> &Processed) {
|
std::set<Instruction*> &Processed) {
|
||||||
if (!I->getType()->isIntegral() && !isa<PointerType>(I->getType()))
|
if (!I->getType()->isInteger() && !isa<PointerType>(I->getType()))
|
||||||
return false; // Void and FP expressions cannot be reduced.
|
return false; // Void and FP expressions cannot be reduced.
|
||||||
if (!Processed.insert(I).second)
|
if (!Processed.insert(I).second)
|
||||||
return true; // Instruction already handled.
|
return true; // Instruction already handled.
|
||||||
|
@ -164,7 +164,7 @@ unsigned Reassociate::getRank(Value *V) {
|
|||||||
|
|
||||||
// If this is a not or neg instruction, do not count it for rank. This
|
// If this is a not or neg instruction, do not count it for rank. This
|
||||||
// assures us that X and ~X will have the same rank.
|
// assures us that X and ~X will have the same rank.
|
||||||
if (!I->getType()->isIntegral() ||
|
if (!I->getType()->isInteger() ||
|
||||||
(!BinaryOperator::isNot(I) && !BinaryOperator::isNeg(I)))
|
(!BinaryOperator::isNot(I) && !BinaryOperator::isNeg(I)))
|
||||||
++Rank;
|
++Rank;
|
||||||
|
|
||||||
|
@ -442,7 +442,7 @@ static bool MergeInType(const Type *In, const Type *&Accum,
|
|||||||
Accum = In;
|
Accum = In;
|
||||||
} else if (In == Type::VoidTy) {
|
} else if (In == Type::VoidTy) {
|
||||||
// Noop.
|
// Noop.
|
||||||
} else if (In->isIntegral() && Accum->isIntegral()) { // integer union.
|
} else if (In->isInteger() && Accum->isInteger()) { // integer union.
|
||||||
// Otherwise pick whichever type is larger.
|
// Otherwise pick whichever type is larger.
|
||||||
if (cast<IntegerType>(In)->getBitWidth() >
|
if (cast<IntegerType>(In)->getBitWidth() >
|
||||||
cast<IntegerType>(Accum)->getBitWidth())
|
cast<IntegerType>(Accum)->getBitWidth())
|
||||||
@ -472,7 +472,7 @@ static bool MergeInType(const Type *In, const Type *&Accum,
|
|||||||
case Type::FloatTyID: Accum = Type::Int32Ty; break;
|
case Type::FloatTyID: Accum = Type::Int32Ty; break;
|
||||||
case Type::DoubleTyID: Accum = Type::Int64Ty; break;
|
case Type::DoubleTyID: Accum = Type::Int64Ty; break;
|
||||||
default:
|
default:
|
||||||
assert(Accum->isIntegral() && "Unknown FP type!");
|
assert(Accum->isInteger() && "Unknown FP type!");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -481,7 +481,7 @@ static bool MergeInType(const Type *In, const Type *&Accum,
|
|||||||
case Type::FloatTyID: In = Type::Int32Ty; break;
|
case Type::FloatTyID: In = Type::Int32Ty; break;
|
||||||
case Type::DoubleTyID: In = Type::Int64Ty; break;
|
case Type::DoubleTyID: In = Type::Int64Ty; break;
|
||||||
default:
|
default:
|
||||||
assert(In->isIntegral() && "Unknown FP type!");
|
assert(In->isInteger() && "Unknown FP type!");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return MergeInType(In, Accum, TD);
|
return MergeInType(In, Accum, TD);
|
||||||
@ -541,7 +541,7 @@ const Type *SROA::CanConvertToScalar(Value *V, bool &IsNotTrivial) {
|
|||||||
IsNotTrivial = true;
|
IsNotTrivial = true;
|
||||||
const Type *SubElt = CanConvertToScalar(GEP, IsNotTrivial);
|
const Type *SubElt = CanConvertToScalar(GEP, IsNotTrivial);
|
||||||
if (SubElt == 0) return 0;
|
if (SubElt == 0) return 0;
|
||||||
if (SubElt != Type::VoidTy && SubElt->isIntegral()) {
|
if (SubElt != Type::VoidTy && SubElt->isInteger()) {
|
||||||
const Type *NewTy =
|
const Type *NewTy =
|
||||||
getUIntAtLeastAsBitAs(TD.getTypeSize(SubElt)*8+BitOffset);
|
getUIntAtLeastAsBitAs(TD.getTypeSize(SubElt)*8+BitOffset);
|
||||||
if (NewTy == 0 || MergeInType(NewTy, UsedType, TD)) return 0;
|
if (NewTy == 0 || MergeInType(NewTy, UsedType, TD)) return 0;
|
||||||
@ -653,7 +653,7 @@ void SROA::ConvertUsesToScalar(Value *Ptr, AllocaInst *NewAI, unsigned Offset) {
|
|||||||
// an integer.
|
// an integer.
|
||||||
NV = new BitCastInst(NV, LI->getType(), LI->getName(), LI);
|
NV = new BitCastInst(NV, LI->getType(), LI->getName(), LI);
|
||||||
} else {
|
} else {
|
||||||
assert(NV->getType()->isIntegral() && "Unknown promotion!");
|
assert(NV->getType()->isInteger() && "Unknown promotion!");
|
||||||
if (Offset && Offset < TD.getTypeSize(NV->getType())*8) {
|
if (Offset && Offset < TD.getTypeSize(NV->getType())*8) {
|
||||||
NV = new ShiftInst(Instruction::LShr, NV,
|
NV = new ShiftInst(Instruction::LShr, NV,
|
||||||
ConstantInt::get(Type::Int8Ty, Offset),
|
ConstantInt::get(Type::Int8Ty, Offset),
|
||||||
@ -661,7 +661,7 @@ void SROA::ConvertUsesToScalar(Value *Ptr, AllocaInst *NewAI, unsigned Offset) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// If the result is an integer, this is a trunc or bitcast.
|
// If the result is an integer, this is a trunc or bitcast.
|
||||||
if (LI->getType()->isIntegral()) {
|
if (LI->getType()->isInteger()) {
|
||||||
NV = CastInst::createTruncOrBitCast(NV, LI->getType(),
|
NV = CastInst::createTruncOrBitCast(NV, LI->getType(),
|
||||||
LI->getName(), LI);
|
LI->getName(), LI);
|
||||||
} else if (LI->getType()->isFloatingPoint()) {
|
} else if (LI->getType()->isFloatingPoint()) {
|
||||||
@ -748,7 +748,7 @@ void SROA::ConvertUsesToScalar(Value *Ptr, AllocaInst *NewAI, unsigned Offset) {
|
|||||||
if (TotalBits != SrcSize) {
|
if (TotalBits != SrcSize) {
|
||||||
assert(TotalBits > SrcSize);
|
assert(TotalBits > SrcSize);
|
||||||
uint64_t Mask = ~(((1ULL << SrcSize)-1) << Offset);
|
uint64_t Mask = ~(((1ULL << SrcSize)-1) << Offset);
|
||||||
Mask = Mask & SV->getType()->getIntegralTypeMask();
|
Mask = Mask & SV->getType()->getIntegerTypeMask();
|
||||||
Old = BinaryOperator::createAnd(Old,
|
Old = BinaryOperator::createAnd(Old,
|
||||||
ConstantInt::get(Old->getType(), Mask),
|
ConstantInt::get(Old->getType(), Mask),
|
||||||
Old->getName()+".mask", SI);
|
Old->getName()+".mask", SI);
|
||||||
|
@ -1852,7 +1852,7 @@ bool llvm::SimplifyCFG(BasicBlock *BB) {
|
|||||||
Value *CompVal = 0;
|
Value *CompVal = 0;
|
||||||
std::vector<ConstantInt*> Values;
|
std::vector<ConstantInt*> Values;
|
||||||
bool TrueWhenEqual = GatherValueComparisons(Cond, CompVal, Values);
|
bool TrueWhenEqual = GatherValueComparisons(Cond, CompVal, Values);
|
||||||
if (CompVal && CompVal->getType()->isIntegral()) {
|
if (CompVal && CompVal->getType()->isInteger()) {
|
||||||
// There might be duplicate constants in the list, which the switch
|
// There might be duplicate constants in the list, which the switch
|
||||||
// instruction can't handle, remove them now.
|
// instruction can't handle, remove them now.
|
||||||
std::sort(Values.begin(), Values.end(), ConstantIntOrdering());
|
std::sort(Values.begin(), Values.end(), ConstantIntOrdering());
|
||||||
|
@ -222,7 +222,7 @@ static void fillTypeNameTable(const Module *M,
|
|||||||
const Type *Ty = cast<Type>(TI->second);
|
const Type *Ty = cast<Type>(TI->second);
|
||||||
if (!isa<PointerType>(Ty) ||
|
if (!isa<PointerType>(Ty) ||
|
||||||
!cast<PointerType>(Ty)->getElementType()->isPrimitiveType() ||
|
!cast<PointerType>(Ty)->getElementType()->isPrimitiveType() ||
|
||||||
!cast<PointerType>(Ty)->getElementType()->isIntegral() ||
|
!cast<PointerType>(Ty)->getElementType()->isInteger() ||
|
||||||
isa<OpaqueType>(cast<PointerType>(Ty)->getElementType()))
|
isa<OpaqueType>(cast<PointerType>(Ty)->getElementType()))
|
||||||
TypeNames.insert(std::make_pair(Ty, getLLVMName(TI->first)));
|
TypeNames.insert(std::make_pair(Ty, getLLVMName(TI->first)));
|
||||||
}
|
}
|
||||||
@ -234,7 +234,7 @@ static void calcTypeName(const Type *Ty,
|
|||||||
std::vector<const Type *> &TypeStack,
|
std::vector<const Type *> &TypeStack,
|
||||||
std::map<const Type *, std::string> &TypeNames,
|
std::map<const Type *, std::string> &TypeNames,
|
||||||
std::string & Result){
|
std::string & Result){
|
||||||
if (Ty->isIntegral() || (Ty->isPrimitiveType() && !isa<OpaqueType>(Ty))) {
|
if (Ty->isInteger() || (Ty->isPrimitiveType() && !isa<OpaqueType>(Ty))) {
|
||||||
Result += Ty->getDescription(); // Base case
|
Result += Ty->getDescription(); // Base case
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -353,7 +353,7 @@ static std::ostream &printTypeInt(std::ostream &Out, const Type *Ty,
|
|||||||
// Primitive types always print out their description, regardless of whether
|
// Primitive types always print out their description, regardless of whether
|
||||||
// they have been named or not.
|
// they have been named or not.
|
||||||
//
|
//
|
||||||
if (Ty->isIntegral() || (Ty->isPrimitiveType() && !isa<OpaqueType>(Ty)))
|
if (Ty->isInteger() || (Ty->isPrimitiveType() && !isa<OpaqueType>(Ty)))
|
||||||
return Out << Ty->getDescription();
|
return Out << Ty->getDescription();
|
||||||
|
|
||||||
// Check to see if the type is named.
|
// Check to see if the type is named.
|
||||||
|
@ -51,7 +51,7 @@ static Constant *CastConstantPacked(ConstantPacked *CP,
|
|||||||
|
|
||||||
// If the src and dest elements are both integers, or both floats, we can
|
// If the src and dest elements are both integers, or both floats, we can
|
||||||
// just BitCast each element because the elements are the same size.
|
// just BitCast each element because the elements are the same size.
|
||||||
if ((SrcEltTy->isIntegral() && DstEltTy->isIntegral()) ||
|
if ((SrcEltTy->isInteger() && DstEltTy->isInteger()) ||
|
||||||
(SrcEltTy->isFloatingPoint() && DstEltTy->isFloatingPoint())) {
|
(SrcEltTy->isFloatingPoint() && DstEltTy->isFloatingPoint())) {
|
||||||
for (unsigned i = 0; i != SrcNumElts; ++i)
|
for (unsigned i = 0; i != SrcNumElts; ++i)
|
||||||
Result.push_back(
|
Result.push_back(
|
||||||
@ -60,7 +60,7 @@ static Constant *CastConstantPacked(ConstantPacked *CP,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// If this is an int-to-fp cast ..
|
// If this is an int-to-fp cast ..
|
||||||
if (SrcEltTy->isIntegral()) {
|
if (SrcEltTy->isInteger()) {
|
||||||
// Ensure that it is int-to-fp cast
|
// Ensure that it is int-to-fp cast
|
||||||
assert(DstEltTy->isFloatingPoint());
|
assert(DstEltTy->isFloatingPoint());
|
||||||
if (DstEltTy->getTypeID() == Type::DoubleTyID) {
|
if (DstEltTy->getTypeID() == Type::DoubleTyID) {
|
||||||
@ -81,7 +81,7 @@ static Constant *CastConstantPacked(ConstantPacked *CP,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Otherwise, this is an fp-to-int cast.
|
// Otherwise, this is an fp-to-int cast.
|
||||||
assert(SrcEltTy->isFloatingPoint() && DstEltTy->isIntegral());
|
assert(SrcEltTy->isFloatingPoint() && DstEltTy->isInteger());
|
||||||
|
|
||||||
if (SrcEltTy->getTypeID() == Type::DoubleTyID) {
|
if (SrcEltTy->getTypeID() == Type::DoubleTyID) {
|
||||||
for (unsigned i = 0; i != SrcNumElts; ++i) {
|
for (unsigned i = 0; i != SrcNumElts; ++i) {
|
||||||
@ -279,7 +279,7 @@ Constant *llvm::ConstantFoldCastInstruction(unsigned opc, const Constant *V,
|
|||||||
// Handle integral constant input.
|
// Handle integral constant input.
|
||||||
if (const ConstantInt *CI = dyn_cast<ConstantInt>(V)) {
|
if (const ConstantInt *CI = dyn_cast<ConstantInt>(V)) {
|
||||||
// Integral -> Integral, must be changing sign.
|
// Integral -> Integral, must be changing sign.
|
||||||
if (DestTy->isIntegral())
|
if (DestTy->isInteger())
|
||||||
return ConstantInt::get(DestTy, CI->getZExtValue());
|
return ConstantInt::get(DestTy, CI->getZExtValue());
|
||||||
|
|
||||||
if (DestTy->isFloatingPoint()) {
|
if (DestTy->isFloatingPoint()) {
|
||||||
@ -295,7 +295,7 @@ Constant *llvm::ConstantFoldCastInstruction(unsigned opc, const Constant *V,
|
|||||||
// Handle ConstantFP input.
|
// Handle ConstantFP input.
|
||||||
if (const ConstantFP *FP = dyn_cast<ConstantFP>(V)) {
|
if (const ConstantFP *FP = dyn_cast<ConstantFP>(V)) {
|
||||||
// FP -> Integral.
|
// FP -> Integral.
|
||||||
if (DestTy->isIntegral()) {
|
if (DestTy->isInteger()) {
|
||||||
if (DestTy == Type::Int32Ty)
|
if (DestTy == Type::Int32Ty)
|
||||||
return ConstantInt::get(DestTy, FloatToBits(FP->getValue()));
|
return ConstantInt::get(DestTy, FloatToBits(FP->getValue()));
|
||||||
assert(DestTy == Type::Int64Ty &&
|
assert(DestTy == Type::Int64Ty &&
|
||||||
@ -884,7 +884,7 @@ static ICmpInst::Predicate evaluateICmpRelation(const Constant *V1,
|
|||||||
// If the cast is not actually changing bits, and the second operand is a
|
// If the cast is not actually changing bits, and the second operand is a
|
||||||
// null pointer, do the comparison with the pre-casted value.
|
// null pointer, do the comparison with the pre-casted value.
|
||||||
if (V2->isNullValue() &&
|
if (V2->isNullValue() &&
|
||||||
(isa<PointerType>(CE1->getType()) || CE1->getType()->isIntegral())) {
|
(isa<PointerType>(CE1->getType()) || CE1->getType()->isInteger())) {
|
||||||
bool sgnd = CE1->getOpcode() == Instruction::ZExt ? false :
|
bool sgnd = CE1->getOpcode() == Instruction::ZExt ? false :
|
||||||
(CE1->getOpcode() == Instruction::SExt ? true :
|
(CE1->getOpcode() == Instruction::SExt ? true :
|
||||||
(CE1->getOpcode() == Instruction::PtrToInt ? false : isSigned));
|
(CE1->getOpcode() == Instruction::PtrToInt ? false : isSigned));
|
||||||
@ -899,7 +899,7 @@ static ICmpInst::Predicate evaluateICmpRelation(const Constant *V1,
|
|||||||
if (const ConstantExpr *CE2 = dyn_cast<ConstantExpr>(V2))
|
if (const ConstantExpr *CE2 = dyn_cast<ConstantExpr>(V2))
|
||||||
if (CE2->isCast() && isa<PointerType>(CE1->getType()) &&
|
if (CE2->isCast() && isa<PointerType>(CE1->getType()) &&
|
||||||
CE1->getOperand(0)->getType() == CE2->getOperand(0)->getType() &&
|
CE1->getOperand(0)->getType() == CE2->getOperand(0)->getType() &&
|
||||||
CE1->getOperand(0)->getType()->isIntegral()) {
|
CE1->getOperand(0)->getType()->isInteger()) {
|
||||||
bool sgnd = CE1->getOpcode() == Instruction::ZExt ? false :
|
bool sgnd = CE1->getOpcode() == Instruction::ZExt ? false :
|
||||||
(CE1->getOpcode() == Instruction::SExt ? true :
|
(CE1->getOpcode() == Instruction::SExt ? true :
|
||||||
(CE1->getOpcode() == Instruction::PtrToInt ? false : isSigned));
|
(CE1->getOpcode() == Instruction::PtrToInt ? false : isSigned));
|
||||||
|
@ -849,7 +849,7 @@ ConstantInt *ConstantInt::get(const Type *Ty, int64_t V) {
|
|||||||
return getTrue();
|
return getTrue();
|
||||||
else
|
else
|
||||||
return getFalse();
|
return getFalse();
|
||||||
return IntConstants->getOrCreate(Ty, V & Ty->getIntegralTypeMask());
|
return IntConstants->getOrCreate(Ty, V & Ty->getIntegerTypeMask());
|
||||||
}
|
}
|
||||||
|
|
||||||
//---- ConstantFP::get() implementation...
|
//---- ConstantFP::get() implementation...
|
||||||
@ -1463,16 +1463,16 @@ Constant *ConstantExpr::getTruncOrBitCast(Constant *C, const Type *Ty) {
|
|||||||
|
|
||||||
Constant *ConstantExpr::getPointerCast(Constant *S, const Type *Ty) {
|
Constant *ConstantExpr::getPointerCast(Constant *S, const Type *Ty) {
|
||||||
assert(isa<PointerType>(S->getType()) && "Invalid cast");
|
assert(isa<PointerType>(S->getType()) && "Invalid cast");
|
||||||
assert((Ty->isIntegral() || isa<PointerType>(Ty)) && "Invalid cast");
|
assert((Ty->isInteger() || isa<PointerType>(Ty)) && "Invalid cast");
|
||||||
|
|
||||||
if (Ty->isIntegral())
|
if (Ty->isInteger())
|
||||||
return getCast(Instruction::PtrToInt, S, Ty);
|
return getCast(Instruction::PtrToInt, S, Ty);
|
||||||
return getCast(Instruction::BitCast, S, Ty);
|
return getCast(Instruction::BitCast, S, Ty);
|
||||||
}
|
}
|
||||||
|
|
||||||
Constant *ConstantExpr::getIntegerCast(Constant *C, const Type *Ty,
|
Constant *ConstantExpr::getIntegerCast(Constant *C, const Type *Ty,
|
||||||
bool isSigned) {
|
bool isSigned) {
|
||||||
assert(C->getType()->isIntegral() && Ty->isIntegral() && "Invalid cast");
|
assert(C->getType()->isInteger() && Ty->isInteger() && "Invalid cast");
|
||||||
unsigned SrcBits = C->getType()->getPrimitiveSizeInBits();
|
unsigned SrcBits = C->getType()->getPrimitiveSizeInBits();
|
||||||
unsigned DstBits = Ty->getPrimitiveSizeInBits();
|
unsigned DstBits = Ty->getPrimitiveSizeInBits();
|
||||||
Instruction::CastOps opcode =
|
Instruction::CastOps opcode =
|
||||||
@ -1495,8 +1495,8 @@ Constant *ConstantExpr::getFPCast(Constant *C, const Type *Ty) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Constant *ConstantExpr::getTrunc(Constant *C, const Type *Ty) {
|
Constant *ConstantExpr::getTrunc(Constant *C, const Type *Ty) {
|
||||||
assert(C->getType()->isIntegral() && "Trunc operand must be integer");
|
assert(C->getType()->isInteger() && "Trunc operand must be integer");
|
||||||
assert(Ty->isIntegral() && "Trunc produces only integral");
|
assert(Ty->isInteger() && "Trunc produces only integral");
|
||||||
assert(C->getType()->getPrimitiveSizeInBits() > Ty->getPrimitiveSizeInBits()&&
|
assert(C->getType()->getPrimitiveSizeInBits() > Ty->getPrimitiveSizeInBits()&&
|
||||||
"SrcTy must be larger than DestTy for Trunc!");
|
"SrcTy must be larger than DestTy for Trunc!");
|
||||||
|
|
||||||
@ -1504,8 +1504,8 @@ Constant *ConstantExpr::getTrunc(Constant *C, const Type *Ty) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Constant *ConstantExpr::getSExt(Constant *C, const Type *Ty) {
|
Constant *ConstantExpr::getSExt(Constant *C, const Type *Ty) {
|
||||||
assert(C->getType()->isIntegral() && "SEXt operand must be integral");
|
assert(C->getType()->isInteger() && "SEXt operand must be integral");
|
||||||
assert(Ty->isIntegral() && "SExt produces only integer");
|
assert(Ty->isInteger() && "SExt produces only integer");
|
||||||
assert(C->getType()->getPrimitiveSizeInBits() < Ty->getPrimitiveSizeInBits()&&
|
assert(C->getType()->getPrimitiveSizeInBits() < Ty->getPrimitiveSizeInBits()&&
|
||||||
"SrcTy must be smaller than DestTy for SExt!");
|
"SrcTy must be smaller than DestTy for SExt!");
|
||||||
|
|
||||||
@ -1513,8 +1513,8 @@ Constant *ConstantExpr::getSExt(Constant *C, const Type *Ty) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Constant *ConstantExpr::getZExt(Constant *C, const Type *Ty) {
|
Constant *ConstantExpr::getZExt(Constant *C, const Type *Ty) {
|
||||||
assert(C->getType()->isIntegral() && "ZEXt operand must be integral");
|
assert(C->getType()->isInteger() && "ZEXt operand must be integral");
|
||||||
assert(Ty->isIntegral() && "ZExt produces only integer");
|
assert(Ty->isInteger() && "ZExt produces only integer");
|
||||||
assert(C->getType()->getPrimitiveSizeInBits() < Ty->getPrimitiveSizeInBits()&&
|
assert(C->getType()->getPrimitiveSizeInBits() < Ty->getPrimitiveSizeInBits()&&
|
||||||
"SrcTy must be smaller than DestTy for ZExt!");
|
"SrcTy must be smaller than DestTy for ZExt!");
|
||||||
|
|
||||||
@ -1536,37 +1536,37 @@ Constant *ConstantExpr::getFPExtend(Constant *C, const Type *Ty) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Constant *ConstantExpr::getUIToFP(Constant *C, const Type *Ty) {
|
Constant *ConstantExpr::getUIToFP(Constant *C, const Type *Ty) {
|
||||||
assert(C->getType()->isIntegral() && Ty->isFloatingPoint() &&
|
assert(C->getType()->isInteger() && Ty->isFloatingPoint() &&
|
||||||
"This is an illegal uint to floating point cast!");
|
"This is an illegal uint to floating point cast!");
|
||||||
return getFoldedCast(Instruction::UIToFP, C, Ty);
|
return getFoldedCast(Instruction::UIToFP, C, Ty);
|
||||||
}
|
}
|
||||||
|
|
||||||
Constant *ConstantExpr::getSIToFP(Constant *C, const Type *Ty) {
|
Constant *ConstantExpr::getSIToFP(Constant *C, const Type *Ty) {
|
||||||
assert(C->getType()->isIntegral() && Ty->isFloatingPoint() &&
|
assert(C->getType()->isInteger() && Ty->isFloatingPoint() &&
|
||||||
"This is an illegal sint to floating point cast!");
|
"This is an illegal sint to floating point cast!");
|
||||||
return getFoldedCast(Instruction::SIToFP, C, Ty);
|
return getFoldedCast(Instruction::SIToFP, C, Ty);
|
||||||
}
|
}
|
||||||
|
|
||||||
Constant *ConstantExpr::getFPToUI(Constant *C, const Type *Ty) {
|
Constant *ConstantExpr::getFPToUI(Constant *C, const Type *Ty) {
|
||||||
assert(C->getType()->isFloatingPoint() && Ty->isIntegral() &&
|
assert(C->getType()->isFloatingPoint() && Ty->isInteger() &&
|
||||||
"This is an illegal floating point to uint cast!");
|
"This is an illegal floating point to uint cast!");
|
||||||
return getFoldedCast(Instruction::FPToUI, C, Ty);
|
return getFoldedCast(Instruction::FPToUI, C, Ty);
|
||||||
}
|
}
|
||||||
|
|
||||||
Constant *ConstantExpr::getFPToSI(Constant *C, const Type *Ty) {
|
Constant *ConstantExpr::getFPToSI(Constant *C, const Type *Ty) {
|
||||||
assert(C->getType()->isFloatingPoint() && Ty->isIntegral() &&
|
assert(C->getType()->isFloatingPoint() && Ty->isInteger() &&
|
||||||
"This is an illegal floating point to sint cast!");
|
"This is an illegal floating point to sint cast!");
|
||||||
return getFoldedCast(Instruction::FPToSI, C, Ty);
|
return getFoldedCast(Instruction::FPToSI, C, Ty);
|
||||||
}
|
}
|
||||||
|
|
||||||
Constant *ConstantExpr::getPtrToInt(Constant *C, const Type *DstTy) {
|
Constant *ConstantExpr::getPtrToInt(Constant *C, const Type *DstTy) {
|
||||||
assert(isa<PointerType>(C->getType()) && "PtrToInt source must be pointer");
|
assert(isa<PointerType>(C->getType()) && "PtrToInt source must be pointer");
|
||||||
assert(DstTy->isIntegral() && "PtrToInt destination must be integral");
|
assert(DstTy->isInteger() && "PtrToInt destination must be integral");
|
||||||
return getFoldedCast(Instruction::PtrToInt, C, DstTy);
|
return getFoldedCast(Instruction::PtrToInt, C, DstTy);
|
||||||
}
|
}
|
||||||
|
|
||||||
Constant *ConstantExpr::getIntToPtr(Constant *C, const Type *DstTy) {
|
Constant *ConstantExpr::getIntToPtr(Constant *C, const Type *DstTy) {
|
||||||
assert(C->getType()->isIntegral() && "IntToPtr source must be integral");
|
assert(C->getType()->isInteger() && "IntToPtr source must be integral");
|
||||||
assert(isa<PointerType>(DstTy) && "IntToPtr destination must be a pointer");
|
assert(isa<PointerType>(DstTy) && "IntToPtr destination must be a pointer");
|
||||||
return getFoldedCast(Instruction::IntToPtr, C, DstTy);
|
return getFoldedCast(Instruction::IntToPtr, C, DstTy);
|
||||||
}
|
}
|
||||||
@ -1649,15 +1649,15 @@ Constant *ConstantExpr::get(unsigned Opcode, Constant *C1, Constant *C2) {
|
|||||||
case Instruction::Sub:
|
case Instruction::Sub:
|
||||||
case Instruction::Mul:
|
case Instruction::Mul:
|
||||||
assert(C1->getType() == C2->getType() && "Op types should be identical!");
|
assert(C1->getType() == C2->getType() && "Op types should be identical!");
|
||||||
assert((C1->getType()->isIntegral() || C1->getType()->isFloatingPoint() ||
|
assert((C1->getType()->isInteger() || C1->getType()->isFloatingPoint() ||
|
||||||
isa<PackedType>(C1->getType())) &&
|
isa<PackedType>(C1->getType())) &&
|
||||||
"Tried to create an arithmetic operation on a non-arithmetic type!");
|
"Tried to create an arithmetic operation on a non-arithmetic type!");
|
||||||
break;
|
break;
|
||||||
case Instruction::UDiv:
|
case Instruction::UDiv:
|
||||||
case Instruction::SDiv:
|
case Instruction::SDiv:
|
||||||
assert(C1->getType() == C2->getType() && "Op types should be identical!");
|
assert(C1->getType() == C2->getType() && "Op types should be identical!");
|
||||||
assert((C1->getType()->isIntegral() || (isa<PackedType>(C1->getType()) &&
|
assert((C1->getType()->isInteger() || (isa<PackedType>(C1->getType()) &&
|
||||||
cast<PackedType>(C1->getType())->getElementType()->isIntegral())) &&
|
cast<PackedType>(C1->getType())->getElementType()->isInteger())) &&
|
||||||
"Tried to create an arithmetic operation on a non-arithmetic type!");
|
"Tried to create an arithmetic operation on a non-arithmetic type!");
|
||||||
break;
|
break;
|
||||||
case Instruction::FDiv:
|
case Instruction::FDiv:
|
||||||
@ -1669,8 +1669,8 @@ Constant *ConstantExpr::get(unsigned Opcode, Constant *C1, Constant *C2) {
|
|||||||
case Instruction::URem:
|
case Instruction::URem:
|
||||||
case Instruction::SRem:
|
case Instruction::SRem:
|
||||||
assert(C1->getType() == C2->getType() && "Op types should be identical!");
|
assert(C1->getType() == C2->getType() && "Op types should be identical!");
|
||||||
assert((C1->getType()->isIntegral() || (isa<PackedType>(C1->getType()) &&
|
assert((C1->getType()->isInteger() || (isa<PackedType>(C1->getType()) &&
|
||||||
cast<PackedType>(C1->getType())->getElementType()->isIntegral())) &&
|
cast<PackedType>(C1->getType())->getElementType()->isInteger())) &&
|
||||||
"Tried to create an arithmetic operation on a non-arithmetic type!");
|
"Tried to create an arithmetic operation on a non-arithmetic type!");
|
||||||
break;
|
break;
|
||||||
case Instruction::FRem:
|
case Instruction::FRem:
|
||||||
@ -1683,14 +1683,14 @@ Constant *ConstantExpr::get(unsigned Opcode, Constant *C1, Constant *C2) {
|
|||||||
case Instruction::Or:
|
case Instruction::Or:
|
||||||
case Instruction::Xor:
|
case Instruction::Xor:
|
||||||
assert(C1->getType() == C2->getType() && "Op types should be identical!");
|
assert(C1->getType() == C2->getType() && "Op types should be identical!");
|
||||||
assert((C1->getType()->isIntegral() || isa<PackedType>(C1->getType())) &&
|
assert((C1->getType()->isInteger() || isa<PackedType>(C1->getType())) &&
|
||||||
"Tried to create a logical operation on a non-integral type!");
|
"Tried to create a logical operation on a non-integral type!");
|
||||||
break;
|
break;
|
||||||
case Instruction::Shl:
|
case Instruction::Shl:
|
||||||
case Instruction::LShr:
|
case Instruction::LShr:
|
||||||
case Instruction::AShr:
|
case Instruction::AShr:
|
||||||
assert(C2->getType() == Type::Int8Ty && "Shift should be by ubyte!");
|
assert(C2->getType() == Type::Int8Ty && "Shift should be by ubyte!");
|
||||||
assert(C1->getType()->isIntegral() &&
|
assert(C1->getType()->isInteger() &&
|
||||||
"Tried to create a shift operation on a non-integer type!");
|
"Tried to create a shift operation on a non-integer type!");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -1732,7 +1732,7 @@ Constant *ConstantExpr::getShiftTy(const Type *ReqTy, unsigned Opcode,
|
|||||||
Opcode == Instruction::LShr ||
|
Opcode == Instruction::LShr ||
|
||||||
Opcode == Instruction::AShr) &&
|
Opcode == Instruction::AShr) &&
|
||||||
"Invalid opcode in binary constant expression");
|
"Invalid opcode in binary constant expression");
|
||||||
assert(C1->getType()->isIntegral() && C2->getType() == Type::Int8Ty &&
|
assert(C1->getType()->isInteger() && C2->getType() == Type::Int8Ty &&
|
||||||
"Invalid operand types for Shift constant expr!");
|
"Invalid operand types for Shift constant expr!");
|
||||||
|
|
||||||
if (Constant *FC = ConstantFoldBinaryInstruction(Opcode, C1, C2))
|
if (Constant *FC = ConstantFoldBinaryInstruction(Opcode, C1, C2))
|
||||||
|
@ -1025,7 +1025,7 @@ void BinaryOperator::init(BinaryOps iType)
|
|||||||
case Mul:
|
case Mul:
|
||||||
assert(getType() == LHS->getType() &&
|
assert(getType() == LHS->getType() &&
|
||||||
"Arithmetic operation should return same type as operands!");
|
"Arithmetic operation should return same type as operands!");
|
||||||
assert((getType()->isIntegral() || getType()->isFloatingPoint() ||
|
assert((getType()->isInteger() || getType()->isFloatingPoint() ||
|
||||||
isa<PackedType>(getType())) &&
|
isa<PackedType>(getType())) &&
|
||||||
"Tried to create an arithmetic operation on a non-arithmetic type!");
|
"Tried to create an arithmetic operation on a non-arithmetic type!");
|
||||||
break;
|
break;
|
||||||
@ -1033,8 +1033,8 @@ void BinaryOperator::init(BinaryOps iType)
|
|||||||
case SDiv:
|
case SDiv:
|
||||||
assert(getType() == LHS->getType() &&
|
assert(getType() == LHS->getType() &&
|
||||||
"Arithmetic operation should return same type as operands!");
|
"Arithmetic operation should return same type as operands!");
|
||||||
assert((getType()->isIntegral() || (isa<PackedType>(getType()) &&
|
assert((getType()->isInteger() || (isa<PackedType>(getType()) &&
|
||||||
cast<PackedType>(getType())->getElementType()->isIntegral())) &&
|
cast<PackedType>(getType())->getElementType()->isInteger())) &&
|
||||||
"Incorrect operand type (not integer) for S/UDIV");
|
"Incorrect operand type (not integer) for S/UDIV");
|
||||||
break;
|
break;
|
||||||
case FDiv:
|
case FDiv:
|
||||||
@ -1048,8 +1048,8 @@ void BinaryOperator::init(BinaryOps iType)
|
|||||||
case SRem:
|
case SRem:
|
||||||
assert(getType() == LHS->getType() &&
|
assert(getType() == LHS->getType() &&
|
||||||
"Arithmetic operation should return same type as operands!");
|
"Arithmetic operation should return same type as operands!");
|
||||||
assert((getType()->isIntegral() || (isa<PackedType>(getType()) &&
|
assert((getType()->isInteger() || (isa<PackedType>(getType()) &&
|
||||||
cast<PackedType>(getType())->getElementType()->isIntegral())) &&
|
cast<PackedType>(getType())->getElementType()->isInteger())) &&
|
||||||
"Incorrect operand type (not integer) for S/UREM");
|
"Incorrect operand type (not integer) for S/UREM");
|
||||||
break;
|
break;
|
||||||
case FRem:
|
case FRem:
|
||||||
@ -1063,9 +1063,9 @@ void BinaryOperator::init(BinaryOps iType)
|
|||||||
case Xor:
|
case Xor:
|
||||||
assert(getType() == LHS->getType() &&
|
assert(getType() == LHS->getType() &&
|
||||||
"Logical operation should return same type as operands!");
|
"Logical operation should return same type as operands!");
|
||||||
assert((getType()->isIntegral() ||
|
assert((getType()->isInteger() ||
|
||||||
(isa<PackedType>(getType()) &&
|
(isa<PackedType>(getType()) &&
|
||||||
cast<PackedType>(getType())->getElementType()->isIntegral())) &&
|
cast<PackedType>(getType())->getElementType()->isInteger())) &&
|
||||||
"Tried to create a logical operation on a non-integral type!");
|
"Tried to create a logical operation on a non-integral type!");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -1218,7 +1218,7 @@ bool CastInst::isIntegerCast() const {
|
|||||||
case Instruction::Trunc:
|
case Instruction::Trunc:
|
||||||
return true;
|
return true;
|
||||||
case Instruction::BitCast:
|
case Instruction::BitCast:
|
||||||
return getOperand(0)->getType()->isIntegral() && getType()->isIntegral();
|
return getOperand(0)->getType()->isInteger() && getType()->isInteger();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1351,7 +1351,7 @@ unsigned CastInst::isEliminableCastPair(
|
|||||||
case 3:
|
case 3:
|
||||||
// no-op cast in second op implies firstOp as long as the DestTy
|
// no-op cast in second op implies firstOp as long as the DestTy
|
||||||
// is integer
|
// is integer
|
||||||
if (DstTy->isIntegral())
|
if (DstTy->isInteger())
|
||||||
return firstOp;
|
return firstOp;
|
||||||
return 0;
|
return 0;
|
||||||
case 4:
|
case 4:
|
||||||
@ -1363,7 +1363,7 @@ unsigned CastInst::isEliminableCastPair(
|
|||||||
case 5:
|
case 5:
|
||||||
// no-op cast in first op implies secondOp as long as the SrcTy
|
// no-op cast in first op implies secondOp as long as the SrcTy
|
||||||
// is an integer
|
// is an integer
|
||||||
if (SrcTy->isIntegral())
|
if (SrcTy->isInteger())
|
||||||
return secondOp;
|
return secondOp;
|
||||||
return 0;
|
return 0;
|
||||||
case 6:
|
case 6:
|
||||||
@ -1528,10 +1528,10 @@ CastInst *CastInst::createPointerCast(Value *S, const Type *Ty,
|
|||||||
const std::string &Name,
|
const std::string &Name,
|
||||||
BasicBlock *InsertAtEnd) {
|
BasicBlock *InsertAtEnd) {
|
||||||
assert(isa<PointerType>(S->getType()) && "Invalid cast");
|
assert(isa<PointerType>(S->getType()) && "Invalid cast");
|
||||||
assert((Ty->isIntegral() || isa<PointerType>(Ty)) &&
|
assert((Ty->isInteger() || isa<PointerType>(Ty)) &&
|
||||||
"Invalid cast");
|
"Invalid cast");
|
||||||
|
|
||||||
if (Ty->isIntegral())
|
if (Ty->isInteger())
|
||||||
return create(Instruction::PtrToInt, S, Ty, Name, InsertAtEnd);
|
return create(Instruction::PtrToInt, S, Ty, Name, InsertAtEnd);
|
||||||
return create(Instruction::BitCast, S, Ty, Name, InsertAtEnd);
|
return create(Instruction::BitCast, S, Ty, Name, InsertAtEnd);
|
||||||
}
|
}
|
||||||
@ -1541,10 +1541,10 @@ CastInst *CastInst::createPointerCast(Value *S, const Type *Ty,
|
|||||||
const std::string &Name,
|
const std::string &Name,
|
||||||
Instruction *InsertBefore) {
|
Instruction *InsertBefore) {
|
||||||
assert(isa<PointerType>(S->getType()) && "Invalid cast");
|
assert(isa<PointerType>(S->getType()) && "Invalid cast");
|
||||||
assert((Ty->isIntegral() || isa<PointerType>(Ty)) &&
|
assert((Ty->isInteger() || isa<PointerType>(Ty)) &&
|
||||||
"Invalid cast");
|
"Invalid cast");
|
||||||
|
|
||||||
if (Ty->isIntegral())
|
if (Ty->isInteger())
|
||||||
return create(Instruction::PtrToInt, S, Ty, Name, InsertBefore);
|
return create(Instruction::PtrToInt, S, Ty, Name, InsertBefore);
|
||||||
return create(Instruction::BitCast, S, Ty, Name, InsertBefore);
|
return create(Instruction::BitCast, S, Ty, Name, InsertBefore);
|
||||||
}
|
}
|
||||||
@ -1552,7 +1552,7 @@ CastInst *CastInst::createPointerCast(Value *S, const Type *Ty,
|
|||||||
CastInst *CastInst::createIntegerCast(Value *C, const Type *Ty,
|
CastInst *CastInst::createIntegerCast(Value *C, const Type *Ty,
|
||||||
bool isSigned, const std::string &Name,
|
bool isSigned, const std::string &Name,
|
||||||
Instruction *InsertBefore) {
|
Instruction *InsertBefore) {
|
||||||
assert(C->getType()->isIntegral() && Ty->isIntegral() && "Invalid cast");
|
assert(C->getType()->isInteger() && Ty->isInteger() && "Invalid cast");
|
||||||
unsigned SrcBits = C->getType()->getPrimitiveSizeInBits();
|
unsigned SrcBits = C->getType()->getPrimitiveSizeInBits();
|
||||||
unsigned DstBits = Ty->getPrimitiveSizeInBits();
|
unsigned DstBits = Ty->getPrimitiveSizeInBits();
|
||||||
Instruction::CastOps opcode =
|
Instruction::CastOps opcode =
|
||||||
@ -1565,7 +1565,7 @@ CastInst *CastInst::createIntegerCast(Value *C, const Type *Ty,
|
|||||||
CastInst *CastInst::createIntegerCast(Value *C, const Type *Ty,
|
CastInst *CastInst::createIntegerCast(Value *C, const Type *Ty,
|
||||||
bool isSigned, const std::string &Name,
|
bool isSigned, const std::string &Name,
|
||||||
BasicBlock *InsertAtEnd) {
|
BasicBlock *InsertAtEnd) {
|
||||||
assert(C->getType()->isIntegral() && Ty->isIntegral() && "Invalid cast");
|
assert(C->getType()->isInteger() && Ty->isInteger() && "Invalid cast");
|
||||||
unsigned SrcBits = C->getType()->getPrimitiveSizeInBits();
|
unsigned SrcBits = C->getType()->getPrimitiveSizeInBits();
|
||||||
unsigned DstBits = Ty->getPrimitiveSizeInBits();
|
unsigned DstBits = Ty->getPrimitiveSizeInBits();
|
||||||
Instruction::CastOps opcode =
|
Instruction::CastOps opcode =
|
||||||
@ -1616,8 +1616,8 @@ CastInst::getCastOpcode(
|
|||||||
unsigned DestBits = DestTy->getPrimitiveSizeInBits(); // 0 for ptr/packed
|
unsigned DestBits = DestTy->getPrimitiveSizeInBits(); // 0 for ptr/packed
|
||||||
|
|
||||||
// Run through the possibilities ...
|
// Run through the possibilities ...
|
||||||
if (DestTy->isIntegral()) { // Casting to integral
|
if (DestTy->isInteger()) { // Casting to integral
|
||||||
if (SrcTy->isIntegral()) { // Casting from integral
|
if (SrcTy->isInteger()) { // Casting from integral
|
||||||
if (DestBits < SrcBits)
|
if (DestBits < SrcBits)
|
||||||
return Trunc; // int -> smaller int
|
return Trunc; // int -> smaller int
|
||||||
else if (DestBits > SrcBits) { // its an extension
|
else if (DestBits > SrcBits) { // its an extension
|
||||||
@ -1643,7 +1643,7 @@ CastInst::getCastOpcode(
|
|||||||
return PtrToInt; // ptr -> int
|
return PtrToInt; // ptr -> int
|
||||||
}
|
}
|
||||||
} else if (DestTy->isFloatingPoint()) { // Casting to floating pt
|
} else if (DestTy->isFloatingPoint()) { // Casting to floating pt
|
||||||
if (SrcTy->isIntegral()) { // Casting from integral
|
if (SrcTy->isInteger()) { // Casting from integral
|
||||||
if (SrcIsSigned)
|
if (SrcIsSigned)
|
||||||
return SIToFP; // sint -> FP
|
return SIToFP; // sint -> FP
|
||||||
else
|
else
|
||||||
@ -1676,7 +1676,7 @@ CastInst::getCastOpcode(
|
|||||||
} else if (isa<PointerType>(DestTy)) {
|
} else if (isa<PointerType>(DestTy)) {
|
||||||
if (isa<PointerType>(SrcTy)) {
|
if (isa<PointerType>(SrcTy)) {
|
||||||
return BitCast; // ptr -> ptr
|
return BitCast; // ptr -> ptr
|
||||||
} else if (SrcTy->isIntegral()) {
|
} else if (SrcTy->isInteger()) {
|
||||||
return IntToPtr; // int -> ptr
|
return IntToPtr; // int -> ptr
|
||||||
} else {
|
} else {
|
||||||
assert(!"Casting pointer to other than pointer or int");
|
assert(!"Casting pointer to other than pointer or int");
|
||||||
@ -1715,11 +1715,11 @@ checkCast(Instruction::CastOps op, Value *S, const Type *DstTy) {
|
|||||||
switch (op) {
|
switch (op) {
|
||||||
default: return false; // This is an input error
|
default: return false; // This is an input error
|
||||||
case Instruction::Trunc:
|
case Instruction::Trunc:
|
||||||
return SrcTy->isIntegral() && DstTy->isIntegral()&& SrcBitSize > DstBitSize;
|
return SrcTy->isInteger() && DstTy->isInteger()&& SrcBitSize > DstBitSize;
|
||||||
case Instruction::ZExt:
|
case Instruction::ZExt:
|
||||||
return SrcTy->isIntegral() && DstTy->isIntegral()&& SrcBitSize < DstBitSize;
|
return SrcTy->isInteger() && DstTy->isInteger()&& SrcBitSize < DstBitSize;
|
||||||
case Instruction::SExt:
|
case Instruction::SExt:
|
||||||
return SrcTy->isIntegral() && DstTy->isIntegral()&& SrcBitSize < DstBitSize;
|
return SrcTy->isInteger() && DstTy->isInteger()&& SrcBitSize < DstBitSize;
|
||||||
case Instruction::FPTrunc:
|
case Instruction::FPTrunc:
|
||||||
return SrcTy->isFloatingPoint() && DstTy->isFloatingPoint() &&
|
return SrcTy->isFloatingPoint() && DstTy->isFloatingPoint() &&
|
||||||
SrcBitSize > DstBitSize;
|
SrcBitSize > DstBitSize;
|
||||||
@ -1727,17 +1727,17 @@ checkCast(Instruction::CastOps op, Value *S, const Type *DstTy) {
|
|||||||
return SrcTy->isFloatingPoint() && DstTy->isFloatingPoint() &&
|
return SrcTy->isFloatingPoint() && DstTy->isFloatingPoint() &&
|
||||||
SrcBitSize < DstBitSize;
|
SrcBitSize < DstBitSize;
|
||||||
case Instruction::UIToFP:
|
case Instruction::UIToFP:
|
||||||
return SrcTy->isIntegral() && DstTy->isFloatingPoint();
|
return SrcTy->isInteger() && DstTy->isFloatingPoint();
|
||||||
case Instruction::SIToFP:
|
case Instruction::SIToFP:
|
||||||
return SrcTy->isIntegral() && DstTy->isFloatingPoint();
|
return SrcTy->isInteger() && DstTy->isFloatingPoint();
|
||||||
case Instruction::FPToUI:
|
case Instruction::FPToUI:
|
||||||
return SrcTy->isFloatingPoint() && DstTy->isIntegral();
|
return SrcTy->isFloatingPoint() && DstTy->isInteger();
|
||||||
case Instruction::FPToSI:
|
case Instruction::FPToSI:
|
||||||
return SrcTy->isFloatingPoint() && DstTy->isIntegral();
|
return SrcTy->isFloatingPoint() && DstTy->isInteger();
|
||||||
case Instruction::PtrToInt:
|
case Instruction::PtrToInt:
|
||||||
return isa<PointerType>(SrcTy) && DstTy->isIntegral();
|
return isa<PointerType>(SrcTy) && DstTy->isInteger();
|
||||||
case Instruction::IntToPtr:
|
case Instruction::IntToPtr:
|
||||||
return SrcTy->isIntegral() && isa<PointerType>(DstTy);
|
return SrcTy->isInteger() && isa<PointerType>(DstTy);
|
||||||
case Instruction::BitCast:
|
case Instruction::BitCast:
|
||||||
// BitCast implies a no-op cast of type only. No bits change.
|
// BitCast implies a no-op cast of type only. No bits change.
|
||||||
// However, you can't cast pointers to anything but pointers.
|
// However, you can't cast pointers to anything but pointers.
|
||||||
@ -1913,9 +1913,9 @@ CmpInst::CmpInst(OtherOps op, unsigned short predicate, Value *LHS, Value *RHS,
|
|||||||
assert(Op0Ty == Op1Ty &&
|
assert(Op0Ty == Op1Ty &&
|
||||||
"Both operands to ICmp instruction are not of the same type!");
|
"Both operands to ICmp instruction are not of the same type!");
|
||||||
// Check that the operands are the right type
|
// Check that the operands are the right type
|
||||||
assert(Op0Ty->isIntegral() || isa<PointerType>(Op0Ty) ||
|
assert(Op0Ty->isInteger() || isa<PointerType>(Op0Ty) ||
|
||||||
(isa<PackedType>(Op0Ty) &&
|
(isa<PackedType>(Op0Ty) &&
|
||||||
cast<PackedType>(Op0Ty)->getElementType()->isIntegral()) &&
|
cast<PackedType>(Op0Ty)->getElementType()->isInteger()) &&
|
||||||
"Invalid operand types for ICmp instruction");
|
"Invalid operand types for ICmp instruction");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1948,9 +1948,9 @@ CmpInst::CmpInst(OtherOps op, unsigned short predicate, Value *LHS, Value *RHS,
|
|||||||
assert(Op0Ty == Op1Ty &&
|
assert(Op0Ty == Op1Ty &&
|
||||||
"Both operands to ICmp instruction are not of the same type!");
|
"Both operands to ICmp instruction are not of the same type!");
|
||||||
// Check that the operands are the right type
|
// Check that the operands are the right type
|
||||||
assert(Op0Ty->isIntegral() || isa<PointerType>(Op0Ty) ||
|
assert(Op0Ty->isInteger() || isa<PointerType>(Op0Ty) ||
|
||||||
(isa<PackedType>(Op0Ty) &&
|
(isa<PackedType>(Op0Ty) &&
|
||||||
cast<PackedType>(Op0Ty)->getElementType()->isIntegral()) &&
|
cast<PackedType>(Op0Ty)->getElementType()->isInteger()) &&
|
||||||
"Invalid operand types for ICmp instruction");
|
"Invalid operand types for ICmp instruction");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -428,7 +428,7 @@ PackedType::PackedType(const Type *ElType, unsigned NumEl)
|
|||||||
NumElements = NumEl;
|
NumElements = NumEl;
|
||||||
|
|
||||||
assert(NumEl > 0 && "NumEl of a PackedType must be greater than 0");
|
assert(NumEl > 0 && "NumEl of a PackedType must be greater than 0");
|
||||||
assert((ElType->isIntegral() || ElType->isFloatingPoint()) &&
|
assert((ElType->isInteger() || ElType->isFloatingPoint()) &&
|
||||||
"Elements of a PackedType must be a primitive type");
|
"Elements of a PackedType must be a primitive type");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -500,8 +500,8 @@ void Verifier::visitTruncInst(TruncInst &I) {
|
|||||||
unsigned SrcBitSize = SrcTy->getPrimitiveSizeInBits();
|
unsigned SrcBitSize = SrcTy->getPrimitiveSizeInBits();
|
||||||
unsigned DestBitSize = DestTy->getPrimitiveSizeInBits();
|
unsigned DestBitSize = DestTy->getPrimitiveSizeInBits();
|
||||||
|
|
||||||
Assert1(SrcTy->isIntegral(), "Trunc only operates on integer", &I);
|
Assert1(SrcTy->isInteger(), "Trunc only operates on integer", &I);
|
||||||
Assert1(DestTy->isIntegral(), "Trunc only produces integer", &I);
|
Assert1(DestTy->isInteger(), "Trunc only produces integer", &I);
|
||||||
Assert1(SrcBitSize > DestBitSize,"DestTy too big for Trunc", &I);
|
Assert1(SrcBitSize > DestBitSize,"DestTy too big for Trunc", &I);
|
||||||
|
|
||||||
visitInstruction(I);
|
visitInstruction(I);
|
||||||
@ -513,8 +513,8 @@ void Verifier::visitZExtInst(ZExtInst &I) {
|
|||||||
const Type *DestTy = I.getType();
|
const Type *DestTy = I.getType();
|
||||||
|
|
||||||
// Get the size of the types in bits, we'll need this later
|
// Get the size of the types in bits, we'll need this later
|
||||||
Assert1(SrcTy->isIntegral(), "ZExt only operates on integer", &I);
|
Assert1(SrcTy->isInteger(), "ZExt only operates on integer", &I);
|
||||||
Assert1(DestTy->isIntegral(), "ZExt only produces an integer", &I);
|
Assert1(DestTy->isInteger(), "ZExt only produces an integer", &I);
|
||||||
unsigned SrcBitSize = SrcTy->getPrimitiveSizeInBits();
|
unsigned SrcBitSize = SrcTy->getPrimitiveSizeInBits();
|
||||||
unsigned DestBitSize = DestTy->getPrimitiveSizeInBits();
|
unsigned DestBitSize = DestTy->getPrimitiveSizeInBits();
|
||||||
|
|
||||||
@ -532,8 +532,8 @@ void Verifier::visitSExtInst(SExtInst &I) {
|
|||||||
unsigned SrcBitSize = SrcTy->getPrimitiveSizeInBits();
|
unsigned SrcBitSize = SrcTy->getPrimitiveSizeInBits();
|
||||||
unsigned DestBitSize = DestTy->getPrimitiveSizeInBits();
|
unsigned DestBitSize = DestTy->getPrimitiveSizeInBits();
|
||||||
|
|
||||||
Assert1(SrcTy->isIntegral(), "SExt only operates on integer", &I);
|
Assert1(SrcTy->isInteger(), "SExt only operates on integer", &I);
|
||||||
Assert1(DestTy->isIntegral(), "SExt only produces an integer", &I);
|
Assert1(DestTy->isInteger(), "SExt only produces an integer", &I);
|
||||||
Assert1(SrcBitSize < DestBitSize,"Type too small for SExt", &I);
|
Assert1(SrcBitSize < DestBitSize,"Type too small for SExt", &I);
|
||||||
|
|
||||||
visitInstruction(I);
|
visitInstruction(I);
|
||||||
@ -575,7 +575,7 @@ void Verifier::visitUIToFPInst(UIToFPInst &I) {
|
|||||||
const Type *SrcTy = I.getOperand(0)->getType();
|
const Type *SrcTy = I.getOperand(0)->getType();
|
||||||
const Type *DestTy = I.getType();
|
const Type *DestTy = I.getType();
|
||||||
|
|
||||||
Assert1(SrcTy->isIntegral(),"UInt2FP source must be integral", &I);
|
Assert1(SrcTy->isInteger(),"UInt2FP source must be integral", &I);
|
||||||
Assert1(DestTy->isFloatingPoint(),"UInt2FP result must be FP", &I);
|
Assert1(DestTy->isFloatingPoint(),"UInt2FP result must be FP", &I);
|
||||||
|
|
||||||
visitInstruction(I);
|
visitInstruction(I);
|
||||||
@ -586,7 +586,7 @@ void Verifier::visitSIToFPInst(SIToFPInst &I) {
|
|||||||
const Type *SrcTy = I.getOperand(0)->getType();
|
const Type *SrcTy = I.getOperand(0)->getType();
|
||||||
const Type *DestTy = I.getType();
|
const Type *DestTy = I.getType();
|
||||||
|
|
||||||
Assert1(SrcTy->isIntegral(),"SInt2FP source must be integral", &I);
|
Assert1(SrcTy->isInteger(),"SInt2FP source must be integral", &I);
|
||||||
Assert1(DestTy->isFloatingPoint(),"SInt2FP result must be FP", &I);
|
Assert1(DestTy->isFloatingPoint(),"SInt2FP result must be FP", &I);
|
||||||
|
|
||||||
visitInstruction(I);
|
visitInstruction(I);
|
||||||
@ -598,7 +598,7 @@ void Verifier::visitFPToUIInst(FPToUIInst &I) {
|
|||||||
const Type *DestTy = I.getType();
|
const Type *DestTy = I.getType();
|
||||||
|
|
||||||
Assert1(SrcTy->isFloatingPoint(),"FP2UInt source must be FP", &I);
|
Assert1(SrcTy->isFloatingPoint(),"FP2UInt source must be FP", &I);
|
||||||
Assert1(DestTy->isIntegral(),"FP2UInt result must be integral", &I);
|
Assert1(DestTy->isInteger(),"FP2UInt result must be integral", &I);
|
||||||
|
|
||||||
visitInstruction(I);
|
visitInstruction(I);
|
||||||
}
|
}
|
||||||
@ -609,7 +609,7 @@ void Verifier::visitFPToSIInst(FPToSIInst &I) {
|
|||||||
const Type *DestTy = I.getType();
|
const Type *DestTy = I.getType();
|
||||||
|
|
||||||
Assert1(SrcTy->isFloatingPoint(),"FPToSI source must be FP", &I);
|
Assert1(SrcTy->isFloatingPoint(),"FPToSI source must be FP", &I);
|
||||||
Assert1(DestTy->isIntegral(),"FP2ToI result must be integral", &I);
|
Assert1(DestTy->isInteger(),"FP2ToI result must be integral", &I);
|
||||||
|
|
||||||
visitInstruction(I);
|
visitInstruction(I);
|
||||||
}
|
}
|
||||||
@ -620,7 +620,7 @@ void Verifier::visitPtrToIntInst(PtrToIntInst &I) {
|
|||||||
const Type *DestTy = I.getType();
|
const Type *DestTy = I.getType();
|
||||||
|
|
||||||
Assert1(isa<PointerType>(SrcTy), "PtrToInt source must be pointer", &I);
|
Assert1(isa<PointerType>(SrcTy), "PtrToInt source must be pointer", &I);
|
||||||
Assert1(DestTy->isIntegral(), "PtrToInt result must be integral", &I);
|
Assert1(DestTy->isInteger(), "PtrToInt result must be integral", &I);
|
||||||
|
|
||||||
visitInstruction(I);
|
visitInstruction(I);
|
||||||
}
|
}
|
||||||
@ -630,7 +630,7 @@ void Verifier::visitIntToPtrInst(IntToPtrInst &I) {
|
|||||||
const Type *SrcTy = I.getOperand(0)->getType();
|
const Type *SrcTy = I.getOperand(0)->getType();
|
||||||
const Type *DestTy = I.getType();
|
const Type *DestTy = I.getType();
|
||||||
|
|
||||||
Assert1(SrcTy->isIntegral(), "IntToPtr source must be an integral", &I);
|
Assert1(SrcTy->isInteger(), "IntToPtr source must be an integral", &I);
|
||||||
Assert1(isa<PointerType>(DestTy), "IntToPtr result must be a pointer",&I);
|
Assert1(isa<PointerType>(DestTy), "IntToPtr result must be a pointer",&I);
|
||||||
|
|
||||||
visitInstruction(I);
|
visitInstruction(I);
|
||||||
@ -716,9 +716,9 @@ void Verifier::visitBinaryOperator(BinaryOperator &B) {
|
|||||||
// Check that logical operators are only used with integral operands.
|
// Check that logical operators are only used with integral operands.
|
||||||
if (B.getOpcode() == Instruction::And || B.getOpcode() == Instruction::Or ||
|
if (B.getOpcode() == Instruction::And || B.getOpcode() == Instruction::Or ||
|
||||||
B.getOpcode() == Instruction::Xor) {
|
B.getOpcode() == Instruction::Xor) {
|
||||||
Assert1(B.getType()->isIntegral() ||
|
Assert1(B.getType()->isInteger() ||
|
||||||
(isa<PackedType>(B.getType()) &&
|
(isa<PackedType>(B.getType()) &&
|
||||||
cast<PackedType>(B.getType())->getElementType()->isIntegral()),
|
cast<PackedType>(B.getType())->getElementType()->isInteger()),
|
||||||
"Logical operators only work with integral types!", &B);
|
"Logical operators only work with integral types!", &B);
|
||||||
Assert1(B.getType() == B.getOperand(0)->getType(),
|
Assert1(B.getType() == B.getOperand(0)->getType(),
|
||||||
"Logical operators must have same type for operands and result!",
|
"Logical operators must have same type for operands and result!",
|
||||||
@ -728,7 +728,7 @@ void Verifier::visitBinaryOperator(BinaryOperator &B) {
|
|||||||
Assert1(B.getType() == B.getOperand(0)->getType(),
|
Assert1(B.getType() == B.getOperand(0)->getType(),
|
||||||
"Arithmetic operators must have same type for operands and result!",
|
"Arithmetic operators must have same type for operands and result!",
|
||||||
&B);
|
&B);
|
||||||
Assert1(B.getType()->isIntegral() || B.getType()->isFloatingPoint() ||
|
Assert1(B.getType()->isInteger() || B.getType()->isFloatingPoint() ||
|
||||||
isa<PackedType>(B.getType()),
|
isa<PackedType>(B.getType()),
|
||||||
"Arithmetic operators must have integer, fp, or packed type!", &B);
|
"Arithmetic operators must have integer, fp, or packed type!", &B);
|
||||||
}
|
}
|
||||||
@ -743,7 +743,7 @@ void Verifier::visitICmpInst(ICmpInst& IC) {
|
|||||||
Assert1(Op0Ty == Op1Ty,
|
Assert1(Op0Ty == Op1Ty,
|
||||||
"Both operands to ICmp instruction are not of the same type!", &IC);
|
"Both operands to ICmp instruction are not of the same type!", &IC);
|
||||||
// Check that the operands are the right type
|
// Check that the operands are the right type
|
||||||
Assert1(Op0Ty->isIntegral() || isa<PointerType>(Op0Ty),
|
Assert1(Op0Ty->isInteger() || isa<PointerType>(Op0Ty),
|
||||||
"Invalid operand types for ICmp instruction", &IC);
|
"Invalid operand types for ICmp instruction", &IC);
|
||||||
visitInstruction(IC);
|
visitInstruction(IC);
|
||||||
}
|
}
|
||||||
@ -761,7 +761,7 @@ void Verifier::visitFCmpInst(FCmpInst& FC) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Verifier::visitShiftInst(ShiftInst &SI) {
|
void Verifier::visitShiftInst(ShiftInst &SI) {
|
||||||
Assert1(SI.getType()->isIntegral(),
|
Assert1(SI.getType()->isInteger(),
|
||||||
"Shift must return an integer result!", &SI);
|
"Shift must return an integer result!", &SI);
|
||||||
Assert1(SI.getType() == SI.getOperand(0)->getType(),
|
Assert1(SI.getType() == SI.getOperand(0)->getType(),
|
||||||
"Shift return type must be same as first operand!", &SI);
|
"Shift return type must be same as first operand!", &SI);
|
||||||
|
@ -310,7 +310,7 @@ std::string
|
|||||||
CppWriter::getCppName(const Type* Ty)
|
CppWriter::getCppName(const Type* Ty)
|
||||||
{
|
{
|
||||||
// First, handle the primitive types .. easy
|
// First, handle the primitive types .. easy
|
||||||
if (Ty->isPrimitiveType() || Ty->isIntegral()) {
|
if (Ty->isPrimitiveType() || Ty->isInteger()) {
|
||||||
switch (Ty->getTypeID()) {
|
switch (Ty->getTypeID()) {
|
||||||
case Type::VoidTyID: return "Type::VoidTy";
|
case Type::VoidTyID: return "Type::VoidTy";
|
||||||
case Type::IntegerTyID: {
|
case Type::IntegerTyID: {
|
||||||
@ -410,7 +410,7 @@ CppWriter::printCppName(const Value* val) {
|
|||||||
bool
|
bool
|
||||||
CppWriter::printTypeInternal(const Type* Ty) {
|
CppWriter::printTypeInternal(const Type* Ty) {
|
||||||
// We don't print definitions for primitive types
|
// We don't print definitions for primitive types
|
||||||
if (Ty->isPrimitiveType() || Ty->isIntegral())
|
if (Ty->isPrimitiveType() || Ty->isInteger())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// If we already defined this type, we don't need to define it again.
|
// If we already defined this type, we don't need to define it again.
|
||||||
@ -599,7 +599,7 @@ CppWriter::printTypes(const Module* M) {
|
|||||||
|
|
||||||
// For primitive types and types already defined, just add a name
|
// For primitive types and types already defined, just add a name
|
||||||
TypeMap::const_iterator TNI = TypeNames.find(TI->second);
|
TypeMap::const_iterator TNI = TypeNames.find(TI->second);
|
||||||
if (TI->second->isIntegral() || TI->second->isPrimitiveType() ||
|
if (TI->second->isInteger() || TI->second->isPrimitiveType() ||
|
||||||
TNI != TypeNames.end()) {
|
TNI != TypeNames.end()) {
|
||||||
Out << "mod->addTypeName(\"";
|
Out << "mod->addTypeName(\"";
|
||||||
printEscapedString(TI->first);
|
printEscapedString(TI->first);
|
||||||
|
Loading…
Reference in New Issue
Block a user