diff options
Diffstat (limited to 'lib/Transforms/IPO')
-rw-r--r-- | lib/Transforms/IPO/DeadTypeElimination.cpp | 7 | ||||
-rw-r--r-- | lib/Transforms/IPO/SimplifyLibCalls.cpp | 18 |
2 files changed, 16 insertions, 9 deletions
diff --git a/lib/Transforms/IPO/DeadTypeElimination.cpp b/lib/Transforms/IPO/DeadTypeElimination.cpp index 871bcff..b599e5a 100644 --- a/lib/Transforms/IPO/DeadTypeElimination.cpp +++ b/lib/Transforms/IPO/DeadTypeElimination.cpp @@ -52,11 +52,14 @@ ModulePass *llvm::createDeadTypeEliminationPass() { // static inline bool ShouldNukeSymtabEntry(const Type *Ty){ // Nuke all names for primitive types! - if (Ty->isPrimitiveType()) return true; + if (Ty->isPrimitiveType() || Ty->isIntegral()) + return true; // Nuke all pointers to primitive types as well... if (const PointerType *PT = dyn_cast<PointerType>(Ty)) - if (PT->getElementType()->isPrimitiveType()) return true; + if (PT->getElementType()->isPrimitiveType() || + PT->getElementType()->isIntegral()) + return true; return false; } diff --git a/lib/Transforms/IPO/SimplifyLibCalls.cpp b/lib/Transforms/IPO/SimplifyLibCalls.cpp index d2ab638..70821f8 100644 --- a/lib/Transforms/IPO/SimplifyLibCalls.cpp +++ b/lib/Transforms/IPO/SimplifyLibCalls.cpp @@ -1820,13 +1820,17 @@ public: // ffsll(x) -> x == 0 ? 0 : llvm.cttz(x)+1 const Type *ArgType = TheCall->getOperand(1)->getType(); const char *CTTZName; - switch (ArgType->getTypeID()) { - default: assert(0 && "Unknown unsigned type!"); - case Type::Int8TyID : CTTZName = "llvm.cttz.i8" ; break; - case Type::Int16TyID: CTTZName = "llvm.cttz.i16"; break; - case Type::Int32TyID : CTTZName = "llvm.cttz.i32"; break; - case Type::Int64TyID : CTTZName = "llvm.cttz.i64"; break; - } + assert(ArgType->getTypeID() == Type::IntegerTyID && + "llvm.cttz argument is not an integer?"); + unsigned BitWidth = cast<IntegerType>(ArgType)->getBitWidth(); + if (BitWidth <= 8) + CTTZName = "llvm.cttz.i8"; + else if (BitWidth <= 16) + CTTZName = "llvm.cttz.i16"; + else if (BitWidth <= 32) + CTTZName = "llvm.cttz.i32"; + else + CTTZName = "llvm.cttz.i64"; Constant *F = SLC.getModule()->getOrInsertFunction(CTTZName, ArgType, ArgType, NULL); |