forked from OSchip/llvm-project
[InstCombine] Handle failures from ConstantFoldConstantExpression
ConstantFoldConstantExpression returns null when folding fails. This fixes PR28745. llvm-svn: 276952
This commit is contained in:
parent
74999eb50f
commit
0be7155350
|
@ -162,7 +162,8 @@ Value *InstCombiner::EvaluateInDifferentType(Value *V, Type *Ty,
|
|||
C = ConstantExpr::getIntegerCast(C, Ty, isSigned /*Sext or ZExt*/);
|
||||
// If we got a constantexpr back, try to simplify it with DL info.
|
||||
if (ConstantExpr *CE = dyn_cast<ConstantExpr>(C))
|
||||
C = ConstantFoldConstantExpression(CE, DL, TLI);
|
||||
if (Constant *FoldedC = ConstantFoldConstantExpression(CE, DL, TLI))
|
||||
C = FoldedC;
|
||||
return C;
|
||||
}
|
||||
|
||||
|
|
|
@ -1372,3 +1372,11 @@ define i16 @PR24763(i8 %V) {
|
|||
%t = trunc i32 %l to i16
|
||||
ret i16 %t
|
||||
}
|
||||
|
||||
define i64 @PR28745() {
|
||||
; CHECK-LABEL: @PR28745(
|
||||
; CHECK-NEXT: ret i64 zext (i32 extractvalue ({ i32 } select (i1 icmp eq (i16 extractelement (<2 x i16> bitcast (<1 x i32> <i32 1> to <2 x i16>), i32 0), i16 0), { i32 } { i32 1 }, { i32 } zeroinitializer), 0) to i64)
|
||||
|
||||
%b = zext i32 extractvalue ({ i32 } select (i1 icmp eq (i16 extractelement (<2 x i16> bitcast (<1 x i32> <i32 1> to <2 x i16>), i32 0), i16 0), { i32 } { i32 1 }, { i32 } zeroinitializer), 0) to i64
|
||||
ret i64 %b
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue