mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-03-01 00:35:43 +00:00
PR10180: Fix a instcombine crash with FP vectors.
llvm-svn: 133756
This commit is contained in:
parent
2c7773157c
commit
8f3af361ac
@ -796,7 +796,7 @@ Instruction *InstCombiner::visitSelectInst(SelectInst &SI) {
|
||||
// So at this point we know we have (Y -> OtherAddOp):
|
||||
// select C, (add X, Y), (sub X, Z)
|
||||
Value *NegVal; // Compute -Z
|
||||
if (SI.getType()->isFloatingPointTy()) {
|
||||
if (SI.getType()->isFPOrFPVectorTy()) {
|
||||
NegVal = Builder->CreateFNeg(SubOp->getOperand(1));
|
||||
} else {
|
||||
NegVal = Builder->CreateNeg(SubOp->getOperand(1));
|
||||
@ -810,7 +810,7 @@ Instruction *InstCombiner::visitSelectInst(SelectInst &SI) {
|
||||
Builder->CreateSelect(CondVal, NewTrueOp,
|
||||
NewFalseOp, SI.getName() + ".p");
|
||||
|
||||
if (SI.getType()->isFloatingPointTy())
|
||||
if (SI.getType()->isFPOrFPVectorTy())
|
||||
return BinaryOperator::CreateFAdd(SubOp->getOperand(0), NewSel);
|
||||
else
|
||||
return BinaryOperator::CreateAdd(SubOp->getOperand(0), NewSel);
|
||||
|
@ -18,3 +18,15 @@ entry:
|
||||
%add94 = fadd double undef, %mul91
|
||||
ret double %add94
|
||||
}
|
||||
|
||||
; PR10180: same crash, but with vectors
|
||||
define <4 x float> @foo(i1 %b, <4 x float> %x, <4 x float> %y, <4 x float> %z) {
|
||||
; CHECK: @foo
|
||||
; CHECK: fsub <4 x float>
|
||||
; CHECK: select
|
||||
; CHECK: fadd <4 x float>
|
||||
%a = fadd <4 x float> %x, %y
|
||||
%sub = fsub <4 x float> %x, %z
|
||||
%sel = select i1 %b, <4 x float> %a, <4 x float> %sub
|
||||
ret <4 x float> %sel
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user