Index: llvm/lib/Transforms/Scalar/SpeculativeExecution.cpp =================================================================== --- llvm/lib/Transforms/Scalar/SpeculativeExecution.cpp +++ llvm/lib/Transforms/Scalar/SpeculativeExecution.cpp @@ -240,6 +240,7 @@ case Instruction::FMul: case Instruction::FDiv: case Instruction::FRem: + case Instruction::FNeg: case Instruction::ICmp: case Instruction::FCmp: return TTI.getUserCost(I); Index: llvm/test/Transforms/SpeculativeExecution/spec-fp.ll =================================================================== --- llvm/test/Transforms/SpeculativeExecution/spec-fp.ll +++ llvm/test/Transforms/SpeculativeExecution/spec-fp.ll @@ -30,10 +30,10 @@ 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 @@ 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