mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 11:42:57 +01:00
FIX PR7158. SimplifyVBinOp was asserting when it fails to constant fold (op (build_vector), (build_vector)).
llvm-svn: 104004
This commit is contained in:
parent
79b683a9bf
commit
39b5115e93
@ -6344,13 +6344,14 @@ SDValue DAGCombiner::SimplifyVBinOp(SDNode *N) {
|
||||
break;
|
||||
}
|
||||
|
||||
Ops.push_back(DAG.getNode(N->getOpcode(), LHS.getDebugLoc(),
|
||||
EltType, LHSOp, RHSOp));
|
||||
AddToWorkList(Ops.back().getNode());
|
||||
assert((Ops.back().getOpcode() == ISD::UNDEF ||
|
||||
Ops.back().getOpcode() == ISD::Constant ||
|
||||
Ops.back().getOpcode() == ISD::ConstantFP) &&
|
||||
"Scalar binop didn't fold!");
|
||||
SDValue FoldOp = DAG.getNode(N->getOpcode(), LHS.getDebugLoc(), EltType,
|
||||
LHSOp, RHSOp);
|
||||
if (FoldOp.getOpcode() != ISD::UNDEF &&
|
||||
FoldOp.getOpcode() != ISD::Constant &&
|
||||
FoldOp.getOpcode() != ISD::ConstantFP)
|
||||
break;
|
||||
Ops.push_back(FoldOp);
|
||||
AddToWorkList(FoldOp.getNode());
|
||||
}
|
||||
|
||||
if (Ops.size() == LHS.getNumOperands()) {
|
||||
|
17
test/CodeGen/ARM/2010-05-17-DAGCombineAssert.ll
Normal file
17
test/CodeGen/ARM/2010-05-17-DAGCombineAssert.ll
Normal file
@ -0,0 +1,17 @@
|
||||
; RUN: llc < %s -mtriple=armv7-eabi -mcpu=cortex-a8
|
||||
; PR7158
|
||||
|
||||
define arm_aapcs_vfpcc i32 @main() nounwind {
|
||||
bb.nph55.bb.nph55.split_crit_edge:
|
||||
br label %bb3
|
||||
|
||||
bb3: ; preds = %bb3, %bb.nph55.bb.nph55.split_crit_edge
|
||||
br i1 undef, label %bb.i19, label %bb3
|
||||
|
||||
bb.i19: ; preds = %bb.i19, %bb3
|
||||
%0 = insertelement <4 x float> undef, float undef, i32 3 ; <<4 x float>> [#uses=3]
|
||||
%1 = fmul <4 x float> %0, %0 ; <<4 x float>> [#uses=1]
|
||||
%2 = bitcast <4 x float> %1 to <2 x double> ; <<2 x double>> [#uses=0]
|
||||
%3 = fmul <4 x float> %0, undef ; <<4 x float>> [#uses=0]
|
||||
br label %bb.i19
|
||||
}
|
Loading…
Reference in New Issue
Block a user