@@ -91,3 +91,59 @@ def TuneLDADDFusion
91
91
CheckIsImmOperand<2>,
92
92
CheckImmOperand<2, 0>
93
93
]>>;
94
+
95
+ defvar Load = [LB, LH, LW, LD, LBU, LHU, LWU];
96
+
97
+ // Fuse add(.uw) followed by a load (lb, lh, lw, ld, lbu, lhu, lwu):
98
+ // add(.uw) rd, rs1, rs2
99
+ // load rd, imm12(rd)
100
+ def TuneADDLoadFusion
101
+ : SimpleFusion<"add-load-fusion", "HasADDLoadFusion", "Enable ADD(.UW) + load macrofusion",
102
+ CheckOpcode<[ADD, ADD_UW]>,
103
+ CheckOpcode<Load>>;
104
+
105
+ // Fuse AUIPC followed by by a load (lb, lh, lw, ld, lbu, lhu, lwu)
106
+ // auipc rd, imm20
107
+ // load rd, imm12(rd)
108
+ def TuneAUIPCLoadFusion
109
+ : SimpleFusion<"auipc-load-fusion", "HasAUIPCLoadFusion",
110
+ "Enable AUIPC + load macrofusion",
111
+ CheckOpcode<[AUIPC]>,
112
+ CheckOpcode<Load>>;
113
+
114
+ // Fuse LUI followed by a load (lb, lh, lw, ld, lbu, lhu, lwu)
115
+ // lui rd, imm[31:12]
116
+ // load rd, imm12(rd)
117
+ def TuneLUILoadFusion
118
+ : SimpleFusion<"lui-load-fusion", "HasLUILoadFusion",
119
+ "Enable LUI + load macrofusion",
120
+ CheckOpcode<[LUI]>,
121
+ CheckOpcode<Load>>;
122
+
123
+ // Bitfield extract fusion: similar to TuneShiftedZExtWFusion
124
+ // but without the immediate restriction
125
+ // slli rd, rs1, imm12
126
+ // srli rd, rd, imm12
127
+ def TuneBFExtFusion
128
+ : SimpleFusion<"bfext-fusion", "HasBFExtFusion",
129
+ "Enable SLLI+SRLI (bitfield extract) macrofusion",
130
+ CheckOpcode<[SLLI]>,
131
+ CheckOpcode<[SRLI]>>;
132
+
133
+ // Fuse ADDI followed by a load (lb, lh, lw, ld, lbu, lhu, lwu)
134
+ // addi rd, rs1, imm12
135
+ // load rd, imm12(rd)
136
+ def TuneADDILoadFusion
137
+ : SimpleFusion<"addi-load-fusion", "HasADDILoadFusion",
138
+ "Enable ADDI + load macrofusion",
139
+ CheckOpcode<[ADDI]>,
140
+ CheckOpcode<Load>>;
141
+
142
+ // Fuse shXadd(.uw) followed by a load (lb, lh, lw, ld, lbu, lhu, lwu)
143
+ // shXadd(.uw) rd, rs1, rs2
144
+ // load rd, imm12(rd)
145
+ def TuneSHXADDLoadFusion
146
+ : SimpleFusion<"shxadd-load-fusion", "HasSHXADDLoadFusion",
147
+ "Enable SH(1|2|3)ADD(.UW) + load macrofusion",
148
+ CheckOpcode<[SH1ADD, SH2ADD, SH3ADD, SH1ADD_UW, SH2ADD_UW, SH3ADD_UW]>,
149
+ CheckOpcode<Load>>;
0 commit comments