Skip to content

Commit 0a0f1f9

Browse files
author
Chen Zheng
committed
[PPC]add DEBUG_COUNTER for PPCMIPeephole pass
1 parent 5820ad9 commit 0a0f1f9

File tree

3 files changed

+173
-0
lines changed

3 files changed

+173
-0
lines changed

llvm/lib/Target/PowerPC/PPCMIPeephole.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
#include "llvm/CodeGen/MachineRegisterInfo.h"
4646
#include "llvm/InitializePasses.h"
4747
#include "llvm/Support/Debug.h"
48+
#include "llvm/Support/DebugCounter.h"
4849

4950
using namespace llvm;
5051

@@ -95,6 +96,13 @@ static cl::opt<bool>
9596
cl::desc("enable optimization of conditional traps"),
9697
cl::init(false), cl::Hidden);
9798

99+
DEBUG_COUNTER(
100+
PeepholeXToICounter, "ppc-xtoi-peephole",
101+
"Controls whether PPC reg+reg to reg+imm peephole is performed on a MI");
102+
103+
DEBUG_COUNTER(PeepholePerOpCounter, "ppc-per-op-peephole",
104+
"Controls whether PPC per opcode peephole is performed on a MI");
105+
98106
namespace {
99107

100108
struct PPCMIPeephole : public MachineFunctionPass {
@@ -469,6 +477,9 @@ bool PPCMIPeephole::simplifyCode() {
469477
if (MI.isDebugInstr())
470478
continue;
471479

480+
if (!DebugCounter::shouldExecute(PeepholeXToICounter))
481+
continue;
482+
472483
SmallSet<Register, 4> RRToRIRegsToUpdate;
473484
if (!TII->convertToImmediateForm(MI, RRToRIRegsToUpdate))
474485
continue;
@@ -538,6 +549,9 @@ bool PPCMIPeephole::simplifyCode() {
538549
if (MI.isDebugInstr())
539550
continue;
540551

552+
if (!DebugCounter::shouldExecute(PeepholePerOpCounter))
553+
continue;
554+
541555
// Per-opcode peepholes.
542556
switch (MI.getOpcode()) {
543557

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 4
2+
# REQUIRES: asserts
3+
# RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -verify-machineinstrs \
4+
# RUN: -run-pass ppc-mi-peepholes %s -o - | FileCheck %s --check-prefix=ALL
5+
# RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -verify-machineinstrs \
6+
# RUN: -run-pass ppc-mi-peepholes %s -o - -debug-counter=ppc-xtoi-peephole-skip=0,ppc-xtoi-peephole-count=8 \
7+
# RUN: | FileCheck %s --check-prefix=ALL
8+
# RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -verify-machineinstrs \
9+
# RUN: -run-pass ppc-mi-peepholes %s -o - -debug-counter=ppc-xtoi-peephole-skip=3,ppc-xtoi-peephole-count=2 \
10+
# RUN: | FileCheck %s --check-prefix=ONE-FIRSTSTORE
11+
# RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -verify-machineinstrs \
12+
# RUN: -run-pass ppc-mi-peepholes %s -o - -debug-counter=ppc-xtoi-peephole-skip=5,ppc-xtoi-peephole-count=2 \
13+
# RUN: | FileCheck %s --check-prefix=ONE-SECONDSTORE
14+
# RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -verify-machineinstrs \
15+
# RUN: -run-pass ppc-mi-peepholes %s -o - -debug-counter=ppc-xtoi-peephole-skip=3,ppc-xtoi-peephole-count=4 \
16+
# RUN: | FileCheck %s --check-prefix=TWO
17+
18+
---
19+
name: foldDForm
20+
tracksRegLiveness: true
21+
body: |
22+
bb.0.entry:
23+
liveins: $x3
24+
25+
; ALL-LABEL: name: foldDForm
26+
; ALL: liveins: $x3
27+
; ALL-NEXT: {{ $}}
28+
; ALL-NEXT: [[COPY:%[0-9]+]]:g8rc_and_g8rc_nox0 = COPY killed $x3
29+
; ALL-NEXT: dead [[ADDI8_:%[0-9]+]]:g8rc_and_g8rc_nox0 = ADDI8 [[COPY]], 144
30+
; ALL-NEXT: [[LI8_:%[0-9]+]]:g8rc = LI8 0
31+
; ALL-NEXT: STD [[LI8_]], 160, [[COPY]]
32+
; ALL-NEXT: dead [[ADDI8_1:%[0-9]+]]:g8rc_and_g8rc_nox0 = ADDI8 [[COPY]], 160
33+
; ALL-NEXT: STD [[LI8_]], 176, [[COPY]]
34+
; ALL-NEXT: dead [[ADDI8_2:%[0-9]+]]:g8rc_and_g8rc_nox0 = ADDI8 [[COPY]], 176
35+
; ALL-NEXT: STD killed [[LI8_]], 192, killed [[COPY]]
36+
; ALL-NEXT: BLR8 implicit $lr8, implicit $rm
37+
;
38+
; ONE-FIRSTSTORE-LABEL: name: foldDForm
39+
; ONE-FIRSTSTORE: liveins: $x3
40+
; ONE-FIRSTSTORE-NEXT: {{ $}}
41+
; ONE-FIRSTSTORE-NEXT: [[COPY:%[0-9]+]]:g8rc_and_g8rc_nox0 = COPY killed $x3
42+
; ONE-FIRSTSTORE-NEXT: dead [[ADDI8_:%[0-9]+]]:g8rc_and_g8rc_nox0 = ADDI8 [[COPY]], 144
43+
; ONE-FIRSTSTORE-NEXT: [[LI8_:%[0-9]+]]:g8rc = LI8 0
44+
; ONE-FIRSTSTORE-NEXT: STD [[LI8_]], 160, [[COPY]]
45+
; ONE-FIRSTSTORE-NEXT: [[ADDI8_1:%[0-9]+]]:g8rc_and_g8rc_nox0 = ADDI8 [[COPY]], 160
46+
; ONE-FIRSTSTORE-NEXT: STD [[LI8_]], 16, killed [[ADDI8_1]]
47+
; ONE-FIRSTSTORE-NEXT: [[ADDI8_2:%[0-9]+]]:g8rc_and_g8rc_nox0 = ADDI8 killed [[COPY]], 176
48+
; ONE-FIRSTSTORE-NEXT: STD killed [[LI8_]], 16, killed [[ADDI8_2]]
49+
; ONE-FIRSTSTORE-NEXT: BLR8 implicit $lr8, implicit $rm
50+
;
51+
; ONE-SECONDSTORE-LABEL: name: foldDForm
52+
; ONE-SECONDSTORE: liveins: $x3
53+
; ONE-SECONDSTORE-NEXT: {{ $}}
54+
; ONE-SECONDSTORE-NEXT: [[COPY:%[0-9]+]]:g8rc_and_g8rc_nox0 = COPY killed $x3
55+
; ONE-SECONDSTORE-NEXT: [[ADDI8_:%[0-9]+]]:g8rc_and_g8rc_nox0 = ADDI8 [[COPY]], 144
56+
; ONE-SECONDSTORE-NEXT: [[LI8_:%[0-9]+]]:g8rc = LI8 0
57+
; ONE-SECONDSTORE-NEXT: STD [[LI8_]], 16, killed [[ADDI8_]]
58+
; ONE-SECONDSTORE-NEXT: dead [[ADDI8_1:%[0-9]+]]:g8rc_and_g8rc_nox0 = ADDI8 [[COPY]], 160
59+
; ONE-SECONDSTORE-NEXT: STD [[LI8_]], 176, [[COPY]]
60+
; ONE-SECONDSTORE-NEXT: [[ADDI8_2:%[0-9]+]]:g8rc_and_g8rc_nox0 = ADDI8 killed [[COPY]], 176
61+
; ONE-SECONDSTORE-NEXT: STD killed [[LI8_]], 16, killed [[ADDI8_2]]
62+
; ONE-SECONDSTORE-NEXT: BLR8 implicit $lr8, implicit $rm
63+
;
64+
; TWO-LABEL: name: foldDForm
65+
; TWO: liveins: $x3
66+
; TWO-NEXT: {{ $}}
67+
; TWO-NEXT: [[COPY:%[0-9]+]]:g8rc_and_g8rc_nox0 = COPY killed $x3
68+
; TWO-NEXT: dead [[ADDI8_:%[0-9]+]]:g8rc_and_g8rc_nox0 = ADDI8 [[COPY]], 144
69+
; TWO-NEXT: [[LI8_:%[0-9]+]]:g8rc = LI8 0
70+
; TWO-NEXT: STD [[LI8_]], 160, [[COPY]]
71+
; TWO-NEXT: dead [[ADDI8_1:%[0-9]+]]:g8rc_and_g8rc_nox0 = ADDI8 [[COPY]], 160
72+
; TWO-NEXT: STD [[LI8_]], 176, [[COPY]]
73+
; TWO-NEXT: [[ADDI8_2:%[0-9]+]]:g8rc_and_g8rc_nox0 = ADDI8 killed [[COPY]], 176
74+
; TWO-NEXT: STD killed [[LI8_]], 16, killed [[ADDI8_2]]
75+
; TWO-NEXT: BLR8 implicit $lr8, implicit $rm
76+
%0:g8rc_and_g8rc_nox0 = COPY $x3
77+
%1:g8rc_and_g8rc_nox0 = ADDI8 %0:g8rc_and_g8rc_nox0, 144
78+
%2:g8rc = LI8 0
79+
STD %2:g8rc, 16, %1:g8rc_and_g8rc_nox0
80+
%3:g8rc_and_g8rc_nox0 = ADDI8 %0:g8rc_and_g8rc_nox0, 160
81+
STD %2:g8rc, 16, %3:g8rc_and_g8rc_nox0
82+
%4:g8rc_and_g8rc_nox0 = ADDI8 %0:g8rc_and_g8rc_nox0, 176
83+
STD killed %2:g8rc, 16, %4:g8rc_and_g8rc_nox0
84+
BLR8 implicit $lr8, implicit $rm
85+
...
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 4
2+
# REQUIRES: asserts
3+
# RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -verify-machineinstrs \
4+
# RUN: -run-pass ppc-mi-peepholes %s -o - | FileCheck %s --check-prefix=ALL
5+
# RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -verify-machineinstrs \
6+
# RUN: -run-pass ppc-mi-peepholes %s -o - -debug-counter=ppc-per-op-peephole-skip=0,ppc-per-op-peephole-count=6 \
7+
# RUN: | FileCheck %s --check-prefix=ALL
8+
# RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -verify-machineinstrs \
9+
# RUN: -run-pass ppc-mi-peepholes %s -o - -debug-counter=ppc-per-op-peephole-skip=3,ppc-per-op-peephole-count=1 \
10+
# RUN: | FileCheck %s --check-prefix=ONE-FIRST-RLWINM
11+
# RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -verify-machineinstrs \
12+
# RUN: -run-pass ppc-mi-peepholes %s -o - -debug-counter=ppc-per-op-peephole-skip=4,ppc-per-op-peephole-count=1 \
13+
# RUN: | FileCheck %s --check-prefix=ONE-SECOND-RLWINM
14+
# RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -verify-machineinstrs \
15+
# RUN: -run-pass ppc-mi-peepholes %s -o - -debug-counter=ppc-per-op-peephole-skip=3,ppc-per-op-peephole-count=2 \
16+
# RUN: | FileCheck %s --check-prefix=TWO
17+
18+
---
19+
name: testFoldRLWINM
20+
#CHECK: name: testFoldRLWINM
21+
tracksRegLiveness: true
22+
body: |
23+
bb.0.entry:
24+
liveins: $x3
25+
; ALL-LABEL: name: testFoldRLWINM
26+
; ALL: liveins: $x3
27+
; ALL-NEXT: {{ $}}
28+
; ALL-NEXT: [[COPY:%[0-9]+]]:g8rc = COPY killed $x3
29+
; ALL-NEXT: [[COPY1:%[0-9]+]]:gprc = COPY killed [[COPY]].sub_32
30+
; ALL-NEXT: dead [[RLWINM:%[0-9]+]]:gprc = RLWINM [[COPY1]], 14, 0, 12
31+
; ALL-NEXT: dead [[RLWINM1:%[0-9]+]]:gprc = RLWINM [[COPY1]], 14, 0, 11
32+
; ALL-NEXT: dead [[RLWINM2:%[0-9]+]]:gprc = RLWINM killed [[COPY1]], 14, 0, 10
33+
; ALL-NEXT: BLR8 implicit $lr8, implicit $rm
34+
;
35+
; ONE-FIRST-RLWINM-LABEL: name: testFoldRLWINM
36+
; ONE-FIRST-RLWINM: liveins: $x3
37+
; ONE-FIRST-RLWINM-NEXT: {{ $}}
38+
; ONE-FIRST-RLWINM-NEXT: [[COPY:%[0-9]+]]:g8rc = COPY killed $x3
39+
; ONE-FIRST-RLWINM-NEXT: [[COPY1:%[0-9]+]]:gprc = COPY killed [[COPY]].sub_32
40+
; ONE-FIRST-RLWINM-NEXT: [[RLWINM:%[0-9]+]]:gprc = RLWINM [[COPY1]], 27, 5, 31
41+
; ONE-FIRST-RLWINM-NEXT: dead [[RLWINM1:%[0-9]+]]:gprc = RLWINM killed [[COPY1]], 14, 0, 12
42+
; ONE-FIRST-RLWINM-NEXT: dead [[RLWINM2:%[0-9]+]]:gprc = RLWINM [[RLWINM]], 19, 0, 11
43+
; ONE-FIRST-RLWINM-NEXT: dead [[RLWINM3:%[0-9]+]]:gprc = RLWINM killed [[RLWINM]], 19, 0, 10
44+
; ONE-FIRST-RLWINM-NEXT: BLR8 implicit $lr8, implicit $rm
45+
;
46+
; ONE-SECOND-RLWINM-LABEL: name: testFoldRLWINM
47+
; ONE-SECOND-RLWINM: liveins: $x3
48+
; ONE-SECOND-RLWINM-NEXT: {{ $}}
49+
; ONE-SECOND-RLWINM-NEXT: [[COPY:%[0-9]+]]:g8rc = COPY killed $x3
50+
; ONE-SECOND-RLWINM-NEXT: [[COPY1:%[0-9]+]]:gprc = COPY killed [[COPY]].sub_32
51+
; ONE-SECOND-RLWINM-NEXT: [[RLWINM:%[0-9]+]]:gprc = RLWINM [[COPY1]], 27, 5, 31
52+
; ONE-SECOND-RLWINM-NEXT: dead [[RLWINM1:%[0-9]+]]:gprc = RLWINM [[RLWINM]], 19, 0, 12
53+
; ONE-SECOND-RLWINM-NEXT: dead [[RLWINM2:%[0-9]+]]:gprc = RLWINM killed [[COPY1]], 14, 0, 11
54+
; ONE-SECOND-RLWINM-NEXT: dead [[RLWINM3:%[0-9]+]]:gprc = RLWINM killed [[RLWINM]], 19, 0, 10
55+
; ONE-SECOND-RLWINM-NEXT: BLR8 implicit $lr8, implicit $rm
56+
;
57+
; TWO-LABEL: name: testFoldRLWINM
58+
; TWO: liveins: $x3
59+
; TWO-NEXT: {{ $}}
60+
; TWO-NEXT: [[COPY:%[0-9]+]]:g8rc = COPY killed $x3
61+
; TWO-NEXT: [[COPY1:%[0-9]+]]:gprc = COPY killed [[COPY]].sub_32
62+
; TWO-NEXT: [[RLWINM:%[0-9]+]]:gprc = RLWINM [[COPY1]], 27, 5, 31
63+
; TWO-NEXT: dead [[RLWINM1:%[0-9]+]]:gprc = RLWINM [[COPY1]], 14, 0, 12
64+
; TWO-NEXT: dead [[RLWINM2:%[0-9]+]]:gprc = RLWINM killed [[COPY1]], 14, 0, 11
65+
; TWO-NEXT: dead [[RLWINM3:%[0-9]+]]:gprc = RLWINM killed [[RLWINM]], 19, 0, 10
66+
; TWO-NEXT: BLR8 implicit $lr8, implicit $rm
67+
%0:g8rc = COPY $x3
68+
%1:gprc = COPY %0.sub_32:g8rc
69+
%2:gprc = RLWINM %1:gprc, 27, 5, 31
70+
%3:gprc = RLWINM %2:gprc, 19, 0, 12
71+
%4:gprc = RLWINM %2:gprc, 19, 0, 11
72+
%5:gprc = RLWINM %2:gprc, 19, 0, 10
73+
BLR8 implicit $lr8, implicit $rm
74+
...

0 commit comments

Comments
 (0)