Skip to content

Commit c6dff10

Browse files
committed
Renamed SLLISRLIFusion into ShiftedZExtFusion.
Added pseudocode to explain fusions. Replace the "spacer" `ADDI` in the test with `XORI`- it was confusing in case of LDADD fusion.
1 parent 4a2bec5 commit c6dff10

File tree

4 files changed

+29
-25
lines changed

4 files changed

+29
-25
lines changed

llvm/lib/Target/RISCV/RISCVFeatures.td

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -973,12 +973,12 @@ def TuneLUIADDIFusion
973973
def TuneAUIPCADDIFusion
974974
: SubtargetFeature<"auipc-addi-fusion", "HasAUIPCADDIFusion",
975975
"true", "Enable AUIPC+ADDI macrofusion">;
976-
def TuneSLLISRLIFusion
977-
: SubtargetFeature<"slli-srli-fusion", "HasSLLISRLIFusion",
978-
"true", "Enable SLLI+SRLI macrofusion">;
976+
def TuneShiftedZExtFusion
977+
: SubtargetFeature<"shifted-zext-fusion", "HasShiftedZExtFusion",
978+
"true", "Enable SLLI+SRLI to be fused when computing (shifted) zero extension">;
979979
def TuneLDADDFusion
980980
: SubtargetFeature<"ld-add-fusion", "HasLDADDFusion",
981-
"true", "Enable fusion of load with the last instruction of the address calculation">;
981+
"true", "Enable LD+ADD macrofusion.">;
982982

983983
def TuneNoDefaultUnroll
984984
: SubtargetFeature<"no-default-unroll", "EnableDefaultUnroll", "false",
@@ -1001,7 +1001,7 @@ def TuneVeyronFusions : SubtargetFeature<"ventana-veyron", "RISCVProcFamily", "V
10011001
"Ventana Veyron-Series processors",
10021002
[TuneLUIADDIFusion,
10031003
TuneAUIPCADDIFusion,
1004-
TuneSLLISRLIFusion,
1004+
TuneShiftedZExtFusion,
10051005
TuneLDADDFusion]>;
10061006

10071007
// Assume that lock-free native-width atomics are available, even if the target

llvm/lib/Target/RISCV/RISCVMacroFusion.cpp

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,9 @@ static bool checkRegisters(Register FirstDest, const MachineInstr &SecondMI) {
3434
return SecondMI.getOperand(0).getReg() == FirstDest;
3535
}
3636

