mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 12:50:30 +00:00
Fix Reassociate handling of constant in presence of undef float
http://reviews.llvm.org/D6993 llvm-svn: 226245
This commit is contained in:
parent
f1394d41f0
commit
a1e86a9849
@ -917,10 +917,13 @@ void Reassociate::RewriteExprTree(BinaryOperator *I,
|
||||
/// version of the value is returned, and BI is left pointing at the instruction
|
||||
/// that should be processed next by the reassociation pass.
|
||||
static Value *NegateValue(Value *V, Instruction *BI) {
|
||||
if (ConstantFP *C = dyn_cast<ConstantFP>(V))
|
||||
return ConstantExpr::getFNeg(C);
|
||||
if (Constant *C = dyn_cast<Constant>(V))
|
||||
if (Constant *C = dyn_cast<Constant>(V)) {
|
||||
if (C->getType()->isFPOrFPVectorTy()) {
|
||||
return ConstantExpr::getFNeg(C);
|
||||
}
|
||||
return ConstantExpr::getNeg(C);
|
||||
}
|
||||
|
||||
|
||||
// We are trying to expose opportunity for reassociation. One of the things
|
||||
// that we want to do to achieve this is to push a negation as deep into an
|
||||
|
25
test/Transforms/Reassociate/crash2.ll
Normal file
25
test/Transforms/Reassociate/crash2.ll
Normal file
@ -0,0 +1,25 @@
|
||||
; RUN: opt -reassociate %s -S -o - | FileCheck %s
|
||||
|
||||
; Reassociate pass used to crash on these example
|
||||
|
||||
|
||||
define float @undef1() {
|
||||
wrapper_entry:
|
||||
; CHECK-LABEL: @undef1
|
||||
; CHECK: ret float fadd (float undef, float fadd (float undef, float fadd (float fsub (float -0.000000e+00, float undef), float fsub (float -0.000000e+00, float undef))))
|
||||
%0 = fadd fast float undef, undef
|
||||
%1 = fsub fast float undef, %0
|
||||
%2 = fadd fast float undef, %1
|
||||
ret float %2
|
||||
}
|
||||
|
||||
define void @undef2() {
|
||||
wrapper_entry:
|
||||
; CHECK-LABEL: @undef2
|
||||
; CHECK: unreachable
|
||||
%0 = fadd fast float undef, undef
|
||||
%1 = fadd fast float %0, 1.000000e+00
|
||||
%2 = fsub fast float %0, %1
|
||||
%3 = fmul fast float %2, 2.000000e+00
|
||||
unreachable
|
||||
}
|
Loading…
Reference in New Issue
Block a user