From 1c0bd6dd2ca71f4ad8d4984340a729b3e959cb80 Mon Sep 17 00:00:00 2001 From: Cameron McInally Date: Thu, 20 Jun 2019 23:03:55 +0000 Subject: [PATCH] [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 --- llvm/lib/Transforms/Scalar/Reassociate.cpp | 6 +----- llvm/test/Transforms/Reassociate/pr42349.ll | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 5 deletions(-) create mode 100644 llvm/test/Transforms/Reassociate/pr42349.ll diff --git a/llvm/lib/Transforms/Scalar/Reassociate.cpp b/llvm/lib/Transforms/Scalar/Reassociate.cpp index 72fbcd1677e8..1c06ffce17e8 100644 --- a/llvm/lib/Transforms/Scalar/Reassociate.cpp +++ b/llvm/lib/Transforms/Scalar/Reassociate.cpp @@ -268,11 +268,7 @@ static BinaryOperator *CreateNeg(Value *S1, const Twine &Name, static BinaryOperator *LowerNegateToMultiply(Instruction *Neg) { assert((isa(Neg) || isa(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(Neg) || Neg->isFast()) && - "Expecting FastMathFlags!"); + // FIXME: It's not safe to lower a unary FNeg into a FMul by -1.0. unsigned OpNo = isa(Neg) ? 1 : 0; Type *Ty = Neg->getType(); Constant *NegOne = Ty->isIntOrIntVectorTy() ? diff --git a/llvm/test/Transforms/Reassociate/pr42349.ll b/llvm/test/Transforms/Reassociate/pr42349.ll new file mode 100644 index 000000000000..ce008c3d1cb3 --- /dev/null +++ b/llvm/test/Transforms/Reassociate/pr42349.ll @@ -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" } -- 2.34.1