forked from OSchip/llvm-project
[Reassociate] Remove bogus assert reported in PR42349.
Also, add a FIXME for the unsafe transform on a unary FNeg. A unary FNeg can only be transformed to a FMul by -1.0 when the nnan flag is present. The unary FNeg project is a WIP, so the unsafe transformation is acceptable until that work is complete. The bogus assert with introduced in D63445. llvm-svn: 363998
This commit is contained in:
parent
b342f026a4
commit
1c0bd6dd2c
|
@ -268,11 +268,7 @@ static BinaryOperator *CreateNeg(Value *S1, const Twine &Name,
|
|||
static BinaryOperator *LowerNegateToMultiply(Instruction *Neg) {
|
||||
assert((isa<UnaryOperator>(Neg) || isa<BinaryOperator>(Neg)) &&
|
||||
"Expected a Negate!");
|
||||
// It's not safe to lower a unary FNeg into a FMul by -1.0. However,
|
||||
// we can only reach this function with fast flags set, so it's
|
||||
// safe to do with nnan.
|
||||
assert((!isa<FPMathOperator>(Neg) || Neg->isFast()) &&
|
||||
"Expecting FastMathFlags!");
|
||||
// FIXME: It's not safe to lower a unary FNeg into a FMul by -1.0.
|
||||
unsigned OpNo = isa<BinaryOperator>(Neg) ? 1 : 0;
|
||||
Type *Ty = Neg->getType();
|
||||
Constant *NegOne = Ty->isIntOrIntVectorTy() ?
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||
; RUN: opt < %s -reassociate -S | FileCheck %s
|
||||
|
||||
define float @wibble(float %tmp6) #0 {
|
||||
; CHECK-LABEL: @wibble(
|
||||
; CHECK-NEXT: bb:
|
||||
; CHECK-NEXT: [[TMP7:%.*]] = fmul float [[TMP6:%.*]], -1.000000e+00
|
||||
; CHECK-NEXT: [[TMP0:%.*]] = fsub float -0.000000e+00, 0.000000e+00
|
||||
; CHECK-NEXT: [[TMP9:%.*]] = fmul fast float [[TMP6]], 0xFFF0000000000000
|
||||
; CHECK-NEXT: ret float [[TMP9]]
|
||||
;
|
||||
bb:
|
||||
%tmp7 = fsub float -0.000000e+00, %tmp6
|
||||
%tmp9 = fmul fast float %tmp7, 0x7FF0000000000000
|
||||
ret float %tmp9
|
||||
}
|
||||
|
||||
attributes #0 = { "use-soft-float"="false" }
|
Loading…
Reference in New Issue