aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2010-04-26 18:21:23 +0000
committerChris Lattner <sabre@nondot.org>2010-04-26 18:21:23 +0000
commit38f48ffa208f77e8cceabb9f228ce02308d9d004 (patch)
tree33c0ee9b3113d1d2bd588eeee5cf23387a36bb00
parentefdea45847d62fcfb51e294b38586885e8f4101e (diff)
downloadexternal_llvm-38f48ffa208f77e8cceabb9f228ce02308d9d004.zip
external_llvm-38f48ffa208f77e8cceabb9f228ce02308d9d004.tar.gz
external_llvm-38f48ffa208f77e8cceabb9f228ce02308d9d004.tar.bz2
fix PR6940: sitofp(undef) folds to 0.0, not undef.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@102358 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Transforms/Scalar/SCCP.cpp2
-rw-r--r--test/Transforms/SCCP/undef-resolve.ll15
2 files changed, 15 insertions, 2 deletions
diff --git a/lib/Transforms/Scalar/SCCP.cpp b/lib/Transforms/Scalar/SCCP.cpp
index 59cdee6..907ece8 100644
--- a/lib/Transforms/Scalar/SCCP.cpp
+++ b/lib/Transforms/Scalar/SCCP.cpp
@@ -1452,6 +1452,8 @@ bool SCCPSolver::ResolvedUndefsIn(Function &F) {
// After a zero extend, we know the top part is zero. SExt doesn't have
// to be handled here, because we don't know whether the top part is 1's
// or 0's.
+ case Instruction::SIToFP: // some FP values are not possible, just use 0.
+ case Instruction::UIToFP: // some FP values are not possible, just use 0.
markForcedConstant(I, Constant::getNullValue(ITy));
return true;
case Instruction::Mul:
diff --git a/test/Transforms/SCCP/undef-resolve.ll b/test/Transforms/SCCP/undef-resolve.ll
index d2f3d02..bed561c 100644
--- a/test/Transforms/SCCP/undef-resolve.ll
+++ b/test/Transforms/SCCP/undef-resolve.ll
@@ -1,8 +1,19 @@
; RUN: opt %s -sccp -S | FileCheck %s
+
+
+; PR6940
+define double @test1() {
+ %t = sitofp i32 undef to double
+ ret double %t
+; CHECK: @test1
+; CHECK: ret double 0.0
+}
+
+
; rdar://7832370
; Check that lots of stuff doesn't get turned into undef.
-
-define i32 @main() nounwind readnone ssp {
+define i32 @test2() nounwind readnone ssp {
+; CHECK: @test2
init:
br label %control.outer.outer