forked from OSchip/llvm-project
[SCCP] Don't assume all Constants are ConstantInt
This fixes PR28269. llvm-svn: 273521
This commit is contained in:
parent
8871e7a49f
commit
d1fbf48566
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue