// happen for values in the range of 0 to 127.
//
static ConstantInt *getUnsignedConstant(uint64_t V, const Type *Ty) {
- if (Ty->isPointerType()) Ty = Type::ULongTy;
+ if (isa<PointerType>(Ty)) Ty = Type::ULongTy;
if (Ty->isSigned()) {
// If this value is not a valid unsigned value for this type, return null!
if (V > 127 && ((int64_t)V < 0 ||
case Instruction::Cast: {
ExprType Src(ClassifyExpression(I->getOperand(0)));
const Type *DestTy = I->getType();
- if (DestTy->isPointerType())
+ if (isa<PointerType>(DestTy))
DestTy = Type::ULongTy; // Pointer types are represented as ulong
/*
for (const_inst_iterator I = inst_begin(M), E = inst_end(M); I != E; ++I) {
const Instruction *Inst = *I;
const Type *ITy = Inst->getType();
- if (ITy->isPointerType() && !UnsafeTypes.count((PointerType*)ITy))
+ if (isa<PointerType>(ITy) && !UnsafeTypes.count((PointerType*)ITy))
if (!isSafeInstruction(Inst)) {
UnsafeTypes.insert((PointerType*)ITy);
// Okay, we have found an induction variable. Save the start and step values
const Type *ETy = Phi->getType();
- if (ETy->isPointerType()) ETy = Type::ULongTy;
+ if (isa<PointerType>(ETy)) ETy = Type::ULongTy;
Start = (Value*)(E1.Offset ? E1.Offset : ConstantInt::get(ETy, 0));
Step = (Value*)(E2.Offset ? E2.Offset : ConstantInt::get(ETy, 0));
StepE.Var != Phi) return;
const Type *ETy = Phi->getType();
- if (ETy->isPointerType()) ETy = Type::ULongTy;
+ if (isa<PointerType>(ETy)) ETy = Type::ULongTy;
Step = (Value*)(StepE.Offset ? StepE.Offset : ConstantInt::get(ETy, 0));
} else { // We were able to get a step value, simplify with expr analysis
ExprType StepE = analysis::ClassifyExpression(Step);
else
Step = Constant::getNullValue(Step->getType());
const Type *ETy = Phi->getType();
- if (ETy->isPointerType()) ETy = Type::ULongTy;
+ if (isa<PointerType>(ETy)) ETy = Type::ULongTy;
Step = (Value*)(StepE.Offset ? StepE.Offset : ConstantInt::get(ETy,0));
}
}
return ConstantFP::get(Ty, D.ConstPoolFP);
case ValID::ConstNullVal: // Is it a null value?
- if (!Ty->isPointerType())
+ if (!isa<PointerType>(Ty))
ThrowException("Cannot create a a non pointer null!");
return ConstantPointerNull::get(cast<PointerType>(Ty));
delete $2;
}
| FREE ResolvedVal {
- if (!$2->getType()->isPointerType())
+ if (!isa<PointerType>($2->getType()))
ThrowException("Trying to free nonpointer type " +
$2->getType()->getDescription() + "!");
$$ = new FreeInst($2);
}
| LOAD Types ValueRef IndexList {
- if (!(*$2)->isPointerType())
+ if (!isa<PointerType>(*$2))
ThrowException("Can't load from nonpointer type: " +
(*$2)->getDescription());
if (LoadInst::getIndexedType(*$2, *$4) == 0)
delete $2;
}
| STORE ResolvedVal ',' Types ValueRef IndexList {
- if (!(*$4)->isPointerType())
+ if (!isa<PointerType>(*$4))
ThrowException("Can't store to a nonpointer type: " +
(*$4)->getDescription());
const Type *ElTy = StoreInst::getIndexedType(*$4, *$6);
delete $4; delete $6;
}
| GETELEMENTPTR Types ValueRef IndexList {
- if (!(*$2)->isPointerType())
+ if (!isa<PointerType>(*$2))
ThrowException("getelementptr insn requires pointer operand!");
if (!GetElementPtrInst::getIndexedType(*$2, *$4, true))
ThrowException("Can't get element ptr '" + (*$2)->getDescription()+ "'!");
case Instruction::Free:
V = getValue(Raw.Ty, Raw.Arg1);
- if (!V->getType()->isPointerType()) return failure(true);
+ if (!isa<PointerType>(V->getType())) return failure(true);
Res = new FreeInst(V);
return false;
// VarType Fields: bit0 = isConstant, bit1 = hasInitializer,
// bit2 = isInternal, bit3+ = slot#
const Type *Ty = getType(VarType >> 3);
- if (!Ty || !Ty->isPointerType()) {
+ if (!Ty || !isa<PointerType>(Ty)) {
Error = "Global not pointer type! Ty = " + Ty->getDescription();
return failure(true);
}
break;
case Instruction::Store:
Ty = I->getOperand(1)->getType(); // Encode the pointer type...
- assert(Ty->isPointerType() && "Store to nonpointer type!?!?");
+ assert(isa<PointerType>(Ty) && "Store to nonpointer type!?!?");
break;
default: // Otherwise use the default behavior...
Ty = NumOperands ? I->getOperand(0)->getType() : I->getType();
// Otherwise it needs to be an integer or a NULL pointer
if (! CPV->getType()->isIntegral() &&
- ! (CPV->getType()->isPointerType() &&
+ ! (isa<PointerType>(CPV->getType()) &&
CPV->isNullValue()))
return opType;
// unsigned constants to signed).
//
int64_t intValue;
- if (CPV->getType()->isPointerType())
+ if (isa<PointerType>(CPV->getType()))
{
intValue = 0;
}
// Otherwise it needs to be an integer or a NULL pointer
if (! CPV->getType()->isIntegral() &&
- ! (CPV->getType()->isPointerType() &&
+ ! (isa<PointerType>(CPV->getType()) &&
CPV->isNullValue()))
return opType;
// unsigned constants to signed).
//
int64_t intValue;
- if (CPV->getType()->isPointerType())
+ if (isa<PointerType>(CPV->getType()))
{
intValue = 0;
}
std::vector<TmpInstruction*>& tempVec,
TargetMachine& target) const
{
- assert((val->getType()->isIntegral() || val->getType()->isPointerType())
+ assert((val->getType()->isIntegral() || isa<PointerType>(val->getType()))
&& "Source type must be integral");
- assert((dest->getType() == Type::FloatTy || dest->getType() == Type::DoubleTy)
+ assert(dest->getType()->isFloatingPoint()
&& "Dest type must be float/double");
MachineCodeForMethod& mcinfo = MachineCodeForMethod::get(F);
std::vector<TmpInstruction*>& tempVec,
TargetMachine& target) const
{
- assert((val->getType() ==Type::FloatTy || val->getType() ==Type::DoubleTy)
+ assert(val->getType()->isFloatingPoint()
&& "Source type must be float/double");
- assert((dest->getType()->isIntegral() || dest->getType()->isPointerType())
+ assert((dest->getType()->isIntegral() || isa<PointerType>(dest->getType()))
&& "Dest type must be integral");
MachineCodeForMethod& mcinfo = MachineCodeForMethod::get(F);
BinaryOperator* setCCInstr = (BinaryOperator*) setCCNode->getInstruction();
const Type* setCCType = setCCInstr->getOperand(0)->getType();
- isFPBranch = (setCCType == Type::FloatTy || setCCType == Type::DoubleTy);
-
- if (isFPBranch)
+ if (setCCType->isFloatingPoint())
return ChooseBFpccInstruction(instrNode, setCCInstr);
else
return ChooseBpccInstruction(instrNode, setCCInstr);
//
const Type* resultType = instrNode->getInstruction()->getType();
- if (resultType == Type::FloatTy ||
- resultType == Type::DoubleTy)
- {
- double dval = cast<ConstantFP>(constOp)->getValue();
+ if (ConstantFP *FPC = dyn_cast<ConstantFP>(constOp)) {
+ double dval = FPC->getValue();
if (dval == 0.0)
minstr = CreateMovFloatInstruction(instrNode, resultType);
}
{
MachineOpCode opCode = INVALID_OPCODE;
- if (resultType->isIntegral() ||
- resultType->isPointerType())
+ if (resultType->isIntegral() || isa<PointerType>(resultType))
{
opCode = SUB;
}
//
const Type* resultType = instrNode->getInstruction()->getType();
- if (resultType == Type::FloatTy ||
- resultType == Type::DoubleTy)
- {
- double dval = cast<ConstantFP>(constOp)->getValue();
- if (dval == 0.0)
- minstr = CreateMovFloatInstruction(instrNode, resultType);
- }
+ if (ConstantFP *FPC = dyn_cast<ConstantFP>(constOp)) {
+ double dval = FPC->getValue();
+ if (dval == 0.0)
+ minstr = CreateMovFloatInstruction(instrNode, resultType);
+ }
return minstr;
}
//
const Type* resultType = destVal->getType();
- if (resultType->isIntegral() || resultType->isPointerType())
+ if (resultType->isIntegral() || isa<PointerType>(resultType))
{
unsigned pow;
bool isValidConst;
}
else
{
- if (resultType == Type::FloatTy ||
- resultType == Type::DoubleTy)
+ if (ConstantFP *FPC = dyn_cast<ConstantFP>(constOp))
{
- double dval = cast<ConstantFP>(constOp)->getValue();
+ double dval = FPC->getValue();
if (fabs(dval) == 1)
{
bool needNeg = (dval < 0);
}
else
{
- if (resultType == Type::FloatTy ||
- resultType == Type::DoubleTy)
+ if (ConstantFP *FPC = dyn_cast<ConstantFP>(constOp))
{
- double dval = cast<ConstantFP>(constOp)->getValue();
+ double dval = FPC->getValue();
if (fabs(dval) == 1)
{
bool needNeg = (dval < 0);
// This is a real structure reference if the ptr target is a
// structure type, and the first offset is [0] (eliminate that offset).
- if (firstIndexIsZero && ptrType->getElementType()->isStructType())
+ if (firstIndexIsZero && isa<StructType>(ptrType->getElementType()))
{
// Compute the offset value using the index vector. Create a
// virtual reg. for it since it may not fit in the immed field.
bool isValidConst;
if ((constVal->getType()->isIntegral()
- || constVal->getType()->isPointerType())
+ || isa<PointerType>(constVal->getType()))
&& GetConstantValueAsSignedInt(constVal, isValidConst) == 0
&& isValidConst)
{
case 22: // reg: ToBoolTy(reg):
{
const Type* opType = subtreeRoot->leftChild()->getValue()->getType();
- assert(opType->isIntegral() || opType->isPointerType()
+ assert(opType->isIntegral() || isa<PointerType>(opType)
|| opType == Type::BoolTy);
forwardOperandNum = 0; // forward first operand to user
break;
{
const Type* opType = subtreeRoot->leftChild()->getValue()->getType();
assert(opType->isIntegral() ||
- opType->isPointerType() ||
+ isa<PointerType>(opType) ||
opType == Type::BoolTy && "Cast is illegal for other types");
forwardOperandNum = 0; // forward first operand to user
break;
{
const Type* opType = subtreeRoot->leftChild()->getValue()->getType();
if (opType->isIntegral()
- || opType->isPointerType()
+ || isa<PointerType>(opType)
|| opType == Type::BoolTy)
{
forwardOperandNum = 0; // forward first operand to user
Value* destForCast;
vector<MachineInstr*> minstrVec;
- if (opType == Type::FloatTy || opType == Type::DoubleTy)
+ if (opType->isFloatingPoint())
{
// Create a temporary to represent the INT register
// into which the FP value will be copied via memory.
Instruction *dest = subtreeRoot->getInstruction();
Value* srcForCast;
int n = 0;
- if (opType != Type::FloatTy && opType != Type::DoubleTy)
+ if (opType->isFloatingPoint())
{
// Create a temporary to represent the FP register
// into which the integer will be copied via memory.
// a FP condition code register.
//
Value* leftVal = subtreeRoot->leftChild()->getValue();
- bool isFPCompare = (leftVal->getType() == Type::FloatTy ||
- leftVal->getType() == Type::DoubleTy);
+ bool isFPCompare = leftVal->getType()->isFloatingPoint();
TmpInstruction* tmpForCC = GetTmpForCC(setCCInstr,
setCCInstr->getParent()->getParent(),
- isFPCompare? Type::FloatTy : Type::IntTy);
+ isFPCompare ? Type::FloatTy : Type::IntTy);
MachineCodeForInstruction::get(setCCInstr).addTemp(tmpForCC);
if (! isFPCompare)
case 62: // reg: Shl(reg, reg)
{ const Type* opType = subtreeRoot->leftChild()->getValue()->getType();
assert(opType->isIntegral()
- || opType == Type::BoolTy
- || opType->isPointerType()&& "Shl unsupported for other types");
+ || isa<PointerType>(opType)&& "Shl unsupported for other types");
mvec.push_back(new MachineInstr((opType == Type::LongTy)? SLLX : SLL));
Set3OperandsFromInstr(mvec.back(), subtreeRoot, target);
break;
case 63: // reg: Shr(reg, reg)
{ const Type* opType = subtreeRoot->leftChild()->getValue()->getType();
assert(opType->isIntegral()
- || opType == Type::BoolTy
- || opType->isPointerType() &&"Shr unsupported for other types");
+ || isa<PointerType>(opType) &&"Shr unsupported for other types");
mvec.push_back(new MachineInstr((opType->isSigned()
? ((opType == Type::LongTy)? SRAX : SRA)
: ((opType == Type::LongTy)? SRLX : SRL))));
void *D) {
const TargetData &TD = *(const TargetData*)D;
assert(AID == TD.AID && "Target data annotation ID mismatch!");
- const Type *Ty = cast<const Type>((const Value *)T);
- assert(Ty->isStructType() &&
+ const Type *Ty = cast<Type>((const Value *)T);
+ assert(isa<StructType>(Ty) &&
"Can only create StructLayout annotation on structs!");
- return new StructLayout((const StructType *)Ty, TD);
+ return new StructLayout(cast<StructType>(Ty), TD);
}
//===----------------------------------------------------------------------===//
AllocationInst::AllocationInst(const Type *Ty, Value *ArraySize, unsigned iTy,
const std::string &Name = "")
: Instruction(Ty, iTy, Name) {
- assert(Ty->isPointerType() && "Can't allocate a non pointer type!");
+ assert(isa<PointerType>(Ty) && "Can't allocate a non pointer type!");
// ArraySize defaults to 1.
if (!ArraySize) ArraySize = ConstantUInt::get(Type::UIntTy, 1);
const Type* MemAccessInst::getIndexedType(const Type *Ptr,
const std::vector<Value*> &Idx,
bool AllowCompositeLeaf = false) {
- if (!Ptr->isPointerType()) return 0; // Type isn't a pointer type!
+ if (!isa<PointerType>(Ptr)) return 0; // Type isn't a pointer type!
// Handle the special case of the empty set index set...
if (Idx.empty()) return cast<PointerType>(Ptr)->getElementType();
//===----------------------------------------------------------------------===//
FreeInst::FreeInst(Value *Ptr) : Instruction(Type::VoidTy, Free, "") {
- assert(Ptr->getType()->isPointerType() && "Can't free nonpointer!");
+ assert(isa<PointerType>(Ptr->getType()) && "Can't free nonpointer!");
Operands.reserve(1);
Operands.push_back(Use(Ptr, this));
}