37-
// Fuse Load
37+
// Fuse load with add:
38+
// add rd, rs1, rs2
39+
// ld rd, 0(rd)
3840
static bool isLDADD(const MachineInstr *FirstMI, const MachineInstr &SecondMI) {
3941
if (SecondMI.getOpcode() != RISCV::LD)
4042
return false;
@@ -58,16 +60,16 @@ static bool isLDADD(const MachineInstr *FirstMI, const MachineInstr &SecondMI) {
5860

5961
// Fuse these patterns:
6062
//
61-
// $rd = slli $rs0, 32
62-
// $rd = srli $rs1, x
63+
// slli rd, rs1, 32
64+
// srli rd, rd, x
6365
// where 0 <= x <= 32
6466
//
6567
// and
6668
//
67-
// $rd = slli $rs0, 48
68-
// $rd = srli $rs1, 48
69-
static bool isSLLISRLI(const MachineInstr *FirstMI,
70-
const MachineInstr &SecondMI) {
69+
// slli rd, rs1, 48
70+
// srli rd, rd, x
71+
static bool isShiftedZExt(const MachineInstr *FirstMI,
72+
const MachineInstr &SecondMI) {
7173
if (SecondMI.getOpcode() != RISCV::SRLI)
7274
return false;
7375

@@ -95,6 +97,8 @@ static bool isSLLISRLI(const MachineInstr *FirstMI,
9597
}
9698

9799
// Fuse AUIPC followed by ADDI
100+
// auipc rd, imm20
101+
// addi rd, rd, imm12
98102
static bool isAUIPCADDI(const MachineInstr *FirstMI,
99103
const MachineInstr &SecondMI) {
100104
if (SecondMI.getOpcode() != RISCV::ADDI)
@@ -140,7 +144,7 @@ static bool shouldScheduleAdjacent(const TargetInstrInfo &TII,
140144
if (ST.hasAUIPCADDIFusion() && isAUIPCADDI(FirstMI, SecondMI))
141145
return true;
142146

143-
if (ST.hasSLLISRLIFusion() && isSLLISRLI(FirstMI, SecondMI))
147+
if (ST.hasShiftedZExtFusion() && isShiftedZExt(FirstMI, SecondMI))
144148
return true;
145149

146150
if (ST.hasLDADDFusion() && isLDADD(FirstMI, SecondMI))

llvm/lib/Target/RISCV/RISCVSubtarget.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,8 +193,8 @@ class RISCVSubtarget : public RISCVGenSubtargetInfo {
193193
}
194194

195195
bool hasMacroFusion() const {
196-
return hasLUIADDIFusion() || hasAUIPCADDIFusion() || hasSLLISRLIFusion() ||
197-
hasLDADDFusion();
196+
return hasLUIADDIFusion() || hasAUIPCADDIFusion() ||
197+
hasShiftedZExtFusion() || hasLDADDFusion();
198198
}
199199

200200
// Vector codegen related methods.

llvm/test/CodeGen/RISCV/macro-fusions-veyron-v1.mir

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# REQUIRES: asserts
22
# RUN: llc -mtriple=riscv64-linux-gnu -mcpu=veyron-v1 -x=mir < %s \
33
# RUN: -debug-only=machine-scheduler -start-before=machine-scheduler 2>&1 \
4-
# RUN: -mattr=+lui-addi-fusion,+auipc-addi-fusion,+slli-srli-fusion,+ld-add-fusion \
4+
# RUN: -mattr=+lui-addi-fusion,+auipc-addi-fusion,+shifted-zext-fusion,+ld-add-fusion \
55
# RUN: | FileCheck %s
66

77
# CHECK: lui_addi:%bb.0
@@ -14,7 +14,7 @@ body: |
1414
liveins: $x10
1515
%1:gpr = COPY $x10
1616
%2:gpr = LUI 1
17-
%3:gpr = ADDI %1, 2
17+
%3:gpr = XORI %1, 2
1818
%4:gpr = ADDI %2, 3
1919
$x10 = COPY %3
2020
$x11 = COPY %4
@@ -31,7 +31,7 @@ body: |
3131
liveins: $x10
3232
%1:gpr = COPY $x10
3333
%2:gpr = AUIPC 1
34-
%3:gpr = ADDI %1, 2
34+
%3:gpr = XORI %1, 2
3535
%4:gpr = ADDI %2, 3
3636
$x10 = COPY %3
3737
$x11 = COPY %4
@@ -48,7 +48,7 @@ body: |
4848
liveins: $x10
4949
%1:gpr = COPY $x10
5050
%2:gpr = SLLI %1, 32
51-
%3:gpr = ADDI %1, 3
51+
%3:gpr = XORI %1, 3
5252
%4:gpr = SRLI %2, 4
5353
$x10 = COPY %3
5454
$x11 = COPY %4
@@ -65,7 +65,7 @@ body: |
6565
liveins: $x10
6666
%1:gpr = COPY $x10
6767
%2:gpr = SLLI %1, 48
68-
%3:gpr = ADDI %1, 3
68+
%3:gpr = XORI %1, 3
6969
%4:gpr = SRLI %2, 48
7070
$x10 = COPY %3
7171
$x11 = COPY %4
@@ -82,7 +82,7 @@ body: |
8282
liveins: $x10
8383
%1:gpr = COPY $x10
8484
%2:gpr = SLLI %1, 32
85-
%3:gpr = ADDI %1, 3
85+
%3:gpr = XORI %1, 3
8686
%4:gpr = SRLI %2, 33
8787
$x10 = COPY %3
8888
$x11 = COPY %4
@@ -99,7 +99,7 @@ body: |
9999
liveins: $x10
100100
%1:gpr = COPY $x10
101101
%2:gpr = SLLI %1, 48
102-
%3:gpr = ADDI %1, 3
102+
%3:gpr = XORI %1, 3
103103
%4:gpr = SRLI %2, 4
104104
$x10 = COPY %3
105105
$x11 = COPY %4
@@ -116,7 +116,7 @@ body: |
116116
liveins: $x10
117117
%1:gpr = COPY $x10
118118
%2:gpr = SLLI %1, 31
119-
%3:gpr = ADDI %1, 3
119+
%3:gpr = XORI %1, 3
120120
%4:gpr = SRLI %2, 4
121121
$x10 = COPY %3
122122
$x11 = COPY %4
@@ -133,7 +133,7 @@ body: |
133133
liveins: $x10
134134
%1:gpr = COPY $x10
135135
%2:gpr = SLLI %1, 31
136-
%3:gpr = ADDI %1, 3
136+
%3:gpr = XORI %1, 3
137137
%4:gpr = SRLI %2, 48
138138
$x10 = COPY %3
139139
$x11 = COPY %4
@@ -151,7 +151,7 @@ body: |
151151
%1:gpr = COPY $x10
152152
%2:gpr = COPY $x11
153153
%3:gpr = ADD %1, %2
154-
%4:gpr = ADDI %2, 3
154+
%4:gpr = XORI %2, 3
155155
%5:gpr = LD %3, 0
156156
$x10 = COPY %4
157157
$x11 = COPY %5

0 commit comments

Comments
 (0)