Index: lib/Transforms/Scalar/SpeculativeExecution.cpp =================================================================== --- lib/Transforms/Scalar/SpeculativeExecution.cpp +++ lib/Transforms/Scalar/SpeculativeExecution.cpp @@ -240,6 +240,8 @@ case Instruction::FMul: case Instruction::FDiv: case Instruction::FRem: + case Instruction::ICmp: + case Instruction::FCmp: return TTI.getUserCost(I); default: Index: test/Transforms/SpeculativeExecution/spec-compares.ll =================================================================== --- /dev/null +++ test/Transforms/SpeculativeExecution/spec-compares.ll @@ -0,0 +1,31 @@ +; RUN: opt < %s -S -speculative-execution \ +; RUN: -spec-exec-max-speculation-cost 4 -spec-exec-max-not-hoisted 3 \ +; RUN: | FileCheck %s + +; CHECK-LABEL: @ifThen_icmp( +; CHECK: icmp +; CHECK: br i1 true +define void @ifThen_icmp() { + br i1 true, label %a, label %b + +a: + %x = icmp eq i32 undef, undef + br label %b + +b: + ret void +} + +; CHECK-LABEL: @ifThen_fcmp( +; CHECK: fcmp +; CHECK: br i1 true +define void @ifThen_fcmp() { + br i1 true, label %a, label %b + +a: + %x = fcmp oeq float undef, undef + br label %b + +b: + ret void +}