@@ -21,8 +21,6 @@ def simm12Plus1 : ImmLeaf<XLenVT, [{
21
21
def simm12Plus1i32 : ImmLeaf<i32, [{
22
22
return (isInt<12>(Imm) && Imm != -2048) || Imm == 2048;}]>;
23
23
24
- def simm12i32 : ImmLeaf<i32, [{return isInt<12>(Imm);}]>;
25
-
26
24
def uimm5i32 : ImmLeaf<i32, [{return isUInt<5>(Imm);}]>;
27
25
28
26
// FIXME: This doesn't check that the G_CONSTANT we're deriving the immediate
@@ -49,11 +47,6 @@ def GIAddrRegImm :
49
47
GIComplexOperandMatcher<s32, "selectAddrRegImm">,
50
48
GIComplexPatternEquiv<AddrRegImm>;
51
49
52
- // Convert from i32 immediate to i64 target immediate to make SelectionDAG type
53
- // checking happy so we can use ADDIW which expects an XLen immediate.
54
- def as_i64imm : SDNodeXForm<imm, [{
55
- return CurDAG->getTargetConstant(N->getSExtValue(), SDLoc(N), MVT::i64);
56
- }]>;
57
50
def gi_as_i64imm : GICustomOperandRenderer<"renderImm">,
58
51
GISDNodeXFormEquiv<as_i64imm>;
59
52
@@ -88,14 +81,10 @@ def : Pat<(XLenVT (sub GPR:$rs1, simm12Plus1:$imm)),
88
81
(ADDI GPR:$rs1, (NegImm simm12Plus1:$imm))>;
89
82
90
83
let Predicates = [IsRV64] in {
91
- def : Pat<(i32 (add GPR:$rs1, GPR:$rs2)), (ADDW GPR:$rs1, GPR:$rs2)>;
92
- def : Pat<(i32 (sub GPR:$rs1, GPR:$rs2)), (SUBW GPR:$rs1, GPR:$rs2)>;
93
84
def : Pat<(i32 (and GPR:$rs1, GPR:$rs2)), (AND GPR:$rs1, GPR:$rs2)>;
94
85
def : Pat<(i32 (or GPR:$rs1, GPR:$rs2)), (OR GPR:$rs1, GPR:$rs2)>;
95
86
def : Pat<(i32 (xor GPR:$rs1, GPR:$rs2)), (XOR GPR:$rs1, GPR:$rs2)>;
96
87
97
- def : Pat<(i32 (add GPR:$rs1, simm12i32:$imm)),
98
- (ADDIW GPR:$rs1, (i64 (as_i64imm $imm)))>;
99
88
def : Pat<(i32 (sub GPR:$rs1, simm12Plus1i32:$imm)),
100
89
(ADDIW GPR:$rs1, (i64 (NegImm $imm)))>;
101
90
@@ -116,33 +105,15 @@ def : Pat<(i32 (sra GPR:$rs1, uimm5i32:$imm)),
116
105
(SRAIW GPR:$rs1, (i64 (as_i64imm $imm)))>;
117
106
def : Pat<(i32 (srl GPR:$rs1, uimm5i32:$imm)),
118
107
(SRLIW GPR:$rs1, (i64 (as_i64imm $imm)))>;
119
-
120
- def : Pat<(i64 (sext i32:$rs)), (ADDIW GPR:$rs, 0)>;
121
- }
122
-
123
- let Predicates = [HasStdExtMOrZmmul, IsRV64] in {
124
- def : Pat<(i32 (mul GPR:$rs1, GPR:$rs2)), (MULW GPR:$rs1, GPR:$rs2)>;
125
- }
126
-
127
- let Predicates = [HasStdExtM, IsRV64] in {
128
- def : Pat<(i32 (sdiv GPR:$rs1, GPR:$rs2)), (DIVW GPR:$rs1, GPR:$rs2)>;
129
- def : Pat<(i32 (srem GPR:$rs1, GPR:$rs2)), (REMW GPR:$rs1, GPR:$rs2)>;
130
- def : Pat<(i32 (udiv GPR:$rs1, GPR:$rs2)), (DIVUW GPR:$rs1, GPR:$rs2)>;
131
- def : Pat<(i32 (urem GPR:$rs1, GPR:$rs2)), (REMUW GPR:$rs1, GPR:$rs2)>;
132
108
}
133
109
134
110
let Predicates = [HasStdExtZba, IsRV64] in {
135
111
// This pattern is put here due to the fact that i32 is not a legal type
136
112
// in SDISel for RV64, which is not the case in GISel.
137
113
def : Pat<(shl (i64 (zext i32:$rs1)), uimm5:$shamt),
138
114
(SLLI_UW GPR:$rs1, uimm5:$shamt)>;
139
-
140
- def : Pat<(i64 (zext i32:$rs)), (ADD_UW GPR:$rs, (XLenVT X0))>;
141
115
} // Predicates = [HasStdExtZba, IsRV64]
142
116
143
- let Predicates = [IsRV64, NotHasStdExtZba] in
144
- def: Pat<(i64 (zext i32:$rs)), (SRLI (SLLI GPR:$rs, 32), 32)>;
145
-
146
117
// Ptr type used in patterns with GlobalISelEmitter
147
118
def PtrVT : PtrValueTypeByHwMode<XLenVT, 0>;
148
119
@@ -196,8 +167,6 @@ def : Pat<(XLenVT (setle (Ty GPR:$rs1), (Ty GPR:$rs2))),
196
167
(XORI (SLT GPR:$rs2, GPR:$rs1), 1)>;
197
168
}
198
169
199
- // Define pattern expansions for load/extload and store/truncstore operations
200
- // for ptr return type
201
170
let Predicates = [IsRV32] in {
202
171
def : LdPat<load, LW, PtrVT>;
203
172
def : StPat<store, SW, GPR, PtrVT>;
@@ -206,18 +175,4 @@ def : StPat<store, SW, GPR, PtrVT>;
206
175
let Predicates = [IsRV64] in {
207
176
def : LdPat<load, LD, PtrVT>;
208
177
def : StPat<store, SD, GPR, PtrVT>;
209
-
210
- // Define pattern expansions for rv64 load/extloads and store/truncstore
211
- // operations for i32 return type
212
- def : LdPat<sextloadi8, LB, i32>;
213
- def : LdPat<extloadi8, LBU, i32>;
214
- def : LdPat<zextloadi8, LBU, i32>;
215
- def : LdPat<sextloadi16, LH, i32>;
216
- def : LdPat<extloadi16, LH, i32>;
217
- def : LdPat<zextloadi16, LHU, i32>;
218
- def : LdPat<load, LW, i32>;
219
-
220
- def : StPat<truncstorei8, SB, GPR, i32>;
221
- def : StPat<truncstorei16, SH, GPR, i32>;
222
- def : StPat<store, SW, GPR, i32>;
223
- } // Predicates = [IsRV64]
178
+ }
0 commit comments