diff --git a/llvm/lib/Transforms/Scalar/SpeculativeExecution.cpp b/llvm/lib/Transforms/Scalar/SpeculativeExecution.cpp --- a/llvm/lib/Transforms/Scalar/SpeculativeExecution.cpp +++ b/llvm/lib/Transforms/Scalar/SpeculativeExecution.cpp @@ -248,6 +248,8 @@ case Instruction::ExtractElement: case Instruction::InsertElement: case Instruction::ShuffleVector: + case Instruction::ExtractValue: + case Instruction::InsertValue: return TTI.getUserCost(I, TargetTransformInfo::TCK_SizeAndLatency); default: diff --git a/llvm/test/Transforms/SpeculativeExecution/spec-fp.ll b/llvm/test/Transforms/SpeculativeExecution/spec-fp.ll --- a/llvm/test/Transforms/SpeculativeExecution/spec-fp.ll +++ b/llvm/test/Transforms/SpeculativeExecution/spec-fp.ll @@ -99,46 +99,3 @@ b: ret void } - -; CHECK-LABEL: @ifThen_shuffle( -; CHECK: shufflevector -; CHECK: br i1 true -define void @ifThen_shuffle() { - br i1 true, label %a, label %b - -a: - %x = shufflevector <2 x float> undef, <2 x float> undef, <2 x i32> zeroinitializer - br label %b - -b: - ret void -} - -; CHECK-LABEL: @ifThen_extract( -; CHECK: extractelement -; CHECK: br i1 true -define void @ifThen_extract() { - br i1 true, label %a, label %b - -a: - %x = extractelement <2 x float> undef, i32 1 - br label %b - -b: - ret void -} - - -; CHECK-LABEL: @ifThen_insert( -; CHECK: insertelement -; CHECK: br i1 true -define void @ifThen_insert() { - br i1 true, label %a, label %b - -a: - %x = insertelement <2 x float> undef, float undef, i32 1 - br label %b - -b: - ret void -} diff --git a/llvm/test/Transforms/SpeculativeExecution/spec-other.ll b/llvm/test/Transforms/SpeculativeExecution/spec-other.ll new file mode 100644 --- /dev/null +++ b/llvm/test/Transforms/SpeculativeExecution/spec-other.ll @@ -0,0 +1,74 @@ +; 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_shuffle( +; CHECK: shufflevector +; CHECK: br i1 true +define void @ifThen_shuffle() { + br i1 true, label %a, label %b + +a: + %x = shufflevector <2 x float> undef, <2 x float> undef, <2 x i32> zeroinitializer + br label %b + +b: + ret void +} + +; CHECK-LABEL: @ifThen_extract( +; CHECK: extractelement +; CHECK: br i1 true +define void @ifThen_extract() { + br i1 true, label %a, label %b + +a: + %x = extractelement <2 x float> undef, i32 1 + br label %b + +b: + ret void +} + + +; CHECK-LABEL: @ifThen_insert( +; CHECK: insertelement +; CHECK: br i1 true +define void @ifThen_insert() { + br i1 true, label %a, label %b + +a: + %x = insertelement <2 x float> undef, float undef, i32 1 + br label %b + +b: + ret void +} + +; CHECK-LABEL: @ifThen_extractvalue( +; CHECK: extractvalue +; CHECK: br i1 true +define void @ifThen_extractvalue() { + br i1 true, label %a, label %b + +a: + %x = extractvalue { i32, i32 } undef, 0 + br label %b + +b: + ret void +} + +; CHECK-LABEL: @ifThen_insertvalue( +; CHECK: insertvalue +; CHECK: br i1 true +define void @ifThen_insertvalue() { + br i1 true, label %a, label %b + +a: + %x = insertvalue { i32, i32 } undef, i32 undef, 0 + br label %b + +b: + ret void +}