[SCCP] Don't assume all Constants are ConstantInt

This fixes PR28269.

llvm-svn: 273521
This commit is contained in:
David Majnemer 2016-06-23 00:14:29 +00:00
parent 8871e7a49f
commit d1fbf48566
2 changed files with 18 additions and 8 deletions

View File

@ -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

View File

@ -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
}