Support FNeg in SpeculativeExecution pass
authorCameron McInally <cameron.mcinally@nyu.edu>
Tue, 14 May 2019 16:51:18 +0000 (16:51 +0000)
committerCameron McInally <cameron.mcinally@nyu.edu>
Tue, 14 May 2019 16:51:18 +0000 (16:51 +0000)
Differential Revision: https://reviews.llvm.org/D61910

llvm-svn: 360692

llvm/lib/Transforms/Scalar/SpeculativeExecution.cpp
llvm/test/Transforms/SpeculativeExecution/spec-fp.ll

index 79d2a52..f9d027e 100644 (file)
@@ -240,6 +240,7 @@ static unsigned ComputeSpeculationCost(const Instruction *I,
     case Instruction::FMul:
     case Instruction::FDiv:
     case Instruction::FRem:
+    case Instruction::FNeg:
     case Instruction::ICmp:
     case Instruction::FCmp:
       return TTI.getUserCost(I);
index efab8ab..181ce37 100644 (file)
@@ -30,10 +30,10 @@ b:
   ret void
 }
 
-; CHECK-LABEL: @ifThen_fneg(
+; CHECK-LABEL: @ifThen_binary_fneg(
 ; CHECK: fsub float -0.0
 ; CHECK: br i1 true
-define void @ifThen_fneg() {
+define void @ifThen_binary_fneg() {
   br i1 true, label %a, label %b
 
 a:
@@ -44,6 +44,20 @@ b:
   ret void
 }
 
+; CHECK-LABEL: @ifThen_unary_fneg(
+; CHECK: fneg float
+; CHECK: br i1 true
+define void @ifThen_unary_fneg() {
+  br i1 true, label %a, label %b
+
+a:
+  %x = fneg float undef
+  br label %b
+
+b:
+  ret void
+}
+
 ; CHECK-LABEL: @ifThen_fmul(
 ; CHECK: fmul
 ; CHECK: br i1 true