diff options
author | Chris Lattner <sabre@nondot.org> | 2005-08-01 16:52:50 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2005-08-01 16:52:50 +0000 |
commit | 9cc5f42febe20d413e4bc027e1e0fd1d691869c6 (patch) | |
tree | 071768e9f1061c02f06803945783f5247378ecf6 | |
parent | d29b6aa608d69f19b57ebd2ae630b040b1c4951d (diff) |
ConstantInt::get only works for arguments < 128.
SimplifyLibCalls probably has to be audited to make sure it does not make
this mistake elsewhere. Also, if this code knows that the type will be
unsigned, obviously one arm of this is dead.
Reid, can you take a look into this further?
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22566 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Transforms/IPO/SimplifyLibCalls.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/lib/Transforms/IPO/SimplifyLibCalls.cpp b/lib/Transforms/IPO/SimplifyLibCalls.cpp index 754143bea7..99675b3cb3 100644 --- a/lib/Transforms/IPO/SimplifyLibCalls.cpp +++ b/lib/Transforms/IPO/SimplifyLibCalls.cpp @@ -962,8 +962,12 @@ struct StrLenOptimization : public LibCallOptimization return false; // strlen("xyz") -> 3 (for example) - ci->replaceAllUsesWith( - ConstantInt::get(SLC.getTargetData()->getIntPtrType(),len)); + const Type *Ty = SLC.getTargetData()->getIntPtrType(); + if (Ty->isSigned()) + ci->replaceAllUsesWith(ConstantSInt::get(Ty, len)); + else + ci->replaceAllUsesWith(ConstantUInt::get(Ty, len)); + ci->eraseFromParent(); return true; } |