Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion llvm/lib/Transforms/Scalar/StraightLineStrengthReduce.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@
#include "llvm/InitializePasses.h"
#include "llvm/Pass.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/DebugCounter.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Transforms/Scalar.h"
#include "llvm/Transforms/Utils/Local.h"
Expand All @@ -93,6 +94,9 @@ using namespace PatternMatch;
static const unsigned UnknownAddressSpace =
std::numeric_limits<unsigned>::max();

DEBUG_COUNTER(StraightLineStrengthReduceCounter, "slsr-counter",
"Controls whether rewriteCandidateWithBasis is executed.");

namespace {

class StraightLineStrengthReduceLegacyPass : public FunctionPass {
Expand Down Expand Up @@ -690,7 +694,8 @@ bool StraightLineStrengthReduce::runOnFunction(Function &F) {
while (!Candidates.empty()) {
const Candidate &C = Candidates.back();
if (C.Basis != nullptr) {
rewriteCandidateWithBasis(C, *C.Basis);
if (DebugCounter::shouldExecute(StraightLineStrengthReduceCounter))
rewriteCandidateWithBasis(C, *C.Basis);
}
Candidates.pop_back();
}
Expand Down
30 changes: 30 additions & 0 deletions llvm/test/Other/debugcounter-slsr.ll
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
; REQUIRES: asserts
; RUN: opt -passes=slsr,gvn -S -debug-counter=slsr-counter=1 < %s | FileCheck %s

;; Test that, with debug counters on, we will skip the first slsr opportunity.

define void @stride_is_2s(i32 %b, i32 %s) {
; CHECK-LABEL: @stride_is_2s(
; CHECK-NEXT: %s2 = shl i32 %s, 1
; CHECK-NEXT: %t1 = add i32 %b, %s2
; CHECK-NEXT: call void @foo(i32 %t1)
; CHECK-NEXT: %t2 = add i32 %t1, %s2
; CHECK-NEXT: call void @foo(i32 %t2)
; CHECK-NEXT: %s6 = mul i32 %s, 6
; CHECK-NEXT: %t3 = add i32 %b, %s6
; CHECK-NEXT: call void @foo(i32 %t3)
; CHECK-NEXT: ret void
;
%s2 = shl i32 %s, 1
%t1 = add i32 %b, %s2
call void @foo(i32 %t1)
%s4 = shl i32 %s, 2
%t2 = add i32 %b, %s4
call void @foo(i32 %t2)
%s6 = mul i32 %s, 6
%t3 = add i32 %b, %s6
call void @foo(i32 %t3)
ret void
}

declare void @foo(i32)
Loading