diff options
author | David Majnemer <david.majnemer@gmail.com> | 2016-06-23 00:14:29 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2016-06-23 00:14:29 +0000 |
commit | d1fbf48566ae0ff14ea2b935cbf3cbbba40a6d28 (patch) | |
tree | 06aa331db01dd5263c01963623041c18b63ce87b | |
parent | 8871e7a49f511b17ee1d8f66d6dad05a2a610415 (diff) | |
download | bcm5719-llvm-d1fbf48566ae0ff14ea2b935cbf3cbbba40a6d28.tar.gz bcm5719-llvm-d1fbf48566ae0ff14ea2b935cbf3cbbba40a6d28.zip |
[SCCP] Don't assume all Constants are ConstantInt
This fixes PR28269.
llvm-svn: 273521
-rw-r--r-- | llvm/lib/Transforms/Scalar/SCCP.cpp | 16 | ||||
-rw-r--r-- | llvm/test/Transforms/SCCP/undef-resolve.ll | 10 |
2 files changed, 18 insertions, 8 deletions
diff --git a/llvm/lib/Transforms/Scalar/SCCP.cpp b/llvm/lib/Transforms/Scalar/SCCP.cpp index 83f087f487b..91e625b7aac 100644 --- a/llvm/lib/Transforms/Scalar/SCCP.cpp +++ b/llvm/lib/Transforms/Scalar/SCCP.cpp @@ -1419,10 +1419,10 @@ bool SCCPSolver::ResolvedUndefsIn(Function &F) { // Shifting by the bitwidth or more is undefined. if (Op1LV.isConstant()) { - auto *ShiftAmt = Op1LV.getConstantInt(); - if (ShiftAmt->getLimitedValue() >= - ShiftAmt->getType()->getScalarSizeInBits()) - break; + if (auto *ShiftAmt = Op1LV.getConstantInt()) + if (ShiftAmt->getLimitedValue() >= + ShiftAmt->getType()->getScalarSizeInBits()) + break; } // undef >>a X -> all ones @@ -1436,10 +1436,10 @@ bool SCCPSolver::ResolvedUndefsIn(Function &F) { // Shifting by the bitwidth or more is undefined. if (Op1LV.isConstant()) { - auto *ShiftAmt = Op1LV.getConstantInt(); - if (ShiftAmt->getLimitedValue() >= - ShiftAmt->getType()->getScalarSizeInBits()) - break; + if (auto *ShiftAmt = Op1LV.getConstantInt()) + if (ShiftAmt->getLimitedValue() >= + ShiftAmt->getType()->getScalarSizeInBits()) + break; } // undef << X -> 0 diff --git a/llvm/test/Transforms/SCCP/undef-resolve.ll b/llvm/test/Transforms/SCCP/undef-resolve.ll index 2b40183c2cc..fcfe3f573ea 100644 --- a/llvm/test/Transforms/SCCP/undef-resolve.ll +++ b/llvm/test/Transforms/SCCP/undef-resolve.ll @@ -170,3 +170,13 @@ entry: ; CHECK-LABEL: @test10( ; CHECK: ret i64 undef } + +@GV = external global i32 + +define i32 @test11(i1 %tobool) { +entry: + %shr4 = ashr i32 undef, zext (i1 icmp eq (i32* bitcast (i32 (i1)* @test11 to i32*), i32* @GV) to i32) + ret i32 %shr4 +; CHECK-LABEL: @test11( +; CHECK: ret i32 -1 +} |