mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-23 19:59:57 +00:00
There are two ways of checking for a given type, for example isa<PointerType>(T)
and T->isPointerTy(). Convert most instances of the first form to the second form. Requested by Chris. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96344 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
30fb00aac0
commit
1df9859c40
@ -591,7 +591,7 @@ public:
|
||||
"Both operands to ICmp instruction are not of the same type!");
|
||||
// Check that the operands are the right type
|
||||
assert((getOperand(0)->getType()->isIntOrIntVectorTy() ||
|
||||
isa<PointerType>(getOperand(0)->getType())) &&
|
||||
getOperand(0)->getType()->isPointerTy()) &&
|
||||
"Invalid operand types for ICmp instruction");
|
||||
}
|
||||
|
||||
@ -612,7 +612,7 @@ public:
|
||||
"Both operands to ICmp instruction are not of the same type!");
|
||||
// Check that the operands are the right type
|
||||
assert((getOperand(0)->getType()->isIntOrIntVectorTy() ||
|
||||
isa<PointerType>(getOperand(0)->getType())) &&
|
||||
getOperand(0)->getType()->isPointerTy()) &&
|
||||
"Invalid operand types for ICmp instruction");
|
||||
}
|
||||
|
||||
@ -631,7 +631,7 @@ public:
|
||||
"Both operands to ICmp instruction are not of the same type!");
|
||||
// Check that the operands are the right type
|
||||
assert((getOperand(0)->getType()->isIntOrIntVectorTy() ||
|
||||
isa<PointerType>(getOperand(0)->getType())) &&
|
||||
getOperand(0)->getType()->isPointerTy()) &&
|
||||
"Invalid operand types for ICmp instruction");
|
||||
}
|
||||
|
||||
|
@ -243,6 +243,10 @@ public:
|
||||
///
|
||||
bool isStructTy() const { return ID == StructTyID; }
|
||||
|
||||
/// isUnionTy - True if this is an instance of UnionType.
|
||||
///
|
||||
bool isUnionTy() const { return ID == UnionTyID; }
|
||||
|
||||
/// isArrayTy - True if this is an instance of ArrayType.
|
||||
///
|
||||
bool isArrayTy() const { return ID == ArrayTyID; }
|
||||
|
@ -115,11 +115,11 @@ bool AAEval::runOnFunction(Function &F) {
|
||||
SetVector<CallSite> CallSites;
|
||||
|
||||
for (Function::arg_iterator I = F.arg_begin(), E = F.arg_end(); I != E; ++I)
|
||||
if (isa<PointerType>(I->getType())) // Add all pointer arguments
|
||||
if (I->getType()->isPointerTy()) // Add all pointer arguments
|
||||
Pointers.insert(I);
|
||||
|
||||
for (inst_iterator I = inst_begin(F), E = inst_end(F); I != E; ++I) {
|
||||
if (isa<PointerType>(I->getType())) // Add all pointer instructions
|
||||
if (I->getType()->isPointerTy()) // Add all pointer instructions
|
||||
Pointers.insert(&*I);
|
||||
Instruction &Inst = *I;
|
||||
User::op_iterator OI = Inst.op_begin();
|
||||
@ -128,7 +128,7 @@ bool AAEval::runOnFunction(Function &F) {
|
||||
isa<Function>(CS.getCalledValue()))
|
||||
++OI; // Skip actual functions for direct function calls.
|
||||
for (; OI != Inst.op_end(); ++OI)
|
||||
if (isa<PointerType>((*OI)->getType()) && !isa<ConstantPointerNull>(*OI))
|
||||
if ((*OI)->getType()->isPointerTy() && !isa<ConstantPointerNull>(*OI))
|
||||
Pointers.insert(*OI);
|
||||
|
||||
if (CS.getInstruction()) CallSites.insert(CS);
|
||||
|
@ -290,7 +290,7 @@ BasicAliasAnalysis::getModRefInfo(CallSite CS, Value *P, unsigned Size) {
|
||||
for (CallSite::arg_iterator CI = CS.arg_begin(), CE = CS.arg_end();
|
||||
CI != CE; ++CI, ++ArgNo) {
|
||||
// Only look at the no-capture pointer arguments.
|
||||
if (!isa<PointerType>((*CI)->getType()) ||
|
||||
if (!(*CI)->getType()->isPointerTy() ||
|
||||
!CS.paramHasAttr(ArgNo+1, Attribute::NoCapture))
|
||||
continue;
|
||||
|
||||
@ -662,7 +662,7 @@ BasicAliasAnalysis::aliasCheck(const Value *V1, unsigned V1Size,
|
||||
// Are we checking for alias of the same value?
|
||||
if (V1 == V2) return MustAlias;
|
||||
|
||||
if (!isa<PointerType>(V1->getType()) || !isa<PointerType>(V2->getType()))
|
||||
if (!V1->getType()->isPointerTy() || !V2->getType()->isPointerTy())
|
||||
return NoAlias; // Scalars cannot alias each other
|
||||
|
||||
// Figure out what objects these things are pointing to if we can.
|
||||
|
@ -44,7 +44,7 @@ static int const Threshold = 20;
|
||||
/// counts as capturing it or not.
|
||||
bool llvm::PointerMayBeCaptured(const Value *V,
|
||||
bool ReturnCaptures, bool StoreCaptures) {
|
||||
assert(isa<PointerType>(V->getType()) && "Capture is for pointers only!");
|
||||
assert(V->getType()->isPointerTy() && "Capture is for pointers only!");
|
||||
SmallVector<Use*, Threshold> Worklist;
|
||||
SmallSet<Use*, Threshold> Visited;
|
||||
int Count = 0;
|
||||
|
@ -359,7 +359,7 @@ static Constant *FoldReinterpretLoadFromConstPtr(Constant *C,
|
||||
MapTy = Type::getInt32PtrTy(C->getContext());
|
||||
else if (LoadTy->isDoubleTy())
|
||||
MapTy = Type::getInt64PtrTy(C->getContext());
|
||||
else if (isa<VectorType>(LoadTy)) {
|
||||
else if (LoadTy->isVectorTy()) {
|
||||
MapTy = IntegerType::get(C->getContext(),
|
||||
TD.getTypeAllocSizeInBits(LoadTy));
|
||||
MapTy = PointerType::getUnqual(MapTy);
|
||||
@ -605,7 +605,7 @@ static Constant *SymbolicallyEvaluateGEP(Constant *const *Ops, unsigned NumOps,
|
||||
SmallVector<Constant*, 32> NewIdxs;
|
||||
do {
|
||||
if (const SequentialType *ATy = dyn_cast<SequentialType>(Ty)) {
|
||||
if (isa<PointerType>(ATy)) {
|
||||
if (ATy->isPointerTy()) {
|
||||
// The only pointer indexing we'll do is on the first index of the GEP.
|
||||
if (!NewIdxs.empty())
|
||||
break;
|
||||
|
@ -750,7 +750,7 @@ void Andersens::IdentifyObjects(Module &M) {
|
||||
// The function itself is a memory object.
|
||||
unsigned First = NumObjects;
|
||||
ValueNodes[F] = NumObjects++;
|
||||
if (isa<PointerType>(F->getFunctionType()->getReturnType()))
|
||||
if (F->getFunctionType()->getReturnType()->isPointerTy())
|
||||
ReturnNodes[F] = NumObjects++;
|
||||
if (F->getFunctionType()->isVarArg())
|
||||
VarargNodes[F] = NumObjects++;
|
||||
@ -760,7 +760,7 @@ void Andersens::IdentifyObjects(Module &M) {
|
||||
for (Function::arg_iterator I = F->arg_begin(), E = F->arg_end();
|
||||
I != E; ++I)
|
||||
{
|
||||
if (isa<PointerType>(I->getType()))
|
||||
if (I->getType()->isPointerTy())
|
||||
ValueNodes[I] = NumObjects++;
|
||||
}
|
||||
MaxK[First] = NumObjects - First;
|
||||
@ -771,7 +771,7 @@ void Andersens::IdentifyObjects(Module &M) {
|
||||
for (inst_iterator II = inst_begin(F), E = inst_end(F); II != E; ++II) {
|
||||
// If this is an heap or stack allocation, create a node for the memory
|
||||
// object.
|
||||
if (isa<PointerType>(II->getType())) {
|
||||
if (II->getType()->isPointerTy()) {
|
||||
ValueNodes[&*II] = NumObjects++;
|
||||
if (AllocaInst *AI = dyn_cast<AllocaInst>(&*II))
|
||||
ObjectNodes[AI] = NumObjects++;
|
||||
@ -801,7 +801,7 @@ void Andersens::IdentifyObjects(Module &M) {
|
||||
/// getNodeForConstantPointer - Return the node corresponding to the constant
|
||||
/// pointer itself.
|
||||
unsigned Andersens::getNodeForConstantPointer(Constant *C) {
|
||||
assert(isa<PointerType>(C->getType()) && "Not a constant pointer!");
|
||||
assert(C->getType()->isPointerTy() && "Not a constant pointer!");
|
||||
|
||||
if (isa<ConstantPointerNull>(C) || isa<UndefValue>(C))
|
||||
return NullPtr;
|
||||
@ -828,7 +828,7 @@ unsigned Andersens::getNodeForConstantPointer(Constant *C) {
|
||||
/// getNodeForConstantPointerTarget - Return the node POINTED TO by the
|
||||
/// specified constant pointer.
|
||||
unsigned Andersens::getNodeForConstantPointerTarget(Constant *C) {
|
||||
assert(isa<PointerType>(C->getType()) && "Not a constant pointer!");
|
||||
assert(C->getType()->isPointerTy() && "Not a constant pointer!");
|
||||
|
||||
if (isa<ConstantPointerNull>(C))
|
||||
return NullObject;
|
||||
@ -857,7 +857,7 @@ unsigned Andersens::getNodeForConstantPointerTarget(Constant *C) {
|
||||
void Andersens::AddGlobalInitializerConstraints(unsigned NodeIndex,
|
||||
Constant *C) {
|
||||
if (C->getType()->isSingleValueType()) {
|
||||
if (isa<PointerType>(C->getType()))
|
||||
if (C->getType()->isPointerTy())
|
||||
Constraints.push_back(Constraint(Constraint::Copy, NodeIndex,
|
||||
getNodeForConstantPointer(C)));
|
||||
} else if (C->isNullValue()) {
|
||||
@ -878,7 +878,7 @@ void Andersens::AddGlobalInitializerConstraints(unsigned NodeIndex,
|
||||
/// returned by this function.
|
||||
void Andersens::AddConstraintsForNonInternalLinkage(Function *F) {
|
||||
for (Function::arg_iterator I = F->arg_begin(), E = F->arg_end(); I != E; ++I)
|
||||
if (isa<PointerType>(I->getType()))
|
||||
if (I->getType()->isPointerTy())
|
||||
// If this is an argument of an externally accessible function, the
|
||||
// incoming pointer might point to anything.
|
||||
Constraints.push_back(Constraint(Constraint::Copy, getNode(I),
|
||||
@ -940,8 +940,8 @@ bool Andersens::AddConstraintsForExternalCall(CallSite CS, Function *F) {
|
||||
|
||||
const FunctionType *FTy = F->getFunctionType();
|
||||
if (FTy->getNumParams() > 1 &&
|
||||
isa<PointerType>(FTy->getParamType(0)) &&
|
||||
isa<PointerType>(FTy->getParamType(1))) {
|
||||
FTy->getParamType(0)->isPointerTy() &&
|
||||
FTy->getParamType(1)->isPointerTy()) {
|
||||
|
||||
// *Dest = *Src, which requires an artificial graph node to represent the
|
||||
// constraint. It is broken up into *Dest = temp, temp = *Src
|
||||
@ -966,7 +966,7 @@ bool Andersens::AddConstraintsForExternalCall(CallSite CS, Function *F) {
|
||||
F->getName() == "strtok") {
|
||||
const FunctionType *FTy = F->getFunctionType();
|
||||
if (FTy->getNumParams() > 0 &&
|
||||
isa<PointerType>(FTy->getParamType(0))) {
|
||||
FTy->getParamType(0)->isPointerTy()) {
|
||||
Constraints.push_back(Constraint(Constraint::Copy,
|
||||
getNode(CS.getInstruction()),
|
||||
getNode(CS.getArgument(0))));
|
||||
@ -984,7 +984,7 @@ bool Andersens::AddConstraintsForExternalCall(CallSite CS, Function *F) {
|
||||
/// true.
|
||||
bool Andersens::AnalyzeUsesOfFunction(Value *V) {
|
||||
|
||||
if (!isa<PointerType>(V->getType())) return true;
|
||||
if (!V->getType()->isPointerTy()) return true;
|
||||
|
||||
for (Value::use_iterator UI = V->use_begin(), E = V->use_end(); UI != E; ++UI)
|
||||
if (isa<LoadInst>(*UI)) {
|
||||
@ -1063,7 +1063,7 @@ void Andersens::CollectConstraints(Module &M) {
|
||||
|
||||
for (Module::iterator F = M.begin(), E = M.end(); F != E; ++F) {
|
||||
// Set up the return value node.
|
||||
if (isa<PointerType>(F->getFunctionType()->getReturnType()))
|
||||
if (F->getFunctionType()->getReturnType()->isPointerTy())
|
||||
GraphNodes[getReturnNode(F)].setValue(F);
|
||||
if (F->getFunctionType()->isVarArg())
|
||||
GraphNodes[getVarargNode(F)].setValue(F);
|
||||
@ -1071,7 +1071,7 @@ void Andersens::CollectConstraints(Module &M) {
|
||||
// Set up incoming argument nodes.
|
||||
for (Function::arg_iterator I = F->arg_begin(), E = F->arg_end();
|
||||
I != E; ++I)
|
||||
if (isa<PointerType>(I->getType()))
|
||||
if (I->getType()->isPointerTy())
|
||||
getNodeValue(*I);
|
||||
|
||||
// At some point we should just add constraints for the escaping functions
|
||||
@ -1087,7 +1087,7 @@ void Andersens::CollectConstraints(Module &M) {
|
||||
visit(F);
|
||||
} else {
|
||||
// External functions that return pointers return the universal set.
|
||||
if (isa<PointerType>(F->getFunctionType()->getReturnType()))
|
||||
if (F->getFunctionType()->getReturnType()->isPointerTy())
|
||||
Constraints.push_back(Constraint(Constraint::Copy,
|
||||
getReturnNode(F),
|
||||
UniversalSet));
|
||||
@ -1096,7 +1096,7 @@ void Andersens::CollectConstraints(Module &M) {
|
||||
// stored into them.
|
||||
for (Function::arg_iterator I = F->arg_begin(), E = F->arg_end();
|
||||
I != E; ++I)
|
||||
if (isa<PointerType>(I->getType())) {
|
||||
if (I->getType()->isPointerTy()) {
|
||||
// Pointers passed into external functions could have anything stored
|
||||
// through them.
|
||||
Constraints.push_back(Constraint(Constraint::Store, getNode(I),
|
||||
@ -1159,7 +1159,7 @@ void Andersens::visitAlloc(Instruction &I) {
|
||||
}
|
||||
|
||||
void Andersens::visitReturnInst(ReturnInst &RI) {
|
||||
if (RI.getNumOperands() && isa<PointerType>(RI.getOperand(0)->getType()))
|
||||
if (RI.getNumOperands() && RI.getOperand(0)->getType()->isPointerTy())
|
||||
// return V --> <Copy/retval{F}/v>
|
||||
Constraints.push_back(Constraint(Constraint::Copy,
|
||||
getReturnNode(RI.getParent()->getParent()),
|
||||
@ -1167,14 +1167,14 @@ void Andersens::visitReturnInst(ReturnInst &RI) {
|
||||
}
|
||||
|
||||
void Andersens::visitLoadInst(LoadInst &LI) {
|
||||
if (isa<PointerType>(LI.getType()))
|
||||
if (LI.getType()->isPointerTy())
|
||||
// P1 = load P2 --> <Load/P1/P2>
|
||||
Constraints.push_back(Constraint(Constraint::Load, getNodeValue(LI),
|
||||
getNode(LI.getOperand(0))));
|
||||
}
|
||||
|
||||
void Andersens::visitStoreInst(StoreInst &SI) {
|
||||
if (isa<PointerType>(SI.getOperand(0)->getType()))
|
||||
if (SI.getOperand(0)->getType()->isPointerTy())
|
||||
// store P1, P2 --> <Store/P2/P1>
|
||||
Constraints.push_back(Constraint(Constraint::Store,
|
||||
getNode(SI.getOperand(1)),
|
||||
@ -1188,7 +1188,7 @@ void Andersens::visitGetElementPtrInst(GetElementPtrInst &GEP) {
|
||||
}
|
||||
|
||||
void Andersens::visitPHINode(PHINode &PN) {
|
||||
if (isa<PointerType>(PN.getType())) {
|
||||
if (PN.getType()->isPointerTy()) {
|
||||
unsigned PNN = getNodeValue(PN);
|
||||
for (unsigned i = 0, e = PN.getNumIncomingValues(); i != e; ++i)
|
||||
// P1 = phi P2, P3 --> <Copy/P1/P2>, <Copy/P1/P3>, ...
|
||||
@ -1199,8 +1199,8 @@ void Andersens::visitPHINode(PHINode &PN) {
|
||||
|
||||
void Andersens::visitCastInst(CastInst &CI) {
|
||||
Value *Op = CI.getOperand(0);
|
||||
if (isa<PointerType>(CI.getType())) {
|
||||
if (isa<PointerType>(Op->getType())) {
|
||||
if (CI.getType()->isPointerTy()) {
|
||||
if (Op->getType()->isPointerTy()) {
|
||||
// P1 = cast P2 --> <Copy/P1/P2>
|
||||
Constraints.push_back(Constraint(Constraint::Copy, getNodeValue(CI),
|
||||
getNode(CI.getOperand(0))));
|
||||
@ -1213,7 +1213,7 @@ void Andersens::visitCastInst(CastInst &CI) {
|
||||
getNodeValue(CI);
|
||||
#endif
|
||||
}
|
||||
} else if (isa<PointerType>(Op->getType())) {
|
||||
} else if (Op->getType()->isPointerTy()) {
|
||||
// int = cast P1 --> <Copy/Univ/P1>
|
||||
#if 0
|
||||
Constraints.push_back(Constraint(Constraint::Copy,
|
||||
@ -1226,7 +1226,7 @@ void Andersens::visitCastInst(CastInst &CI) {
|
||||
}
|
||||
|
||||
void Andersens::visitSelectInst(SelectInst &SI) {
|
||||
if (isa<PointerType>(SI.getType())) {
|
||||
if (SI.getType()->isPointerTy()) {
|
||||
unsigned SIN = getNodeValue(SI);
|
||||
// P1 = select C, P2, P3 ---> <Copy/P1/P2>, <Copy/P1/P3>
|
||||
Constraints.push_back(Constraint(Constraint::Copy, SIN,
|
||||
@ -1254,9 +1254,9 @@ void Andersens::AddConstraintsForCall(CallSite CS, Function *F) {
|
||||
if (F && F->isDeclaration() && AddConstraintsForExternalCall(CS, F))
|
||||
return;
|
||||
|
||||
if (isa<PointerType>(CS.getType())) {
|
||||
if (CS.getType()->isPointerTy()) {
|
||||
unsigned CSN = getNode(CS.getInstruction());
|
||||
if (!F || isa<PointerType>(F->getFunctionType()->getReturnType())) {
|
||||
if (!F || F->getFunctionType()->getReturnType()->isPointerTy()) {
|
||||
if (IsDeref)
|
||||
Constraints.push_back(Constraint(Constraint::Load, CSN,
|
||||
getNode(CallValue), CallReturnPos));
|
||||
@ -1269,7 +1269,7 @@ void Andersens::AddConstraintsForCall(CallSite CS, Function *F) {
|
||||
Constraints.push_back(Constraint(Constraint::Copy, CSN,
|
||||
UniversalSet));
|
||||
}
|
||||
} else if (F && isa<PointerType>(F->getFunctionType()->getReturnType())) {
|
||||
} else if (F && F->getFunctionType()->getReturnType()->isPointerTy()) {
|
||||
#if FULL_UNIVERSAL
|
||||
Constraints.push_back(Constraint(Constraint::Copy,
|
||||
UniversalSet,
|
||||
@ -1291,7 +1291,7 @@ void Andersens::AddConstraintsForCall(CallSite CS, Function *F) {
|
||||
for (; AI != AE && ArgI != ArgE; ++AI, ++ArgI)
|
||||
{
|
||||
#if !FULL_UNIVERSAL
|
||||
if (external && isa<PointerType>((*ArgI)->getType()))
|
||||
if (external && (*ArgI)->getType()->isPointerTy())
|
||||
{
|
||||
// Add constraint that ArgI can now point to anything due to
|
||||
// escaping, as can everything it points to. The second portion of
|
||||
@ -1301,8 +1301,8 @@ void Andersens::AddConstraintsForCall(CallSite CS, Function *F) {
|
||||
UniversalSet));
|
||||
}
|
||||
#endif
|
||||
if (isa<PointerType>(AI->getType())) {
|
||||
if (isa<PointerType>((*ArgI)->getType())) {
|
||||
if (AI->getType()->isPointerTy()) {
|
||||
if ((*ArgI)->getType()->isPointerTy()) {
|
||||
// Copy the actual argument into the formal argument.
|
||||
Constraints.push_back(Constraint(Constraint::Copy, getNode(AI),
|
||||
getNode(*ArgI)));
|
||||
@ -1310,7 +1310,7 @@ void Andersens::AddConstraintsForCall(CallSite CS, Function *F) {
|
||||
Constraints.push_back(Constraint(Constraint::Copy, getNode(AI),
|
||||
UniversalSet));
|
||||
}
|
||||
} else if (isa<PointerType>((*ArgI)->getType())) {
|
||||
} else if ((*ArgI)->getType()->isPointerTy()) {
|
||||
#if FULL_UNIVERSAL
|
||||
Constraints.push_back(Constraint(Constraint::Copy,
|
||||
UniversalSet,
|
||||
@ -1326,7 +1326,7 @@ void Andersens::AddConstraintsForCall(CallSite CS, Function *F) {
|
||||
//Indirect Call
|
||||
unsigned ArgPos = CallFirstArgPos;
|
||||
for (; ArgI != ArgE; ++ArgI) {
|
||||
if (isa<PointerType>((*ArgI)->getType())) {
|
||||
if ((*ArgI)->getType()->isPointerTy()) {
|
||||
// Copy the actual argument into the formal argument.
|
||||
Constraints.push_back(Constraint(Constraint::Store,
|
||||
getNode(CallValue),
|
||||
@ -1341,14 +1341,14 @@ void Andersens::AddConstraintsForCall(CallSite CS, Function *F) {
|
||||
// Copy all pointers passed through the varargs section to the varargs node.
|
||||
if (F && F->getFunctionType()->isVarArg())
|
||||
for (; ArgI != ArgE; ++ArgI)
|
||||
if (isa<PointerType>((*ArgI)->getType()))
|
||||
if ((*ArgI)->getType()->isPointerTy())
|
||||
Constraints.push_back(Constraint(Constraint::Copy, getVarargNode(F),
|
||||
getNode(*ArgI)));
|
||||
// If more arguments are passed in than we track, just drop them on the floor.
|
||||
}
|
||||
|
||||
void Andersens::visitCallSite(CallSite CS) {
|
||||
if (isa<PointerType>(CS.getType()))
|
||||
if (CS.getType()->isPointerTy())
|
||||
getNodeValue(*CS.getInstruction());
|
||||
|
||||
if (Function *F = CS.getCalledFunction()) {
|
||||
@ -2782,7 +2782,7 @@ void Andersens::PrintNode(const Node *N) const {
|
||||
assert(N->getValue() != 0 && "Never set node label!");
|
||||
Value *V = N->getValue();
|
||||
if (Function *F = dyn_cast<Function>(V)) {
|
||||
if (isa<PointerType>(F->getFunctionType()->getReturnType()) &&
|
||||
if (F->getFunctionType()->getReturnType()->isPointerTy() &&
|
||||
N == &GraphNodes[getReturnNode(F)]) {
|
||||
dbgs() << F->getName() << ":retval";
|
||||
return;
|
||||
|
@ -213,7 +213,7 @@ void GlobalsModRef::AnalyzeGlobals(Module &M) {
|
||||
++NumNonAddrTakenGlobalVars;
|
||||
|
||||
// If this global holds a pointer type, see if it is an indirect global.
|
||||
if (isa<PointerType>(I->getType()->getElementType()) &&
|
||||
if (I->getType()->getElementType()->isPointerTy() &&
|
||||
AnalyzeIndirectGlobalMemory(I))
|
||||
++NumIndirectGlobalVars;
|
||||
}
|
||||
@ -231,7 +231,7 @@ bool GlobalsModRef::AnalyzeUsesOfPointer(Value *V,
|
||||
std::vector<Function*> &Readers,
|
||||
std::vector<Function*> &Writers,
|
||||
GlobalValue *OkayStoreDest) {
|
||||
if (!isa<PointerType>(V->getType())) return true;
|
||||
if (!V->getType()->isPointerTy()) return true;
|
||||
|
||||
for (Value::use_iterator UI = V->use_begin(), E = V->use_end(); UI != E; ++UI)
|
||||
if (LoadInst *LI = dyn_cast<LoadInst>(*UI)) {
|
||||
|
@ -84,7 +84,7 @@ unsigned InlineCostAnalyzer::FunctionInfo::
|
||||
//
|
||||
unsigned InlineCostAnalyzer::FunctionInfo::
|
||||
CountCodeReductionForAlloca(Value *V) {
|
||||
if (!isa<PointerType>(V->getType())) return 0; // Not a pointer
|
||||
if (!V->getType()->isPointerTy()) return 0; // Not a pointer
|
||||
unsigned Reduction = 0;
|
||||
for (Value::use_iterator UI = V->use_begin(), E = V->use_end(); UI != E;++UI){
|
||||
Instruction *I = cast<Instruction>(*UI);
|
||||
@ -175,7 +175,7 @@ void CodeMetrics::analyzeBasicBlock(const BasicBlock *BB) {
|
||||
this->usesDynamicAlloca = true;
|
||||
}
|
||||
|
||||
if (isa<ExtractElementInst>(II) || isa<VectorType>(II->getType()))
|
||||
if (isa<ExtractElementInst>(II) || II->getType()->isVectorTy())
|
||||
++NumVectorInsts;
|
||||
|
||||
if (const CastInst *CI = dyn_cast<CastInst>(II)) {
|
||||
|
@ -580,7 +580,7 @@ MemoryDependenceAnalysis::getNonLocalCallDependency(CallSite QueryCS) {
|
||||
void MemoryDependenceAnalysis::
|
||||
getNonLocalPointerDependency(Value *Pointer, bool isLoad, BasicBlock *FromBB,
|
||||
SmallVectorImpl<NonLocalDepResult> &Result) {
|
||||
assert(isa<PointerType>(Pointer->getType()) &&
|
||||
assert(Pointer->getType()->isPointerTy() &&
|
||||
"Can't get pointer deps of a non-pointer!");
|
||||
Result.clear();
|
||||
|
||||
@ -1009,7 +1009,7 @@ RemoveCachedNonLocalPointerDependencies(ValueIsLoadPair P) {
|
||||
/// in more places that cached info does not necessarily keep.
|
||||
void MemoryDependenceAnalysis::invalidateCachedPointerInfo(Value *Ptr) {
|
||||
// If Ptr isn't really a pointer, just ignore it.
|
||||
if (!isa<PointerType>(Ptr->getType())) return;
|
||||
if (!Ptr->getType()->isPointerTy()) return;
|
||||
// Flush store info for the pointer.
|
||||
RemoveCachedNonLocalPointerDependencies(ValueIsLoadPair(Ptr, false));
|
||||
// Flush load info for the pointer.
|
||||
@ -1050,7 +1050,7 @@ void MemoryDependenceAnalysis::removeInstruction(Instruction *RemInst) {
|
||||
|
||||
// Remove it from both the load info and the store info. The instruction
|
||||
// can't be in either of these maps if it is non-pointer.
|
||||
if (isa<PointerType>(RemInst->getType())) {
|
||||
if (RemInst->getType()->isPointerTy()) {
|
||||
RemoveCachedNonLocalPointerDependencies(ValueIsLoadPair(RemInst, false));
|
||||
RemoveCachedNonLocalPointerDependencies(ValueIsLoadPair(RemInst, true));
|
||||
}
|
||||
|
@ -231,7 +231,7 @@ void PointerTracking::print(raw_ostream &OS, const Module* M) const {
|
||||
// this should be safe for the same reason its safe for SCEV.
|
||||
PointerTracking &PT = *const_cast<PointerTracking*>(this);
|
||||
for (inst_iterator I=inst_begin(*FF), E=inst_end(*FF); I != E; ++I) {
|
||||
if (!isa<PointerType>(I->getType()))
|
||||
if (!I->getType()->isPointerTy())
|
||||
continue;
|
||||
Value *Base;
|
||||
const SCEV *Limit, *Offset;
|
||||
|
@ -214,8 +214,8 @@ bool SCEVCastExpr::properlyDominates(BasicBlock *BB, DominatorTree *DT) const {
|
||||
SCEVTruncateExpr::SCEVTruncateExpr(const FoldingSetNodeID &ID,
|
||||
const SCEV *op, const Type *ty)
|
||||
: SCEVCastExpr(ID, scTruncate, op, ty) {
|
||||
assert((Op->getType()->isIntegerTy() || isa<PointerType>(Op->getType())) &&
|
||||
(Ty->isIntegerTy() || isa<PointerType>(Ty)) &&
|
||||
assert((Op->getType()->isIntegerTy() || Op->getType()->isPointerTy()) &&
|
||||
(Ty->isIntegerTy() || Ty->isPointerTy()) &&
|
||||
"Cannot truncate non-integer value!");
|
||||
}
|
||||
|
||||
@ -226,8 +226,8 @@ void SCEVTruncateExpr::print(raw_ostream &OS) const {
|
||||
SCEVZeroExtendExpr::SCEVZeroExtendExpr(const FoldingSetNodeID &ID,
|
||||
const SCEV *op, const Type *ty)
|
||||
: SCEVCastExpr(ID, scZeroExtend, op, ty) {
|
||||
assert((Op->getType()->isIntegerTy() || isa<PointerType>(Op->getType())) &&
|
||||
(Ty->isIntegerTy() || isa<PointerType>(Ty)) &&
|
||||
assert((Op->getType()->isIntegerTy() || Op->getType()->isPointerTy()) &&
|
||||
(Ty->isIntegerTy() || Ty->isPointerTy()) &&
|
||||
"Cannot zero extend non-integer value!");
|
||||
}
|
||||
|
||||
@ -238,8 +238,8 @@ void SCEVZeroExtendExpr::print(raw_ostream &OS) const {
|
||||
SCEVSignExtendExpr::SCEVSignExtendExpr(const FoldingSetNodeID &ID,
|
||||
const SCEV *op, const Type *ty)
|
||||
: SCEVCastExpr(ID, scSignExtend, op, ty) {
|
||||
assert((Op->getType()->isIntegerTy() || isa<PointerType>(Op->getType())) &&
|
||||
(Ty->isIntegerTy() || isa<PointerType>(Ty)) &&
|
||||
assert((Op->getType()->isIntegerTy() || Op->getType()->isPointerTy()) &&
|
||||
(Ty->isIntegerTy() || Ty->isPointerTy()) &&
|
||||
"Cannot sign extend non-integer value!");
|
||||
}
|
||||
|
||||
@ -416,7 +416,7 @@ bool SCEVUnknown::isOffsetOf(const Type *&CTy, Constant *&FieldNo) const {
|
||||
cast<PointerType>(CE->getOperand(0)->getType())->getElementType();
|
||||
// Ignore vector types here so that ScalarEvolutionExpander doesn't
|
||||
// emit getelementptrs that index into vectors.
|
||||
if (isa<StructType>(Ty) || isa<ArrayType>(Ty)) {
|
||||
if (Ty->isStructTy() || Ty->isArrayTy()) {
|
||||
CTy = Ty;
|
||||
FieldNo = CE->getOperand(2);
|
||||
return true;
|
||||
@ -518,9 +518,9 @@ namespace {
|
||||
|
||||
// Order pointer values after integer values. This helps SCEVExpander
|
||||
// form GEPs.
|
||||
if (isa<PointerType>(LU->getType()) && !isa<PointerType>(RU->getType()))
|
||||
if (LU->getType()->isPointerTy() && !RU->getType()->isPointerTy())
|
||||
return false;
|
||||
if (isa<PointerType>(RU->getType()) && !isa<PointerType>(LU->getType()))
|
||||
if (RU->getType()->isPointerTy() && !LU->getType()->isPointerTy())
|
||||
return true;
|
||||
|
||||
// Compare getValueID values.
|
||||
@ -2308,7 +2308,7 @@ const SCEV *ScalarEvolution::getUnknown(Value *V) {
|
||||
/// has access to target-specific information.
|
||||
bool ScalarEvolution::isSCEVable(const Type *Ty) const {
|
||||
// Integers and pointers are always SCEVable.
|
||||
return Ty->isIntegerTy() || isa<PointerType>(Ty);
|
||||
return Ty->isIntegerTy() || Ty->isPointerTy();
|
||||
}
|
||||
|
||||
/// getTypeSizeInBits - Return the size in bits of the specified type,
|
||||
@ -2326,7 +2326,7 @@ uint64_t ScalarEvolution::getTypeSizeInBits(const Type *Ty) const {
|
||||
|
||||
// The only other support type is pointer. Without TargetData, conservatively
|
||||
// assume pointers are 64-bit.
|
||||
assert(isa<PointerType>(Ty) && "isSCEVable permitted a non-SCEVable type!");
|
||||
assert(Ty->isPointerTy() && "isSCEVable permitted a non-SCEVable type!");
|
||||
return 64;
|
||||
}
|
||||
|
||||
@ -2341,7 +2341,7 @@ const Type *ScalarEvolution::getEffectiveSCEVType(const Type *Ty) const {
|
||||
return Ty;
|
||||
|
||||
// The only other support type is pointer.
|
||||
assert(isa<PointerType>(Ty) && "Unexpected non-pointer non-integer type!");
|
||||
assert(Ty->isPointerTy() && "Unexpected non-pointer non-integer type!");
|
||||
if (TD) return TD->getIntPtrType(getContext());
|
||||
|
||||
// Without TargetData, conservatively assume pointers are 64-bit.
|
||||
@ -2412,8 +2412,8 @@ const SCEV *
|
||||
ScalarEvolution::getTruncateOrZeroExtend(const SCEV *V,
|
||||
const Type *Ty) {
|
||||
const Type *SrcTy = V->getType();
|
||||
assert((SrcTy->isIntegerTy() || isa<PointerType>(SrcTy)) &&
|
||||
(Ty->isIntegerTy() || isa<PointerType>(Ty)) &&
|
||||
assert((SrcTy->isIntegerTy() || SrcTy->isPointerTy()) &&
|
||||
(Ty->isIntegerTy() || Ty->isPointerTy()) &&
|
||||
"Cannot truncate or zero extend with non-integer arguments!");
|
||||
if (getTypeSizeInBits(SrcTy) == getTypeSizeInBits(Ty))
|
||||
return V; // No conversion
|
||||
@ -2429,8 +2429,8 @@ const SCEV *
|
||||
ScalarEvolution::getTruncateOrSignExtend(const SCEV *V,
|
||||
const Type *Ty) {
|
||||
const Type *SrcTy = V->getType();
|
||||
assert((SrcTy->isIntegerTy() || isa<PointerType>(SrcTy)) &&
|
||||
(Ty->isIntegerTy() || isa<PointerType>(Ty)) &&
|
||||
assert((SrcTy->isIntegerTy() || SrcTy->isPointerTy()) &&
|
||||
(Ty->isIntegerTy() || Ty->isPointerTy()) &&
|
||||
"Cannot truncate or zero extend with non-integer arguments!");
|
||||
if (getTypeSizeInBits(SrcTy) == getTypeSizeInBits(Ty))
|
||||
return V; // No conversion
|
||||
@ -2445,8 +2445,8 @@ ScalarEvolution::getTruncateOrSignExtend(const SCEV *V,
|
||||
const SCEV *
|
||||
ScalarEvolution::getNoopOrZeroExtend(const SCEV *V, const Type *Ty) {
|
||||
const Type *SrcTy = V->getType();
|
||||
assert((SrcTy->isIntegerTy() || isa<PointerType>(SrcTy)) &&
|
||||
(Ty->isIntegerTy() || isa<PointerType>(Ty)) &&
|
||||
assert((SrcTy->isIntegerTy() || SrcTy->isPointerTy()) &&
|
||||
(Ty->isIntegerTy() || Ty->isPointerTy()) &&
|
||||
"Cannot noop or zero extend with non-integer arguments!");
|
||||
assert(getTypeSizeInBits(SrcTy) <= getTypeSizeInBits(Ty) &&
|
||||
"getNoopOrZeroExtend cannot truncate!");
|
||||
@ -2461,8 +2461,8 @@ ScalarEvolution::getNoopOrZeroExtend(const SCEV *V, const Type *Ty) {
|
||||
const SCEV *
|
||||
ScalarEvolution::getNoopOrSignExtend(const SCEV *V, const Type *Ty) {
|
||||
const Type *SrcTy = V->getType();
|
||||
assert((SrcTy->isIntegerTy() || isa<PointerType>(SrcTy)) &&
|
||||
(Ty->isIntegerTy() || isa<PointerType>(Ty)) &&
|
||||
assert((SrcTy->isIntegerTy() || SrcTy->isPointerTy()) &&
|
||||
(Ty->isIntegerTy() || Ty->isPointerTy()) &&
|
||||
"Cannot noop or sign extend with non-integer arguments!");
|
||||
assert(getTypeSizeInBits(SrcTy) <= getTypeSizeInBits(Ty) &&
|
||||
"getNoopOrSignExtend cannot truncate!");
|
||||
@ -2478,8 +2478,8 @@ ScalarEvolution::getNoopOrSignExtend(const SCEV *V, const Type *Ty) {
|
||||
const SCEV *
|
||||
ScalarEvolution::getNoopOrAnyExtend(const SCEV *V, const Type *Ty) {
|
||||
const Type *SrcTy = V->getType();
|
||||
assert((SrcTy->isIntegerTy() || isa<PointerType>(SrcTy)) &&
|
||||
(Ty->isIntegerTy() || isa<PointerType>(Ty)) &&
|
||||
assert((SrcTy->isIntegerTy() || SrcTy->isPointerTy()) &&
|
||||
(Ty->isIntegerTy() || Ty->isPointerTy()) &&
|
||||
"Cannot noop or any extend with non-integer arguments!");
|
||||
assert(getTypeSizeInBits(SrcTy) <= getTypeSizeInBits(Ty) &&
|
||||
"getNoopOrAnyExtend cannot truncate!");
|
||||
@ -2493,8 +2493,8 @@ ScalarEvolution::getNoopOrAnyExtend(const SCEV *V, const Type *Ty) {
|
||||
const SCEV *
|
||||
ScalarEvolution::getTruncateOrNoop(const SCEV *V, const Type *Ty) {
|
||||
const Type *SrcTy = V->getType();
|
||||
assert((SrcTy->isIntegerTy() || isa<PointerType>(SrcTy)) &&
|
||||
(Ty->isIntegerTy() || isa<PointerType>(Ty)) &&
|
||||
assert((SrcTy->isIntegerTy() || SrcTy->isPointerTy()) &&
|
||||
(Ty->isIntegerTy() || Ty->isPointerTy()) &&
|
||||
"Cannot truncate or noop with non-integer arguments!");
|
||||
assert(getTypeSizeInBits(SrcTy) >= getTypeSizeInBits(Ty) &&
|
||||
"getTruncateOrNoop cannot extend!");
|
||||
|
@ -89,7 +89,7 @@ ScalarEvolutionAliasAnalysis::GetBaseValue(const SCEV *S) {
|
||||
} else if (const SCEVAddExpr *A = dyn_cast<SCEVAddExpr>(S)) {
|
||||
// If there's a pointer operand, it'll be sorted at the end of the list.
|
||||
const SCEV *Last = A->getOperand(A->getNumOperands()-1);
|
||||
if (isa<PointerType>(Last->getType()))
|
||||
if (Last->getType()->isPointerTy())
|
||||
return GetBaseValue(Last);
|
||||
} else if (const SCEVUnknown *U = dyn_cast<SCEVUnknown>(S)) {
|
||||
// This is a leaf node.
|
||||
|
@ -536,7 +536,7 @@ Value *SCEVExpander::visitAddExpr(const SCEVAddExpr *S) {
|
||||
// pointer type, if there is one, or the last operand otherwise.
|
||||
int PIdx = 0;
|
||||
for (; PIdx != NumOperands - 1; ++PIdx)
|
||||
if (isa<PointerType>(S->getOperand(PIdx)->getType())) break;
|
||||
if (S->getOperand(PIdx)->getType()->isPointerTy()) break;
|
||||
|
||||
// Expand code for the operand that we chose.
|
||||
Value *V = expand(S->getOperand(PIdx));
|
||||
@ -702,7 +702,7 @@ SCEVExpander::getAddRecExprPHILiterally(const SCEVAddRecExpr *Normalized,
|
||||
// negative, insert a sub instead of an add for the increment (unless it's a
|
||||
// constant, because subtracts of constants are canonicalized to adds).
|
||||
const SCEV *Step = Normalized->getStepRecurrence(SE);
|
||||
bool isPointer = isa<PointerType>(ExpandTy);
|
||||
bool isPointer = ExpandTy->isPointerTy();
|
||||
bool isNegative = !isPointer && isNonConstantNegative(Step);
|
||||
if (isNegative)
|
||||
Step = SE.getNegativeSCEV(Step);
|
||||
@ -852,7 +852,7 @@ Value *SCEVExpander::visitAddRecExpr(const SCEVAddRecExpr *S) {
|
||||
PHINode *CanonicalIV = 0;
|
||||
if (PHINode *PN = L->getCanonicalInductionVariable())
|
||||
if (SE.isSCEVable(PN->getType()) &&
|
||||
isa<IntegerType>(SE.getEffectiveSCEVType(PN->getType())) &&
|
||||
SE.getEffectiveSCEVType(PN->getType())->isIntegerTy() &&
|
||||
SE.getTypeSizeInBits(PN->getType()) >= SE.getTypeSizeInBits(Ty))
|
||||
CanonicalIV = PN;
|
||||
|
||||
|
@ -49,7 +49,7 @@ void llvm::ComputeMaskedBits(Value *V, const APInt &Mask,
|
||||
assert(V && "No Value?");
|
||||
assert(Depth <= MaxDepth && "Limit Search Depth");
|
||||
unsigned BitWidth = Mask.getBitWidth();
|
||||
assert((V->getType()->isIntOrIntVectorTy() || isa<PointerType>(V->getType()))
|
||||
assert((V->getType()->isIntOrIntVectorTy() || V->getType()->isPointerTy())
|
||||
&& "Not integer or pointer type!");
|
||||
assert((!TD ||
|
||||
TD->getTypeSizeInBits(V->getType()->getScalarType()) == BitWidth) &&
|
||||
@ -249,7 +249,7 @@ void llvm::ComputeMaskedBits(Value *V, const APInt &Mask,
|
||||
unsigned SrcBitWidth;
|
||||
// Note that we handle pointer operands here because of inttoptr/ptrtoint
|
||||
// which fall through here.
|
||||
if (isa<PointerType>(SrcTy))
|
||||
if (SrcTy->isPointerTy())
|
||||
SrcBitWidth = TD->getTypeSizeInBits(SrcTy);
|
||||
else
|
||||
SrcBitWidth = SrcTy->getScalarSizeInBits();
|
||||
@ -269,10 +269,10 @@ void llvm::ComputeMaskedBits(Value *V, const APInt &Mask,
|
||||
}
|
||||
case Instruction::BitCast: {
|
||||
const Type *SrcTy = I->getOperand(0)->getType();
|
||||
if ((SrcTy->isIntegerTy() || isa<PointerType>(SrcTy)) &&
|
||||
if ((SrcTy->isIntegerTy() || SrcTy->isPointerTy()) &&
|
||||
// TODO: For now, not handling conversions like:
|
||||
// (bitcast i64 %x to <2 x i32>)
|
||||
!isa<VectorType>(I->getType())) {
|
||||
!I->getType()->isVectorTy()) {
|
||||
ComputeMaskedBits(I->getOperand(0), Mask, KnownZero, KnownOne, TD,
|
||||
Depth+1);
|
||||
return;
|
||||
@ -980,7 +980,7 @@ bool llvm::CannotBeNegativeZero(const Value *V, unsigned Depth) {
|
||||
/// may not be represented in the result.
|
||||
static Value *GetLinearExpression(Value *V, APInt &Scale, APInt &Offset,
|
||||
const TargetData *TD, unsigned Depth) {
|
||||
assert(isa<IntegerType>(V->getType()) && "Not an integer value");
|
||||
assert(V->getType()->isIntegerTy() && "Not an integer value");
|
||||
|
||||
// Limit our recursion depth.
|
||||
if (Depth == 6) {
|
||||
@ -1253,7 +1253,7 @@ Value *llvm::FindInsertedValue(Value *V, const unsigned *idx_begin,
|
||||
if (idx_begin == idx_end)
|
||||
return V;
|
||||
// We have indices, so V should have an indexable type
|
||||
assert((isa<StructType>(V->getType()) || isa<ArrayType>(V->getType()))
|
||||
assert((V->getType()->isStructTy() || V->getType()->isArrayTy())
|
||||
&& "Not looking at a struct or array?");
|
||||
assert(ExtractValueInst::getIndexedType(V->getType(), idx_begin, idx_end)
|
||||
&& "Invalid indices for type?");
|
||||
|
@ -614,7 +614,7 @@ bool LLParser::ParseAlias(const std::string &Name, LocTy NameLoc,
|
||||
Aliasee = ID.ConstantVal;
|
||||
}
|
||||
|
||||
if (!isa<PointerType>(Aliasee->getType()))
|
||||
if (!Aliasee->getType()->isPointerTy())
|
||||
return Error(AliaseeLoc, "alias must have pointer type");
|
||||
|
||||
// Okay, create the alias but do not insert it into the module yet.
|
||||
@ -685,7 +685,7 @@ bool LLParser::ParseGlobal(const std::string &Name, LocTy NameLoc,
|
||||
return true;
|
||||
}
|
||||
|
||||
if (isa<FunctionType>(Ty) || Ty->isLabelTy())
|
||||
if (Ty->isFunctionTy() || Ty->isLabelTy())
|
||||
return Error(TyLoc, "invalid type for global variable");
|
||||
|
||||
GlobalVariable *GV = 0;
|
||||
@ -2256,7 +2256,7 @@ bool LLParser::ParseValID(ValID &ID, PerFunctionState *PFS) {
|
||||
} else {
|
||||
assert(Opc == Instruction::ICmp && "Unexpected opcode for CmpInst!");
|
||||
if (!Val0->getType()->isIntOrIntVectorTy() &&
|
||||
!isa<PointerType>(Val0->getType()))
|
||||
!Val0->getType()->isPointerTy())
|
||||
return Error(ID.Loc, "icmp requires pointer or integer operands");
|
||||
ID.ConstantVal = ConstantExpr::getICmp(Pred, Val0, Val1);
|
||||
}
|
||||
@ -2370,7 +2370,7 @@ bool LLParser::ParseValID(ValID &ID, PerFunctionState *PFS) {
|
||||
return true;
|
||||
|
||||
if (Opc == Instruction::GetElementPtr) {
|
||||
if (Elts.size() == 0 || !isa<PointerType>(Elts[0]->getType()))
|
||||
if (Elts.size() == 0 || !Elts[0]->getType()->isPointerTy())
|
||||
return Error(ID.Loc, "getelementptr requires pointer operand");
|
||||
|
||||
if (!GetElementPtrInst::getIndexedType(Elts[0]->getType(),
|
||||
@ -2470,7 +2470,7 @@ bool LLParser::ParseGlobalValueVector(SmallVectorImpl<Constant*> &Elts) {
|
||||
|
||||
bool LLParser::ConvertValIDToValue(const Type *Ty, ValID &ID, Value *&V,
|
||||
PerFunctionState *PFS) {
|
||||
if (isa<FunctionType>(Ty))
|
||||
if (Ty->isFunctionTy())
|
||||
return Error(ID.Loc, "functions are not values, refer to them as pointers");
|
||||
|
||||
switch (ID.Kind) {
|
||||
@ -2509,7 +2509,7 @@ bool LLParser::ConvertValIDToValue(const Type *Ty, ValID &ID, Value *&V,
|
||||
V = GetGlobalVal(ID.UIntVal, Ty, ID.Loc);
|
||||
return V == 0;
|
||||
case ValID::t_APSInt:
|
||||
if (!isa<IntegerType>(Ty))
|
||||
if (!Ty->isIntegerTy())
|
||||
return Error(ID.Loc, "integer constant must have integer type");
|
||||
ID.APSIntVal.extOrTrunc(Ty->getPrimitiveSizeInBits());
|
||||
V = ConstantInt::get(Context, ID.APSIntVal);
|
||||
@ -2535,7 +2535,7 @@ bool LLParser::ConvertValIDToValue(const Type *Ty, ValID &ID, Value *&V,
|
||||
|
||||
return false;
|
||||
case ValID::t_Null:
|
||||
if (!isa<PointerType>(Ty))
|
||||
if (!Ty->isPointerTy())
|
||||
return Error(ID.Loc, "null must be a pointer type");
|
||||
V = ConstantPointerNull::get(cast<PointerType>(Ty));
|
||||
return false;
|
||||
@ -2547,7 +2547,7 @@ bool LLParser::ConvertValIDToValue(const Type *Ty, ValID &ID, Value *&V,
|
||||
V = UndefValue::get(Ty);
|
||||
return false;
|
||||
case ValID::t_EmptyArray:
|
||||
if (!isa<ArrayType>(Ty) || cast<ArrayType>(Ty)->getNumElements() != 0)
|
||||
if (!Ty->isArrayTy() || cast<ArrayType>(Ty)->getNumElements() != 0)
|
||||
return Error(ID.Loc, "invalid empty array initializer");
|
||||
V = UndefValue::get(Ty);
|
||||
return false;
|
||||
@ -3186,7 +3186,7 @@ bool LLParser::ParseSwitch(Instruction *&Inst, PerFunctionState &PFS) {
|
||||
ParseToken(lltok::lsquare, "expected '[' with switch table"))
|
||||
return true;
|
||||
|
||||
if (!isa<IntegerType>(Cond->getType()))
|
||||
if (!Cond->getType()->isIntegerTy())
|
||||
return Error(CondLoc, "switch condition must have integer type");
|
||||
|
||||
// Parse the jump table pairs.
|
||||
@ -3229,7 +3229,7 @@ bool LLParser::ParseIndirectBr(Instruction *&Inst, PerFunctionState &PFS) {
|
||||
ParseToken(lltok::lsquare, "expected '[' with indirectbr"))
|
||||
return true;
|
||||
|
||||
if (!isa<PointerType>(Address->getType()))
|
||||
if (!Address->getType()->isPointerTy())
|
||||
return Error(AddrLoc, "indirectbr address must have pointer type");
|
||||
|
||||
// Parse the destination list.
|
||||
@ -3436,7 +3436,7 @@ bool LLParser::ParseCompare(Instruction *&Inst, PerFunctionState &PFS,
|
||||
} else {
|
||||
assert(Opc == Instruction::ICmp && "Unknown opcode for CmpInst!");
|
||||
if (!LHS->getType()->isIntOrIntVectorTy() &&
|
||||
!isa<PointerType>(LHS->getType()))
|
||||
!LHS->getType()->isPointerTy())
|
||||
return Error(Loc, "icmp requires integer operands");
|
||||
Inst = new ICmpInst(CmpInst::Predicate(Pred), LHS, RHS);
|
||||
}
|
||||
@ -3761,7 +3761,7 @@ bool LLParser::ParseFree(Instruction *&Inst, PerFunctionState &PFS,
|
||||
BasicBlock* BB) {
|
||||
Value *Val; LocTy Loc;
|
||||
if (ParseTypeAndValue(Val, Loc, PFS)) return true;
|
||||
if (!isa<PointerType>(Val->getType()))
|
||||
if (!Val->getType()->isPointerTy())
|
||||
return Error(Loc, "operand to free must be a pointer");
|
||||
Inst = CallInst::CreateFree(Val, BB);
|
||||
return false;
|
||||
@ -3778,7 +3778,7 @@ int LLParser::ParseLoad(Instruction *&Inst, PerFunctionState &PFS,
|
||||
ParseOptionalCommaAlign(Alignment, AteExtraComma))
|
||||
return true;
|
||||
|
||||
if (!isa<PointerType>(Val->getType()) ||
|
||||
if (!Val->getType()->isPointerTy() ||
|
||||
!cast<PointerType>(Val->getType())->getElementType()->isFirstClassType())
|
||||
return Error(Loc, "load operand must be a pointer to a first class type");
|
||||
|
||||
@ -3799,7 +3799,7 @@ int LLParser::ParseStore(Instruction *&Inst, PerFunctionState &PFS,
|
||||
ParseOptionalCommaAlign(Alignment, AteExtraComma))
|
||||
return true;
|
||||
|
||||
if (!isa<PointerType>(Ptr->getType()))
|
||||
if (!Ptr->getType()->isPointerTy())
|
||||
return Error(PtrLoc, "store operand must be a pointer");
|
||||
if (!Val->getType()->isFirstClassType())
|
||||
return Error(Loc, "store operand must be a first class value");
|
||||
@ -3821,7 +3821,7 @@ bool LLParser::ParseGetResult(Instruction *&Inst, PerFunctionState &PFS) {
|
||||
ParseUInt32(Element, EltLoc))
|
||||
return true;
|
||||
|
||||
if (!isa<StructType>(Val->getType()) && !isa<ArrayType>(Val->getType()))
|
||||
if (!Val->getType()->isStructTy() && !Val->getType()->isArrayTy())
|
||||
return Error(ValLoc, "getresult inst requires an aggregate operand");
|
||||
if (!ExtractValueInst::getIndexedType(Val->getType(), Element))
|
||||
return Error(EltLoc, "invalid getresult index for value");
|
||||
@ -3838,7 +3838,7 @@ int LLParser::ParseGetElementPtr(Instruction *&Inst, PerFunctionState &PFS) {
|
||||
|
||||
if (ParseTypeAndValue(Ptr, Loc, PFS)) return true;
|
||||
|
||||
if (!isa<PointerType>(Ptr->getType()))
|
||||
if (!Ptr->getType()->isPointerTy())
|
||||
return Error(Loc, "base of getelementptr must be a pointer");
|
||||
|
||||
SmallVector<Value*, 16> Indices;
|
||||
@ -3849,7 +3849,7 @@ int LLParser::ParseGetElementPtr(Instruction *&Inst, PerFunctionState &PFS) {
|
||||
break;
|
||||
}
|
||||
if (ParseTypeAndValue(Val, EltLoc, PFS)) return true;
|
||||
if (!isa<IntegerType>(Val->getType()))
|
||||
if (!Val->getType()->isIntegerTy())
|
||||
return Error(EltLoc, "getelementptr index must be an integer");
|
||||
Indices.push_back(Val);
|
||||
}
|
||||
|
@ -963,12 +963,12 @@ bool BitcodeReader::ParseConstants() {
|
||||
V = Constant::getNullValue(CurTy);
|
||||
break;
|
||||
case bitc::CST_CODE_INTEGER: // INTEGER: [intval]
|
||||
if (!isa<IntegerType>(CurTy) || Record.empty())
|
||||
if (!CurTy->isIntegerTy() || Record.empty())
|
||||
return Error("Invalid CST_INTEGER record");
|
||||
V = ConstantInt::get(CurTy, DecodeSignRotatedValue(Record[0]));
|
||||
break;
|
||||
case bitc::CST_CODE_WIDE_INTEGER: {// WIDE_INTEGER: [n x intval]
|
||||
if (!isa<IntegerType>(CurTy) || Record.empty())
|
||||
if (!CurTy->isIntegerTy() || Record.empty())
|
||||
return Error("Invalid WIDE_INTEGER record");
|
||||
|
||||
unsigned NumWords = Record.size();
|
||||
@ -1407,7 +1407,7 @@ bool BitcodeReader::ParseModule() {
|
||||
if (Record.size() < 6)
|
||||
return Error("Invalid MODULE_CODE_GLOBALVAR record");
|
||||
const Type *Ty = getTypeByID(Record[0]);
|
||||
if (!isa<PointerType>(Ty))
|
||||
if (!Ty->isPointerTy())
|
||||
return Error("Global not a pointer type!");
|
||||
unsigned AddressSpace = cast<PointerType>(Ty)->getAddressSpace();
|
||||
Ty = cast<PointerType>(Ty)->getElementType();
|
||||
@ -1450,7 +1450,7 @@ bool BitcodeReader::ParseModule() {
|
||||
if (Record.size() < 8)
|
||||
return Error("Invalid MODULE_CODE_FUNCTION record");
|
||||
const Type *Ty = getTypeByID(Record[0]);
|
||||
if (!isa<PointerType>(Ty))
|
||||
if (!Ty->isPointerTy())
|
||||
return Error("Function not a pointer type!");
|
||||
const FunctionType *FTy =
|
||||
dyn_cast<FunctionType>(cast<PointerType>(Ty)->getElementType());
|
||||
@ -1491,7 +1491,7 @@ bool BitcodeReader::ParseModule() {
|
||||
if (Record.size() < 3)
|
||||
return Error("Invalid MODULE_ALIAS record");
|
||||
const Type *Ty = getTypeByID(Record[0]);
|
||||
if (!isa<PointerType>(Ty))
|
||||
if (!Ty->isPointerTy())
|
||||
return Error("Function not a pointer type!");
|
||||
|
||||
GlobalAlias *NewGA = new GlobalAlias(Ty, GetDecodedLinkage(Record[2]),
|
||||
@ -1932,7 +1932,7 @@ bool BitcodeReader::ParseFunctionBody(Function *F) {
|
||||
|
||||
const Type *ReturnType = F->getReturnType();
|
||||
if (Vs.size() > 1 ||
|
||||
(isa<StructType>(ReturnType) &&
|
||||
(ReturnType->isStructTy() &&
|
||||
(Vs.empty() || Vs[0]->getType() != ReturnType))) {
|
||||
Value *RV = UndefValue::get(ReturnType);
|
||||
for (unsigned i = 0, e = Vs.size(); i != e; ++i) {
|
||||
|
@ -27,7 +27,7 @@ static bool isSingleValueType(const std::pair<const llvm::Type*,
|
||||
}
|
||||
|
||||
static bool isIntegerValue(const std::pair<const Value*, unsigned> &V) {
|
||||
return isa<IntegerType>(V.first->getType());
|
||||
return V.first->getType()->isIntegerTy();
|
||||
}
|
||||
|
||||
static bool CompareByFrequency(const std::pair<const llvm::Type*,
|
||||
|
@ -72,7 +72,7 @@ static const Value *getUnderlyingObjectFromInt(const Value *V) {
|
||||
} else {
|
||||
return V;
|
||||
}
|
||||
assert(isa<IntegerType>(V->getType()) && "Unexpected operand type!");
|
||||
assert(V->getType()->isIntegerTy() && "Unexpected operand type!");
|
||||
} while (1);
|
||||
}
|
||||
|
||||
@ -87,7 +87,7 @@ static const Value *getUnderlyingObject(const Value *V) {
|
||||
break;
|
||||
const Value *O = getUnderlyingObjectFromInt(cast<User>(V)->getOperand(0));
|
||||
// If that succeeded in finding a pointer, continue the search.
|
||||
if (!isa<PointerType>(O->getType()))
|
||||
if (!O->getType()->isPointerTy())
|
||||
break;
|
||||
V = O;
|
||||
} while (1);
|
||||
|
@ -1345,7 +1345,7 @@ SDValue SelectionDAG::getBlockAddress(BlockAddress *BA, EVT VT,
|
||||
}
|
||||
|
||||
SDValue SelectionDAG::getSrcValue(const Value *V) {
|
||||
assert((!V || isa<PointerType>(V->getType())) &&
|
||||
assert((!V || V->getType()->isPointerTy()) &&
|
||||
"SrcValue is not a pointer?");
|
||||
|
||||
FoldingSetNodeID ID;
|
||||
|
@ -680,7 +680,7 @@ SDValue SelectionDAGBuilder::getValue(const Value *V) {
|
||||
getCurDebugLoc());
|
||||
}
|
||||
|
||||
if (isa<StructType>(C->getType()) || isa<ArrayType>(C->getType())) {
|
||||
if (C->getType()->isStructTy() || C->getType()->isArrayTy()) {
|
||||
assert((isa<ConstantAggregateZero>(C) || isa<UndefValue>(C)) &&
|
||||
"Unknown struct or array constant!");
|
||||
|
||||
@ -2080,7 +2080,7 @@ void SelectionDAGBuilder::visitIndirectBr(IndirectBrInst &I) {
|
||||
void SelectionDAGBuilder::visitFSub(User &I) {
|
||||
// -0.0 - X --> fneg
|
||||
const Type *Ty = I.getType();
|
||||
if (isa<VectorType>(Ty)) {
|
||||
if (Ty->isVectorTy()) {
|
||||
if (ConstantVector *CV = dyn_cast<ConstantVector>(I.getOperand(0))) {
|
||||
const VectorType *DestTy = cast<VectorType>(I.getType());
|
||||
const Type *ElTy = DestTy->getElementType();
|
||||
@ -2117,7 +2117,7 @@ void SelectionDAGBuilder::visitBinary(User &I, unsigned OpCode) {
|
||||
void SelectionDAGBuilder::visitShift(User &I, unsigned Opcode) {
|
||||
SDValue Op1 = getValue(I.getOperand(0));
|
||||
SDValue Op2 = getValue(I.getOperand(1));
|
||||
if (!isa<VectorType>(I.getType()) &&
|
||||
if (!I.getType()->isVectorTy() &&
|
||||
Op2.getValueType() != TLI.getShiftAmountTy()) {
|
||||
// If the operand is smaller than the shift count type, promote it.
|
||||
EVT PTy = TLI.getPointerTy();
|
||||
@ -4287,8 +4287,8 @@ isInTailCallPosition(CallSite CS, Attributes CalleeRetAttr,
|
||||
// Check for a truly no-op bitcast.
|
||||
if (isa<BitCastInst>(U) &&
|
||||
(U->getOperand(0)->getType() == U->getType() ||
|
||||
(isa<PointerType>(U->getOperand(0)->getType()) &&
|
||||
isa<PointerType>(U->getType()))))
|
||||
(U->getOperand(0)->getType()->isPointerTy() &&
|
||||
U->getType()->isPointerTy())))
|
||||
continue;
|
||||
// Otherwise it's not a true no-op.
|
||||
return false;
|
||||
@ -4541,9 +4541,9 @@ bool SelectionDAGBuilder::visitMemCmpCall(CallInst &I) {
|
||||
return false;
|
||||
|
||||
Value *LHS = I.getOperand(1), *RHS = I.getOperand(2);
|
||||
if (!isa<PointerType>(LHS->getType()) || !isa<PointerType>(RHS->getType()) ||
|
||||
!isa<IntegerType>(I.getOperand(3)->getType()) ||
|
||||
!isa<IntegerType>(I.getType()))
|
||||
if (!LHS->getType()->isPointerTy() || !RHS->getType()->isPointerTy() ||
|
||||
!I.getOperand(3)->getType()->isIntegerTy() ||
|
||||
!I.getType()->isIntegerTy())
|
||||
return false;
|
||||
|
||||
ConstantInt *Size = dyn_cast<ConstantInt>(I.getOperand(3));
|
||||
|
@ -344,7 +344,7 @@ int ExecutionEngine::runFunctionAsMain(Function *Fn,
|
||||
}
|
||||
// FALLS THROUGH
|
||||
case 0:
|
||||
if (!isa<IntegerType>(FTy->getReturnType()) &&
|
||||
if (!FTy->getReturnType()->isIntegerTy() &&
|
||||
!FTy->getReturnType()->isVoidTy()) {
|
||||
llvm_report_error("Invalid return type of main() supplied");
|
||||
}
|
||||
@ -614,7 +614,7 @@ GenericValue ExecutionEngine::getConstantValue(const Constant *C) {
|
||||
GV.IntVal.doubleToBits(GV.DoubleVal);
|
||||
break;
|
||||
case Type::PointerTyID:
|
||||
assert(isa<PointerType>(DestTy) && "Invalid bitcast");
|
||||
assert(DestTy->isPointerTy() && "Invalid bitcast");
|
||||
break; // getConstantValue(Op0) above already converted it
|
||||
}
|
||||
return GV;
|
||||
|
@ -761,7 +761,7 @@ void Interpreter::visitAllocaInst(AllocaInst &I) {
|
||||
GenericValue Interpreter::executeGEPOperation(Value *Ptr, gep_type_iterator I,
|
||||
gep_type_iterator E,
|
||||
ExecutionContext &SF) {
|
||||
assert(isa<PointerType>(Ptr->getType()) &&
|
||||
assert(Ptr->getType()->isPointerTy() &&
|
||||
"Cannot getElementOffset of a nonpointer type!");
|
||||
|
||||
uint64_t Total = 0;
|
||||
@ -1031,7 +1031,7 @@ GenericValue Interpreter::executePtrToIntInst(Value *SrcVal, const Type *DstTy,
|
||||
ExecutionContext &SF) {
|
||||
uint32_t DBitWidth = cast<IntegerType>(DstTy)->getBitWidth();
|
||||
GenericValue Dest, Src = getOperandValue(SrcVal, SF);
|
||||
assert(isa<PointerType>(SrcVal->getType()) && "Invalid PtrToInt instruction");
|
||||
assert(SrcVal->getType()->isPointerTy() && "Invalid PtrToInt instruction");
|
||||
|
||||
Dest.IntVal = APInt(DBitWidth, (intptr_t) Src.PointerVal);
|
||||
return Dest;
|
||||
@ -1040,7 +1040,7 @@ GenericValue Interpreter::executePtrToIntInst(Value *SrcVal, const Type *DstTy,
|
||||
GenericValue Interpreter::executeIntToPtrInst(Value *SrcVal, const Type *DstTy,
|
||||
ExecutionContext &SF) {
|
||||
GenericValue Dest, Src = getOperandValue(SrcVal, SF);
|
||||
assert(isa<PointerType>(DstTy) && "Invalid PtrToInt instruction");
|
||||
assert(DstTy->isPointerTy() && "Invalid PtrToInt instruction");
|
||||
|
||||
uint32_t PtrSize = TD.getPointerSizeInBits();
|
||||
if (PtrSize != Src.IntVal.getBitWidth())
|
||||
@ -1055,8 +1055,8 @@ GenericValue Interpreter::executeBitCastInst(Value *SrcVal, const Type *DstTy,
|
||||
|
||||
const Type *SrcTy = SrcVal->getType();
|
||||
GenericValue Dest, Src = getOperandValue(SrcVal, SF);
|
||||
if (isa<PointerType>(DstTy)) {
|
||||
assert(isa<PointerType>(SrcTy) && "Invalid BitCast");
|
||||
if (DstTy->isPointerTy()) {
|
||||
assert(SrcTy->isPointerTy() && "Invalid BitCast");
|
||||
Dest.PointerVal = Src.PointerVal;
|
||||
} else if (DstTy->isIntegerTy()) {
|
||||
if (SrcTy->isFloatTy()) {
|
||||
|
@ -415,8 +415,8 @@ GenericValue JIT::runFunction(Function *F,
|
||||
switch (ArgValues.size()) {
|
||||
case 3:
|
||||
if (FTy->getParamType(0)->isIntegerTy(32) &&
|
||||
isa<PointerType>(FTy->getParamType(1)) &&
|
||||
isa<PointerType>(FTy->getParamType(2))) {
|
||||
FTy->getParamType(1)->isPointerTy() &&
|
||||
FTy->getParamType(2)->isPointerTy()) {
|
||||
int (*PF)(int, char **, const char **) =
|
||||
(int(*)(int, char **, const char **))(intptr_t)FPtr;
|
||||
|
||||
@ -430,7 +430,7 @@ GenericValue JIT::runFunction(Function *F,
|
||||
break;
|
||||
case 2:
|
||||
if (FTy->getParamType(0)->isIntegerTy(32) &&
|
||||
isa<PointerType>(FTy->getParamType(1))) {
|
||||
FTy->getParamType(1)->isPointerTy()) {
|
||||
int (*PF)(int, char **) = (int(*)(int, char **))(intptr_t)FPtr;
|
||||
|
||||
// Call the function.
|
||||
|
@ -385,8 +385,8 @@ bool CBackendNameAllUsedStructsAndMergeFunctions::runOnModule(Module &M) {
|
||||
|
||||
// If this isn't a struct or array type, remove it from our set of types
|
||||
// to name. This simplifies emission later.
|
||||
if (!isa<StructType>(I->second) && !isa<OpaqueType>(I->second) &&
|
||||
!isa<ArrayType>(I->second)) {
|
||||
if (!I->second->isStructTy() && !isa<OpaqueType>(I->second) &&
|
||||
!I->second->isArrayTy()) {
|
||||
TST.remove(I);
|
||||
} else {
|
||||
// If this is not used, remove it from the symbol table.
|
||||
@ -405,7 +405,7 @@ bool CBackendNameAllUsedStructsAndMergeFunctions::runOnModule(Module &M) {
|
||||
unsigned RenameCounter = 0;
|
||||
for (std::set<const Type *>::const_iterator I = UT.begin(), E = UT.end();
|
||||
I != E; ++I)
|
||||
if (isa<StructType>(*I) || isa<ArrayType>(*I)) {
|
||||
if ((*I)->isStructTy() || (*I)->isArrayTy()) {
|
||||
while (M.addTypeName("unnamed"+utostr(RenameCounter), *I))
|
||||
++RenameCounter;
|
||||
Changed = true;
|
||||
@ -470,7 +470,7 @@ void CWriter::printStructReturnPointerFunctionType(formatted_raw_ostream &Out,
|
||||
FunctionInnards << ", ";
|
||||
const Type *ArgTy = *I;
|
||||
if (PAL.paramHasAttr(Idx, Attribute::ByVal)) {
|
||||
assert(isa<PointerType>(ArgTy));
|
||||
assert(ArgTy->isPointerTy());
|
||||
ArgTy = cast<PointerType>(ArgTy)->getElementType();
|
||||
}
|
||||
printType(FunctionInnards, ArgTy,
|
||||
@ -493,7 +493,7 @@ raw_ostream &
|
||||
CWriter::printSimpleType(formatted_raw_ostream &Out, const Type *Ty,
|
||||
bool isSigned,
|
||||
const std::string &NameSoFar) {
|
||||
assert((Ty->isPrimitiveType() || Ty->isIntegerTy() || isa<VectorType>(Ty)) &&
|
||||
assert((Ty->isPrimitiveType() || Ty->isIntegerTy() || Ty->isVectorTy()) &&
|
||||
"Invalid type for printSimpleType");
|
||||
switch (Ty->getTypeID()) {
|
||||
case Type::VoidTyID: return Out << "void " << NameSoFar;
|
||||
@ -540,7 +540,7 @@ CWriter::printSimpleType(formatted_raw_ostream &Out, const Type *Ty,
|
||||
std::ostream &
|
||||
CWriter::printSimpleType(std::ostream &Out, const Type *Ty, bool isSigned,
|
||||
const std::string &NameSoFar) {
|
||||
assert((Ty->isPrimitiveType() || Ty->isIntegerTy() || isa<VectorType>(Ty)) &&
|
||||
assert((Ty->isPrimitiveType() || Ty->isIntegerTy() || Ty->isVectorTy()) &&
|
||||
"Invalid type for printSimpleType");
|
||||
switch (Ty->getTypeID()) {
|
||||
case Type::VoidTyID: return Out << "void " << NameSoFar;
|
||||
@ -591,7 +591,7 @@ raw_ostream &CWriter::printType(formatted_raw_ostream &Out,
|
||||
const Type *Ty,
|
||||
bool isSigned, const std::string &NameSoFar,
|
||||
bool IgnoreName, const AttrListPtr &PAL) {
|
||||
if (Ty->isPrimitiveType() || Ty->isIntegerTy() || isa<VectorType>(Ty)) {
|
||||
if (Ty->isPrimitiveType() || Ty->isIntegerTy() || Ty->isVectorTy()) {
|
||||
printSimpleType(Out, Ty, isSigned, NameSoFar);
|
||||
return Out;
|
||||
}
|
||||
@ -612,7 +612,7 @@ raw_ostream &CWriter::printType(formatted_raw_ostream &Out,
|
||||
E = FTy->param_end(); I != E; ++I) {
|
||||
const Type *ArgTy = *I;
|
||||
if (PAL.paramHasAttr(Idx, Attribute::ByVal)) {
|
||||
assert(isa<PointerType>(ArgTy));
|
||||
assert(ArgTy->isPointerTy());
|
||||
ArgTy = cast<PointerType>(ArgTy)->getElementType();
|
||||
}
|
||||
if (I != FTy->param_begin())
|
||||
@ -653,8 +653,8 @@ raw_ostream &CWriter::printType(formatted_raw_ostream &Out,
|
||||
const PointerType *PTy = cast<PointerType>(Ty);
|
||||
std::string ptrName = "*" + NameSoFar;
|
||||
|
||||
if (isa<ArrayType>(PTy->getElementType()) ||
|
||||
isa<VectorType>(PTy->getElementType()))
|
||||
if (PTy->getElementType()->isArrayTy() ||
|
||||
PTy->getElementType()->isVectorTy())
|
||||
ptrName = "(" + ptrName + ")";
|
||||
|
||||
if (!PAL.isEmpty())
|
||||
@ -694,7 +694,7 @@ raw_ostream &CWriter::printType(formatted_raw_ostream &Out,
|
||||
std::ostream &CWriter::printType(std::ostream &Out, const Type *Ty,
|
||||
bool isSigned, const std::string &NameSoFar,
|
||||
bool IgnoreName, const AttrListPtr &PAL) {
|
||||
if (Ty->isPrimitiveType() || Ty->isIntegerTy() || isa<VectorType>(Ty)) {
|
||||
if (Ty->isPrimitiveType() || Ty->isIntegerTy() || Ty->isVectorTy()) {
|
||||
printSimpleType(Out, Ty, isSigned, NameSoFar);
|
||||
return Out;
|
||||
}
|
||||
@ -715,7 +715,7 @@ std::ostream &CWriter::printType(std::ostream &Out, const Type *Ty,
|
||||
E = FTy->param_end(); I != E; ++I) {
|
||||
const Type *ArgTy = *I;
|
||||
if (PAL.paramHasAttr(Idx, Attribute::ByVal)) {
|
||||
assert(isa<PointerType>(ArgTy));
|
||||
assert(ArgTy->isPointerTy());
|
||||
ArgTy = cast<PointerType>(ArgTy)->getElementType();
|
||||
}
|
||||
if (I != FTy->param_begin())
|
||||
@ -756,8 +756,8 @@ std::ostream &CWriter::printType(std::ostream &Out, const Type *Ty,
|
||||
const PointerType *PTy = cast<PointerType>(Ty);
|
||||
std::string ptrName = "*" + NameSoFar;
|
||||
|
||||
if (isa<ArrayType>(PTy->getElementType()) ||
|
||||
isa<VectorType>(PTy->getElementType()))
|
||||
if (PTy->getElementType()->isArrayTy() ||
|
||||
PTy->getElementType()->isVectorTy())
|
||||
ptrName = "(" + ptrName + ")";
|
||||
|
||||
if (!PAL.isEmpty())
|
||||
@ -1144,7 +1144,7 @@ void CWriter::printConstant(Constant *CPV, bool Static) {
|
||||
Out << "((";
|
||||
printType(Out, CPV->getType()); // sign doesn't matter
|
||||
Out << ")/*UNDEF*/";
|
||||
if (!isa<VectorType>(CPV->getType())) {
|
||||
if (!CPV->getType()->isVectorTy()) {
|
||||
Out << "0)";
|
||||
} else {
|
||||
Out << "{})";
|
||||
@ -1660,7 +1660,7 @@ void CWriter::writeOperandWithCast(Value* Operand, const ICmpInst &Cmp) {
|
||||
|
||||
// If the operand was a pointer, convert to a large integer type.
|
||||
const Type* OpTy = Operand->getType();
|
||||
if (isa<PointerType>(OpTy))
|
||||
if (OpTy->isPointerTy())
|
||||
OpTy = TD->getIntPtrType(Operand->getContext());
|
||||
|
||||
Out << "((";
|
||||
@ -2102,10 +2102,10 @@ bool CWriter::doInitialization(Module &M) {
|
||||
// complete. If the value is an aggregate, print out { 0 }, and let
|
||||
// the compiler figure out the rest of the zeros.
|
||||
Out << " = " ;
|
||||
if (isa<StructType>(I->getInitializer()->getType()) ||
|
||||
isa<VectorType>(I->getInitializer()->getType())) {
|
||||
if (I->getInitializer()->getType()->isStructTy() ||
|
||||
I->getInitializer()->getType()->isVectorTy()) {
|
||||
Out << "{ 0 }";
|
||||
} else if (isa<ArrayType>(I->getInitializer()->getType())) {
|
||||
} else if (I->getInitializer()->getType()->isArrayTy()) {
|
||||
// As with structs and vectors, but with an extra set of braces
|
||||
// because arrays are wrapped in structs.
|
||||
Out << "{ { 0 } }";
|
||||
@ -2274,7 +2274,7 @@ void CWriter::printModuleTypes(const TypeSymbolTable &TST) {
|
||||
//
|
||||
Out << "/* Structure contents */\n";
|
||||
for (I = TST.begin(); I != End; ++I)
|
||||
if (isa<StructType>(I->second) || isa<ArrayType>(I->second))
|
||||
if (I->second->isStructTy() || I->second->isArrayTy())
|
||||
// Only print out used types!
|
||||
printContainedStructs(I->second, StructPrinted);
|
||||
}
|
||||
@ -2287,7 +2287,7 @@ void CWriter::printModuleTypes(const TypeSymbolTable &TST) {
|
||||
void CWriter::printContainedStructs(const Type *Ty,
|
||||
std::set<const Type*> &StructPrinted) {
|
||||
// Don't walk through pointers.
|
||||
if (isa<PointerType>(Ty) || Ty->isPrimitiveType() || Ty->isIntegerTy())
|
||||
if (Ty->isPointerTy() || Ty->isPrimitiveType() || Ty->isIntegerTy())
|
||||
return;
|
||||
|
||||
// Print all contained types first.
|
||||
@ -2295,7 +2295,7 @@ void CWriter::printContainedStructs(const Type *Ty,
|
||||
E = Ty->subtype_end(); I != E; ++I)
|
||||
printContainedStructs(*I, StructPrinted);
|
||||
|
||||
if (isa<StructType>(Ty) || isa<ArrayType>(Ty)) {
|
||||
if (Ty->isStructTy() || Ty->isArrayTy()) {
|
||||
// Check to see if we have already printed this struct.
|
||||
if (StructPrinted.insert(Ty).second) {
|
||||
// Print structure type out.
|
||||
@ -2383,7 +2383,7 @@ void CWriter::printFunctionSignature(const Function *F, bool Prototype) {
|
||||
if (PrintedArg) FunctionInnards << ", ";
|
||||
const Type *ArgTy = *I;
|
||||
if (PAL.paramHasAttr(Idx, Attribute::ByVal)) {
|
||||
assert(isa<PointerType>(ArgTy));
|
||||
assert(ArgTy->isPointerTy());
|
||||
ArgTy = cast<PointerType>(ArgTy)->getElementType();
|
||||
}
|
||||
printType(FunctionInnards, ArgTy,
|
||||
@ -2714,7 +2714,7 @@ void CWriter::visitPHINode(PHINode &I) {
|
||||
|
||||
void CWriter::visitBinaryOperator(Instruction &I) {
|
||||
// binary instructions, shift instructions, setCond instructions.
|
||||
assert(!isa<PointerType>(I.getType()));
|
||||
assert(!I.getType()->isPointerTy());
|
||||
|
||||
// We must cast the results of binary operations which might be promoted.
|
||||
bool needsCast = false;
|
||||
@ -3490,7 +3490,7 @@ void CWriter::printGEPExpression(Value *Ptr, gep_type_iterator I,
|
||||
// exposed, like a global, avoid emitting (&foo)[0], just emit foo instead.
|
||||
if (isAddressExposed(Ptr)) {
|
||||
writeOperandInternal(Ptr, Static);
|
||||
} else if (I != E && isa<StructType>(*I)) {
|
||||
} else if (I != E && (*I)->isStructTy()) {
|
||||
// If we didn't already emit the first operand, see if we can print it as
|
||||
// P->f instead of "P[0].f"
|
||||
writeOperand(Ptr);
|
||||
@ -3505,13 +3505,13 @@ void CWriter::printGEPExpression(Value *Ptr, gep_type_iterator I,
|
||||
}
|
||||
|
||||
for (; I != E; ++I) {
|
||||
if (isa<StructType>(*I)) {
|
||||
if ((*I)->isStructTy()) {
|
||||
Out << ".field" << cast<ConstantInt>(I.getOperand())->getZExtValue();
|
||||
} else if (isa<ArrayType>(*I)) {
|
||||
} else if ((*I)->isArrayTy()) {
|
||||
Out << ".array[";
|
||||
writeOperandWithCast(I.getOperand(), Instruction::GetElementPtr);
|
||||
Out << ']';
|
||||
} else if (!isa<VectorType>(*I)) {
|
||||
} else if (!(*I)->isVectorTy()) {
|
||||
Out << '[';
|
||||
writeOperandWithCast(I.getOperand(), Instruction::GetElementPtr);
|
||||
Out << ']';
|
||||
@ -3669,7 +3669,7 @@ void CWriter::visitInsertValueInst(InsertValueInst &IVI) {
|
||||
i != e; ++i) {
|
||||
const Type *IndexedTy =
|
||||
ExtractValueInst::getIndexedType(IVI.getOperand(0)->getType(), b, i+1);
|
||||
if (isa<ArrayType>(IndexedTy))
|
||||
if (IndexedTy->isArrayTy())
|
||||
Out << ".array[" << *i << "]";
|
||||
else
|
||||
Out << ".field" << *i;
|
||||
@ -3690,7 +3690,7 @@ void CWriter::visitExtractValueInst(ExtractValueInst &EVI) {
|
||||
i != e; ++i) {
|
||||
const Type *IndexedTy =
|
||||
ExtractValueInst::getIndexedType(EVI.getOperand(0)->getType(), b, i+1);
|
||||
if (isa<ArrayType>(IndexedTy))
|
||||
if (IndexedTy->isArrayTy())
|
||||
Out << ".array[" << *i << "]";
|
||||
else
|
||||
Out << ".field" << *i;
|
||||
|
@ -57,7 +57,7 @@ bool MSILModule::runOnModule(Module &M) {
|
||||
TypeSymbolTable& Table = M.getTypeSymbolTable();
|
||||
std::set<const Type *> Types = getAnalysis<FindUsedTypes>().getTypes();
|
||||
for (TypeSymbolTable::iterator I = Table.begin(), E = Table.end(); I!=E; ) {
|
||||
if (!isa<StructType>(I->second) && !isa<OpaqueType>(I->second))
|
||||
if (!I->second->isStructTy() && !isa<OpaqueType>(I->second))
|
||||
Table.remove(I++);
|
||||
else {
|
||||
std::set<const Type *>::iterator T = Types.find(I->second);
|
||||
@ -1459,7 +1459,7 @@ void MSILWriter::printDeclarations(const TypeSymbolTable& ST) {
|
||||
for (std::set<const Type*>::const_iterator
|
||||
UI = UsedTypes->begin(), UE = UsedTypes->end(); UI!=UE; ++UI) {
|
||||
const Type* Ty = *UI;
|
||||
if (isa<ArrayType>(Ty) || isa<VectorType>(Ty) || isa<StructType>(Ty))
|
||||
if (Ty->isArrayTy() || Ty->isVectorTy() || Ty->isStructTy())
|
||||
Name = getTypeName(Ty, false, true);
|
||||
// Type with no need to declare.
|
||||
else continue;
|
||||
|
@ -580,7 +580,7 @@ const IntegerType *TargetData::getIntPtrType(LLVMContext &C) const {
|
||||
uint64_t TargetData::getIndexedOffset(const Type *ptrTy, Value* const* Indices,
|
||||
unsigned NumIndices) const {
|
||||
const Type *Ty = ptrTy;
|
||||
assert(isa<PointerType>(Ty) && "Illegal argument for getIndexedOffset()");
|
||||
assert(Ty->isPointerTy() && "Illegal argument for getIndexedOffset()");
|
||||
uint64_t Result = 0;
|
||||
|
||||
generic_gep_type_iterator<Value* const*>
|
||||
|
@ -124,7 +124,7 @@ CallGraphNode *ArgPromotion::PromoteArguments(CallGraphNode *CGN) {
|
||||
unsigned ArgNo = 0;
|
||||
for (Function::arg_iterator I = F->arg_begin(), E = F->arg_end();
|
||||
I != E; ++I, ++ArgNo)
|
||||
if (isa<PointerType>(I->getType()))
|
||||
if (I->getType()->isPointerTy())
|
||||
PointerArgs.push_back(std::pair<Argument*, unsigned>(I, ArgNo));
|
||||
if (PointerArgs.empty()) return 0;
|
||||
|
||||
@ -673,7 +673,7 @@ CallGraphNode *ArgPromotion::DoPromotion(Function *F,
|
||||
IE = SI->end(); II != IE; ++II) {
|
||||
// Use i32 to index structs, and i64 for others (pointers/arrays).
|
||||
// This satisfies GEP constraints.
|
||||
const Type *IdxTy = (isa<StructType>(ElTy) ?
|
||||
const Type *IdxTy = (ElTy->isStructTy() ?
|
||||
Type::getInt32Ty(F->getContext()) :
|
||||
Type::getInt64Ty(F->getContext()));
|
||||
Ops.push_back(ConstantInt::get(IdxTy, *II));
|
||||
|
@ -796,7 +796,7 @@ bool DAE::RemoveDeadStuffFromFunction(Function *F) {
|
||||
// Replace by null for now.
|
||||
Call->replaceAllUsesWith(Constant::getNullValue(Call->getType()));
|
||||
} else {
|
||||
assert(isa<StructType>(RetTy) &&
|
||||
assert(RetTy->isStructTy() &&
|
||||
"Return type changed, but not into a void. The old return type"
|
||||
" must have been a struct!");
|
||||
Instruction *InsertPt = Call;
|
||||
@ -870,7 +870,7 @@ bool DAE::RemoveDeadStuffFromFunction(Function *F) {
|
||||
if (NFTy->getReturnType() == Type::getVoidTy(F->getContext())) {
|
||||
RetVal = 0;
|
||||
} else {
|
||||
assert (isa<StructType>(RetTy));
|
||||
assert (RetTy->isStructTy());
|
||||
// The original return value was a struct, insert
|
||||
// extractvalue/insertvalue chains to extract only the values we need
|
||||
// to return and insert them into our new result.
|
||||
|
@ -175,7 +175,7 @@ bool FunctionAttrs::AddReadAttrs(const std::vector<CallGraphNode *> &SCC) {
|
||||
for (CallSite::arg_iterator CI = CS.arg_begin(), CE = CS.arg_end();
|
||||
CI != CE; ++CI) {
|
||||
Value *Arg = *CI;
|
||||
if (isa<PointerType>(Arg->getType()) && !PointsToLocalMemory(Arg))
|
||||
if (Arg->getType()->isPointerTy() && !PointsToLocalMemory(Arg))
|
||||
// Writes memory. Just give up.
|
||||
return false;
|
||||
}
|
||||
@ -257,7 +257,7 @@ bool FunctionAttrs::AddNoCaptureAttrs(const std::vector<CallGraphNode *> &SCC) {
|
||||
continue;
|
||||
|
||||
for (Function::arg_iterator A = F->arg_begin(), E = F->arg_end(); A!=E; ++A)
|
||||
if (isa<PointerType>(A->getType()) && !A->hasNoCaptureAttr() &&
|
||||
if (A->getType()->isPointerTy() && !A->hasNoCaptureAttr() &&
|
||||
!PointerMayBeCaptured(A, true, /*StoreCaptures=*/false)) {
|
||||
A->addAttr(Attribute::NoCapture);
|
||||
++NumNoCapture;
|
||||
@ -362,7 +362,7 @@ bool FunctionAttrs::AddNoAliasAttrs(const std::vector<CallGraphNode *> &SCC) {
|
||||
|
||||
// We annotate noalias return values, which are only applicable to
|
||||
// pointer types.
|
||||
if (!isa<PointerType>(F->getReturnType()))
|
||||
if (!F->getReturnType()->isPointerTy())
|
||||
continue;
|
||||
|
||||
if (!IsFunctionMallocLike(F, SCCNodes))
|
||||
@ -372,7 +372,7 @@ bool FunctionAttrs::AddNoAliasAttrs(const std::vector<CallGraphNode *> &SCC) {
|
||||
bool MadeChange = false;
|
||||
for (unsigned i = 0, e = SCC.size(); i != e; ++i) {
|
||||
Function *F = SCC[i]->getFunction();
|
||||
if (F->doesNotAlias(0) || !isa<PointerType>(F->getReturnType()))
|
||||
if (F->doesNotAlias(0) || !F->getReturnType()->isPointerTy())
|
||||
continue;
|
||||
|
||||
F->setDoesNotAlias(0);
|
||||
|
@ -303,7 +303,7 @@ static bool CleanupConstantGlobalUsers(Value *V, Constant *Init) {
|
||||
SubInit = ConstantFoldLoadThroughGEPConstantExpr(Init, CE);
|
||||
Changed |= CleanupConstantGlobalUsers(CE, SubInit);
|
||||
} else if (CE->getOpcode() == Instruction::BitCast &&
|
||||
isa<PointerType>(CE->getType())) {
|
||||
CE->getType()->isPointerTy()) {
|
||||
// Pointer cast, delete any stores and memsets to the global.
|
||||
Changed |= CleanupConstantGlobalUsers(CE, 0);
|
||||
}
|
||||
@ -431,7 +431,7 @@ static bool IsUserOfGlobalSafeForSRA(User *U, GlobalValue *GV) {
|
||||
else if (const VectorType *SubVectorTy = dyn_cast<VectorType>(*GEPI))
|
||||
NumElements = SubVectorTy->getNumElements();
|
||||
else {
|
||||
assert(isa<StructType>(*GEPI) &&
|
||||
assert((*GEPI)->isStructTy() &&
|
||||
"Indexed GEP type is not array, vector, or struct!");
|
||||
continue;
|
||||
}
|
||||
@ -1556,7 +1556,7 @@ static bool OptimizeOnceStoredGlobal(GlobalVariable *GV, Value *StoredOnceVal,
|
||||
// only has one (non-null) value stored into it, then we can optimize any
|
||||
// users of the loaded value (often calls and loads) that would trap if the
|
||||
// value was null.
|
||||
if (isa<PointerType>(GV->getInitializer()->getType()) &&
|
||||
if (GV->getInitializer()->getType()->isPointerTy() &&
|
||||
GV->getInitializer()->isNullValue()) {
|
||||
if (Constant *SOVC = dyn_cast<Constant>(StoredOnceVal)) {
|
||||
if (GV->getInitializer()->getType() != SOVC->getType())
|
||||
@ -1591,7 +1591,7 @@ static bool TryToShrinkGlobalToBoolean(GlobalVariable *GV, Constant *OtherVal) {
|
||||
// where v1 and v2 both require constant pool loads, a big loss.
|
||||
if (GVElType == Type::getInt1Ty(GV->getContext()) ||
|
||||
GVElType->isFloatingPointTy() ||
|
||||
isa<PointerType>(GVElType) || isa<VectorType>(GVElType))
|
||||
GVElType->isPointerTy() || GVElType->isVectorTy())
|
||||
return false;
|
||||
|
||||
// Walk the use list of the global seeing if all the uses are load or store.
|
||||
@ -2148,7 +2148,7 @@ static Constant *EvaluateStoreInto(Constant *Init, Constant *Val,
|
||||
Elts[CI->getZExtValue()] =
|
||||
EvaluateStoreInto(Elts[CI->getZExtValue()], Val, Addr, OpNo+1);
|
||||
|
||||
if (isa<ArrayType>(Init->getType()))
|
||||
if (Init->getType()->isArrayTy())
|
||||
return ConstantArray::get(cast<ArrayType>(InitTy), Elts);
|
||||
else
|
||||
return ConstantVector::get(&Elts[0], Elts.size());
|
||||
|
@ -1618,7 +1618,7 @@ Instruction *InstCombiner::visitOr(BinaryOperator &I) {
|
||||
// (A & (C0?-1:0)) | (B & ~(C0?-1:0)) -> C0 ? A : B, and commuted variants.
|
||||
// Don't do this for vector select idioms, the code generator doesn't handle
|
||||
// them well yet.
|
||||
if (!isa<VectorType>(I.getType())) {
|
||||
if (!I.getType()->isVectorTy()) {
|
||||
if (Instruction *Match = MatchSelectFromAndOr(A, B, C, D))
|
||||
return Match;
|
||||
if (Instruction *Match = MatchSelectFromAndOr(B, A, D, C))
|
||||
@ -1755,7 +1755,7 @@ Instruction *InstCombiner::visitXor(BinaryOperator &I) {
|
||||
// purpose is to compute bits we don't care about.
|
||||
if (SimplifyDemandedInstructionBits(I))
|
||||
return &I;
|
||||
if (isa<VectorType>(I.getType()))
|
||||
if (I.getType()->isVectorTy())
|
||||
if (isa<ConstantAggregateZero>(Op1))
|
||||
return ReplaceInstUsesWith(I, Op0); // X ^ <0,0> -> X
|
||||
|
||||
|
@ -831,7 +831,7 @@ bool InstCombiner::transformConstExprCastCall(CallSite CS) {
|
||||
const Type *OldRetTy = Caller->getType();
|
||||
const Type *NewRetTy = FT->getReturnType();
|
||||
|
||||
if (isa<StructType>(NewRetTy))
|
||||
if (NewRetTy->isStructTy())
|
||||
return false; // TODO: Handle multiple return values.
|
||||
|
||||
// Check to see if we are changing the return type...
|
||||
@ -839,9 +839,9 @@ bool InstCombiner::transformConstExprCastCall(CallSite CS) {
|
||||
if (Callee->isDeclaration() &&
|
||||
// Conversion is ok if changing from one pointer type to another or from
|
||||
// a pointer to an integer of the same size.
|
||||
!((isa<PointerType>(OldRetTy) || !TD ||
|
||||
!((OldRetTy->isPointerTy() || !TD ||
|
||||
OldRetTy == TD->getIntPtrType(Caller->getContext())) &&
|
||||
(isa<PointerType>(NewRetTy) || !TD ||
|
||||
(NewRetTy->isPointerTy() || !TD ||
|
||||
NewRetTy == TD->getIntPtrType(Caller->getContext()))))
|
||||
return false; // Cannot transform this return value.
|
||||
|
||||
@ -888,9 +888,9 @@ bool InstCombiner::transformConstExprCastCall(CallSite CS) {
|
||||
// Converting from one pointer type to another or between a pointer and an
|
||||
// integer of the same size is safe even if we do not have a body.
|
||||
bool isConvertible = ActTy == ParamTy ||
|
||||
(TD && ((isa<PointerType>(ParamTy) ||
|
||||
(TD && ((ParamTy->isPointerTy() ||
|
||||
ParamTy == TD->getIntPtrType(Caller->getContext())) &&
|
||||
(isa<PointerType>(ActTy) ||
|
||||
(ActTy->isPointerTy() ||
|
||||
ActTy == TD->getIntPtrType(Caller->getContext()))));
|
||||
if (Callee->isDeclaration() && !isConvertible) return false;
|
||||
}
|
||||
|
@ -272,7 +272,7 @@ bool InstCombiner::ShouldOptimizeCast(Instruction::CastOps opc, const Value *V,
|
||||
|
||||
// If this is a vector sext from a compare, then we don't want to break the
|
||||
// idiom where each element of the extended vector is either zero or all ones.
|
||||
if (opc == Instruction::SExt && isa<CmpInst>(V) && isa<VectorType>(Ty))
|
||||
if (opc == Instruction::SExt && isa<CmpInst>(V) && Ty->isVectorTy())
|
||||
return false;
|
||||
|
||||
return true;
|
||||
@ -303,8 +303,8 @@ Instruction *InstCombiner::commonCastTransforms(CastInst &CI) {
|
||||
if (isa<PHINode>(Src)) {
|
||||
// We don't do this if this would create a PHI node with an illegal type if
|
||||
// it is currently legal.
|
||||
if (!isa<IntegerType>(Src->getType()) ||
|
||||
!isa<IntegerType>(CI.getType()) ||
|
||||
if (!Src->getType()->isIntegerTy() ||
|
||||
!CI.getType()->isIntegerTy() ||
|
||||
ShouldChangeType(CI.getType(), Src->getType()))
|
||||
if (Instruction *NV = FoldOpIntoPhi(CI))
|
||||
return NV;
|
||||
@ -436,7 +436,7 @@ Instruction *InstCombiner::visitTrunc(TruncInst &CI) {
|
||||
// type. Only do this if the dest type is a simple type, don't convert the
|
||||
// expression tree to something weird like i93 unless the source is also
|
||||
// strange.
|
||||
if ((isa<VectorType>(DestTy) || ShouldChangeType(SrcTy, DestTy)) &&
|
||||
if ((DestTy->isVectorTy() || ShouldChangeType(SrcTy, DestTy)) &&
|
||||
CanEvaluateTruncated(Src, DestTy)) {
|
||||
|
||||
// If this cast is a truncate, evaluting in a different type always
|
||||
@ -728,7 +728,7 @@ Instruction *InstCombiner::visitZExt(ZExtInst &CI) {
|
||||
// expression tree to something weird like i93 unless the source is also
|
||||
// strange.
|
||||
unsigned BitsToClear;
|
||||
if ((isa<VectorType>(DestTy) || ShouldChangeType(SrcTy, DestTy)) &&
|
||||
if ((DestTy->isVectorTy() || ShouldChangeType(SrcTy, DestTy)) &&
|
||||
CanEvaluateZExtd(Src, DestTy, BitsToClear)) {
|
||||
assert(BitsToClear < SrcTy->getScalarSizeInBits() &&
|
||||
"Unreasonable BitsToClear");
|
||||
@ -936,7 +936,7 @@ Instruction *InstCombiner::visitSExt(SExtInst &CI) {
|
||||
// type. Only do this if the dest type is a simple type, don't convert the
|
||||
// expression tree to something weird like i93 unless the source is also
|
||||
// strange.
|
||||
if ((isa<VectorType>(DestTy) || ShouldChangeType(SrcTy, DestTy)) &&
|
||||
if ((DestTy->isVectorTy() || ShouldChangeType(SrcTy, DestTy)) &&
|
||||
CanEvaluateSExtd(Src, DestTy)) {
|
||||
// Okay, we can transform this! Insert the new expression now.
|
||||
DEBUG(dbgs() << "ICE: EvaluateInDifferentType converting expression type"
|
||||
@ -1289,7 +1289,7 @@ Instruction *InstCombiner::visitBitCast(BitCastInst &CI) {
|
||||
Constant::getNullValue(Type::getInt32Ty(CI.getContext()));
|
||||
unsigned NumZeros = 0;
|
||||
while (SrcElTy != DstElTy &&
|
||||
isa<CompositeType>(SrcElTy) && !isa<PointerType>(SrcElTy) &&
|
||||
isa<CompositeType>(SrcElTy) && !SrcElTy->isPointerTy() &&
|
||||
SrcElTy->getNumContainedTypes() /* not "{}" */) {
|
||||
SrcElTy = cast<CompositeType>(SrcElTy)->getTypeAtIndex(ZeroUInt);
|
||||
++NumZeros;
|
||||
@ -1304,7 +1304,7 @@ Instruction *InstCombiner::visitBitCast(BitCastInst &CI) {
|
||||
}
|
||||
|
||||
if (const VectorType *DestVTy = dyn_cast<VectorType>(DestTy)) {
|
||||
if (DestVTy->getNumElements() == 1 && !isa<VectorType>(SrcTy)) {
|
||||
if (DestVTy->getNumElements() == 1 && !SrcTy->isVectorTy()) {
|
||||
Value *Elem = Builder->CreateBitCast(Src, DestVTy->getElementType());
|
||||
return InsertElementInst::Create(UndefValue::get(DestTy), Elem,
|
||||
Constant::getNullValue(Type::getInt32Ty(CI.getContext())));
|
||||
@ -1313,7 +1313,7 @@ Instruction *InstCombiner::visitBitCast(BitCastInst &CI) {
|
||||
}
|
||||
|
||||
if (const VectorType *SrcVTy = dyn_cast<VectorType>(SrcTy)) {
|
||||
if (SrcVTy->getNumElements() == 1 && !isa<VectorType>(DestTy)) {
|
||||
if (SrcVTy->getNumElements() == 1 && !DestTy->isVectorTy()) {
|
||||
Value *Elem =
|
||||
Builder->CreateExtractElement(Src,
|
||||
Constant::getNullValue(Type::getInt32Ty(CI.getContext())));
|
||||
@ -1324,7 +1324,7 @@ Instruction *InstCombiner::visitBitCast(BitCastInst &CI) {
|
||||
if (ShuffleVectorInst *SVI = dyn_cast<ShuffleVectorInst>(Src)) {
|
||||
// Okay, we have (bitcast (shuffle ..)). Check to see if this is
|
||||
// a bitconvert to a vector with the same # elts.
|
||||
if (SVI->hasOneUse() && isa<VectorType>(DestTy) &&
|
||||
if (SVI->hasOneUse() && DestTy->isVectorTy() &&
|
||||
cast<VectorType>(DestTy)->getNumElements() ==
|
||||
SVI->getType()->getNumElements() &&
|
||||
SVI->getType()->getNumElements() ==
|
||||
@ -1346,7 +1346,7 @@ Instruction *InstCombiner::visitBitCast(BitCastInst &CI) {
|
||||
}
|
||||
}
|
||||
|
||||
if (isa<PointerType>(SrcTy))
|
||||
if (SrcTy->isPointerTy())
|
||||
return commonPointerCastTransforms(CI);
|
||||
return commonCastTransforms(CI);
|
||||
}
|
||||
|
@ -1988,7 +1988,7 @@ Instruction *InstCombiner::visitICmpInst(ICmpInst &I) {
|
||||
// values. If the ptr->ptr cast can be stripped off both arguments, we do so
|
||||
// now.
|
||||
if (BitCastInst *CI = dyn_cast<BitCastInst>(Op0)) {
|
||||
if (isa<PointerType>(Op0->getType()) &&
|
||||
if (Op0->getType()->isPointerTy() &&
|
||||
(isa<Constant>(Op1) || isa<BitCastInst>(Op1))) {
|
||||
// We keep moving the cast from the left operand over to the right
|
||||
// operand, where it can often be eliminated completely.
|
||||
|
@ -87,8 +87,8 @@ static Instruction *InstCombineLoadCast(InstCombiner &IC, LoadInst &LI,
|
||||
|
||||
const Type *SrcPTy = SrcTy->getElementType();
|
||||
|
||||
if (DestPTy->isIntegerTy() || isa<PointerType>(DestPTy) ||
|
||||
isa<VectorType>(DestPTy)) {
|
||||
if (DestPTy->isIntegerTy() || DestPTy->isPointerTy() ||
|
||||
DestPTy->isVectorTy()) {
|
||||
// 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
|
||||
// constants.
|
||||
@ -104,11 +104,11 @@ static Instruction *InstCombineLoadCast(InstCombiner &IC, LoadInst &LI,
|
||||
}
|
||||
|
||||
if (IC.getTargetData() &&
|
||||
(SrcPTy->isIntegerTy() || isa<PointerType>(SrcPTy) ||
|
||||
isa<VectorType>(SrcPTy)) &&
|
||||
(SrcPTy->isIntegerTy() || SrcPTy->isPointerTy() ||
|
||||
SrcPTy->isVectorTy()) &&
|
||||
// Do not allow turning this into a load of an integer, which is then
|
||||
// casted to a pointer, this pessimizes pointer analysis a lot.
|
||||
(isa<PointerType>(SrcPTy) == isa<PointerType>(LI.getType())) &&
|
||||
(SrcPTy->isPointerTy() == LI.getType()->isPointerTy()) &&
|
||||
IC.getTargetData()->getTypeSizeInBits(SrcPTy) ==
|
||||
IC.getTargetData()->getTypeSizeInBits(DestPTy)) {
|
||||
|
||||
@ -243,7 +243,7 @@ static Instruction *InstCombineStoreToCast(InstCombiner &IC, StoreInst &SI) {
|
||||
|
||||
const Type *SrcPTy = SrcTy->getElementType();
|
||||
|
||||
if (!DestPTy->isIntegerTy() && !isa<PointerType>(DestPTy))
|
||||
if (!DestPTy->isIntegerTy() && !DestPTy->isPointerTy())
|
||||
return 0;
|
||||
|
||||
/// NewGEPIndices - If SrcPTy is an aggregate type, we can emit a "noop gep"
|
||||
@ -255,7 +255,7 @@ static Instruction *InstCombineStoreToCast(InstCombiner &IC, StoreInst &SI) {
|
||||
// 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
|
||||
// constants.
|
||||
if (isa<ArrayType>(SrcPTy) || isa<StructType>(SrcPTy)) {
|
||||
if (SrcPTy->isArrayTy() || SrcPTy->isStructTy()) {
|
||||
// Index through pointer.
|
||||
Constant *Zero = Constant::getNullValue(Type::getInt32Ty(SI.getContext()));
|
||||
NewGEPIndices.push_back(Zero);
|
||||
@ -277,7 +277,7 @@ static Instruction *InstCombineStoreToCast(InstCombiner &IC, StoreInst &SI) {
|
||||
SrcTy = PointerType::get(SrcPTy, SrcTy->getAddressSpace());
|
||||
}
|
||||
|
||||
if (!SrcPTy->isIntegerTy() && !isa<PointerType>(SrcPTy))
|
||||
if (!SrcPTy->isIntegerTy() && !SrcPTy->isPointerTy())
|
||||
return 0;
|
||||
|
||||
// If the pointers point into different address spaces or if they point to
|
||||
@ -297,11 +297,11 @@ static Instruction *InstCombineStoreToCast(InstCombiner &IC, StoreInst &SI) {
|
||||
Instruction::CastOps opcode = Instruction::BitCast;
|
||||
const Type* CastSrcTy = SIOp0->getType();
|
||||
const Type* CastDstTy = SrcPTy;
|
||||
if (isa<PointerType>(CastDstTy)) {
|
||||
if (CastDstTy->isPointerTy()) {
|
||||
if (CastSrcTy->isIntegerTy())
|
||||
opcode = Instruction::IntToPtr;
|
||||
} else if (isa<IntegerType>(CastDstTy)) {
|
||||
if (isa<PointerType>(SIOp0->getType()))
|
||||
} else if (CastDstTy->isIntegerTy()) {
|
||||
if (SIOp0->getType()->isPointerTy())
|
||||
opcode = Instruction::PtrToInt;
|
||||
}
|
||||
|
||||
@ -413,7 +413,7 @@ Instruction *InstCombiner::visitStoreInst(StoreInst &SI) {
|
||||
// Don't count debug info directives, lest they affect codegen,
|
||||
// and we skip pointer-to-pointer bitcasts, which are NOPs.
|
||||
if (isa<DbgInfoIntrinsic>(BBI) ||
|
||||
(isa<BitCastInst>(BBI) && isa<PointerType>(BBI->getType()))) {
|
||||
(isa<BitCastInst>(BBI) && BBI->getType()->isPointerTy())) {
|
||||
ScanInsts++;
|
||||
continue;
|
||||
}
|
||||
@ -483,7 +483,7 @@ Instruction *InstCombiner::visitStoreInst(StoreInst &SI) {
|
||||
do {
|
||||
++BBI;
|
||||
} while (isa<DbgInfoIntrinsic>(BBI) ||
|
||||
(isa<BitCastInst>(BBI) && isa<PointerType>(BBI->getType())));
|
||||
(isa<BitCastInst>(BBI) && BBI->getType()->isPointerTy()));
|
||||
if (BranchInst *BI = dyn_cast<BranchInst>(BBI))
|
||||
if (BI->isUnconditional())
|
||||
if (SimplifyStoreAtEndOfBlock(SI))
|
||||
@ -544,7 +544,7 @@ bool InstCombiner::SimplifyStoreAtEndOfBlock(StoreInst &SI) {
|
||||
--BBI;
|
||||
// Skip over debugging info.
|
||||
while (isa<DbgInfoIntrinsic>(BBI) ||
|
||||
(isa<BitCastInst>(BBI) && isa<PointerType>(BBI->getType()))) {
|
||||
(isa<BitCastInst>(BBI) && BBI->getType()->isPointerTy())) {
|
||||
if (BBI==OtherBB->begin())
|
||||
return false;
|
||||
--BBI;
|
||||
|
@ -76,7 +76,7 @@ Instruction *InstCombiner::visitMul(BinaryOperator &I) {
|
||||
return BinaryOperator::CreateShl(Op0,
|
||||
ConstantInt::get(Op0->getType(), Val.logBase2()));
|
||||
}
|
||||
} else if (isa<VectorType>(Op1C->getType())) {
|
||||
} else if (Op1C->getType()->isVectorTy()) {
|
||||
if (Op1C->isNullValue())
|
||||
return ReplaceInstUsesWith(I, Op1C);
|
||||
|
||||
@ -173,7 +173,7 @@ Instruction *InstCombiner::visitMul(BinaryOperator &I) {
|
||||
// If one of the operands of the multiply is a cast from a boolean value, then
|
||||
// we know the bool is either zero or one, so this is a 'masking' multiply.
|
||||
// X * Y (where Y is 0 or 1) -> X & (0-Y)
|
||||
if (!isa<VectorType>(I.getType())) {
|
||||
if (!I.getType()->isVectorTy()) {
|
||||
// -2 is "-1 << 1" so it is all bits set except the low one.
|
||||
APInt Negative2(I.getType()->getPrimitiveSizeInBits(), (uint64_t)-2, true);
|
||||
|
||||
@ -204,7 +204,7 @@ Instruction *InstCombiner::visitFMul(BinaryOperator &I) {
|
||||
// ANSI says we can drop signals, so we can do this anyway." (from GCC)
|
||||
if (Op1F->isExactlyValue(1.0))
|
||||
return ReplaceInstUsesWith(I, Op0); // Eliminate 'mul double %X, 1.0'
|
||||
} else if (isa<VectorType>(Op1C->getType())) {
|
||||
} else if (Op1C->getType()->isVectorTy()) {
|
||||
if (ConstantVector *Op1V = dyn_cast<ConstantVector>(Op1C)) {
|
||||
// As above, vector X*splat(1.0) -> X in all defined cases.
|
||||
if (Constant *Splat = Op1V->getSplatValue()) {
|
||||
|
@ -371,7 +371,7 @@ Instruction *InstCombiner::FoldPHIArgOpIntoPHI(PHINode &PN) {
|
||||
|
||||
// Be careful about transforming integer PHIs. We don't want to pessimize
|
||||
// the code by turning an i32 into an i1293.
|
||||
if (isa<IntegerType>(PN.getType()) && isa<IntegerType>(CastSrcTy)) {
|
||||
if (PN.getType()->isIntegerTy() && CastSrcTy->isIntegerTy()) {
|
||||
if (!ShouldChangeType(PN.getType(), CastSrcTy))
|
||||
return 0;
|
||||
}
|
||||
@ -832,7 +832,7 @@ Instruction *InstCombiner::visitPHINode(PHINode &PN) {
|
||||
// it is only used by trunc or trunc(lshr) operations. If so, we split the
|
||||
// PHI into the various pieces being extracted. This sort of thing is
|
||||
// introduced when SROA promotes an aggregate to a single large integer type.
|
||||
if (isa<IntegerType>(PN.getType()) && TD &&
|
||||
if (PN.getType()->isIntegerTy() && TD &&
|
||||
!TD->isLegalInteger(PN.getType()->getPrimitiveSizeInBits()))
|
||||
if (Instruction *Res = SliceUpIllegalIntegerPHI(PN))
|
||||
return Res;
|
||||
|
@ -104,7 +104,7 @@ Value *InstCombiner::SimplifyDemandedUseBits(Value *V, APInt DemandedMask,
|
||||
assert(Depth <= 6 && "Limit Search Depth");
|
||||
uint32_t BitWidth = DemandedMask.getBitWidth();
|
||||
const Type *VTy = V->getType();
|
||||
assert((TD || !isa<PointerType>(VTy)) &&
|
||||
assert((TD || !VTy->isPointerTy()) &&
|
||||
"SimplifyDemandedBits needs to know bit widths!");
|
||||
assert((!TD || TD->getTypeSizeInBits(VTy->getScalarType()) == BitWidth) &&
|
||||
(!VTy->isIntOrIntVectorTy() ||
|
||||
@ -413,7 +413,7 @@ Value *InstCombiner::SimplifyDemandedUseBits(Value *V, APInt DemandedMask,
|
||||
} else
|
||||
// Don't touch a scalar-to-vector bitcast.
|
||||
return 0;
|
||||
} else if (isa<VectorType>(I->getOperand(0)->getType()))
|
||||
} else if (I->getOperand(0)->getType()->isVectorTy())
|
||||
// Don't touch a vector-to-scalar bitcast.
|
||||
return 0;
|
||||
|
||||
|
@ -78,7 +78,7 @@ static std::vector<unsigned> getShuffleMask(const ShuffleVectorInst *SVI) {
|
||||
/// value is already around as a register, for example if it were inserted then
|
||||
/// extracted from the vector.
|
||||
static Value *FindScalarElement(Value *V, unsigned EltNo) {
|
||||
assert(isa<VectorType>(V->getType()) && "Not looking at a vector?");
|
||||
assert(V->getType()->isVectorTy() && "Not looking at a vector?");
|
||||
const VectorType *PTy = cast<VectorType>(V->getType());
|
||||
unsigned Width = PTy->getNumElements();
|
||||
if (EltNo >= Width) // Out of range access.
|
||||
@ -322,7 +322,7 @@ static bool CollectSingleShuffleElements(Value *V, Value *LHS, Value *RHS,
|
||||
/// that computes V and the LHS value of the shuffle.
|
||||
static Value *CollectShuffleElements(Value *V, std::vector<Constant*> &Mask,
|
||||
Value *&RHS) {
|
||||
assert(isa<VectorType>(V->getType()) &&
|
||||
assert(V->getType()->isVectorTy() &&
|
||||
(RHS == 0 || V->getType() == RHS->getType()) &&
|
||||
"Invalid shuffle!");
|
||||
unsigned NumElts = cast<VectorType>(V->getType())->getNumElements();
|
||||
|
@ -73,7 +73,7 @@ void InstCombiner::getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
/// from 'From' to 'To'. We don't want to convert from a legal to an illegal
|
||||
/// type for example, or from a smaller to a larger illegal type.
|
||||
bool InstCombiner::ShouldChangeType(const Type *From, const Type *To) const {
|
||||
assert(isa<IntegerType>(From) && isa<IntegerType>(To));
|
||||
assert(From->isIntegerTy() && To->isIntegerTy());
|
||||
|
||||
// If we don't have TD, we don't know if the source/dest are legal.
|
||||
if (!TD) return false;
|
||||
@ -478,7 +478,7 @@ Instruction *InstCombiner::visitGetElementPtrInst(GetElementPtrInst &GEP) {
|
||||
bool EndsWithSequential = false;
|
||||
for (gep_type_iterator I = gep_type_begin(*Src), E = gep_type_end(*Src);
|
||||
I != E; ++I)
|
||||
EndsWithSequential = !isa<StructType>(*I);
|
||||
EndsWithSequential = !(*I)->isStructTy();
|
||||
|
||||
// Can we combine the two pointer arithmetics offsets?
|
||||
if (EndsWithSequential) {
|
||||
@ -578,7 +578,7 @@ Instruction *InstCombiner::visitGetElementPtrInst(GetElementPtrInst &GEP) {
|
||||
// into: %t1 = getelementptr [2 x i32]* %str, i32 0, i32 %V; bitcast
|
||||
const Type *SrcElTy = StrippedPtrTy->getElementType();
|
||||
const Type *ResElTy=cast<PointerType>(PtrOp->getType())->getElementType();
|
||||
if (TD && isa<ArrayType>(SrcElTy) &&
|
||||
if (TD && SrcElTy->isArrayTy() &&
|
||||
TD->getTypeAllocSize(cast<ArrayType>(SrcElTy)->getElementType()) ==
|
||||
TD->getTypeAllocSize(ResElTy)) {
|
||||
Value *Idx[2];
|
||||
@ -596,7 +596,7 @@ Instruction *InstCombiner::visitGetElementPtrInst(GetElementPtrInst &GEP) {
|
||||
// (where tmp = 8*tmp2) into:
|
||||
// getelementptr [100 x double]* %arr, i32 0, i32 %tmp2; bitcast
|
||||
|
||||
if (TD && isa<ArrayType>(SrcElTy) && ResElTy->isIntegerTy(8)) {
|
||||
if (TD && SrcElTy->isArrayTy() && ResElTy->isIntegerTy(8)) {
|
||||
uint64_t ArrayEltSize =
|
||||
TD->getTypeAllocSize(cast<ArrayType>(SrcElTy)->getElementType());
|
||||
|
||||
|
@ -505,7 +505,7 @@ void ABCD::executeABCD(Function &F) {
|
||||
continue;
|
||||
|
||||
ICmpInst *ICI = dyn_cast<ICmpInst>(TI->getOperand(0));
|
||||
if (!ICI || !isa<IntegerType>(ICI->getOperand(0)->getType()))
|
||||
if (!ICI || !ICI->getOperand(0)->getType()->isIntegerTy())
|
||||
continue;
|
||||
|
||||
createConstraintCmpInst(ICI, TI);
|
||||
@ -713,7 +713,7 @@ void ABCD::createConstraintCmpInst(ICmpInst *ICI, TerminatorInst *TI) {
|
||||
Value *V_op1 = ICI->getOperand(0);
|
||||
Value *V_op2 = ICI->getOperand(1);
|
||||
|
||||
if (!isa<IntegerType>(V_op1->getType()))
|
||||
if (!V_op1->getType()->isIntegerTy())
|
||||
return;
|
||||
|
||||
Instruction *I_op1 = dyn_cast<Instruction>(V_op1);
|
||||
|
@ -612,7 +612,7 @@ bool CodeGenPrepare::OptimizeMemoryInst(Instruction *MemoryInst, Value *Addr,
|
||||
// we'd end up sinking both muls.
|
||||
if (AddrMode.BaseReg) {
|
||||
Value *V = AddrMode.BaseReg;
|
||||
if (isa<PointerType>(V->getType()))
|
||||
if (V->getType()->isPointerTy())
|
||||
V = new PtrToIntInst(V, IntPtrTy, "sunkaddr", InsertPt);
|
||||
if (V->getType() != IntPtrTy)
|
||||
V = CastInst::CreateIntegerCast(V, IntPtrTy, /*isSigned=*/true,
|
||||
@ -625,7 +625,7 @@ bool CodeGenPrepare::OptimizeMemoryInst(Instruction *MemoryInst, Value *Addr,
|
||||
Value *V = AddrMode.ScaledReg;
|
||||
if (V->getType() == IntPtrTy) {
|
||||
// done.
|
||||
} else if (isa<PointerType>(V->getType())) {
|
||||
} else if (V->getType()->isPointerTy()) {
|
||||
V = new PtrToIntInst(V, IntPtrTy, "sunkaddr", InsertPt);
|
||||
} else if (cast<IntegerType>(IntPtrTy)->getBitWidth() <
|
||||
cast<IntegerType>(V->getType())->getBitWidth()) {
|
||||
|
@ -836,9 +836,9 @@ static bool CanCoerceMustAliasedValueToLoad(Value *StoredVal,
|
||||
const TargetData &TD) {
|
||||
// If the loaded or stored value is an first class array or struct, don't try
|
||||
// to transform them. We need to be able to bitcast to integer.
|
||||
if (isa<StructType>(LoadTy) || isa<ArrayType>(LoadTy) ||
|
||||
isa<StructType>(StoredVal->getType()) ||
|
||||
isa<ArrayType>(StoredVal->getType()))
|
||||
if (LoadTy->isStructTy() || LoadTy->isArrayTy() ||
|
||||
StoredVal->getType()->isStructTy() ||
|
||||
StoredVal->getType()->isArrayTy())
|
||||
return false;
|
||||
|
||||
// The store has to be at least as big as the load.
|
||||
@ -870,26 +870,26 @@ static Value *CoerceAvailableValueToLoadType(Value *StoredVal,
|
||||
|
||||
// If the store and reload are the same size, we can always reuse it.
|
||||
if (StoreSize == LoadSize) {
|
||||
if (isa<PointerType>(StoredValTy) && isa<PointerType>(LoadedTy)) {
|
||||
if (StoredValTy->isPointerTy() && LoadedTy->isPointerTy()) {
|
||||
// Pointer to Pointer -> use bitcast.
|
||||
return new BitCastInst(StoredVal, LoadedTy, "", InsertPt);
|
||||
}
|
||||
|
||||
// Convert source pointers to integers, which can be bitcast.
|
||||
if (isa<PointerType>(StoredValTy)) {
|
||||
if (StoredValTy->isPointerTy()) {
|
||||
StoredValTy = TD.getIntPtrType(StoredValTy->getContext());
|
||||
StoredVal = new PtrToIntInst(StoredVal, StoredValTy, "", InsertPt);
|
||||
}
|
||||
|
||||
const Type *TypeToCastTo = LoadedTy;
|
||||
if (isa<PointerType>(TypeToCastTo))
|
||||
if (TypeToCastTo->isPointerTy())
|
||||
TypeToCastTo = TD.getIntPtrType(StoredValTy->getContext());
|
||||
|
||||
if (StoredValTy != TypeToCastTo)
|
||||
StoredVal = new BitCastInst(StoredVal, TypeToCastTo, "", InsertPt);
|
||||
|
||||
// Cast to pointer if the load needs a pointer type.
|
||||
if (isa<PointerType>(LoadedTy))
|
||||
if (LoadedTy->isPointerTy())
|
||||
StoredVal = new IntToPtrInst(StoredVal, LoadedTy, "", InsertPt);
|
||||
|
||||
return StoredVal;
|
||||
@ -901,13 +901,13 @@ static Value *CoerceAvailableValueToLoadType(Value *StoredVal,
|
||||
assert(StoreSize >= LoadSize && "CanCoerceMustAliasedValueToLoad fail");
|
||||
|
||||
// Convert source pointers to integers, which can be manipulated.
|
||||
if (isa<PointerType>(StoredValTy)) {
|
||||
if (StoredValTy->isPointerTy()) {
|
||||
StoredValTy = TD.getIntPtrType(StoredValTy->getContext());
|
||||
StoredVal = new PtrToIntInst(StoredVal, StoredValTy, "", InsertPt);
|
||||
}
|
||||
|
||||
// Convert vectors and fp to integer, which can be manipulated.
|
||||
if (!isa<IntegerType>(StoredValTy)) {
|
||||
if (!StoredValTy->isIntegerTy()) {
|
||||
StoredValTy = IntegerType::get(StoredValTy->getContext(), StoreSize);
|
||||
StoredVal = new BitCastInst(StoredVal, StoredValTy, "", InsertPt);
|
||||
}
|
||||
@ -927,7 +927,7 @@ static Value *CoerceAvailableValueToLoadType(Value *StoredVal,
|
||||
return StoredVal;
|
||||
|
||||
// If the result is a pointer, inttoptr.
|
||||
if (isa<PointerType>(LoadedTy))
|
||||
if (LoadedTy->isPointerTy())
|
||||
return new IntToPtrInst(StoredVal, LoadedTy, "inttoptr", InsertPt);
|
||||
|
||||
// Otherwise, bitcast.
|
||||
@ -989,7 +989,7 @@ static int AnalyzeLoadFromClobberingWrite(const Type *LoadTy, Value *LoadPtr,
|
||||
const TargetData &TD) {
|
||||
// If the loaded or stored value is an first class array or struct, don't try
|
||||
// to transform them. We need to be able to bitcast to integer.
|
||||
if (isa<StructType>(LoadTy) || isa<ArrayType>(LoadTy))
|
||||
if (LoadTy->isStructTy() || LoadTy->isArrayTy())
|
||||
return -1;
|
||||
|
||||
int64_t StoreOffset = 0, LoadOffset = 0;
|
||||
@ -1064,8 +1064,8 @@ static int AnalyzeLoadFromClobberingStore(const Type *LoadTy, Value *LoadPtr,
|
||||
StoreInst *DepSI,
|
||||
const TargetData &TD) {
|
||||
// Cannot handle reading from store of first-class aggregate yet.
|
||||
if (isa<StructType>(DepSI->getOperand(0)->getType()) ||
|
||||
isa<ArrayType>(DepSI->getOperand(0)->getType()))
|
||||
if (DepSI->getOperand(0)->getType()->isStructTy() ||
|
||||
DepSI->getOperand(0)->getType()->isArrayTy())
|
||||
return -1;
|
||||
|
||||
Value *StorePtr = DepSI->getPointerOperand();
|
||||
@ -1136,9 +1136,9 @@ static Value *GetStoreValueForLoad(Value *SrcVal, unsigned Offset,
|
||||
|
||||
// Compute which bits of the stored value are being used by the load. Convert
|
||||
// to an integer type to start with.
|
||||
if (isa<PointerType>(SrcVal->getType()))
|
||||
if (SrcVal->getType()->isPointerTy())
|
||||
SrcVal = Builder.CreatePtrToInt(SrcVal, TD.getIntPtrType(Ctx), "tmp");
|
||||
if (!isa<IntegerType>(SrcVal->getType()))
|
||||
if (!SrcVal->getType()->isIntegerTy())
|
||||
SrcVal = Builder.CreateBitCast(SrcVal, IntegerType::get(Ctx, StoreSize*8),
|
||||
"tmp");
|
||||
|
||||
@ -1323,7 +1323,7 @@ static Value *ConstructSSAForLoadSet(LoadInst *LI,
|
||||
Value *V = SSAUpdate.GetValueInMiddleOfBlock(LI->getParent());
|
||||
|
||||
// If new PHI nodes were created, notify alias analysis.
|
||||
if (isa<PointerType>(V->getType()))
|
||||
if (V->getType()->isPointerTy())
|
||||
for (unsigned i = 0, e = NewPHIs.size(); i != e; ++i)
|
||||
AA->copyValue(LI, NewPHIs[i]);
|
||||
|
||||
@ -1491,7 +1491,7 @@ bool GVN::processNonLocalLoad(LoadInst *LI,
|
||||
|
||||
if (isa<PHINode>(V))
|
||||
V->takeName(LI);
|
||||
if (isa<PointerType>(V->getType()))
|
||||
if (V->getType()->isPointerTy())
|
||||
MD->invalidateCachedPointerInfo(V);
|
||||
toErase.push_back(LI);
|
||||
NumGVNLoad++;
|
||||
@ -1705,7 +1705,7 @@ bool GVN::processNonLocalLoad(LoadInst *LI,
|
||||
LI->replaceAllUsesWith(V);
|
||||
if (isa<PHINode>(V))
|
||||
V->takeName(LI);
|
||||
if (isa<PointerType>(V->getType()))
|
||||
if (V->getType()->isPointerTy())
|
||||
MD->invalidateCachedPointerInfo(V);
|
||||
toErase.push_back(LI);
|
||||
NumPRELoad++;
|
||||
@ -1765,7 +1765,7 @@ bool GVN::processLoad(LoadInst *L, SmallVectorImpl<Instruction*> &toErase) {
|
||||
|
||||
// Replace the load!
|
||||
L->replaceAllUsesWith(AvailVal);
|
||||
if (isa<PointerType>(AvailVal->getType()))
|
||||
if (AvailVal->getType()->isPointerTy())
|
||||
MD->invalidateCachedPointerInfo(AvailVal);
|
||||
toErase.push_back(L);
|
||||
NumGVNLoad++;
|
||||
@ -1810,7 +1810,7 @@ bool GVN::processLoad(LoadInst *L, SmallVectorImpl<Instruction*> &toErase) {
|
||||
|
||||
// Remove it!
|
||||
L->replaceAllUsesWith(StoredVal);
|
||||
if (isa<PointerType>(StoredVal->getType()))
|
||||
if (StoredVal->getType()->isPointerTy())
|
||||
MD->invalidateCachedPointerInfo(StoredVal);
|
||||
toErase.push_back(L);
|
||||
NumGVNLoad++;
|
||||
@ -1839,7 +1839,7 @@ bool GVN::processLoad(LoadInst *L, SmallVectorImpl<Instruction*> &toErase) {
|
||||
|
||||
// Remove it!
|
||||
L->replaceAllUsesWith(AvailableVal);
|
||||
if (isa<PointerType>(DepLI->getType()))
|
||||
if (DepLI->getType()->isPointerTy())
|
||||
MD->invalidateCachedPointerInfo(DepLI);
|
||||
toErase.push_back(L);
|
||||
NumGVNLoad++;
|
||||
@ -1943,7 +1943,7 @@ bool GVN::processInstruction(Instruction *I,
|
||||
|
||||
if (constVal) {
|
||||
p->replaceAllUsesWith(constVal);
|
||||
if (MD && isa<PointerType>(constVal->getType()))
|
||||
if (MD && constVal->getType()->isPointerTy())
|
||||
MD->invalidateCachedPointerInfo(constVal);
|
||||
VN.erase(p);
|
||||
|
||||
@ -1964,7 +1964,7 @@ bool GVN::processInstruction(Instruction *I,
|
||||
// Remove it!
|
||||
VN.erase(I);
|
||||
I->replaceAllUsesWith(repl);
|
||||
if (MD && isa<PointerType>(repl->getType()))
|
||||
if (MD && repl->getType()->isPointerTy())
|
||||
MD->invalidateCachedPointerInfo(repl);
|
||||
toErase.push_back(I);
|
||||
return true;
|
||||
@ -2204,7 +2204,7 @@ bool GVN::performPRE(Function &F) {
|
||||
localAvail[CurrentBlock]->table[ValNo] = Phi;
|
||||
|
||||
CurInst->replaceAllUsesWith(Phi);
|
||||
if (MD && isa<PointerType>(Phi->getType()))
|
||||
if (MD && Phi->getType()->isPointerTy())
|
||||
MD->invalidateCachedPointerInfo(Phi);
|
||||
VN.erase(CurInst);
|
||||
|
||||
|
@ -248,8 +248,8 @@ void IndVarSimplify::RewriteLoopExitValues(Loop *L,
|
||||
Value *InVal = PN->getIncomingValue(i);
|
||||
if (!isa<Instruction>(InVal) ||
|
||||
// SCEV only supports integer expressions for now.
|
||||
(!isa<IntegerType>(InVal->getType()) &&
|
||||
!isa<PointerType>(InVal->getType())))
|
||||
(!InVal->getType()->isIntegerTy() &&
|
||||
!InVal->getType()->isPointerTy()))
|
||||
continue;
|
||||
|
||||
// If this pred is for a subloop, not L itself, skip it.
|
||||
|
@ -201,7 +201,7 @@ static unsigned getJumpThreadDuplicationCost(const BasicBlock *BB) {
|
||||
if (isa<DbgInfoIntrinsic>(I)) continue;
|
||||
|
||||
// If this is a pointer->pointer bitcast, it is free.
|
||||
if (isa<BitCastInst>(I) && isa<PointerType>(I->getType()))
|
||||
if (isa<BitCastInst>(I) && I->getType()->isPointerTy())
|
||||
continue;
|
||||
|
||||
// All other instructions count for at least one unit.
|
||||
@ -214,7 +214,7 @@ static unsigned getJumpThreadDuplicationCost(const BasicBlock *BB) {
|
||||
if (const CallInst *CI = dyn_cast<CallInst>(I)) {
|
||||
if (!isa<IntrinsicInst>(CI))
|
||||
Size += 3;
|
||||
else if (!isa<VectorType>(CI->getType()))
|
||||
else if (!CI->getType()->isVectorTy())
|
||||
Size += 1;
|
||||
}
|
||||
}
|
||||
|
@ -678,7 +678,7 @@ void LICM::PromoteValuesInLoop() {
|
||||
// If we are promoting a pointer value, update alias information for the
|
||||
// inserted load.
|
||||
Value *LoadValue = 0;
|
||||
if (isa<PointerType>(cast<PointerType>(Ptr->getType())->getElementType())) {
|
||||
if (cast<PointerType>(Ptr->getType())->getElementType()->isPointerTy()) {
|
||||
// Locate a load or store through the pointer, and assign the same value
|
||||
// to LI as we are loading or storing. Since we know that the value is
|
||||
// stored in this loop, this will always succeed.
|
||||
@ -751,7 +751,7 @@ void LICM::PromoteValuesInLoop() {
|
||||
LoadInst *LI = new LoadInst(PromotedValues[i].first, "", InsertPos);
|
||||
|
||||
// If this is a pointer type, update alias info appropriately.
|
||||
if (isa<PointerType>(LI->getType()))
|
||||
if (LI->getType()->isPointerTy())
|
||||
CurAST->copyValue(PointerValueNumbers[PVN++], LI);
|
||||
|
||||
// Store into the memory we promoted.
|
||||
|
@ -925,7 +925,7 @@ void LSRUse::print(raw_ostream &OS) const {
|
||||
case ICmpZero: OS << "ICmpZero"; break;
|
||||
case Address:
|
||||
OS << "Address of ";
|
||||
if (isa<PointerType>(AccessTy))
|
||||
if (AccessTy->isPointerTy())
|
||||
OS << "pointer"; // the full pointer type could be really verbose
|
||||
else
|
||||
OS << *AccessTy;
|
||||
|
@ -170,7 +170,7 @@ Pass *llvm::createLoopUnswitchPass(bool Os) {
|
||||
/// Otherwise, return null.
|
||||
static Value *FindLIVLoopCondition(Value *Cond, Loop *L, bool &Changed) {
|
||||
// We can never unswitch on vector conditions.
|
||||
if (isa<VectorType>(Cond->getType()))
|
||||
if (Cond->getType()->isVectorTy())
|
||||
return 0;
|
||||
|
||||
// Constants should be folded, not unswitched on!
|
||||
|
@ -930,7 +930,7 @@ void Reassociate::ReassociateBB(BasicBlock *BB) {
|
||||
|
||||
// Reject cases where it is pointless to do this.
|
||||
if (!isa<BinaryOperator>(BI) || BI->getType()->isFloatingPointTy() ||
|
||||
isa<VectorType>(BI->getType()))
|
||||
BI->getType()->isVectorTy())
|
||||
continue; // Floating point ops are not associative.
|
||||
|
||||
// Do not reassociate boolean (i1) expressions. We want to preserve the
|
||||
|
@ -295,7 +295,7 @@ public:
|
||||
}
|
||||
|
||||
void markOverdefined(Value *V) {
|
||||
assert(!isa<StructType>(V->getType()) && "Should use other method");
|
||||
assert(!V->getType()->isStructTy() && "Should use other method");
|
||||
markOverdefined(ValueState[V], V);
|
||||
}
|
||||
|
||||
@ -321,12 +321,12 @@ private:
|
||||
}
|
||||
|
||||
void markConstant(Value *V, Constant *C) {
|
||||
assert(!isa<StructType>(V->getType()) && "Should use other method");
|
||||
assert(!V->getType()->isStructTy() && "Should use other method");
|
||||
markConstant(ValueState[V], V, C);
|
||||
}
|
||||
|
||||
void markForcedConstant(Value *V, Constant *C) {
|
||||
assert(!isa<StructType>(V->getType()) && "Should use other method");
|
||||
assert(!V->getType()->isStructTy() && "Should use other method");
|
||||
ValueState[V].markForcedConstant(C);
|
||||
DEBUG(dbgs() << "markForcedConstant: " << *C << ": " << *V << '\n');
|
||||
InstWorkList.push_back(V);
|
||||
@ -360,7 +360,7 @@ private:
|
||||
}
|
||||
|
||||
void mergeInValue(Value *V, LatticeVal MergeWithV) {
|
||||
assert(!isa<StructType>(V->getType()) && "Should use other method");
|
||||
assert(!V->getType()->isStructTy() && "Should use other method");
|
||||
mergeInValue(ValueState[V], V, MergeWithV);
|
||||
}
|
||||
|
||||
@ -369,7 +369,7 @@ private:
|
||||
/// value. This function handles the case when the value hasn't been seen yet
|
||||
/// by properly seeding constants etc.
|
||||
LatticeVal &getValueState(Value *V) {
|
||||
assert(!isa<StructType>(V->getType()) && "Should use getStructValueState");
|
||||
assert(!V->getType()->isStructTy() && "Should use getStructValueState");
|
||||
|
||||
std::pair<DenseMap<Value*, LatticeVal>::iterator, bool> I =
|
||||
ValueState.insert(std::make_pair(V, LatticeVal()));
|
||||
@ -392,7 +392,7 @@ private:
|
||||
/// value/field pair. This function handles the case when the value hasn't
|
||||
/// been seen yet by properly seeding constants etc.
|
||||
LatticeVal &getStructValueState(Value *V, unsigned i) {
|
||||
assert(isa<StructType>(V->getType()) && "Should use getValueState");
|
||||
assert(V->getType()->isStructTy() && "Should use getValueState");
|
||||
assert(i < cast<StructType>(V->getType())->getNumElements() &&
|
||||
"Invalid element #");
|
||||
|
||||
@ -666,7 +666,7 @@ bool SCCPSolver::isEdgeFeasible(BasicBlock *From, BasicBlock *To) {
|
||||
void SCCPSolver::visitPHINode(PHINode &PN) {
|
||||
// If this PN returns a struct, just mark the result overdefined.
|
||||
// TODO: We could do a lot better than this if code actually uses this.
|
||||
if (isa<StructType>(PN.getType()))
|
||||
if (PN.getType()->isStructTy())
|
||||
return markAnythingOverdefined(&PN);
|
||||
|
||||
if (getValueState(&PN).isOverdefined()) {
|
||||
@ -742,7 +742,7 @@ void SCCPSolver::visitReturnInst(ReturnInst &I) {
|
||||
Value *ResultOp = I.getOperand(0);
|
||||
|
||||
// If we are tracking the return value of this function, merge it in.
|
||||
if (!TrackedRetVals.empty() && !isa<StructType>(ResultOp->getType())) {
|
||||
if (!TrackedRetVals.empty() && !ResultOp->getType()->isStructTy()) {
|
||||
DenseMap<Function*, LatticeVal>::iterator TFRVI =
|
||||
TrackedRetVals.find(F);
|
||||
if (TFRVI != TrackedRetVals.end()) {
|
||||
@ -787,7 +787,7 @@ void SCCPSolver::visitCastInst(CastInst &I) {
|
||||
void SCCPSolver::visitExtractValueInst(ExtractValueInst &EVI) {
|
||||
// If this returns a struct, mark all elements over defined, we don't track
|
||||
// structs in structs.
|
||||
if (isa<StructType>(EVI.getType()))
|
||||
if (EVI.getType()->isStructTy())
|
||||
return markAnythingOverdefined(&EVI);
|
||||
|
||||
// If this is extracting from more than one level of struct, we don't know.
|
||||
@ -795,7 +795,7 @@ void SCCPSolver::visitExtractValueInst(ExtractValueInst &EVI) {
|
||||
return markOverdefined(&EVI);
|
||||
|
||||
Value *AggVal = EVI.getAggregateOperand();
|
||||
if (isa<StructType>(AggVal->getType())) {
|
||||
if (AggVal->getType()->isStructTy()) {
|
||||
unsigned i = *EVI.idx_begin();
|
||||
LatticeVal EltVal = getStructValueState(AggVal, i);
|
||||
mergeInValue(getValueState(&EVI), &EVI, EltVal);
|
||||
@ -828,7 +828,7 @@ void SCCPSolver::visitInsertValueInst(InsertValueInst &IVI) {
|
||||
}
|
||||
|
||||
Value *Val = IVI.getInsertedValueOperand();
|
||||
if (isa<StructType>(Val->getType()))
|
||||
if (Val->getType()->isStructTy())
|
||||
// We don't track structs in structs.
|
||||
markOverdefined(getStructValueState(&IVI, i), &IVI);
|
||||
else {
|
||||
@ -841,7 +841,7 @@ void SCCPSolver::visitInsertValueInst(InsertValueInst &IVI) {
|
||||
void SCCPSolver::visitSelectInst(SelectInst &I) {
|
||||
// If this select returns a struct, just mark the result overdefined.
|
||||
// TODO: We could do a lot better than this if code actually uses this.
|
||||
if (isa<StructType>(I.getType()))
|
||||
if (I.getType()->isStructTy())
|
||||
return markAnythingOverdefined(&I);
|
||||
|
||||
LatticeVal CondValue = getValueState(I.getCondition());
|
||||
@ -1166,7 +1166,7 @@ void SCCPSolver::visitGetElementPtrInst(GetElementPtrInst &I) {
|
||||
|
||||
void SCCPSolver::visitStoreInst(StoreInst &SI) {
|
||||
// If this store is of a struct, ignore it.
|
||||
if (isa<StructType>(SI.getOperand(0)->getType()))
|
||||
if (SI.getOperand(0)->getType()->isStructTy())
|
||||
return;
|
||||
|
||||
if (TrackedGlobals.empty() || !isa<GlobalVariable>(SI.getOperand(1)))
|
||||
@ -1187,7 +1187,7 @@ void SCCPSolver::visitStoreInst(StoreInst &SI) {
|
||||
// global, we can replace the load with the loaded constant value!
|
||||
void SCCPSolver::visitLoadInst(LoadInst &I) {
|
||||
// If this load is of a struct, just mark the result overdefined.
|
||||
if (isa<StructType>(I.getType()))
|
||||
if (I.getType()->isStructTy())
|
||||
return markAnythingOverdefined(&I);
|
||||
|
||||
LatticeVal PtrVal = getValueState(I.getOperand(0));
|
||||
@ -1241,7 +1241,7 @@ CallOverdefined:
|
||||
|
||||
// Otherwise, if we have a single return value case, and if the function is
|
||||
// a declaration, maybe we can constant fold it.
|
||||
if (F && F->isDeclaration() && !isa<StructType>(I->getType()) &&
|
||||
if (F && F->isDeclaration() && !I->getType()->isStructTy() &&
|
||||
canConstantFoldCallTo(F)) {
|
||||
|
||||
SmallVector<Constant*, 8> Operands;
|
||||
@ -1352,7 +1352,7 @@ void SCCPSolver::Solve() {
|
||||
// since all of its users will have already been marked as overdefined.
|
||||
// Update all of the users of this instruction's value.
|
||||
//
|
||||
if (isa<StructType>(I->getType()) || !getValueState(I).isOverdefined())
|
||||
if (I->getType()->isStructTy() || !getValueState(I).isOverdefined())
|
||||
for (Value::use_iterator UI = I->use_begin(), E = I->use_end();
|
||||
UI != E; ++UI)
|
||||
if (Instruction *I = dyn_cast<Instruction>(*UI))
|
||||
@ -1418,7 +1418,7 @@ bool SCCPSolver::ResolvedUndefsIn(Function &F) {
|
||||
if (!LV.isUndefined()) continue;
|
||||
|
||||
// No instructions using structs need disambiguation.
|
||||
if (isa<StructType>(I->getOperand(0)->getType()))
|
||||
if (I->getOperand(0)->getType()->isStructTy())
|
||||
continue;
|
||||
|
||||
// Get the lattice values of the first two operands for use below.
|
||||
@ -1426,7 +1426,7 @@ bool SCCPSolver::ResolvedUndefsIn(Function &F) {
|
||||
LatticeVal Op1LV;
|
||||
if (I->getNumOperands() == 2) {
|
||||
// No instructions using structs need disambiguation.
|
||||
if (isa<StructType>(I->getOperand(1)->getType()))
|
||||
if (I->getOperand(1)->getType()->isStructTy())
|
||||
continue;
|
||||
|
||||
// If this is a two-operand instruction, and if both operands are
|
||||
@ -1656,7 +1656,7 @@ bool SCCP::runOnFunction(Function &F) {
|
||||
continue;
|
||||
|
||||
// TODO: Reconstruct structs from their elements.
|
||||
if (isa<StructType>(Inst->getType()))
|
||||
if (Inst->getType()->isStructTy())
|
||||
continue;
|
||||
|
||||
LatticeVal IV = Solver.getLatticeValueFor(Inst);
|
||||
@ -1792,7 +1792,7 @@ bool IPSCCP::runOnModule(Module &M) {
|
||||
if (Solver.isBlockExecutable(F->begin())) {
|
||||
for (Function::arg_iterator AI = F->arg_begin(), E = F->arg_end();
|
||||
AI != E; ++AI) {
|
||||
if (AI->use_empty() || isa<StructType>(AI->getType())) continue;
|
||||
if (AI->use_empty() || AI->getType()->isStructTy()) continue;
|
||||
|
||||
// TODO: Could use getStructLatticeValueFor to find out if the entire
|
||||
// result is a constant and replace it entirely if so.
|
||||
@ -1835,7 +1835,7 @@ bool IPSCCP::runOnModule(Module &M) {
|
||||
|
||||
for (BasicBlock::iterator BI = BB->begin(), E = BB->end(); BI != E; ) {
|
||||
Instruction *Inst = BI++;
|
||||
if (Inst->getType()->isVoidTy() || isa<StructType>(Inst->getType()))
|
||||
if (Inst->getType()->isVoidTy() || Inst->getType()->isStructTy())
|
||||
continue;
|
||||
|
||||
// TODO: Could use getStructLatticeValueFor to find out if the entire
|
||||
|
@ -302,7 +302,7 @@ bool SROA::performScalarRepl(Function &F) {
|
||||
// random stuff that doesn't use vectors (e.g. <9 x double>) because then
|
||||
// we just get a lot of insert/extracts. If at least one vector is
|
||||
// involved, then we probably really do have a union of vector/array.
|
||||
if (VectorTy && isa<VectorType>(VectorTy) && HadAVector) {
|
||||
if (VectorTy && VectorTy->isVectorTy() && HadAVector) {
|
||||
DEBUG(dbgs() << "CONVERT TO VECTOR: " << *AI << "\n TYPE = "
|
||||
<< *VectorTy << '\n');
|
||||
|
||||
@ -449,7 +449,7 @@ void SROA::isSafeGEP(GetElementPtrInst *GEPI, AllocaInst *AI,
|
||||
// into.
|
||||
for (; GEPIt != E; ++GEPIt) {
|
||||
// Ignore struct elements, no extra checking needed for these.
|
||||
if (isa<StructType>(*GEPIt))
|
||||
if ((*GEPIt)->isStructTy())
|
||||
continue;
|
||||
|
||||
ConstantInt *IdxVal = dyn_cast<ConstantInt>(GEPIt.getOperand());
|
||||
@ -480,7 +480,7 @@ void SROA::isSafeMemAccess(AllocaInst *AI, uint64_t Offset, uint64_t MemSize,
|
||||
// (which are essentially the same as the MemIntrinsics, especially with
|
||||
// regard to copying padding between elements), or references using the
|
||||
// aggregate type of the alloca.
|
||||
if (!MemOpType || isa<IntegerType>(MemOpType) || UsesAggregateType) {
|
||||
if (!MemOpType || MemOpType->isIntegerTy() || UsesAggregateType) {
|
||||
if (!UsesAggregateType) {
|
||||
if (isStore)
|
||||
Info.isMemCpyDst = true;
|
||||
@ -565,7 +565,7 @@ void SROA::RewriteForScalarRepl(Instruction *I, AllocaInst *AI, uint64_t Offset,
|
||||
}
|
||||
LI->replaceAllUsesWith(Insert);
|
||||
DeadInsts.push_back(LI);
|
||||
} else if (isa<IntegerType>(LIType) &&
|
||||
} else if (LIType->isIntegerTy() &&
|
||||
TD->getTypeAllocSize(LIType) ==
|
||||
TD->getTypeAllocSize(AI->getAllocatedType())) {
|
||||
// If this is a load of the entire alloca to an integer, rewrite it.
|
||||
@ -588,7 +588,7 @@ void SROA::RewriteForScalarRepl(Instruction *I, AllocaInst *AI, uint64_t Offset,
|
||||
new StoreInst(Extract, NewElts[i], SI);
|
||||
}
|
||||
DeadInsts.push_back(SI);
|
||||
} else if (isa<IntegerType>(SIType) &&
|
||||
} else if (SIType->isIntegerTy() &&
|
||||
TD->getTypeAllocSize(SIType) ==
|
||||
TD->getTypeAllocSize(AI->getAllocatedType())) {
|
||||
// If this is a store of the entire alloca from an integer, rewrite it.
|
||||
@ -833,7 +833,7 @@ void SROA::RewriteMemIntrinUserOfAlloca(MemIntrinsic *MI, Instruction *Inst,
|
||||
|
||||
// Convert the integer value to the appropriate type.
|
||||
StoreVal = ConstantInt::get(Context, TotalVal);
|
||||
if (isa<PointerType>(ValTy))
|
||||
if (ValTy->isPointerTy())
|
||||
StoreVal = ConstantExpr::getIntToPtr(StoreVal, ValTy);
|
||||
else if (ValTy->isFloatingPointTy())
|
||||
StoreVal = ConstantExpr::getBitCast(StoreVal, ValTy);
|
||||
@ -939,7 +939,7 @@ void SROA::RewriteStoreUserOfWholeAlloca(StoreInst *SI, AllocaInst *AI,
|
||||
Value *DestField = NewElts[i];
|
||||
if (EltVal->getType() == FieldTy) {
|
||||
// Storing to an integer field of this size, just do it.
|
||||
} else if (FieldTy->isFloatingPointTy() || isa<VectorType>(FieldTy)) {
|
||||
} else if (FieldTy->isFloatingPointTy() || FieldTy->isVectorTy()) {
|
||||
// Bitcast to the right element type (for fp/vector values).
|
||||
EltVal = new BitCastInst(EltVal, FieldTy, "", SI);
|
||||
} else {
|
||||
@ -984,7 +984,7 @@ void SROA::RewriteStoreUserOfWholeAlloca(StoreInst *SI, AllocaInst *AI,
|
||||
if (EltVal->getType() == ArrayEltTy) {
|
||||
// Storing to an integer field of this size, just do it.
|
||||
} else if (ArrayEltTy->isFloatingPointTy() ||
|
||||
isa<VectorType>(ArrayEltTy)) {
|
||||
ArrayEltTy->isVectorTy()) {
|
||||
// Bitcast to the right element type (for fp/vector values).
|
||||
EltVal = new BitCastInst(EltVal, ArrayEltTy, "", SI);
|
||||
} else {
|
||||
@ -1044,8 +1044,8 @@ void SROA::RewriteLoadUserOfWholeAlloca(LoadInst *LI, AllocaInst *AI,
|
||||
|
||||
const IntegerType *FieldIntTy = IntegerType::get(LI->getContext(),
|
||||
FieldSizeBits);
|
||||
if (!isa<IntegerType>(FieldTy) && !FieldTy->isFloatingPointTy() &&
|
||||
!isa<VectorType>(FieldTy))
|
||||
if (!FieldTy->isIntegerTy() && !FieldTy->isFloatingPointTy() &&
|
||||
!FieldTy->isVectorTy())
|
||||
SrcField = new BitCastInst(SrcField,
|
||||
PointerType::getUnqual(FieldIntTy),
|
||||
"", LI);
|
||||
@ -1183,7 +1183,7 @@ static void MergeInType(const Type *In, uint64_t Offset, const Type *&VecTy,
|
||||
return;
|
||||
}
|
||||
} else if (In->isFloatTy() || In->isDoubleTy() ||
|
||||
(isa<IntegerType>(In) && In->getPrimitiveSizeInBits() >= 8 &&
|
||||
(In->isIntegerTy() && In->getPrimitiveSizeInBits() >= 8 &&
|
||||
isPowerOf2_32(In->getPrimitiveSizeInBits()))) {
|
||||
// If we're accessing something that could be an element of a vector, see
|
||||
// if the implied vector agrees with what we already have and if Offset is
|
||||
@ -1227,7 +1227,7 @@ bool SROA::CanConvertToScalar(Value *V, bool &IsNotTrivial, const Type *&VecTy,
|
||||
return false;
|
||||
MergeInType(LI->getType(), Offset, VecTy,
|
||||
AllocaSize, *TD, V->getContext());
|
||||
SawVec |= isa<VectorType>(LI->getType());
|
||||
SawVec |= LI->getType()->isVectorTy();
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -1236,7 +1236,7 @@ bool SROA::CanConvertToScalar(Value *V, bool &IsNotTrivial, const Type *&VecTy,
|
||||
if (SI->getOperand(0) == V || SI->isVolatile()) return 0;
|
||||
MergeInType(SI->getOperand(0)->getType(), Offset,
|
||||
VecTy, AllocaSize, *TD, V->getContext());
|
||||
SawVec |= isa<VectorType>(SI->getOperand(0)->getType());
|
||||
SawVec |= SI->getOperand(0)->getType()->isVectorTy();
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -1438,7 +1438,7 @@ Value *SROA::ConvertScalar_ExtractValue(Value *FromVal, const Type *ToType,
|
||||
// If the result alloca is a vector type, this is either an element
|
||||
// access or a bitcast to another vector type of the same size.
|
||||
if (const VectorType *VTy = dyn_cast<VectorType>(FromVal->getType())) {
|
||||
if (isa<VectorType>(ToType))
|
||||
if (ToType->isVectorTy())
|
||||
return Builder.CreateBitCast(FromVal, ToType, "tmp");
|
||||
|
||||
// Otherwise it must be an element access.
|
||||
@ -1521,9 +1521,9 @@ Value *SROA::ConvertScalar_ExtractValue(Value *FromVal, const Type *ToType,
|
||||
LIBitWidth), "tmp");
|
||||
|
||||
// If the result is an integer, this is a trunc or bitcast.
|
||||
if (isa<IntegerType>(ToType)) {
|
||||
if (ToType->isIntegerTy()) {
|
||||
// Should be done.
|
||||
} else if (ToType->isFloatingPointTy() || isa<VectorType>(ToType)) {
|
||||
} else if (ToType->isFloatingPointTy() || ToType->isVectorTy()) {
|
||||
// Just do a bitcast, we know the sizes match up.
|
||||
FromVal = Builder.CreateBitCast(FromVal, ToType, "tmp");
|
||||
} else {
|
||||
@ -1601,10 +1601,10 @@ Value *SROA::ConvertScalar_InsertValue(Value *SV, Value *Old,
|
||||
unsigned DestWidth = TD->getTypeSizeInBits(AllocaType);
|
||||
unsigned SrcStoreWidth = TD->getTypeStoreSizeInBits(SV->getType());
|
||||
unsigned DestStoreWidth = TD->getTypeStoreSizeInBits(AllocaType);
|
||||
if (SV->getType()->isFloatingPointTy() || isa<VectorType>(SV->getType()))
|
||||
if (SV->getType()->isFloatingPointTy() || SV->getType()->isVectorTy())
|
||||
SV = Builder.CreateBitCast(SV,
|
||||
IntegerType::get(SV->getContext(),SrcWidth), "tmp");
|
||||
else if (isa<PointerType>(SV->getType()))
|
||||
else if (SV->getType()->isPointerTy())
|
||||
SV = Builder.CreatePtrToInt(SV, TD->getIntPtrType(SV->getContext()), "tmp");
|
||||
|
||||
// Zero extend or truncate the value if needed.
|
||||
|
@ -357,7 +357,7 @@ void LibCallOptimization::EmitFPutC(Value *Char, Value *File, IRBuilder<> &B) {
|
||||
AWI[0] = AttributeWithIndex::get(2, Attribute::NoCapture);
|
||||
AWI[1] = AttributeWithIndex::get(~0u, Attribute::NoUnwind);
|
||||
Constant *F;
|
||||
if (isa<PointerType>(File->getType()))
|
||||
if (File->getType()->isPointerTy())
|
||||
F = M->getOrInsertFunction("fputc", AttrListPtr::get(AWI, 2),
|
||||
Type::getInt32Ty(*Context),
|
||||
Type::getInt32Ty(*Context), File->getType(),
|
||||
@ -384,7 +384,7 @@ void LibCallOptimization::EmitFPutS(Value *Str, Value *File, IRBuilder<> &B) {
|
||||
AWI[1] = AttributeWithIndex::get(2, Attribute::NoCapture);
|
||||
AWI[2] = AttributeWithIndex::get(~0u, Attribute::NoUnwind);
|
||||
Constant *F;
|
||||
if (isa<PointerType>(File->getType()))
|
||||
if (File->getType()->isPointerTy())
|
||||
F = M->getOrInsertFunction("fputs", AttrListPtr::get(AWI, 3),
|
||||
Type::getInt32Ty(*Context),
|
||||
Type::getInt8PtrTy(*Context),
|
||||
@ -409,7 +409,7 @@ void LibCallOptimization::EmitFWrite(Value *Ptr, Value *Size, Value *File,
|
||||
AWI[1] = AttributeWithIndex::get(4, Attribute::NoCapture);
|
||||
AWI[2] = AttributeWithIndex::get(~0u, Attribute::NoUnwind);
|
||||
Constant *F;
|
||||
if (isa<PointerType>(File->getType()))
|
||||
if (File->getType()->isPointerTy())
|
||||
F = M->getOrInsertFunction("fwrite", AttrListPtr::get(AWI, 3),
|
||||
TD->getIntPtrType(*Context),
|
||||
Type::getInt8PtrTy(*Context),
|
||||
@ -548,7 +548,7 @@ static uint64_t GetStringLengthH(Value *V, SmallPtrSet<PHINode*, 32> &PHIs) {
|
||||
/// GetStringLength - If we can compute the length of the string pointed to by
|
||||
/// the specified pointer, return 'len+1'. If we can't, return 0.
|
||||
static uint64_t GetStringLength(Value *V) {
|
||||
if (!isa<PointerType>(V->getType())) return 0;
|
||||
if (!V->getType()->isPointerTy()) return 0;
|
||||
|
||||
SmallPtrSet<PHINode*, 32> PHIs;
|
||||
uint64_t Len = GetStringLengthH(V, PHIs);
|
||||
@ -638,7 +638,7 @@ struct StrNCatOpt : public StrCatOpt {
|
||||
FT->getReturnType() != Type::getInt8PtrTy(*Context) ||
|
||||
FT->getParamType(0) != FT->getReturnType() ||
|
||||
FT->getParamType(1) != FT->getReturnType() ||
|
||||
!isa<IntegerType>(FT->getParamType(2)))
|
||||
!FT->getParamType(2)->isIntegerTy())
|
||||
return 0;
|
||||
|
||||
// Extract some information from the instruction
|
||||
@ -790,7 +790,7 @@ struct StrNCmpOpt : public LibCallOptimization {
|
||||
!FT->getReturnType()->isIntegerTy(32) ||
|
||||
FT->getParamType(0) != FT->getParamType(1) ||
|
||||
FT->getParamType(0) != Type::getInt8PtrTy(*Context) ||
|
||||
!isa<IntegerType>(FT->getParamType(2)))
|
||||
!FT->getParamType(2)->isIntegerTy())
|
||||
return 0;
|
||||
|
||||
Value *Str1P = CI->getOperand(1), *Str2P = CI->getOperand(2);
|
||||
@ -866,7 +866,7 @@ struct StrNCpyOpt : public LibCallOptimization {
|
||||
if (FT->getNumParams() != 3 || FT->getReturnType() != FT->getParamType(0) ||
|
||||
FT->getParamType(0) != FT->getParamType(1) ||
|
||||
FT->getParamType(0) != Type::getInt8PtrTy(*Context) ||
|
||||
!isa<IntegerType>(FT->getParamType(2)))
|
||||
!FT->getParamType(2)->isIntegerTy())
|
||||
return 0;
|
||||
|
||||
Value *Dst = CI->getOperand(1);
|
||||
@ -915,7 +915,7 @@ struct StrLenOpt : public LibCallOptimization {
|
||||
const FunctionType *FT = Callee->getFunctionType();
|
||||
if (FT->getNumParams() != 1 ||
|
||||
FT->getParamType(0) != Type::getInt8PtrTy(*Context) ||
|
||||
!isa<IntegerType>(FT->getReturnType()))
|
||||
!FT->getReturnType()->isIntegerTy())
|
||||
return 0;
|
||||
|
||||
Value *Src = CI->getOperand(1);
|
||||
@ -939,8 +939,8 @@ struct StrToOpt : public LibCallOptimization {
|
||||
virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) {
|
||||
const FunctionType *FT = Callee->getFunctionType();
|
||||
if ((FT->getNumParams() != 2 && FT->getNumParams() != 3) ||
|
||||
!isa<PointerType>(FT->getParamType(0)) ||
|
||||
!isa<PointerType>(FT->getParamType(1)))
|
||||
!FT->getParamType(0)->isPointerTy() ||
|
||||
!FT->getParamType(1)->isPointerTy())
|
||||
return 0;
|
||||
|
||||
Value *EndPtr = CI->getOperand(2);
|
||||
@ -960,9 +960,9 @@ struct StrStrOpt : public LibCallOptimization {
|
||||
virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) {
|
||||
const FunctionType *FT = Callee->getFunctionType();
|
||||
if (FT->getNumParams() != 2 ||
|
||||
!isa<PointerType>(FT->getParamType(0)) ||
|
||||
!isa<PointerType>(FT->getParamType(1)) ||
|
||||
!isa<PointerType>(FT->getReturnType()))
|
||||
!FT->getParamType(0)->isPointerTy() ||
|
||||
!FT->getParamType(1)->isPointerTy() ||
|
||||
!FT->getReturnType()->isPointerTy())
|
||||
return 0;
|
||||
|
||||
// fold strstr(x, x) -> x.
|
||||
@ -1006,8 +1006,8 @@ struct StrStrOpt : public LibCallOptimization {
|
||||
struct MemCmpOpt : public LibCallOptimization {
|
||||
virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) {
|
||||
const FunctionType *FT = Callee->getFunctionType();
|
||||
if (FT->getNumParams() != 3 || !isa<PointerType>(FT->getParamType(0)) ||
|
||||
!isa<PointerType>(FT->getParamType(1)) ||
|
||||
if (FT->getNumParams() != 3 || !FT->getParamType(0)->isPointerTy() ||
|
||||
!FT->getParamType(1)->isPointerTy() ||
|
||||
!FT->getReturnType()->isIntegerTy(32))
|
||||
return 0;
|
||||
|
||||
@ -1055,8 +1055,8 @@ struct MemCpyOpt : public LibCallOptimization {
|
||||
|
||||
const FunctionType *FT = Callee->getFunctionType();
|
||||
if (FT->getNumParams() != 3 || FT->getReturnType() != FT->getParamType(0) ||
|
||||
!isa<PointerType>(FT->getParamType(0)) ||
|
||||
!isa<PointerType>(FT->getParamType(1)) ||
|
||||
!FT->getParamType(0)->isPointerTy() ||
|
||||
!FT->getParamType(1)->isPointerTy() ||
|
||||
FT->getParamType(2) != TD->getIntPtrType(*Context))
|
||||
return 0;
|
||||
|
||||
@ -1076,8 +1076,8 @@ struct MemMoveOpt : public LibCallOptimization {
|
||||
|
||||
const FunctionType *FT = Callee->getFunctionType();
|
||||
if (FT->getNumParams() != 3 || FT->getReturnType() != FT->getParamType(0) ||
|
||||
!isa<PointerType>(FT->getParamType(0)) ||
|
||||
!isa<PointerType>(FT->getParamType(1)) ||
|
||||
!FT->getParamType(0)->isPointerTy() ||
|
||||
!FT->getParamType(1)->isPointerTy() ||
|
||||
FT->getParamType(2) != TD->getIntPtrType(*Context))
|
||||
return 0;
|
||||
|
||||
@ -1097,8 +1097,8 @@ struct MemSetOpt : public LibCallOptimization {
|
||||
|
||||
const FunctionType *FT = Callee->getFunctionType();
|
||||
if (FT->getNumParams() != 3 || FT->getReturnType() != FT->getParamType(0) ||
|
||||
!isa<PointerType>(FT->getParamType(0)) ||
|
||||
!isa<IntegerType>(FT->getParamType(1)) ||
|
||||
!FT->getParamType(0)->isPointerTy() ||
|
||||
!FT->getParamType(1)->isIntegerTy() ||
|
||||
FT->getParamType(2) != TD->getIntPtrType(*Context))
|
||||
return 0;
|
||||
|
||||
@ -1124,9 +1124,9 @@ struct MemCpyChkOpt : public LibCallOptimization {
|
||||
|
||||
const FunctionType *FT = Callee->getFunctionType();
|
||||
if (FT->getNumParams() != 4 || FT->getReturnType() != FT->getParamType(0) ||
|
||||
!isa<PointerType>(FT->getParamType(0)) ||
|
||||
!isa<PointerType>(FT->getParamType(1)) ||
|
||||
!isa<IntegerType>(FT->getParamType(3)) ||
|
||||
!FT->getParamType(0)->isPointerTy() ||
|
||||
!FT->getParamType(1)->isPointerTy() ||
|
||||
!FT->getParamType(3)->isIntegerTy() ||
|
||||
FT->getParamType(2) != TD->getIntPtrType(*Context))
|
||||
return 0;
|
||||
|
||||
@ -1152,9 +1152,9 @@ struct MemSetChkOpt : public LibCallOptimization {
|
||||
|
||||
const FunctionType *FT = Callee->getFunctionType();
|
||||
if (FT->getNumParams() != 4 || FT->getReturnType() != FT->getParamType(0) ||
|
||||
!isa<PointerType>(FT->getParamType(0)) ||
|
||||
!isa<IntegerType>(FT->getParamType(1)) ||
|
||||
!isa<IntegerType>(FT->getParamType(3)) ||
|
||||
!FT->getParamType(0)->isPointerTy() ||
|
||||
!FT->getParamType(1)->isIntegerTy() ||
|
||||
!FT->getParamType(3)->isIntegerTy() ||
|
||||
FT->getParamType(2) != TD->getIntPtrType(*Context))
|
||||
return 0;
|
||||
|
||||
@ -1182,9 +1182,9 @@ struct MemMoveChkOpt : public LibCallOptimization {
|
||||
|
||||
const FunctionType *FT = Callee->getFunctionType();
|
||||
if (FT->getNumParams() != 4 || FT->getReturnType() != FT->getParamType(0) ||
|
||||
!isa<PointerType>(FT->getParamType(0)) ||
|
||||
!isa<PointerType>(FT->getParamType(1)) ||
|
||||
!isa<IntegerType>(FT->getParamType(3)) ||
|
||||
!FT->getParamType(0)->isPointerTy() ||
|
||||
!FT->getParamType(1)->isPointerTy() ||
|
||||
!FT->getParamType(3)->isIntegerTy() ||
|
||||
FT->getParamType(2) != TD->getIntPtrType(*Context))
|
||||
return 0;
|
||||
|
||||
@ -1205,8 +1205,8 @@ struct StrCpyChkOpt : public LibCallOptimization {
|
||||
virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) {
|
||||
const FunctionType *FT = Callee->getFunctionType();
|
||||
if (FT->getNumParams() != 3 || FT->getReturnType() != FT->getParamType(0) ||
|
||||
!isa<PointerType>(FT->getParamType(0)) ||
|
||||
!isa<PointerType>(FT->getParamType(1)))
|
||||
!FT->getParamType(0)->isPointerTy() ||
|
||||
!FT->getParamType(1)->isPointerTy())
|
||||
return 0;
|
||||
|
||||
ConstantInt *SizeCI = dyn_cast<ConstantInt>(CI->getOperand(3));
|
||||
@ -1376,7 +1376,7 @@ struct FFSOpt : public LibCallOptimization {
|
||||
// result type.
|
||||
if (FT->getNumParams() != 1 ||
|
||||
!FT->getReturnType()->isIntegerTy(32) ||
|
||||
!isa<IntegerType>(FT->getParamType(0)))
|
||||
!FT->getParamType(0)->isIntegerTy())
|
||||
return 0;
|
||||
|
||||
Value *Op = CI->getOperand(1);
|
||||
@ -1410,7 +1410,7 @@ struct IsDigitOpt : public LibCallOptimization {
|
||||
virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) {
|
||||
const FunctionType *FT = Callee->getFunctionType();
|
||||
// We require integer(i32)
|
||||
if (FT->getNumParams() != 1 || !isa<IntegerType>(FT->getReturnType()) ||
|
||||
if (FT->getNumParams() != 1 || !FT->getReturnType()->isIntegerTy() ||
|
||||
!FT->getParamType(0)->isIntegerTy(32))
|
||||
return 0;
|
||||
|
||||
@ -1431,7 +1431,7 @@ struct IsAsciiOpt : public LibCallOptimization {
|
||||
virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) {
|
||||
const FunctionType *FT = Callee->getFunctionType();
|
||||
// We require integer(i32)
|
||||
if (FT->getNumParams() != 1 || !isa<IntegerType>(FT->getReturnType()) ||
|
||||
if (FT->getNumParams() != 1 || !FT->getReturnType()->isIntegerTy() ||
|
||||
!FT->getParamType(0)->isIntegerTy(32))
|
||||
return 0;
|
||||
|
||||
@ -1450,7 +1450,7 @@ struct AbsOpt : public LibCallOptimization {
|
||||
virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) {
|
||||
const FunctionType *FT = Callee->getFunctionType();
|
||||
// We require integer(integer) where the types agree.
|
||||
if (FT->getNumParams() != 1 || !isa<IntegerType>(FT->getReturnType()) ||
|
||||
if (FT->getNumParams() != 1 || !FT->getReturnType()->isIntegerTy() ||
|
||||
FT->getParamType(0) != FT->getReturnType())
|
||||
return 0;
|
||||
|
||||
@ -1493,8 +1493,8 @@ struct PrintFOpt : public LibCallOptimization {
|
||||
virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) {
|
||||
// Require one fixed pointer argument and an integer/void result.
|
||||
const FunctionType *FT = Callee->getFunctionType();
|
||||
if (FT->getNumParams() < 1 || !isa<PointerType>(FT->getParamType(0)) ||
|
||||
!(isa<IntegerType>(FT->getReturnType()) ||
|
||||
if (FT->getNumParams() < 1 || !FT->getParamType(0)->isPointerTy() ||
|
||||
!(FT->getReturnType()->isIntegerTy() ||
|
||||
FT->getReturnType()->isVoidTy()))
|
||||
return 0;
|
||||
|
||||
@ -1534,7 +1534,7 @@ struct PrintFOpt : public LibCallOptimization {
|
||||
// Optimize specific format strings.
|
||||
// printf("%c", chr) --> putchar(*(i8*)dst)
|
||||
if (FormatStr == "%c" && CI->getNumOperands() > 2 &&
|
||||
isa<IntegerType>(CI->getOperand(2)->getType())) {
|
||||
CI->getOperand(2)->getType()->isIntegerTy()) {
|
||||
Value *Res = EmitPutChar(CI->getOperand(2), B);
|
||||
|
||||
if (CI->use_empty()) return CI;
|
||||
@ -1543,7 +1543,7 @@ struct PrintFOpt : public LibCallOptimization {
|
||||
|
||||
// printf("%s\n", str) --> puts(str)
|
||||
if (FormatStr == "%s\n" && CI->getNumOperands() > 2 &&
|
||||
isa<PointerType>(CI->getOperand(2)->getType()) &&
|
||||
CI->getOperand(2)->getType()->isPointerTy() &&
|
||||
CI->use_empty()) {
|
||||
EmitPutS(CI->getOperand(2), B);
|
||||
return CI;
|
||||
@ -1559,9 +1559,9 @@ struct SPrintFOpt : public LibCallOptimization {
|
||||
virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) {
|
||||
// Require two fixed pointer arguments and an integer result.
|
||||
const FunctionType *FT = Callee->getFunctionType();
|
||||
if (FT->getNumParams() != 2 || !isa<PointerType>(FT->getParamType(0)) ||
|
||||
!isa<PointerType>(FT->getParamType(1)) ||
|
||||
!isa<IntegerType>(FT->getReturnType()))
|
||||
if (FT->getNumParams() != 2 || !FT->getParamType(0)->isPointerTy() ||
|
||||
!FT->getParamType(1)->isPointerTy() ||
|
||||
!FT->getReturnType()->isIntegerTy())
|
||||
return 0;
|
||||
|
||||
// Check for a fixed format string.
|
||||
@ -1595,7 +1595,7 @@ struct SPrintFOpt : public LibCallOptimization {
|
||||
// Decode the second character of the format string.
|
||||
if (FormatStr[1] == 'c') {
|
||||
// sprintf(dst, "%c", chr) --> *(i8*)dst = chr; *((i8*)dst+1) = 0
|
||||
if (!isa<IntegerType>(CI->getOperand(3)->getType())) return 0;
|
||||
if (!CI->getOperand(3)->getType()->isIntegerTy()) return 0;
|
||||
Value *V = B.CreateTrunc(CI->getOperand(3),
|
||||
Type::getInt8Ty(*Context), "char");
|
||||
Value *Ptr = CastToCStr(CI->getOperand(1), B);
|
||||
@ -1612,7 +1612,7 @@ struct SPrintFOpt : public LibCallOptimization {
|
||||
if (!TD) return 0;
|
||||
|
||||
// sprintf(dest, "%s", str) -> llvm.memcpy(dest, str, strlen(str)+1, 1)
|
||||
if (!isa<PointerType>(CI->getOperand(3)->getType())) return 0;
|
||||
if (!CI->getOperand(3)->getType()->isPointerTy()) return 0;
|
||||
|
||||
Value *Len = EmitStrLen(CI->getOperand(3), B);
|
||||
Value *IncLen = B.CreateAdd(Len,
|
||||
@ -1634,11 +1634,11 @@ struct FWriteOpt : public LibCallOptimization {
|
||||
virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) {
|
||||
// Require a pointer, an integer, an integer, a pointer, returning integer.
|
||||
const FunctionType *FT = Callee->getFunctionType();
|
||||
if (FT->getNumParams() != 4 || !isa<PointerType>(FT->getParamType(0)) ||
|
||||
!isa<IntegerType>(FT->getParamType(1)) ||
|
||||
!isa<IntegerType>(FT->getParamType(2)) ||
|
||||
!isa<PointerType>(FT->getParamType(3)) ||
|
||||
!isa<IntegerType>(FT->getReturnType()))
|
||||
if (FT->getNumParams() != 4 || !FT->getParamType(0)->isPointerTy() ||
|
||||
!FT->getParamType(1)->isIntegerTy() ||
|
||||
!FT->getParamType(2)->isIntegerTy() ||
|
||||
!FT->getParamType(3)->isPointerTy() ||
|
||||
!FT->getReturnType()->isIntegerTy())
|
||||
return 0;
|
||||
|
||||
// Get the element size and count.
|
||||
@ -1672,8 +1672,8 @@ struct FPutsOpt : public LibCallOptimization {
|
||||
|
||||
// Require two pointers. Also, we can't optimize if return value is used.
|
||||
const FunctionType *FT = Callee->getFunctionType();
|
||||
if (FT->getNumParams() != 2 || !isa<PointerType>(FT->getParamType(0)) ||
|
||||
!isa<PointerType>(FT->getParamType(1)) ||
|
||||
if (FT->getNumParams() != 2 || !FT->getParamType(0)->isPointerTy() ||
|
||||
!FT->getParamType(1)->isPointerTy() ||
|
||||
!CI->use_empty())
|
||||
return 0;
|
||||
|
||||
@ -1694,9 +1694,9 @@ struct FPrintFOpt : public LibCallOptimization {
|
||||
virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) {
|
||||
// Require two fixed paramters as pointers and integer result.
|
||||
const FunctionType *FT = Callee->getFunctionType();
|
||||
if (FT->getNumParams() != 2 || !isa<PointerType>(FT->getParamType(0)) ||
|
||||
!isa<PointerType>(FT->getParamType(1)) ||
|
||||
!isa<IntegerType>(FT->getReturnType()))
|
||||
if (FT->getNumParams() != 2 || !FT->getParamType(0)->isPointerTy() ||
|
||||
!FT->getParamType(1)->isPointerTy() ||
|
||||
!FT->getReturnType()->isIntegerTy())
|
||||
return 0;
|
||||
|
||||
// All the optimizations depend on the format string.
|
||||
@ -1728,14 +1728,14 @@ struct FPrintFOpt : public LibCallOptimization {
|
||||
// Decode the second character of the format string.
|
||||
if (FormatStr[1] == 'c') {
|
||||
// fprintf(F, "%c", chr) --> *(i8*)dst = chr
|
||||
if (!isa<IntegerType>(CI->getOperand(3)->getType())) return 0;
|
||||
if (!CI->getOperand(3)->getType()->isIntegerTy()) return 0;
|
||||
EmitFPutC(CI->getOperand(3), CI->getOperand(1), B);
|
||||
return ConstantInt::get(CI->getType(), 1);
|
||||
}
|
||||
|
||||
if (FormatStr[1] == 's') {
|
||||
// fprintf(F, "%s", str) -> fputs(str, F)
|
||||
if (!isa<PointerType>(CI->getOperand(3)->getType()) || !CI->use_empty())
|
||||
if (!CI->getOperand(3)->getType()->isPointerTy() || !CI->use_empty())
|
||||
return 0;
|
||||
EmitFPutS(CI->getOperand(3), CI->getOperand(1), B);
|
||||
return CI;
|
||||
@ -2000,7 +2000,7 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
case 's':
|
||||
if (Name == "strlen") {
|
||||
if (FTy->getNumParams() != 1 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)))
|
||||
!FTy->getParamType(0)->isPointerTy())
|
||||
continue;
|
||||
setOnlyReadsMemory(F);
|
||||
setDoesNotThrow(F);
|
||||
@ -2018,14 +2018,14 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
Name == "strncpy" ||
|
||||
Name == "strtoull") {
|
||||
if (FTy->getNumParams() < 2 ||
|
||||
!isa<PointerType>(FTy->getParamType(1)))
|
||||
!FTy->getParamType(1)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 2);
|
||||
} else if (Name == "strxfrm") {
|
||||
if (FTy->getNumParams() != 3 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)) ||
|
||||
!isa<PointerType>(FTy->getParamType(1)))
|
||||
!FTy->getParamType(0)->isPointerTy() ||
|
||||
!FTy->getParamType(1)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 1);
|
||||
@ -2038,8 +2038,8 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
Name == "strcasecmp" ||
|
||||
Name == "strncasecmp") {
|
||||
if (FTy->getNumParams() < 2 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)) ||
|
||||
!isa<PointerType>(FTy->getParamType(1)))
|
||||
!FTy->getParamType(0)->isPointerTy() ||
|
||||
!FTy->getParamType(1)->isPointerTy())
|
||||
continue;
|
||||
setOnlyReadsMemory(F);
|
||||
setDoesNotThrow(F);
|
||||
@ -2048,7 +2048,7 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
} else if (Name == "strstr" ||
|
||||
Name == "strpbrk") {
|
||||
if (FTy->getNumParams() != 2 ||
|
||||
!isa<PointerType>(FTy->getParamType(1)))
|
||||
!FTy->getParamType(1)->isPointerTy())
|
||||
continue;
|
||||
setOnlyReadsMemory(F);
|
||||
setDoesNotThrow(F);
|
||||
@ -2056,7 +2056,7 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
} else if (Name == "strtok" ||
|
||||
Name == "strtok_r") {
|
||||
if (FTy->getNumParams() < 2 ||
|
||||
!isa<PointerType>(FTy->getParamType(1)))
|
||||
!FTy->getParamType(1)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 2);
|
||||
@ -2064,15 +2064,15 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
Name == "setbuf" ||
|
||||
Name == "setvbuf") {
|
||||
if (FTy->getNumParams() < 1 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)))
|
||||
!FTy->getParamType(0)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 1);
|
||||
} else if (Name == "strdup" ||
|
||||
Name == "strndup") {
|
||||
if (FTy->getNumParams() < 1 ||
|
||||
!isa<PointerType>(FTy->getReturnType()) ||
|
||||
!isa<PointerType>(FTy->getParamType(0)))
|
||||
!FTy->getReturnType()->isPointerTy() ||
|
||||
!FTy->getParamType(0)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotAlias(F, 0);
|
||||
@ -2082,31 +2082,31 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
Name == "sprintf" ||
|
||||
Name == "statvfs") {
|
||||
if (FTy->getNumParams() < 2 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)) ||
|
||||
!isa<PointerType>(FTy->getParamType(1)))
|
||||
!FTy->getParamType(0)->isPointerTy() ||
|
||||
!FTy->getParamType(1)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 1);
|
||||
setDoesNotCapture(F, 2);
|
||||
} else if (Name == "snprintf") {
|
||||
if (FTy->getNumParams() != 3 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)) ||
|
||||
!isa<PointerType>(FTy->getParamType(2)))
|
||||
!FTy->getParamType(0)->isPointerTy() ||
|
||||
!FTy->getParamType(2)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 1);
|
||||
setDoesNotCapture(F, 3);
|
||||
} else if (Name == "setitimer") {
|
||||
if (FTy->getNumParams() != 3 ||
|
||||
!isa<PointerType>(FTy->getParamType(1)) ||
|
||||
!isa<PointerType>(FTy->getParamType(2)))
|
||||
!FTy->getParamType(1)->isPointerTy() ||
|
||||
!FTy->getParamType(2)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 2);
|
||||
setDoesNotCapture(F, 3);
|
||||
} else if (Name == "system") {
|
||||
if (FTy->getNumParams() != 1 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)))
|
||||
!FTy->getParamType(0)->isPointerTy())
|
||||
continue;
|
||||
// May throw; "system" is a valid pthread cancellation point.
|
||||
setDoesNotCapture(F, 1);
|
||||
@ -2115,14 +2115,14 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
case 'm':
|
||||
if (Name == "malloc") {
|
||||
if (FTy->getNumParams() != 1 ||
|
||||
!isa<PointerType>(FTy->getReturnType()))
|
||||
!FTy->getReturnType()->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotAlias(F, 0);
|
||||
} else if (Name == "memcmp") {
|
||||
if (FTy->getNumParams() != 3 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)) ||
|
||||
!isa<PointerType>(FTy->getParamType(1)))
|
||||
!FTy->getParamType(0)->isPointerTy() ||
|
||||
!FTy->getParamType(1)->isPointerTy())
|
||||
continue;
|
||||
setOnlyReadsMemory(F);
|
||||
setDoesNotThrow(F);
|
||||
@ -2141,18 +2141,18 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
Name == "memccpy" ||
|
||||
Name == "memmove") {
|
||||
if (FTy->getNumParams() < 2 ||
|
||||
!isa<PointerType>(FTy->getParamType(1)))
|
||||
!FTy->getParamType(1)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 2);
|
||||
} else if (Name == "memalign") {
|
||||
if (!isa<PointerType>(FTy->getReturnType()))
|
||||
if (!FTy->getReturnType()->isPointerTy())
|
||||
continue;
|
||||
setDoesNotAlias(F, 0);
|
||||
} else if (Name == "mkdir" ||
|
||||
Name == "mktime") {
|
||||
if (FTy->getNumParams() == 0 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)))
|
||||
!FTy->getParamType(0)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 1);
|
||||
@ -2161,15 +2161,15 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
case 'r':
|
||||
if (Name == "realloc") {
|
||||
if (FTy->getNumParams() != 2 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)) ||
|
||||
!isa<PointerType>(FTy->getReturnType()))
|
||||
!FTy->getParamType(0)->isPointerTy() ||
|
||||
!FTy->getReturnType()->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotAlias(F, 0);
|
||||
setDoesNotCapture(F, 1);
|
||||
} else if (Name == "read") {
|
||||
if (FTy->getNumParams() != 3 ||
|
||||
!isa<PointerType>(FTy->getParamType(1)))
|
||||
!FTy->getParamType(1)->isPointerTy())
|
||||
continue;
|
||||
// May throw; "read" is a valid pthread cancellation point.
|
||||
setDoesNotCapture(F, 2);
|
||||
@ -2178,15 +2178,15 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
Name == "remove" ||
|
||||
Name == "realpath") {
|
||||
if (FTy->getNumParams() < 1 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)))
|
||||
!FTy->getParamType(0)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 1);
|
||||
} else if (Name == "rename" ||
|
||||
Name == "readlink") {
|
||||
if (FTy->getNumParams() < 2 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)) ||
|
||||
!isa<PointerType>(FTy->getParamType(1)))
|
||||
!FTy->getParamType(0)->isPointerTy() ||
|
||||
!FTy->getParamType(1)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 1);
|
||||
@ -2196,7 +2196,7 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
case 'w':
|
||||
if (Name == "write") {
|
||||
if (FTy->getNumParams() != 3 ||
|
||||
!isa<PointerType>(FTy->getParamType(1)))
|
||||
!FTy->getParamType(1)->isPointerTy())
|
||||
continue;
|
||||
// May throw; "write" is a valid pthread cancellation point.
|
||||
setDoesNotCapture(F, 2);
|
||||
@ -2205,16 +2205,16 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
case 'b':
|
||||
if (Name == "bcopy") {
|
||||
if (FTy->getNumParams() != 3 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)) ||
|
||||
!isa<PointerType>(FTy->getParamType(1)))
|
||||
!FTy->getParamType(0)->isPointerTy() ||
|
||||
!FTy->getParamType(1)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 1);
|
||||
setDoesNotCapture(F, 2);
|
||||
} else if (Name == "bcmp") {
|
||||
if (FTy->getNumParams() != 3 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)) ||
|
||||
!isa<PointerType>(FTy->getParamType(1)))
|
||||
!FTy->getParamType(0)->isPointerTy() ||
|
||||
!FTy->getParamType(1)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setOnlyReadsMemory(F);
|
||||
@ -2222,7 +2222,7 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
setDoesNotCapture(F, 2);
|
||||
} else if (Name == "bzero") {
|
||||
if (FTy->getNumParams() != 2 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)))
|
||||
!FTy->getParamType(0)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 1);
|
||||
@ -2231,7 +2231,7 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
case 'c':
|
||||
if (Name == "calloc") {
|
||||
if (FTy->getNumParams() != 2 ||
|
||||
!isa<PointerType>(FTy->getReturnType()))
|
||||
!FTy->getReturnType()->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotAlias(F, 0);
|
||||
@ -2241,7 +2241,7 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
Name == "clearerr" ||
|
||||
Name == "closedir") {
|
||||
if (FTy->getNumParams() == 0 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)))
|
||||
!FTy->getParamType(0)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 1);
|
||||
@ -2253,14 +2253,14 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
Name == "atof" ||
|
||||
Name == "atoll") {
|
||||
if (FTy->getNumParams() != 1 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)))
|
||||
!FTy->getParamType(0)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setOnlyReadsMemory(F);
|
||||
setDoesNotCapture(F, 1);
|
||||
} else if (Name == "access") {
|
||||
if (FTy->getNumParams() != 2 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)))
|
||||
!FTy->getParamType(0)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 1);
|
||||
@ -2269,9 +2269,9 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
case 'f':
|
||||
if (Name == "fopen") {
|
||||
if (FTy->getNumParams() != 2 ||
|
||||
!isa<PointerType>(FTy->getReturnType()) ||
|
||||
!isa<PointerType>(FTy->getParamType(0)) ||
|
||||
!isa<PointerType>(FTy->getParamType(1)))
|
||||
!FTy->getReturnType()->isPointerTy() ||
|
||||
!FTy->getParamType(0)->isPointerTy() ||
|
||||
!FTy->getParamType(1)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotAlias(F, 0);
|
||||
@ -2279,8 +2279,8 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
setDoesNotCapture(F, 2);
|
||||
} else if (Name == "fdopen") {
|
||||
if (FTy->getNumParams() != 2 ||
|
||||
!isa<PointerType>(FTy->getReturnType()) ||
|
||||
!isa<PointerType>(FTy->getParamType(1)))
|
||||
!FTy->getReturnType()->isPointerTy() ||
|
||||
!FTy->getParamType(1)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotAlias(F, 0);
|
||||
@ -2300,13 +2300,13 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
Name == "funlockfile" ||
|
||||
Name == "ftrylockfile") {
|
||||
if (FTy->getNumParams() == 0 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)))
|
||||
!FTy->getParamType(0)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 1);
|
||||
} else if (Name == "ferror") {
|
||||
if (FTy->getNumParams() != 1 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)))
|
||||
!FTy->getParamType(0)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 1);
|
||||
@ -2318,22 +2318,22 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
Name == "frexpl" ||
|
||||
Name == "fstatvfs") {
|
||||
if (FTy->getNumParams() != 2 ||
|
||||
!isa<PointerType>(FTy->getParamType(1)))
|
||||
!FTy->getParamType(1)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 2);
|
||||
} else if (Name == "fgets") {
|
||||
if (FTy->getNumParams() != 3 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)) ||
|
||||
!isa<PointerType>(FTy->getParamType(2)))
|
||||
!FTy->getParamType(0)->isPointerTy() ||
|
||||
!FTy->getParamType(2)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 3);
|
||||
} else if (Name == "fread" ||
|
||||
Name == "fwrite") {
|
||||
if (FTy->getNumParams() != 4 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)) ||
|
||||
!isa<PointerType>(FTy->getParamType(3)))
|
||||
!FTy->getParamType(0)->isPointerTy() ||
|
||||
!FTy->getParamType(3)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 1);
|
||||
@ -2343,8 +2343,8 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
Name == "fprintf" ||
|
||||
Name == "fgetpos") {
|
||||
if (FTy->getNumParams() < 2 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)) ||
|
||||
!isa<PointerType>(FTy->getParamType(1)))
|
||||
!FTy->getParamType(0)->isPointerTy() ||
|
||||
!FTy->getParamType(1)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 1);
|
||||
@ -2356,13 +2356,13 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
Name == "getlogin_r" ||
|
||||
Name == "getc_unlocked") {
|
||||
if (FTy->getNumParams() == 0 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)))
|
||||
!FTy->getParamType(0)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 1);
|
||||
} else if (Name == "getenv") {
|
||||
if (FTy->getNumParams() != 1 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)))
|
||||
!FTy->getParamType(0)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setOnlyReadsMemory(F);
|
||||
@ -2372,13 +2372,13 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
setDoesNotThrow(F);
|
||||
} else if (Name == "getitimer") {
|
||||
if (FTy->getNumParams() != 2 ||
|
||||
!isa<PointerType>(FTy->getParamType(1)))
|
||||
!FTy->getParamType(1)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 2);
|
||||
} else if (Name == "getpwnam") {
|
||||
if (FTy->getNumParams() != 1 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)))
|
||||
!FTy->getParamType(0)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 1);
|
||||
@ -2387,7 +2387,7 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
case 'u':
|
||||
if (Name == "ungetc") {
|
||||
if (FTy->getNumParams() != 2 ||
|
||||
!isa<PointerType>(FTy->getParamType(1)))
|
||||
!FTy->getParamType(1)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 2);
|
||||
@ -2395,15 +2395,15 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
Name == "unlink" ||
|
||||
Name == "unsetenv") {
|
||||
if (FTy->getNumParams() != 1 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)))
|
||||
!FTy->getParamType(0)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 1);
|
||||
} else if (Name == "utime" ||
|
||||
Name == "utimes") {
|
||||
if (FTy->getNumParams() != 2 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)) ||
|
||||
!isa<PointerType>(FTy->getParamType(1)))
|
||||
!FTy->getParamType(0)->isPointerTy() ||
|
||||
!FTy->getParamType(1)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 1);
|
||||
@ -2413,7 +2413,7 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
case 'p':
|
||||
if (Name == "putc") {
|
||||
if (FTy->getNumParams() != 2 ||
|
||||
!isa<PointerType>(FTy->getParamType(1)))
|
||||
!FTy->getParamType(1)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 2);
|
||||
@ -2421,14 +2421,14 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
Name == "printf" ||
|
||||
Name == "perror") {
|
||||
if (FTy->getNumParams() != 1 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)))
|
||||
!FTy->getParamType(0)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 1);
|
||||
} else if (Name == "pread" ||
|
||||
Name == "pwrite") {
|
||||
if (FTy->getNumParams() != 4 ||
|
||||
!isa<PointerType>(FTy->getParamType(1)))
|
||||
!FTy->getParamType(1)->isPointerTy())
|
||||
continue;
|
||||
// May throw; these are valid pthread cancellation points.
|
||||
setDoesNotCapture(F, 2);
|
||||
@ -2436,9 +2436,9 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
setDoesNotThrow(F);
|
||||
} else if (Name == "popen") {
|
||||
if (FTy->getNumParams() != 2 ||
|
||||
!isa<PointerType>(FTy->getReturnType()) ||
|
||||
!isa<PointerType>(FTy->getParamType(0)) ||
|
||||
!isa<PointerType>(FTy->getParamType(1)))
|
||||
!FTy->getReturnType()->isPointerTy() ||
|
||||
!FTy->getParamType(0)->isPointerTy() ||
|
||||
!FTy->getParamType(1)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotAlias(F, 0);
|
||||
@ -2446,7 +2446,7 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
setDoesNotCapture(F, 2);
|
||||
} else if (Name == "pclose") {
|
||||
if (FTy->getNumParams() != 1 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)))
|
||||
!FTy->getParamType(0)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 1);
|
||||
@ -2455,43 +2455,43 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
case 'v':
|
||||
if (Name == "vscanf") {
|
||||
if (FTy->getNumParams() != 2 ||
|
||||
!isa<PointerType>(FTy->getParamType(1)))
|
||||
!FTy->getParamType(1)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 1);
|
||||
} else if (Name == "vsscanf" ||
|
||||
Name == "vfscanf") {
|
||||
if (FTy->getNumParams() != 3 ||
|
||||
!isa<PointerType>(FTy->getParamType(1)) ||
|
||||
!isa<PointerType>(FTy->getParamType(2)))
|
||||
!FTy->getParamType(1)->isPointerTy() ||
|
||||
!FTy->getParamType(2)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 1);
|
||||
setDoesNotCapture(F, 2);
|
||||
} else if (Name == "valloc") {
|
||||
if (!isa<PointerType>(FTy->getReturnType()))
|
||||
if (!FTy->getReturnType()->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotAlias(F, 0);
|
||||
} else if (Name == "vprintf") {
|
||||
if (FTy->getNumParams() != 2 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)))
|
||||
!FTy->getParamType(0)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 1);
|
||||
} else if (Name == "vfprintf" ||
|
||||
Name == "vsprintf") {
|
||||
if (FTy->getNumParams() != 3 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)) ||
|
||||
!isa<PointerType>(FTy->getParamType(1)))
|
||||
!FTy->getParamType(0)->isPointerTy() ||
|
||||
!FTy->getParamType(1)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 1);
|
||||
setDoesNotCapture(F, 2);
|
||||
} else if (Name == "vsnprintf") {
|
||||
if (FTy->getNumParams() != 4 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)) ||
|
||||
!isa<PointerType>(FTy->getParamType(2)))
|
||||
!FTy->getParamType(0)->isPointerTy() ||
|
||||
!FTy->getParamType(2)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 1);
|
||||
@ -2501,14 +2501,14 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
case 'o':
|
||||
if (Name == "open") {
|
||||
if (FTy->getNumParams() < 2 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)))
|
||||
!FTy->getParamType(0)->isPointerTy())
|
||||
continue;
|
||||
// May throw; "open" is a valid pthread cancellation point.
|
||||
setDoesNotCapture(F, 1);
|
||||
} else if (Name == "opendir") {
|
||||
if (FTy->getNumParams() != 1 ||
|
||||
!isa<PointerType>(FTy->getReturnType()) ||
|
||||
!isa<PointerType>(FTy->getParamType(0)))
|
||||
!FTy->getReturnType()->isPointerTy() ||
|
||||
!FTy->getParamType(0)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotAlias(F, 0);
|
||||
@ -2517,13 +2517,13 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
break;
|
||||
case 't':
|
||||
if (Name == "tmpfile") {
|
||||
if (!isa<PointerType>(FTy->getReturnType()))
|
||||
if (!FTy->getReturnType()->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotAlias(F, 0);
|
||||
} else if (Name == "times") {
|
||||
if (FTy->getNumParams() != 1 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)))
|
||||
!FTy->getParamType(0)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 1);
|
||||
@ -2546,15 +2546,15 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
case 'l':
|
||||
if (Name == "lstat") {
|
||||
if (FTy->getNumParams() != 2 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)) ||
|
||||
!isa<PointerType>(FTy->getParamType(1)))
|
||||
!FTy->getParamType(0)->isPointerTy() ||
|
||||
!FTy->getParamType(1)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 1);
|
||||
setDoesNotCapture(F, 2);
|
||||
} else if (Name == "lchown") {
|
||||
if (FTy->getNumParams() != 3 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)))
|
||||
!FTy->getParamType(0)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 1);
|
||||
@ -2563,7 +2563,7 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
case 'q':
|
||||
if (Name == "qsort") {
|
||||
if (FTy->getNumParams() != 4 ||
|
||||
!isa<PointerType>(FTy->getParamType(3)))
|
||||
!FTy->getParamType(3)->isPointerTy())
|
||||
continue;
|
||||
// May throw; places call through function pointer.
|
||||
setDoesNotCapture(F, 4);
|
||||
@ -2573,27 +2573,27 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
if (Name == "__strdup" ||
|
||||
Name == "__strndup") {
|
||||
if (FTy->getNumParams() < 1 ||
|
||||
!isa<PointerType>(FTy->getReturnType()) ||
|
||||
!isa<PointerType>(FTy->getParamType(0)))
|
||||
!FTy->getReturnType()->isPointerTy() ||
|
||||
!FTy->getParamType(0)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotAlias(F, 0);
|
||||
setDoesNotCapture(F, 1);
|
||||
} else if (Name == "__strtok_r") {
|
||||
if (FTy->getNumParams() != 3 ||
|
||||
!isa<PointerType>(FTy->getParamType(1)))
|
||||
!FTy->getParamType(1)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 2);
|
||||
} else if (Name == "_IO_getc") {
|
||||
if (FTy->getNumParams() != 1 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)))
|
||||
!FTy->getParamType(0)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 1);
|
||||
} else if (Name == "_IO_putc") {
|
||||
if (FTy->getNumParams() != 2 ||
|
||||
!isa<PointerType>(FTy->getParamType(1)))
|
||||
!FTy->getParamType(1)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 2);
|
||||
@ -2602,7 +2602,7 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
case 1:
|
||||
if (Name == "\1__isoc99_scanf") {
|
||||
if (FTy->getNumParams() < 1 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)))
|
||||
!FTy->getParamType(0)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 1);
|
||||
@ -2611,17 +2611,17 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
Name == "\1statvfs64" ||
|
||||
Name == "\1__isoc99_sscanf") {
|
||||
if (FTy->getNumParams() < 1 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)) ||
|
||||
!isa<PointerType>(FTy->getParamType(1)))
|
||||
!FTy->getParamType(0)->isPointerTy() ||
|
||||
!FTy->getParamType(1)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 1);
|
||||
setDoesNotCapture(F, 2);
|
||||
} else if (Name == "\1fopen64") {
|
||||
if (FTy->getNumParams() != 2 ||
|
||||
!isa<PointerType>(FTy->getReturnType()) ||
|
||||
!isa<PointerType>(FTy->getParamType(0)) ||
|
||||
!isa<PointerType>(FTy->getParamType(1)))
|
||||
!FTy->getReturnType()->isPointerTy() ||
|
||||
!FTy->getParamType(0)->isPointerTy() ||
|
||||
!FTy->getParamType(1)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotAlias(F, 0);
|
||||
@ -2630,25 +2630,25 @@ bool SimplifyLibCalls::doInitialization(Module &M) {
|
||||
} else if (Name == "\1fseeko64" ||
|
||||
Name == "\1ftello64") {
|
||||
if (FTy->getNumParams() == 0 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)))
|
||||
!FTy->getParamType(0)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 1);
|
||||
} else if (Name == "\1tmpfile64") {
|
||||
if (!isa<PointerType>(FTy->getReturnType()))
|
||||
if (!FTy->getReturnType()->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotAlias(F, 0);
|
||||
} else if (Name == "\1fstat64" ||
|
||||
Name == "\1fstatvfs64") {
|
||||
if (FTy->getNumParams() != 2 ||
|
||||
!isa<PointerType>(FTy->getParamType(1)))
|
||||
!FTy->getParamType(1)->isPointerTy())
|
||||
continue;
|
||||
setDoesNotThrow(F);
|
||||
setDoesNotCapture(F, 2);
|
||||
} else if (Name == "\1open64") {
|
||||
if (FTy->getNumParams() < 2 ||
|
||||
!isa<PointerType>(FTy->getParamType(0)))
|
||||
!FTy->getParamType(0)->isPointerTy())
|
||||
continue;
|
||||
// May throw; "open" is a valid pthread cancellation point.
|
||||
setDoesNotCapture(F, 1);
|
||||
|
@ -125,7 +125,7 @@ static bool MightBeFoldableInst(Instruction *I) {
|
||||
// Don't touch identity bitcasts.
|
||||
if (I->getType() == I->getOperand(0)->getType())
|
||||
return false;
|
||||
return isa<PointerType>(I->getType()) || isa<IntegerType>(I->getType());
|
||||
return I->getType()->isPointerTy() || I->getType()->isIntegerTy();
|
||||
case Instruction::PtrToInt:
|
||||
// PtrToInt is always a noop, as we know that the int type is pointer sized.
|
||||
return true;
|
||||
@ -167,8 +167,8 @@ bool AddressingModeMatcher::MatchOperationAddr(User *AddrInst, unsigned Opcode,
|
||||
case Instruction::BitCast:
|
||||
// BitCast is always a noop, and we can handle it as long as it is
|
||||
// int->int or pointer->pointer (we don't want int<->fp or something).
|
||||
if ((isa<PointerType>(AddrInst->getOperand(0)->getType()) ||
|
||||
isa<IntegerType>(AddrInst->getOperand(0)->getType())) &&
|
||||
if ((AddrInst->getOperand(0)->getType()->isPointerTy() ||
|
||||
AddrInst->getOperand(0)->getType()->isIntegerTy()) &&
|
||||
// Don't touch identity bitcasts. These were probably put here by LSR,
|
||||
// and we don't want to mess around with them. Assume it knows what it
|
||||
// is doing.
|
||||
@ -569,7 +569,7 @@ IsProfitableToFoldIntoAddressingMode(Instruction *I, ExtAddrMode &AMBefore,
|
||||
// Get the access type of this use. If the use isn't a pointer, we don't
|
||||
// know what it accesses.
|
||||
Value *Address = User->getOperand(OpNo);
|
||||
if (!isa<PointerType>(Address->getType()))
|
||||
if (!Address->getType()->isPointerTy())
|
||||
return false;
|
||||
const Type *AddressAccessTy =
|
||||
cast<PointerType>(Address->getType())->getElementType();
|
||||
|
@ -46,7 +46,7 @@ using namespace llvm;
|
||||
static Value *getUnderlyingObjectWithOffset(Value *V, const TargetData *TD,
|
||||
uint64_t &ByteOffset,
|
||||
unsigned MaxLookup = 6) {
|
||||
if (!isa<PointerType>(V->getType()))
|
||||
if (!V->getType()->isPointerTy())
|
||||
return V;
|
||||
for (unsigned Count = 0; MaxLookup == 0 || Count < MaxLookup; ++Count) {
|
||||
if (GEPOperator *GEP = dyn_cast<GEPOperator>(V)) {
|
||||
@ -65,7 +65,7 @@ static Value *getUnderlyingObjectWithOffset(Value *V, const TargetData *TD,
|
||||
} else {
|
||||
return V;
|
||||
}
|
||||
assert(isa<PointerType>(V->getType()) && "Unexpected operand type!");
|
||||
assert(V->getType()->isPointerTy() && "Unexpected operand type!");
|
||||
}
|
||||
return V;
|
||||
}
|
||||
|
@ -518,7 +518,7 @@ void PromoteMem2Reg::run() {
|
||||
|
||||
// If this PHI node merges one value and/or undefs, get the value.
|
||||
if (Value *V = PN->hasConstantValue(&DT)) {
|
||||
if (AST && isa<PointerType>(PN->getType()))
|
||||
if (AST && PN->getType()->isPointerTy())
|
||||
AST->deleteValue(PN);
|
||||
PN->replaceAllUsesWith(V);
|
||||
PN->eraseFromParent();
|
||||
@ -780,7 +780,7 @@ void PromoteMem2Reg::RewriteSingleStoreAlloca(AllocaInst *AI,
|
||||
if (ReplVal == LI)
|
||||
ReplVal = UndefValue::get(LI->getType());
|
||||
LI->replaceAllUsesWith(ReplVal);
|
||||
if (AST && isa<PointerType>(LI->getType()))
|
||||
if (AST && LI->getType()->isPointerTy())
|
||||
AST->deleteValue(LI);
|
||||
LI->eraseFromParent();
|
||||
LBI.deleteValue(LI);
|
||||
@ -838,7 +838,7 @@ void PromoteMem2Reg::PromoteSingleBlockAlloca(AllocaInst *AI, AllocaInfo &Info,
|
||||
for (Value::use_iterator UI = AI->use_begin(), E = AI->use_end(); UI != E;)
|
||||
if (LoadInst *LI = dyn_cast<LoadInst>(*UI++)) {
|
||||
LI->replaceAllUsesWith(UndefValue::get(LI->getType()));
|
||||
if (AST && isa<PointerType>(LI->getType()))
|
||||
if (AST && LI->getType()->isPointerTy())
|
||||
AST->deleteValue(LI);
|
||||
LBI.deleteValue(LI);
|
||||
LI->eraseFromParent();
|
||||
@ -874,7 +874,7 @@ void PromoteMem2Reg::PromoteSingleBlockAlloca(AllocaInst *AI, AllocaInfo &Info,
|
||||
// Otherwise, there was a store before this load, the load takes its value.
|
||||
--I;
|
||||
LI->replaceAllUsesWith(I->second->getOperand(0));
|
||||
if (AST && isa<PointerType>(LI->getType()))
|
||||
if (AST && LI->getType()->isPointerTy())
|
||||
AST->deleteValue(LI);
|
||||
LI->eraseFromParent();
|
||||
LBI.deleteValue(LI);
|
||||
@ -922,7 +922,7 @@ bool PromoteMem2Reg::QueuePhiNode(BasicBlock *BB, unsigned AllocaNo,
|
||||
|
||||
InsertedPHINodes.insert(PN);
|
||||
|
||||
if (AST && isa<PointerType>(PN->getType()))
|
||||
if (AST && PN->getType()->isPointerTy())
|
||||
AST->copyValue(PointerAllocaValues[AllocaNo], PN);
|
||||
|
||||
return true;
|
||||
@ -996,7 +996,7 @@ NextIteration:
|
||||
|
||||
// Anything using the load now uses the current value.
|
||||
LI->replaceAllUsesWith(V);
|
||||
if (AST && isa<PointerType>(LI->getType()))
|
||||
if (AST && LI->getType()->isPointerTy())
|
||||
AST->deleteValue(LI);
|
||||
BB->getInstList().erase(LI);
|
||||
} else if (StoreInst *SI = dyn_cast<StoreInst>(I)) {
|
||||
|
@ -271,7 +271,7 @@ static bool DominatesMergePoint(Value *V, BasicBlock *BB,
|
||||
ConstantInt *SimplifyCFGOpt::GetConstantInt(Value *V) {
|
||||
// Normal constant int.
|
||||
ConstantInt *CI = dyn_cast<ConstantInt>(V);
|
||||
if (CI || !TD || !isa<Constant>(V) || !isa<PointerType>(V->getType()))
|
||||
if (CI || !TD || !isa<Constant>(V) || !V->getType()->isPointerTy())
|
||||
return CI;
|
||||
|
||||
// This is some kind of pointer constant. Turn it into a pointer-sized
|
||||
@ -701,7 +701,7 @@ bool SimplifyCFGOpt::FoldValueComparisonIntoPredecessors(TerminatorInst *TI) {
|
||||
AddPredecessorToBlock(NewSuccessors[i], Pred, BB);
|
||||
|
||||
// Convert pointer to int before we switch.
|
||||
if (isa<PointerType>(CV->getType())) {
|
||||
if (CV->getType()->isPointerTy()) {
|
||||
assert(TD && "Cannot switch on pointer without TargetData");
|
||||
CV = new PtrToIntInst(CV, TD->getIntPtrType(CV->getContext()),
|
||||
"magicptr", PTI);
|
||||
@ -915,7 +915,7 @@ static bool SpeculativelyExecuteBB(BranchInst *BI, BasicBlock *BB1) {
|
||||
case Instruction::Add:
|
||||
case Instruction::Sub:
|
||||
// Not worth doing for vector ops.
|
||||
if (isa<VectorType>(HInst->getType()))
|
||||
if (HInst->getType()->isVectorTy())
|
||||
return false;
|
||||
break;
|
||||
case Instruction::And:
|
||||
@ -925,7 +925,7 @@ static bool SpeculativelyExecuteBB(BranchInst *BI, BasicBlock *BB1) {
|
||||
case Instruction::LShr:
|
||||
case Instruction::AShr:
|
||||
// Don't mess with vector operations.
|
||||
if (isa<VectorType>(HInst->getType()))
|
||||
if (HInst->getType()->isVectorTy())
|
||||
return false;
|
||||
break; // These are all cheap and non-trapping instructions.
|
||||
}
|
||||
@ -2068,7 +2068,7 @@ bool SimplifyCFGOpt::run(BasicBlock *BB) {
|
||||
if (!TrueWhenEqual) std::swap(DefaultBB, EdgeBB);
|
||||
|
||||
// Convert pointer to int before we switch.
|
||||
if (isa<PointerType>(CompVal->getType())) {
|
||||
if (CompVal->getType()->isPointerTy()) {
|
||||
assert(TD && "Cannot switch on pointer without TargetData");
|
||||
CompVal = new PtrToIntInst(CompVal,
|
||||
TD->getIntPtrType(CompVal->getContext()),
|
||||
|
@ -376,7 +376,7 @@ namespace {
|
||||
return;
|
||||
|
||||
// If this is a structure or opaque type, add a name for the type.
|
||||
if (((isa<StructType>(Ty) && cast<StructType>(Ty)->getNumElements())
|
||||
if (((Ty->isStructTy() && cast<StructType>(Ty)->getNumElements())
|
||||
|| isa<OpaqueType>(Ty)) && !TP.hasTypeName(Ty)) {
|
||||
TP.addTypeName(Ty, "%"+utostr(unsigned(NumberedTypes.size())));
|
||||
NumberedTypes.push_back(Ty);
|
||||
@ -1850,8 +1850,8 @@ void AssemblyWriter::printInstruction(const Instruction &I) {
|
||||
//
|
||||
Out << ' ';
|
||||
if (!FTy->isVarArg() &&
|
||||
(!isa<PointerType>(RetTy) ||
|
||||
!isa<FunctionType>(cast<PointerType>(RetTy)->getElementType()))) {
|
||||
(!RetTy->isPointerTy() ||
|
||||
!cast<PointerType>(RetTy)->getElementType()->isFunctionTy())) {
|
||||
TypePrinter.print(RetTy, Out);
|
||||
Out << ' ';
|
||||
writeOperand(Operand, false);
|
||||
@ -1896,8 +1896,8 @@ void AssemblyWriter::printInstruction(const Instruction &I) {
|
||||
//
|
||||
Out << ' ';
|
||||
if (!FTy->isVarArg() &&
|
||||
(!isa<PointerType>(RetTy) ||
|
||||
!isa<FunctionType>(cast<PointerType>(RetTy)->getElementType()))) {
|
||||
(!RetTy->isPointerTy() ||
|
||||
!cast<PointerType>(RetTy)->getElementType()->isFunctionTy())) {
|
||||
TypePrinter.print(RetTy, Out);
|
||||
Out << ' ';
|
||||
writeOperand(Operand, false);
|
||||
|
@ -93,7 +93,7 @@ Attributes Attribute::typeIncompatible(const Type *Ty) {
|
||||
// Attributes that only apply to integers.
|
||||
Incompatible |= SExt | ZExt;
|
||||
|
||||
if (!isa<PointerType>(Ty))
|
||||
if (!Ty->isPointerTy())
|
||||
// Attributes that only apply to pointers.
|
||||
Incompatible |= ByVal | Nest | NoAlias | StructRet | NoCapture;
|
||||
|
||||
|
@ -112,7 +112,7 @@ static Constant *FoldBitCast(Constant *V, const Type *DestTy) {
|
||||
IdxList.push_back(Zero);
|
||||
} else if (const SequentialType *STy =
|
||||
dyn_cast<SequentialType>(ElTy)) {
|
||||
if (isa<PointerType>(ElTy)) break; // Can't index into pointers!
|
||||
if (ElTy->isPointerTy()) break; // Can't index into pointers!
|
||||
ElTy = STy->getElementType();
|
||||
IdxList.push_back(Zero);
|
||||
} else {
|
||||
@ -189,7 +189,7 @@ static Constant *FoldBitCast(Constant *V, const Type *DestTy) {
|
||||
///
|
||||
static Constant *ExtractConstantBytes(Constant *C, unsigned ByteStart,
|
||||
unsigned ByteSize) {
|
||||
assert(isa<IntegerType>(C->getType()) &&
|
||||
assert(C->getType()->isIntegerTy() &&
|
||||
(cast<IntegerType>(C->getType())->getBitWidth() & 7) == 0 &&
|
||||
"Non-byte sized integer input");
|
||||
unsigned CSize = cast<IntegerType>(C->getType())->getBitWidth()/8;
|
||||
@ -551,7 +551,7 @@ Constant *llvm::ConstantFoldCastInstruction(unsigned opc, Constant *V,
|
||||
// operating on each element. In the cast of bitcasts, the element
|
||||
// count may be mismatched; don't attempt to handle that here.
|
||||
if (ConstantVector *CV = dyn_cast<ConstantVector>(V))
|
||||
if (isa<VectorType>(DestTy) &&
|
||||
if (DestTy->isVectorTy() &&
|
||||
cast<VectorType>(DestTy)->getNumElements() ==
|
||||
CV->getType()->getNumElements()) {
|
||||
std::vector<Constant*> res;
|
||||
@ -634,7 +634,7 @@ Constant *llvm::ConstantFoldCastInstruction(unsigned opc, Constant *V,
|
||||
}
|
||||
}
|
||||
// Handle an offsetof-like expression.
|
||||
if (isa<StructType>(Ty) || isa<ArrayType>(Ty) || isa<VectorType>(Ty)){
|
||||
if (Ty->isStructTy() || Ty->isArrayTy() || Ty->isVectorTy()){
|
||||
if (Constant *C = getFoldedOffsetOf(Ty, CE->getOperand(2),
|
||||
DestTy, false))
|
||||
return C;
|
||||
@ -885,7 +885,7 @@ Constant *llvm::ConstantFoldInsertValueInstruction(Constant *Agg,
|
||||
unsigned numOps;
|
||||
if (const ArrayType *AR = dyn_cast<ArrayType>(AggTy))
|
||||
numOps = AR->getNumElements();
|
||||
else if (isa<UnionType>(AggTy))
|
||||
else if (AggTy->isUnionTy())
|
||||
numOps = 1;
|
||||
else
|
||||
numOps = cast<StructType>(AggTy)->getNumElements();
|
||||
@ -1667,7 +1667,7 @@ static ICmpInst::Predicate evaluateICmpRelation(Constant *V1, Constant *V2,
|
||||
// If the cast is not actually changing bits, and the second operand is a
|
||||
// null pointer, do the comparison with the pre-casted value.
|
||||
if (V2->isNullValue() &&
|
||||
(isa<PointerType>(CE1->getType()) || CE1->getType()->isIntegerTy())) {
|
||||
(CE1->getType()->isPointerTy() || CE1->getType()->isIntegerTy())) {
|
||||
if (CE1->getOpcode() == Instruction::ZExt) isSigned = false;
|
||||
if (CE1->getOpcode() == Instruction::SExt) isSigned = true;
|
||||
return evaluateICmpRelation(CE1Op0,
|
||||
@ -1914,7 +1914,7 @@ Constant *llvm::ConstantFoldCompareInstruction(unsigned short pred,
|
||||
return ConstantInt::get(ResultTy, R==APFloat::cmpGreaterThan ||
|
||||
R==APFloat::cmpEqual);
|
||||
}
|
||||
} else if (isa<VectorType>(C1->getType())) {
|
||||
} else if (C1->getType()->isVectorTy()) {
|
||||
SmallVector<Constant*, 16> C1Elts, C2Elts;
|
||||
C1->getVectorElements(C1Elts);
|
||||
C2->getVectorElements(C2Elts);
|
||||
@ -2065,7 +2065,7 @@ Constant *llvm::ConstantFoldCompareInstruction(unsigned short pred,
|
||||
if (ConstantExpr *CE2 = dyn_cast<ConstantExpr>(C2)) {
|
||||
Constant *CE2Op0 = CE2->getOperand(0);
|
||||
if (CE2->getOpcode() == Instruction::BitCast &&
|
||||
isa<VectorType>(CE2->getType())==isa<VectorType>(CE2Op0->getType())) {
|
||||
CE2->getType()->isVectorTy()==CE2Op0->getType()->isVectorTy()) {
|
||||
Constant *Inverse = ConstantExpr::getBitCast(C1, CE2Op0->getType());
|
||||
return ConstantExpr::getICmp(pred, Inverse, CE2Op0);
|
||||
}
|
||||
@ -2184,7 +2184,7 @@ Constant *llvm::ConstantFoldGetElementPtr(Constant *C,
|
||||
I != E; ++I)
|
||||
LastTy = *I;
|
||||
|
||||
if ((LastTy && isa<ArrayType>(LastTy)) || Idx0->isNullValue()) {
|
||||
if ((LastTy && LastTy->isArrayTy()) || Idx0->isNullValue()) {
|
||||
SmallVector<Value*, 16> NewIndices;
|
||||
NewIndices.reserve(NumIdx + CE->getNumOperands());
|
||||
for (unsigned i = 1, e = CE->getNumOperands()-1; i != e; ++i)
|
||||
|
@ -229,7 +229,7 @@ Constant::PossibleRelocationsTy Constant::getRelocationInfo() const {
|
||||
/// This handles breaking down a vector undef into undef elements, etc. For
|
||||
/// constant exprs and other cases we can't handle, we return an empty vector.
|
||||
void Constant::getVectorElements(SmallVectorImpl<Constant*> &Elts) const {
|
||||
assert(isa<VectorType>(getType()) && "Not a vector constant!");
|
||||
assert(getType()->isVectorTy() && "Not a vector constant!");
|
||||
|
||||
if (const ConstantVector *CV = dyn_cast<ConstantVector>(this)) {
|
||||
for (unsigned i = 0, e = CV->getNumOperands(); i != e; ++i)
|
||||
@ -944,7 +944,7 @@ bool ConstantFP::isValueValidForType(const Type *Ty, const APFloat& Val) {
|
||||
// Factory Function Implementation
|
||||
|
||||
ConstantAggregateZero* ConstantAggregateZero::get(const Type* Ty) {
|
||||
assert((isa<StructType>(Ty) || isa<ArrayType>(Ty) || isa<VectorType>(Ty)) &&
|
||||
assert((Ty->isStructTy() || Ty->isArrayTy() || Ty->isVectorTy()) &&
|
||||
"Cannot create an aggregate zero of non-aggregate type!");
|
||||
|
||||
LLVMContextImpl *pImpl = Ty->getContext().pImpl;
|
||||
@ -1239,8 +1239,8 @@ Constant *ConstantExpr::getTruncOrBitCast(Constant *C, const Type *Ty) {
|
||||
}
|
||||
|
||||
Constant *ConstantExpr::getPointerCast(Constant *S, const Type *Ty) {
|
||||
assert(isa<PointerType>(S->getType()) && "Invalid cast");
|
||||
assert((Ty->isIntegerTy() || isa<PointerType>(Ty)) && "Invalid cast");
|
||||
assert(S->getType()->isPointerTy() && "Invalid cast");
|
||||
assert((Ty->isIntegerTy() || Ty->isPointerTy()) && "Invalid cast");
|
||||
|
||||
if (Ty->isIntegerTy())
|
||||
return getCast(Instruction::PtrToInt, S, Ty);
|
||||
@ -1383,14 +1383,14 @@ Constant *ConstantExpr::getFPToSI(Constant *C, const Type *Ty) {
|
||||
}
|
||||
|
||||
Constant *ConstantExpr::getPtrToInt(Constant *C, const Type *DstTy) {
|
||||
assert(isa<PointerType>(C->getType()) && "PtrToInt source must be pointer");
|
||||
assert(C->getType()->isPointerTy() && "PtrToInt source must be pointer");
|
||||
assert(DstTy->isIntegerTy() && "PtrToInt destination must be integral");
|
||||
return getFoldedCast(Instruction::PtrToInt, C, DstTy);
|
||||
}
|
||||
|
||||
Constant *ConstantExpr::getIntToPtr(Constant *C, const Type *DstTy) {
|
||||
assert(C->getType()->isIntegerTy() && "IntToPtr source must be integral");
|
||||
assert(isa<PointerType>(DstTy) && "IntToPtr destination must be a pointer");
|
||||
assert(DstTy->isPointerTy() && "IntToPtr destination must be a pointer");
|
||||
return getFoldedCast(Instruction::IntToPtr, C, DstTy);
|
||||
}
|
||||
|
||||
@ -1592,7 +1592,7 @@ Constant *ConstantExpr::getGetElementPtrTy(const Type *ReqTy, Constant *C,
|
||||
(Constant**)Idxs, NumIdx))
|
||||
return FC; // Fold a few common cases...
|
||||
|
||||
assert(isa<PointerType>(C->getType()) &&
|
||||
assert(C->getType()->isPointerTy() &&
|
||||
"Non-pointer type for constant GetElementPtr expression");
|
||||
// Look up the constant in the table first to ensure uniqueness
|
||||
std::vector<Constant*> ArgVec;
|
||||
@ -1619,7 +1619,7 @@ Constant *ConstantExpr::getInBoundsGetElementPtrTy(const Type *ReqTy,
|
||||
(Constant**)Idxs, NumIdx))
|
||||
return FC; // Fold a few common cases...
|
||||
|
||||
assert(isa<PointerType>(C->getType()) &&
|
||||
assert(C->getType()->isPointerTy() &&
|
||||
"Non-pointer type for constant GetElementPtr expression");
|
||||
// Look up the constant in the table first to ensure uniqueness
|
||||
std::vector<Constant*> ArgVec;
|
||||
@ -1727,7 +1727,7 @@ Constant *ConstantExpr::getExtractElementTy(const Type *ReqTy, Constant *Val,
|
||||
}
|
||||
|
||||
Constant *ConstantExpr::getExtractElement(Constant *Val, Constant *Idx) {
|
||||
assert(isa<VectorType>(Val->getType()) &&
|
||||
assert(Val->getType()->isVectorTy() &&
|
||||
"Tried to create extractelement operation on non-vector type!");
|
||||
assert(Idx->getType()->isIntegerTy(32) &&
|
||||
"Extractelement index must be i32 type!");
|
||||
@ -1751,7 +1751,7 @@ Constant *ConstantExpr::getInsertElementTy(const Type *ReqTy, Constant *Val,
|
||||
|
||||
Constant *ConstantExpr::getInsertElement(Constant *Val, Constant *Elt,
|
||||
Constant *Idx) {
|
||||
assert(isa<VectorType>(Val->getType()) &&
|
||||
assert(Val->getType()->isVectorTy() &&
|
||||
"Tried to create insertelement operation on non-vector type!");
|
||||
assert(Elt->getType() == cast<VectorType>(Val->getType())->getElementType()
|
||||
&& "Insertelement types must match!");
|
||||
|
@ -73,35 +73,35 @@ unsigned Argument::getArgNo() const {
|
||||
/// hasByValAttr - Return true if this argument has the byval attribute on it
|
||||
/// in its containing function.
|
||||
bool Argument::hasByValAttr() const {
|
||||
if (!isa<PointerType>(getType())) return false;
|
||||
if (!getType()->isPointerTy()) return false;
|
||||
return getParent()->paramHasAttr(getArgNo()+1, Attribute::ByVal);
|
||||
}
|
||||
|
||||
/// hasNestAttr - Return true if this argument has the nest attribute on
|
||||
/// it in its containing function.
|
||||
bool Argument::hasNestAttr() const {
|
||||
if (!isa<PointerType>(getType())) return false;
|
||||
if (!getType()->isPointerTy()) return false;
|
||||
return getParent()->paramHasAttr(getArgNo()+1, Attribute::Nest);
|
||||
}
|
||||
|
||||
/// hasNoAliasAttr - Return true if this argument has the noalias attribute on
|
||||
/// it in its containing function.
|
||||
bool Argument::hasNoAliasAttr() const {
|
||||
if (!isa<PointerType>(getType())) return false;
|
||||
if (!getType()->isPointerTy()) return false;
|
||||
return getParent()->paramHasAttr(getArgNo()+1, Attribute::NoAlias);
|
||||
}
|
||||
|
||||
/// hasNoCaptureAttr - Return true if this argument has the nocapture attribute
|
||||
/// on it in its containing function.
|
||||
bool Argument::hasNoCaptureAttr() const {
|
||||
if (!isa<PointerType>(getType())) return false;
|
||||
if (!getType()->isPointerTy()) return false;
|
||||
return getParent()->paramHasAttr(getArgNo()+1, Attribute::NoCapture);
|
||||
}
|
||||
|
||||
/// hasSRetAttr - Return true if this argument has the sret attribute on
|
||||
/// it in its containing function.
|
||||
bool Argument::hasStructRetAttr() const {
|
||||
if (!isa<PointerType>(getType())) return false;
|
||||
if (!getType()->isPointerTy()) return false;
|
||||
if (this != getParent()->arg_begin())
|
||||
return false; // StructRet param must be first param
|
||||
return getParent()->paramHasAttr(1, Attribute::StructRet);
|
||||
|
@ -220,7 +220,7 @@ bool InlineAsm::Verify(const FunctionType *Ty, StringRef ConstStr) {
|
||||
if (!Ty->getReturnType()->isVoidTy()) return false;
|
||||
break;
|
||||
case 1:
|
||||
if (isa<StructType>(Ty->getReturnType())) return false;
|
||||
if (Ty->getReturnType()->isStructTy()) return false;
|
||||
break;
|
||||
default:
|
||||
const StructType *STy = dyn_cast<StructType>(Ty->getReturnType());
|
||||
|
@ -562,7 +562,7 @@ static Instruction* createFree(Value* Source, Instruction *InsertBefore,
|
||||
BasicBlock *InsertAtEnd) {
|
||||
assert(((!InsertBefore && InsertAtEnd) || (InsertBefore && !InsertAtEnd)) &&
|
||||
"createFree needs either InsertBefore or InsertAtEnd");
|
||||
assert(isa<PointerType>(Source->getType()) &&
|
||||
assert(Source->getType()->isPointerTy() &&
|
||||
"Can not free something of nonpointer type!");
|
||||
|
||||
BasicBlock* BB = InsertBefore ? InsertBefore->getParent() : InsertAtEnd;
|
||||
@ -989,7 +989,7 @@ bool AllocaInst::isStaticAlloca() const {
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
void LoadInst::AssertOK() {
|
||||
assert(isa<PointerType>(getOperand(0)->getType()) &&
|
||||
assert(getOperand(0)->getType()->isPointerTy() &&
|
||||
"Ptr must have pointer type.");
|
||||
}
|
||||
|
||||
@ -1103,7 +1103,7 @@ void LoadInst::setAlignment(unsigned Align) {
|
||||
|
||||
void StoreInst::AssertOK() {
|
||||
assert(getOperand(0) && getOperand(1) && "Both operands must be non-null!");
|
||||
assert(isa<PointerType>(getOperand(1)->getType()) &&
|
||||
assert(getOperand(1)->getType()->isPointerTy() &&
|
||||
"Ptr must have pointer type!");
|
||||
assert(getOperand(0)->getType() ==
|
||||
cast<PointerType>(getOperand(1)->getType())->getElementType()
|
||||
@ -1285,7 +1285,7 @@ static const Type* getIndexedTypeInternal(const Type *Ptr, IndexTy const *Idxs,
|
||||
unsigned CurIdx = 1;
|
||||
for (; CurIdx != NumIdx; ++CurIdx) {
|
||||
const CompositeType *CT = dyn_cast<CompositeType>(Agg);
|
||||
if (!CT || isa<PointerType>(CT)) return 0;
|
||||
if (!CT || CT->isPointerTy()) return 0;
|
||||
IndexTy Index = Idxs[CurIdx];
|
||||
if (!CT->indexValid(Index)) return 0;
|
||||
Agg = CT->getTypeAtIndex(Index);
|
||||
@ -1391,7 +1391,7 @@ ExtractElementInst::ExtractElementInst(Value *Val, Value *Index,
|
||||
|
||||
|
||||
bool ExtractElementInst::isValidOperands(const Value *Val, const Value *Index) {
|
||||
if (!isa<VectorType>(Val->getType()) || !Index->getType()->isIntegerTy(32))
|
||||
if (!Val->getType()->isVectorTy() || !Index->getType()->isIntegerTy(32))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
@ -1432,7 +1432,7 @@ InsertElementInst::InsertElementInst(Value *Vec, Value *Elt, Value *Index,
|
||||
|
||||
bool InsertElementInst::isValidOperands(const Value *Vec, const Value *Elt,
|
||||
const Value *Index) {
|
||||
if (!isa<VectorType>(Vec->getType()))
|
||||
if (!Vec->getType()->isVectorTy())
|
||||
return false; // First operand of insertelement must be vector type.
|
||||
|
||||
if (Elt->getType() != cast<VectorType>(Vec->getType())->getElementType())
|
||||
@ -1485,7 +1485,7 @@ ShuffleVectorInst::ShuffleVectorInst(Value *V1, Value *V2, Value *Mask,
|
||||
|
||||
bool ShuffleVectorInst::isValidOperands(const Value *V1, const Value *V2,
|
||||
const Value *Mask) {
|
||||
if (!isa<VectorType>(V1->getType()) || V1->getType() != V2->getType())
|
||||
if (!V1->getType()->isVectorTy() || V1->getType() != V2->getType())
|
||||
return false;
|
||||
|
||||
const VectorType *MaskTy = dyn_cast<VectorType>(Mask->getType());
|
||||
@ -1602,7 +1602,7 @@ const Type* ExtractValueInst::getIndexedType(const Type *Agg,
|
||||
unsigned CurIdx = 0;
|
||||
for (; CurIdx != NumIdx; ++CurIdx) {
|
||||
const CompositeType *CT = dyn_cast<CompositeType>(Agg);
|
||||
if (!CT || isa<PointerType>(CT) || isa<VectorType>(CT)) return 0;
|
||||
if (!CT || CT->isPointerTy() || CT->isVectorTy()) return 0;
|
||||
unsigned Index = Idxs[CurIdx];
|
||||
if (!CT->indexValid(Index)) return 0;
|
||||
Agg = CT->getTypeAtIndex(Index);
|
||||
@ -1693,7 +1693,7 @@ void BinaryOperator::init(BinaryOps iType) {
|
||||
case SDiv:
|
||||
assert(getType() == LHS->getType() &&
|
||||
"Arithmetic operation should return same type as operands!");
|
||||
assert((getType()->isIntegerTy() || (isa<VectorType>(getType()) &&
|
||||
assert((getType()->isIntegerTy() || (getType()->isVectorTy() &&
|
||||
cast<VectorType>(getType())->getElementType()->isIntegerTy())) &&
|
||||
"Incorrect operand type (not integer) for S/UDIV");
|
||||
break;
|
||||
@ -1707,7 +1707,7 @@ void BinaryOperator::init(BinaryOps iType) {
|
||||
case SRem:
|
||||
assert(getType() == LHS->getType() &&
|
||||
"Arithmetic operation should return same type as operands!");
|
||||
assert((getType()->isIntegerTy() || (isa<VectorType>(getType()) &&
|
||||
assert((getType()->isIntegerTy() || (getType()->isVectorTy() &&
|
||||
cast<VectorType>(getType())->getElementType()->isIntegerTy())) &&
|
||||
"Incorrect operand type (not integer) for S/UREM");
|
||||
break;
|
||||
@ -1723,7 +1723,7 @@ void BinaryOperator::init(BinaryOps iType) {
|
||||
assert(getType() == LHS->getType() &&
|
||||
"Shift operation should return same type as operands!");
|
||||
assert((getType()->isIntegerTy() ||
|
||||
(isa<VectorType>(getType()) &&
|
||||
(getType()->isVectorTy() &&
|
||||
cast<VectorType>(getType())->getElementType()->isIntegerTy())) &&
|
||||
"Tried to create a shift operation on a non-integral type!");
|
||||
break;
|
||||
@ -1732,7 +1732,7 @@ void BinaryOperator::init(BinaryOps iType) {
|
||||
assert(getType() == LHS->getType() &&
|
||||
"Logical operation should return same type as operands!");
|
||||
assert((getType()->isIntegerTy() ||
|
||||
(isa<VectorType>(getType()) &&
|
||||
(getType()->isVectorTy() &&
|
||||
cast<VectorType>(getType())->getElementType()->isIntegerTy())) &&
|
||||
"Tried to create a logical operation on a non-integral type!");
|
||||
break;
|
||||
@ -1977,8 +1977,8 @@ bool CastInst::isLosslessCast() const {
|
||||
return true;
|
||||
|
||||
// Pointer to pointer is always lossless.
|
||||
if (isa<PointerType>(SrcTy))
|
||||
return isa<PointerType>(DstTy);
|
||||
if (SrcTy->isPointerTy())
|
||||
return DstTy->isPointerTy();
|
||||
return false; // Other types have no identity values
|
||||
}
|
||||
|
||||
@ -2094,7 +2094,7 @@ unsigned CastInst::isEliminableCastPair(
|
||||
// no-op cast in second op implies firstOp as long as the DestTy
|
||||
// is integer and we are not converting between a vector and a
|
||||
// non vector type.
|
||||
if (!isa<VectorType>(SrcTy) && DstTy->isIntegerTy())
|
||||
if (!SrcTy->isVectorTy() && DstTy->isIntegerTy())
|
||||
return firstOp;
|
||||
return 0;
|
||||
case 4:
|
||||
@ -2148,12 +2148,12 @@ unsigned CastInst::isEliminableCastPair(
|
||||
case 11:
|
||||
// bitcast followed by ptrtoint is allowed as long as the bitcast
|
||||
// is a pointer to pointer cast.
|
||||
if (isa<PointerType>(SrcTy) && isa<PointerType>(MidTy))
|
||||
if (SrcTy->isPointerTy() && MidTy->isPointerTy())
|
||||
return secondOp;
|
||||
return 0;
|
||||
case 12:
|
||||
// inttoptr, bitcast -> intptr if bitcast is a ptr to ptr cast
|
||||
if (isa<PointerType>(MidTy) && isa<PointerType>(DstTy))
|
||||
if (MidTy->isPointerTy() && DstTy->isPointerTy())
|
||||
return firstOp;
|
||||
return 0;
|
||||
case 13: {
|
||||
@ -2274,8 +2274,8 @@ CastInst *CastInst::CreateTruncOrBitCast(Value *S, const Type *Ty,
|
||||
CastInst *CastInst::CreatePointerCast(Value *S, const Type *Ty,
|
||||
const Twine &Name,
|
||||
BasicBlock *InsertAtEnd) {
|
||||
assert(isa<PointerType>(S->getType()) && "Invalid cast");
|
||||
assert((Ty->isIntegerTy() || isa<PointerType>(Ty)) &&
|
||||
assert(S->getType()->isPointerTy() && "Invalid cast");
|
||||
assert((Ty->isIntegerTy() || Ty->isPointerTy()) &&
|
||||
"Invalid cast");
|
||||
|
||||
if (Ty->isIntegerTy())
|
||||
@ -2287,8 +2287,8 @@ CastInst *CastInst::CreatePointerCast(Value *S, const Type *Ty,
|
||||
CastInst *CastInst::CreatePointerCast(Value *S, const Type *Ty,
|
||||
const Twine &Name,
|
||||
Instruction *InsertBefore) {
|
||||
assert(isa<PointerType>(S->getType()) && "Invalid cast");
|
||||
assert((Ty->isIntegerTy() || isa<PointerType>(Ty)) &&
|
||||
assert(S->getType()->isPointerTy() && "Invalid cast");
|
||||
assert((Ty->isIntegerTy() || Ty->isPointerTy()) &&
|
||||
"Invalid cast");
|
||||
|
||||
if (Ty->isIntegerTy())
|
||||
@ -2373,7 +2373,7 @@ bool CastInst::isCastable(const Type *SrcTy, const Type *DestTy) {
|
||||
// Casting from vector
|
||||
return DestBits == PTy->getBitWidth();
|
||||
} else { // Casting from something else
|
||||
return isa<PointerType>(SrcTy);
|
||||
return SrcTy->isPointerTy();
|
||||
}
|
||||
} else if (DestTy->isFloatingPointTy()) { // Casting to floating pt
|
||||
if (SrcTy->isIntegerTy()) { // Casting from integral
|
||||
@ -2394,8 +2394,8 @@ bool CastInst::isCastable(const Type *SrcTy, const Type *DestTy) {
|
||||
} else { // Casting from something else
|
||||
return DestPTy->getBitWidth() == SrcBits;
|
||||
}
|
||||
} else if (isa<PointerType>(DestTy)) { // Casting to pointer
|
||||
if (isa<PointerType>(SrcTy)) { // Casting from pointer
|
||||
} else if (DestTy->isPointerTy()) { // Casting to pointer
|
||||
if (SrcTy->isPointerTy()) { // Casting from pointer
|
||||
return true;
|
||||
} else if (SrcTy->isIntegerTy()) { // Casting from integral
|
||||
return true;
|
||||
@ -2449,7 +2449,7 @@ CastInst::getCastOpcode(
|
||||
PTy = NULL;
|
||||
return BitCast; // Same size, no-op cast
|
||||
} else {
|
||||
assert(isa<PointerType>(SrcTy) &&
|
||||
assert(SrcTy->isPointerTy() &&
|
||||
"Casting from a value that is not first-class type");
|
||||
return PtrToInt; // ptr -> int
|
||||
}
|
||||
@ -2486,8 +2486,8 @@ CastInst::getCastOpcode(
|
||||
} else {
|
||||
assert(!"Illegal cast to vector (wrong type or size)");
|
||||
}
|
||||
} else if (isa<PointerType>(DestTy)) {
|
||||
if (isa<PointerType>(SrcTy)) {
|
||||
} else if (DestTy->isPointerTy()) {
|
||||
if (SrcTy->isPointerTy()) {
|
||||
return BitCast; // ptr -> ptr
|
||||
} else if (SrcTy->isIntegerTy()) {
|
||||
return IntToPtr; // int -> ptr
|
||||
@ -2566,13 +2566,13 @@ CastInst::castIsValid(Instruction::CastOps op, Value *S, const Type *DstTy) {
|
||||
}
|
||||
return SrcTy->isFPOrFPVectorTy() && DstTy->isIntOrIntVectorTy();
|
||||
case Instruction::PtrToInt:
|
||||
return isa<PointerType>(SrcTy) && DstTy->isIntegerTy();
|
||||
return SrcTy->isPointerTy() && DstTy->isIntegerTy();
|
||||
case Instruction::IntToPtr:
|
||||
return SrcTy->isIntegerTy() && isa<PointerType>(DstTy);
|
||||
return SrcTy->isIntegerTy() && DstTy->isPointerTy();
|
||||
case Instruction::BitCast:
|
||||
// BitCast implies a no-op cast of type only. No bits change.
|
||||
// However, you can't cast pointers to anything but pointers.
|
||||
if (isa<PointerType>(SrcTy) != isa<PointerType>(DstTy))
|
||||
if (SrcTy->isPointerTy() != DstTy->isPointerTy())
|
||||
return false;
|
||||
|
||||
// Now we know we're not dealing with a pointer/non-pointer mismatch. In all
|
||||
@ -3150,7 +3150,7 @@ void SwitchInst::setSuccessorV(unsigned idx, BasicBlock *B) {
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
void IndirectBrInst::init(Value *Address, unsigned NumDests) {
|
||||
assert(Address && isa<PointerType>(Address->getType()) &&
|
||||
assert(Address && Address->getType()->isPointerTy() &&
|
||||
"Address of indirectbr must be a pointer");
|
||||
ReservedSpace = 1+NumDests;
|
||||
NumOperands = 1;
|
||||
|
@ -61,8 +61,8 @@ void Type::destroy() const {
|
||||
// Structures and Functions allocate their contained types past the end of
|
||||
// the type object itself. These need to be destroyed differently than the
|
||||
// other types.
|
||||
if (isa<FunctionType>(this) || isa<StructType>(this) ||
|
||||
isa<UnionType>(this)) {
|
||||
if (this->isFunctionTy() || this->isStructTy() ||
|
||||
this->isUnionTy()) {
|
||||
// First, make sure we destruct any PATypeHandles allocated by these
|
||||
// subclasses. They must be manually destructed.
|
||||
for (unsigned i = 0; i < NumContainedTys; ++i)
|
||||
@ -70,9 +70,9 @@ void Type::destroy() const {
|
||||
|
||||
// Now call the destructor for the subclass directly because we're going
|
||||
// to delete this as an array of char.
|
||||
if (isa<FunctionType>(this))
|
||||
if (this->isFunctionTy())
|
||||
static_cast<const FunctionType*>(this)->FunctionType::~FunctionType();
|
||||
else if (isa<StructType>(this))
|
||||
else if (this->isStructTy())
|
||||
static_cast<const StructType*>(this)->StructType::~StructType();
|
||||
else
|
||||
static_cast<const UnionType*>(this)->UnionType::~UnionType();
|
||||
@ -176,8 +176,8 @@ bool Type::canLosslesslyBitCastTo(const Type *Ty) const {
|
||||
// At this point we have only various mismatches of the first class types
|
||||
// remaining and ptr->ptr. Just select the lossless conversions. Everything
|
||||
// else is not lossless.
|
||||
if (isa<PointerType>(this))
|
||||
return isa<PointerType>(Ty);
|
||||
if (this->isPointerTy())
|
||||
return Ty->isPointerTy();
|
||||
return false; // Other types have no identity values
|
||||
}
|
||||
|
||||
@ -220,7 +220,7 @@ int Type::getFPMantissaWidth() const {
|
||||
/// iff all of the members of the type are sized as well. Since asking for
|
||||
/// their size is relatively uncommon, move this operation out of line.
|
||||
bool Type::isSizedDerivedType() const {
|
||||
if (isa<IntegerType>(this))
|
||||
if (this->isIntegerTy())
|
||||
return true;
|
||||
|
||||
if (const ArrayType *ATy = dyn_cast<ArrayType>(this))
|
||||
@ -229,7 +229,7 @@ bool Type::isSizedDerivedType() const {
|
||||
if (const VectorType *PTy = dyn_cast<VectorType>(this))
|
||||
return PTy->getElementType()->isSized();
|
||||
|
||||
if (!isa<StructType>(this) && !isa<UnionType>(this))
|
||||
if (!this->isStructTy() && !this->isUnionTy())
|
||||
return false;
|
||||
|
||||
// Okay, our struct is sized if all of the elements are...
|
||||
@ -888,7 +888,7 @@ ArrayType *ArrayType::get(const Type *ElementType, uint64_t NumElements) {
|
||||
|
||||
bool ArrayType::isValidElementType(const Type *ElemTy) {
|
||||
return ElemTy->getTypeID() != VoidTyID && ElemTy->getTypeID() != LabelTyID &&
|
||||
ElemTy->getTypeID() != MetadataTyID && !isa<FunctionType>(ElemTy);
|
||||
ElemTy->getTypeID() != MetadataTyID && !ElemTy->isFunctionTy();
|
||||
}
|
||||
|
||||
VectorType *VectorType::get(const Type *ElementType, unsigned NumElements) {
|
||||
@ -955,7 +955,7 @@ StructType *StructType::get(LLVMContext &Context, const Type *type, ...) {
|
||||
|
||||
bool StructType::isValidElementType(const Type *ElemTy) {
|
||||
return !ElemTy->isVoidTy() && !ElemTy->isLabelTy() &&
|
||||
!ElemTy->isMetadataTy() && !isa<FunctionType>(ElemTy);
|
||||
!ElemTy->isMetadataTy() && !ElemTy->isFunctionTy();
|
||||
}
|
||||
|
||||
|
||||
@ -1303,7 +1303,7 @@ void PointerType::typeBecameConcrete(const DerivedType *AbsTy) {
|
||||
}
|
||||
|
||||
bool SequentialType::indexValid(const Value *V) const {
|
||||
if (isa<IntegerType>(V->getType()))
|
||||
if (V->getType()->isIntegerTy())
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
@ -45,7 +45,7 @@ Value::Value(const Type *ty, unsigned scid)
|
||||
UseList(0), Name(0) {
|
||||
if (isa<CallInst>(this) || isa<InvokeInst>(this))
|
||||
assert((VTy->isFirstClassType() || VTy->isVoidTy() ||
|
||||
isa<OpaqueType>(ty) || VTy->getTypeID() == Type::StructTyID) &&
|
||||
isa<OpaqueType>(ty) || VTy->isStructTy()) &&
|
||||
"invalid CallInst type!");
|
||||
else if (!isa<Constant>(this) && !isa<BasicBlock>(this))
|
||||
assert((VTy->isFirstClassType() || VTy->isVoidTy() ||
|
||||
@ -320,7 +320,7 @@ void Value::replaceAllUsesWith(Value *New) {
|
||||
}
|
||||
|
||||
Value *Value::stripPointerCasts() {
|
||||
if (!isa<PointerType>(getType()))
|
||||
if (!getType()->isPointerTy())
|
||||
return this;
|
||||
Value *V = this;
|
||||
do {
|
||||
@ -337,12 +337,12 @@ Value *Value::stripPointerCasts() {
|
||||
} else {
|
||||
return V;
|
||||
}
|
||||
assert(isa<PointerType>(V->getType()) && "Unexpected operand type!");
|
||||
assert(V->getType()->isPointerTy() && "Unexpected operand type!");
|
||||
} while (1);
|
||||
}
|
||||
|
||||
Value *Value::getUnderlyingObject(unsigned MaxLookup) {
|
||||
if (!isa<PointerType>(getType()))
|
||||
if (!getType()->isPointerTy())
|
||||
return this;
|
||||
Value *V = this;
|
||||
for (unsigned Count = 0; MaxLookup == 0 || Count < MaxLookup; ++Count) {
|
||||
@ -357,7 +357,7 @@ Value *Value::getUnderlyingObject(unsigned MaxLookup) {
|
||||
} else {
|
||||
return V;
|
||||
}
|
||||
assert(isa<PointerType>(V->getType()) && "Unexpected operand type!");
|
||||
assert(V->getType()->isPointerTy() && "Unexpected operand type!");
|
||||
}
|
||||
return V;
|
||||
}
|
||||
|
@ -46,7 +46,7 @@ bool EVT::isExtendedInteger() const {
|
||||
|
||||
bool EVT::isExtendedVector() const {
|
||||
assert(isExtended() && "Type is not extended!");
|
||||
return isa<VectorType>(LLVMTy);
|
||||
return LLVMTy->isVectorTy();
|
||||
}
|
||||
|
||||
bool EVT::isExtended64BitVector() const {
|
||||
|
@ -433,7 +433,7 @@ void Verifier::visitGlobalValue(GlobalValue &GV) {
|
||||
|
||||
if (GV.hasAppendingLinkage()) {
|
||||
GlobalVariable *GVar = dyn_cast<GlobalVariable>(&GV);
|
||||
Assert1(GVar && isa<ArrayType>(GVar->getType()->getElementType()),
|
||||
Assert1(GVar && GVar->getType()->getElementType()->isArrayTy(),
|
||||
"Only global arrays can have appending linkage!", GVar);
|
||||
}
|
||||
}
|
||||
@ -609,7 +609,7 @@ void Verifier::visitFunction(Function &F) {
|
||||
&F, FT);
|
||||
Assert1(F.getReturnType()->isFirstClassType() ||
|
||||
F.getReturnType()->isVoidTy() ||
|
||||
isa<StructType>(F.getReturnType()),
|
||||
F.getReturnType()->isStructTy(),
|
||||
"Functions cannot return aggregate values!", &F);
|
||||
|
||||
Assert1(!F.hasStructRetAttr() || F.getReturnType()->isVoidTy(),
|
||||
@ -838,7 +838,7 @@ void Verifier::visitTruncInst(TruncInst &I) {
|
||||
|
||||
Assert1(SrcTy->isIntOrIntVectorTy(), "Trunc only operates on integer", &I);
|
||||
Assert1(DestTy->isIntOrIntVectorTy(), "Trunc only produces integer", &I);
|
||||
Assert1(isa<VectorType>(SrcTy) == isa<VectorType>(DestTy),
|
||||
Assert1(SrcTy->isVectorTy() == DestTy->isVectorTy(),
|
||||
"trunc source and destination must both be a vector or neither", &I);
|
||||
Assert1(SrcBitSize > DestBitSize,"DestTy too big for Trunc", &I);
|
||||
|
||||
@ -853,7 +853,7 @@ void Verifier::visitZExtInst(ZExtInst &I) {
|
||||
// Get the size of the types in bits, we'll need this later
|
||||
Assert1(SrcTy->isIntOrIntVectorTy(), "ZExt only operates on integer", &I);
|
||||
Assert1(DestTy->isIntOrIntVectorTy(), "ZExt only produces an integer", &I);
|
||||
Assert1(isa<VectorType>(SrcTy) == isa<VectorType>(DestTy),
|
||||
Assert1(SrcTy->isVectorTy() == DestTy->isVectorTy(),
|
||||
"zext source and destination must both be a vector or neither", &I);
|
||||
unsigned SrcBitSize = SrcTy->getScalarSizeInBits();
|
||||
unsigned DestBitSize = DestTy->getScalarSizeInBits();
|
||||
@ -874,7 +874,7 @@ void Verifier::visitSExtInst(SExtInst &I) {
|
||||
|
||||
Assert1(SrcTy->isIntOrIntVectorTy(), "SExt only operates on integer", &I);
|
||||
Assert1(DestTy->isIntOrIntVectorTy(), "SExt only produces an integer", &I);
|
||||
Assert1(isa<VectorType>(SrcTy) == isa<VectorType>(DestTy),
|
||||
Assert1(SrcTy->isVectorTy() == DestTy->isVectorTy(),
|
||||
"sext source and destination must both be a vector or neither", &I);
|
||||
Assert1(SrcBitSize < DestBitSize,"Type too small for SExt", &I);
|
||||
|
||||
@ -891,7 +891,7 @@ void Verifier::visitFPTruncInst(FPTruncInst &I) {
|
||||
|
||||
Assert1(SrcTy->isFPOrFPVectorTy(),"FPTrunc only operates on FP", &I);
|
||||
Assert1(DestTy->isFPOrFPVectorTy(),"FPTrunc only produces an FP", &I);
|
||||
Assert1(isa<VectorType>(SrcTy) == isa<VectorType>(DestTy),
|
||||
Assert1(SrcTy->isVectorTy() == DestTy->isVectorTy(),
|
||||
"fptrunc source and destination must both be a vector or neither",&I);
|
||||
Assert1(SrcBitSize > DestBitSize,"DestTy too big for FPTrunc", &I);
|
||||
|
||||
@ -909,7 +909,7 @@ void Verifier::visitFPExtInst(FPExtInst &I) {
|
||||
|
||||
Assert1(SrcTy->isFPOrFPVectorTy(),"FPExt only operates on FP", &I);
|
||||
Assert1(DestTy->isFPOrFPVectorTy(),"FPExt only produces an FP", &I);
|
||||
Assert1(isa<VectorType>(SrcTy) == isa<VectorType>(DestTy),
|
||||
Assert1(SrcTy->isVectorTy() == DestTy->isVectorTy(),
|
||||
"fpext source and destination must both be a vector or neither", &I);
|
||||
Assert1(SrcBitSize < DestBitSize,"DestTy too small for FPExt", &I);
|
||||
|
||||
@ -921,8 +921,8 @@ void Verifier::visitUIToFPInst(UIToFPInst &I) {
|
||||
const Type *SrcTy = I.getOperand(0)->getType();
|
||||
const Type *DestTy = I.getType();
|
||||
|
||||
bool SrcVec = isa<VectorType>(SrcTy);
|
||||
bool DstVec = isa<VectorType>(DestTy);
|
||||
bool SrcVec = SrcTy->isVectorTy();
|
||||
bool DstVec = DestTy->isVectorTy();
|
||||
|
||||
Assert1(SrcVec == DstVec,
|
||||
"UIToFP source and dest must both be vector or scalar", &I);
|
||||
@ -944,8 +944,8 @@ void Verifier::visitSIToFPInst(SIToFPInst &I) {
|
||||
const Type *SrcTy = I.getOperand(0)->getType();
|
||||
const Type *DestTy = I.getType();
|
||||
|
||||
bool SrcVec = isa<VectorType>(SrcTy);
|
||||
bool DstVec = isa<VectorType>(DestTy);
|
||||
bool SrcVec = SrcTy->isVectorTy();
|
||||
bool DstVec = DestTy->isVectorTy();
|
||||
|
||||
Assert1(SrcVec == DstVec,
|
||||
"SIToFP source and dest must both be vector or scalar", &I);
|
||||
@ -967,8 +967,8 @@ void Verifier::visitFPToUIInst(FPToUIInst &I) {
|
||||
const Type *SrcTy = I.getOperand(0)->getType();
|
||||
const Type *DestTy = I.getType();
|
||||
|
||||
bool SrcVec = isa<VectorType>(SrcTy);
|
||||
bool DstVec = isa<VectorType>(DestTy);
|
||||
bool SrcVec = SrcTy->isVectorTy();
|
||||
bool DstVec = DestTy->isVectorTy();
|
||||
|
||||
Assert1(SrcVec == DstVec,
|
||||
"FPToUI source and dest must both be vector or scalar", &I);
|
||||
@ -990,8 +990,8 @@ void Verifier::visitFPToSIInst(FPToSIInst &I) {
|
||||
const Type *SrcTy = I.getOperand(0)->getType();
|
||||
const Type *DestTy = I.getType();
|
||||
|
||||
bool SrcVec = isa<VectorType>(SrcTy);
|
||||
bool DstVec = isa<VectorType>(DestTy);
|
||||
bool SrcVec = SrcTy->isVectorTy();
|
||||
bool DstVec = DestTy->isVectorTy();
|
||||
|
||||
Assert1(SrcVec == DstVec,
|
||||
"FPToSI source and dest must both be vector or scalar", &I);
|
||||
@ -1013,7 +1013,7 @@ void Verifier::visitPtrToIntInst(PtrToIntInst &I) {
|
||||
const Type *SrcTy = I.getOperand(0)->getType();
|
||||
const Type *DestTy = I.getType();
|
||||
|
||||
Assert1(isa<PointerType>(SrcTy), "PtrToInt source must be pointer", &I);
|
||||
Assert1(SrcTy->isPointerTy(), "PtrToInt source must be pointer", &I);
|
||||
Assert1(DestTy->isIntegerTy(), "PtrToInt result must be integral", &I);
|
||||
|
||||
visitInstruction(I);
|
||||
@ -1025,7 +1025,7 @@ void Verifier::visitIntToPtrInst(IntToPtrInst &I) {
|
||||
const Type *DestTy = I.getType();
|
||||
|
||||
Assert1(SrcTy->isIntegerTy(), "IntToPtr source must be an integral", &I);
|
||||
Assert1(isa<PointerType>(DestTy), "IntToPtr result must be a pointer",&I);
|
||||
Assert1(DestTy->isPointerTy(), "IntToPtr result must be a pointer",&I);
|
||||
|
||||
visitInstruction(I);
|
||||
}
|
||||
@ -1041,7 +1041,7 @@ void Verifier::visitBitCastInst(BitCastInst &I) {
|
||||
|
||||
// BitCast implies a no-op cast of type only. No bits change.
|
||||
// However, you can't cast pointers to anything but pointers.
|
||||
Assert1(isa<PointerType>(DestTy) == isa<PointerType>(DestTy),
|
||||
Assert1(DestTy->isPointerTy() == DestTy->isPointerTy(),
|
||||
"Bitcast requires both operands to be pointer or neither", &I);
|
||||
Assert1(SrcBitSize == DestBitSize, "Bitcast requires types of same width",&I);
|
||||
|
||||
@ -1084,11 +1084,11 @@ void Verifier::visitPHINode(PHINode &PN) {
|
||||
void Verifier::VerifyCallSite(CallSite CS) {
|
||||
Instruction *I = CS.getInstruction();
|
||||
|
||||
Assert1(isa<PointerType>(CS.getCalledValue()->getType()),
|
||||
Assert1(CS.getCalledValue()->getType()->isPointerTy(),
|
||||
"Called function must be a pointer!", I);
|
||||
const PointerType *FPTy = cast<PointerType>(CS.getCalledValue()->getType());
|
||||
|
||||
Assert1(isa<FunctionType>(FPTy->getElementType()),
|
||||
Assert1(FPTy->getElementType()->isFunctionTy(),
|
||||
"Called function is not pointer to function type!", I);
|
||||
const FunctionType *FTy = cast<FunctionType>(FPTy->getElementType());
|
||||
|
||||
@ -1219,7 +1219,7 @@ void Verifier::visitICmpInst(ICmpInst& IC) {
|
||||
Assert1(Op0Ty == Op1Ty,
|
||||
"Both operands to ICmp instruction are not of the same type!", &IC);
|
||||
// Check that the operands are the right type
|
||||
Assert1(Op0Ty->isIntOrIntVectorTy() || isa<PointerType>(Op0Ty),
|
||||
Assert1(Op0Ty->isIntOrIntVectorTy() || Op0Ty->isPointerTy(),
|
||||
"Invalid operand types for ICmp instruction", &IC);
|
||||
|
||||
visitInstruction(IC);
|
||||
@ -1286,7 +1286,7 @@ void Verifier::visitGetElementPtrInst(GetElementPtrInst &GEP) {
|
||||
GetElementPtrInst::getIndexedType(GEP.getOperand(0)->getType(),
|
||||
Idxs.begin(), Idxs.end());
|
||||
Assert1(ElTy, "Invalid indices for GEP pointer type!", &GEP);
|
||||
Assert2(isa<PointerType>(GEP.getType()) &&
|
||||
Assert2(GEP.getType()->isPointerTy() &&
|
||||
cast<PointerType>(GEP.getType())->getElementType() == ElTy,
|
||||
"GEP is not of right type for indices!", &GEP, ElTy);
|
||||
visitInstruction(GEP);
|
||||
@ -1632,7 +1632,7 @@ void Verifier::visitIntrinsicFunctionCall(Intrinsic::ID ID, CallInst &CI) {
|
||||
if (ID == Intrinsic::gcroot) {
|
||||
AllocaInst *AI =
|
||||
dyn_cast<AllocaInst>(CI.getOperand(1)->stripPointerCasts());
|
||||
Assert1(AI && isa<PointerType>(AI->getType()->getElementType()),
|
||||
Assert1(AI && AI->getType()->getElementType()->isPointerTy(),
|
||||
"llvm.gcroot parameter #1 must be a pointer alloca.", &CI);
|
||||
Assert1(isa<Constant>(CI.getOperand(2)),
|
||||
"llvm.gcroot parameter #2 must be a constant.", &CI);
|
||||
@ -1794,7 +1794,7 @@ bool Verifier::PerformTypeCheck(Intrinsic::ID ID, Function *F, const Type *Ty,
|
||||
}
|
||||
Suffix += ".v" + utostr(NumElts) + EVT::getEVT(EltTy).getEVTString();
|
||||
} else if (VT == MVT::iPTR) {
|
||||
if (!isa<PointerType>(Ty)) {
|
||||
if (!Ty->isPointerTy()) {
|
||||
CheckFailed(IntrinsicParam(ArgNo, NumRets) + " is not a "
|
||||
"pointer and a pointer is required.", F);
|
||||
return false;
|
||||
|
@ -295,7 +295,7 @@ bool ReduceCrashingBlocks::TestBlocks(std::vector<const BasicBlock*> &BBs) {
|
||||
|
||||
TerminatorInst *BBTerm = BB->getTerminator();
|
||||
|
||||
if (isa<StructType>(BBTerm->getType()))
|
||||
if (BBTerm->getType()->isStructTy())
|
||||
BBTerm->replaceAllUsesWith(UndefValue::get(BBTerm->getType()));
|
||||
else if (BB->getTerminator()->getType() !=
|
||||
Type::getVoidTy(BB->getContext()))
|
||||
|
@ -73,7 +73,7 @@ Module *BugDriver::deleteInstructionFromProgram(const Instruction *I,
|
||||
Instruction *TheInst = RI; // Got the corresponding instruction!
|
||||
|
||||
// If this instruction produces a value, replace any users with null values
|
||||
if (isa<StructType>(TheInst->getType()))
|
||||
if (TheInst->getType()->isStructTy())
|
||||
TheInst->replaceAllUsesWith(UndefValue::get(TheInst->getType()));
|
||||
else if (TheInst->getType() != Type::getVoidTy(I->getContext()))
|
||||
TheInst->replaceAllUsesWith(Constant::getNullValue(TheInst->getType()));
|
||||
|
Loading…
Reference in New Issue
Block a user