[llvm] r302640 - Revert r301950: SpeculativeExecution: Stop using whitelist for costs
Chandler Carruth via llvm-commits
llvm-commits at lists.llvm.org
Wed May 10 05:30:07 PDT 2017
Author: chandlerc
Date: Wed May 10 07:30:07 2017
New Revision: 302640
URL: http://llvm.org/viewvc/llvm-project?rev=302640&view=rev
Log:
Revert r301950: SpeculativeExecution: Stop using whitelist for costs
This pass doesn't correctly handle testing for when it is legal to hoist
arbitrary instructions. The whitelist happens to make it safe, so before
it is removed the pass's legality checks will need to be enhanced.
Details have been added to the code review thread for the patch.
Removed:
llvm/trunk/test/Transforms/SpeculativeExecution/spec-other.ll
llvm/trunk/test/Transforms/SpeculativeExecution/spec-vector.ll
Modified:
llvm/trunk/lib/Transforms/Scalar/SpeculativeExecution.cpp
Modified: llvm/trunk/lib/Transforms/Scalar/SpeculativeExecution.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/SpeculativeExecution.cpp?rev=302640&r1=302639&r2=302640&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/SpeculativeExecution.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/SpeculativeExecution.cpp Wed May 10 07:30:07 2017
@@ -208,6 +208,47 @@ bool SpeculativeExecutionPass::runOnBasi
return false;
}
+static unsigned ComputeSpeculationCost(const Instruction *I,
+ const TargetTransformInfo &TTI) {
+ switch (Operator::getOpcode(I)) {
+ case Instruction::GetElementPtr:
+ case Instruction::Add:
+ case Instruction::Mul:
+ case Instruction::And:
+ case Instruction::Or:
+ case Instruction::Select:
+ case Instruction::Shl:
+ case Instruction::Sub:
+ case Instruction::LShr:
+ case Instruction::AShr:
+ case Instruction::Xor:
+ case Instruction::ZExt:
+ case Instruction::SExt:
+ case Instruction::Call:
+ case Instruction::BitCast:
+ case Instruction::PtrToInt:
+ case Instruction::IntToPtr:
+ case Instruction::AddrSpaceCast:
+ case Instruction::FPToUI:
+ case Instruction::FPToSI:
+ case Instruction::UIToFP:
+ case Instruction::SIToFP:
+ case Instruction::FPExt:
+ case Instruction::FPTrunc:
+ case Instruction::FAdd:
+ case Instruction::FSub:
+ case Instruction::FMul:
+ case Instruction::FDiv:
+ case Instruction::FRem:
+ case Instruction::ICmp:
+ case Instruction::FCmp:
+ return TTI.getUserCost(I);
+
+ default:
+ return UINT_MAX; // Disallow anything not whitelisted.
+ }
+}
+
bool SpeculativeExecutionPass::considerHoistingFromTo(
BasicBlock &FromBlock, BasicBlock &ToBlock) {
SmallSet<const Instruction *, 8> NotHoisted;
@@ -223,7 +264,7 @@ bool SpeculativeExecutionPass::considerH
unsigned TotalSpeculationCost = 0;
for (auto& I : FromBlock) {
- const unsigned Cost = TTI->getUserCost(&I);
+ const unsigned Cost = ComputeSpeculationCost(&I, *TTI);
if (Cost != UINT_MAX && isSafeToSpeculativelyExecute(&I) &&
AllPrecedingUsesFromBlockHoisted(&I)) {
TotalSpeculationCost += Cost;
Removed: llvm/trunk/test/Transforms/SpeculativeExecution/spec-other.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SpeculativeExecution/spec-other.ll?rev=302639&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/SpeculativeExecution/spec-other.ll (original)
+++ llvm/trunk/test/Transforms/SpeculativeExecution/spec-other.ll (removed)
@@ -1,32 +0,0 @@
-; 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_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
-}
-
Removed: llvm/trunk/test/Transforms/SpeculativeExecution/spec-vector.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SpeculativeExecution/spec-vector.ll?rev=302639&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/SpeculativeExecution/spec-vector.ll (original)
+++ llvm/trunk/test/Transforms/SpeculativeExecution/spec-vector.ll (removed)
@@ -1,73 +0,0 @@
-; 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_extractelement_constindex(
-; CHECK: extractelement
-; CHECK: br i1 true
-define void @ifThen_extractelement_constindex() {
- br i1 true, label %a, label %b
-
-a:
- %x = extractelement <4 x i32> undef, i32 0
- br label %b
-
-b:
- ret void
-}
-
-; CHECK-LABEL: @ifThen_extractelement_varindex(
-; CHECK: extractelement
-; CHECK: br i1 true
-define void @ifThen_extractelement_varindex(i32 %idx) {
- br i1 true, label %a, label %b
-
-a:
- %x = extractelement <4 x i32> undef, i32 %idx
- br label %b
-
-b:
- ret void
-}
-
-; CHECK-LABEL: @ifThen_insertelement_constindex(
-; CHECK: insertelement
-; CHECK: br i1 true
-define void @ifThen_insertelement_constindex() {
- br i1 true, label %a, label %b
-
-a:
- %x = insertelement <4 x i32> undef, i32 undef, i32 0
- br label %b
-
-b:
- ret void
-}
-
-; CHECK-LABEL: @ifThen_insertelement_varindex(
-; CHECK: insertelement
-; CHECK: br i1 true
-define void @ifThen_insertelement_varindex(i32 %idx) {
- br i1 true, label %a, label %b
-
-a:
- %x = insertelement <4 x i32> undef, i32 undef, i32 %idx
- br label %b
-
-b:
- ret void
-}
-
-; CHECK-LABEL: @ifThen_shufflevector(
-; CHECK: shufflevector
-; CHECK: br i1 true
-define void @ifThen_shufflevector() {
- br i1 true, label %a, label %b
-
-a:
- %x = shufflevector <4 x i32> undef, <4 x i32> undef, <4 x i32> undef
- br label %b
-
-b:
- ret void
-}
More information about the llvm-commits
mailing list