From dbfc682e2ba2581e214fabb04ba1b555ff8b274a Mon Sep 17 00:00:00 2001 From: dfukalov Date: Wed, 19 Feb 2020 14:05:33 +0300 Subject: [PATCH] SpeculativeExecution: fixed ingoring free execution Summary: After updating cost model in AMDGPU target (47a5c36b37f0) the pass started to ignore some BBs since they got all instructions estimated as free. Reviewers: arsenm, chandlerc, nhaehnle Reviewed By: nhaehnle Subscribers: jvesely, wdng, nhaehnle, tpr, hiraditya, kerbowa, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D74825 --- .../lib/Transforms/Scalar/SpeculativeExecution.cpp | 3 --- .../AMDGPU/speculative-execution-freecasts.ll | 30 ++++++++++++++++++++++ 2 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 llvm/test/CodeGen/AMDGPU/speculative-execution-freecasts.ll diff --git a/llvm/lib/Transforms/Scalar/SpeculativeExecution.cpp b/llvm/lib/Transforms/Scalar/SpeculativeExecution.cpp index c8d899b..6ad5c62 100644 --- a/llvm/lib/Transforms/Scalar/SpeculativeExecution.cpp +++ b/llvm/lib/Transforms/Scalar/SpeculativeExecution.cpp @@ -279,9 +279,6 @@ bool SpeculativeExecutionPass::considerHoistingFromTo( } } - if (TotalSpeculationCost == 0) - return false; // nothing to hoist - for (auto I = FromBlock.begin(); I != FromBlock.end();) { // We have to increment I before moving Current as moving Current // changes the list that I is iterating through. diff --git a/llvm/test/CodeGen/AMDGPU/speculative-execution-freecasts.ll b/llvm/test/CodeGen/AMDGPU/speculative-execution-freecasts.ll new file mode 100644 index 0000000..602207b --- /dev/null +++ b/llvm/test/CodeGen/AMDGPU/speculative-execution-freecasts.ll @@ -0,0 +1,30 @@ +; RUN: opt < %s -S -mtriple=amdgcn-unknown-amdhsa -speculative-execution \ +; RUN: -spec-exec-max-speculation-cost 1 -spec-exec-max-not-hoisted 1 \ +; RUN: | FileCheck %s + +; CHECK-LABEL: @ifThen_bitcast( +; CHECK: bitcast +; CHECK: br i1 true +define void @ifThen_bitcast(i32 %y) { + br i1 true, label %a, label %b + +a: + %x = bitcast i32 %y to float + br label %b + +b: + ret void +} + +; CHECK-LABEL: @ifThen_addrspacecast( +; CHECK: addrspacecast +; CHECK: br i1 true +define void @ifThen_addrspacecast(i32* %y) { + br i1 true, label %a, label %b +a: + %x = addrspacecast i32* %y to i32 addrspace(1)* + br label %b + +b: + ret void +} -- 2.7.4