aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2005-08-01 16:52:50 +0000
committerChris Lattner <sabre@nondot.org>2005-08-01 16:52:50 +0000
commit9cc5f42febe20d413e4bc027e1e0fd1d691869c6 (patch)
tree071768e9f1061c02f06803945783f5247378ecf6
parentd29b6aa608d69f19b57ebd2ae630b040b1c4951d (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.cpp8
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;
}