From 8581c260d3595fd78ce9f1585c85bea545fce5f3 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Mon, 26 Apr 2010 18:21:23 +0000 Subject: [PATCH] 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 --- lib/Transforms/Scalar/SCCP.cpp | 2 ++ test/Transforms/SCCP/undef-resolve.ll | 15 +++++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/Transforms/Scalar/SCCP.cpp b/lib/Transforms/Scalar/SCCP.cpp index 59cdee652dc..907ece8fcce 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 d2f3d0206d7..bed561c8e4f 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