Skip to content

Commit a6140af

Browse files
authored
[Mips] Reduce number of selectVSplatUimm/Simm functions by using templates. (#116475)
The implementaton of methods only vary by what arguments they pass to selectVSplatCommon. Turn selectVSplatCommon into a virtual function and use template methods in the base class to pass the immediate size.
1 parent 483516f commit a6140af

File tree

5 files changed

+31
-132
lines changed

5 files changed

+31
-132
lines changed

llvm/lib/Target/Mips/MipsISelDAGToDAG.cpp

Lines changed: 2 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -150,44 +150,9 @@ bool MipsDAGToDAGISel::selectVSplat(SDNode *N, APInt &Imm,
150150
return false;
151151
}
152152

153-
bool MipsDAGToDAGISel::selectVSplatUimm1(SDValue N, SDValue &Imm) const {
153+
bool MipsDAGToDAGISel::selectVSplatCommon(SDValue N, SDValue &Imm, bool Signed,
154+
unsigned ImmBitSize) const {
154155
llvm_unreachable("Unimplemented function.");
155-
return false;
156-
}
157-
158-
bool MipsDAGToDAGISel::selectVSplatUimm2(SDValue N, SDValue &Imm) const {
159-
llvm_unreachable("Unimplemented function.");
160-
return false;
161-
}
162-
163-
bool MipsDAGToDAGISel::selectVSplatUimm3(SDValue N, SDValue &Imm) const {
164-
llvm_unreachable("Unimplemented function.");
165-
return false;
166-
}
167-
168-
bool MipsDAGToDAGISel::selectVSplatUimm4(SDValue N, SDValue &Imm) const {
169-
llvm_unreachable("Unimplemented function.");
170-
return false;
171-
}
172-
173-
bool MipsDAGToDAGISel::selectVSplatUimm5(SDValue N, SDValue &Imm) const {
174-
llvm_unreachable("Unimplemented function.");
175-
return false;
176-
}
177-
178-
bool MipsDAGToDAGISel::selectVSplatUimm6(SDValue N, SDValue &Imm) const {
179-
llvm_unreachable("Unimplemented function.");
180-
return false;
181-
}
182-
183-
bool MipsDAGToDAGISel::selectVSplatUimm8(SDValue N, SDValue &Imm) const {
184-
llvm_unreachable("Unimplemented function.");
185-
return false;
186-
}
187-
188-
bool MipsDAGToDAGISel::selectVSplatSimm5(SDValue N, SDValue &Imm) const {
189-
llvm_unreachable("Unimplemented function.");
190-
return false;
191156
}
192157

193158
bool MipsDAGToDAGISel::selectVSplatUimmPow2(SDValue N, SDValue &Imm) const {

llvm/lib/Target/Mips/MipsISelDAGToDAG.h

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -92,22 +92,18 @@ class MipsDAGToDAGISel : public SelectionDAGISel {
9292
/// Select constant vector splats.
9393
virtual bool selectVSplat(SDNode *N, APInt &Imm,
9494
unsigned MinSizeInBits) const;
95-
/// Select constant vector splats whose value fits in a uimm1.
96-
virtual bool selectVSplatUimm1(SDValue N, SDValue &Imm) const;
97-
/// Select constant vector splats whose value fits in a uimm2.
98-
virtual bool selectVSplatUimm2(SDValue N, SDValue &Imm) const;
99-
/// Select constant vector splats whose value fits in a uimm3.
100-
virtual bool selectVSplatUimm3(SDValue N, SDValue &Imm) const;
101-
/// Select constant vector splats whose value fits in a uimm4.
102-
virtual bool selectVSplatUimm4(SDValue N, SDValue &Imm) const;
103-
/// Select constant vector splats whose value fits in a uimm5.
104-
virtual bool selectVSplatUimm5(SDValue N, SDValue &Imm) const;
105-
/// Select constant vector splats whose value fits in a uimm6.
106-
virtual bool selectVSplatUimm6(SDValue N, SDValue &Imm) const;
107-
/// Select constant vector splats whose value fits in a uimm8.
108-
virtual bool selectVSplatUimm8(SDValue N, SDValue &Imm) const;
109-
/// Select constant vector splats whose value fits in a simm5.
110-
virtual bool selectVSplatSimm5(SDValue N, SDValue &Imm) const;
95+
virtual bool selectVSplatCommon(SDValue N, SDValue &Imm, bool Signed,
96+
unsigned ImmBitSize) const;
97+
/// Select constant vector splats whose value fits in a uimm<Bits>.
98+
template <unsigned Bits>
99+
bool selectVSplatUimm(SDValue N, SDValue &Imm) const {
100+
return selectVSplatCommon(N, Imm, false, Bits);
101+
}
102+
/// Select constant vector splats whose value fits in a simm<Bits>.
103+
template <unsigned Bits>
104+
bool selectVSplatSimm(SDValue N, SDValue &Imm) const {
105+
return selectVSplatCommon(N, Imm, true, Bits);
106+
}
111107
/// Select constant vector splats whose value is a power of 2.
112108
virtual bool selectVSplatUimmPow2(SDValue N, SDValue &Imm) const;
113109
/// Select constant vector splats whose value is the inverse of a

llvm/lib/Target/Mips/MipsMSAInstrInfo.td

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -249,67 +249,67 @@ class SplatComplexPattern<Operand opclass, ValueType ty, int numops, string fn,
249249
}
250250

251251
def vsplati8_uimm3 : SplatComplexPattern<vsplat_uimm3, v16i8, 1,
252-
"selectVSplatUimm3",
252+
"selectVSplatUimm<3>",
253253
[build_vector, bitconvert]>;
254254

255255
def vsplati8_uimm4 : SplatComplexPattern<vsplat_uimm4, v16i8, 1,
256-
"selectVSplatUimm4",
256+
"selectVSplatUimm<4>",
257257
[build_vector, bitconvert]>;
258258

259259
def vsplati8_uimm5 : SplatComplexPattern<vsplat_uimm5, v16i8, 1,
260-
"selectVSplatUimm5",
260+
"selectVSplatUimm<5>",
261261
[build_vector, bitconvert]>;
262262

263263
def vsplati8_uimm8 : SplatComplexPattern<vsplat_uimm8, v16i8, 1,
264-
"selectVSplatUimm8",
264+
"selectVSplatUimm<8>",
265265
[build_vector, bitconvert]>;
266266

267267
def vsplati8_simm5 : SplatComplexPattern<vsplat_simm5, v16i8, 1,
268-
"selectVSplatSimm5",
268+
"selectVSplatSimm<5>",
269269
[build_vector, bitconvert]>;
270270

271271
def vsplati16_uimm3 : SplatComplexPattern<vsplat_uimm3, v8i16, 1,
272-
"selectVSplatUimm3",
272+
"selectVSplatUimm<3>",
273273
[build_vector, bitconvert]>;
274274

275275
def vsplati16_uimm4 : SplatComplexPattern<vsplat_uimm4, v8i16, 1,
276-
"selectVSplatUimm4",
276+
"selectVSplatUimm<4>",
277277
[build_vector, bitconvert]>;
278278

279279
def vsplati16_uimm5 : SplatComplexPattern<vsplat_uimm5, v8i16, 1,
280-
"selectVSplatUimm5",
280+
"selectVSplatUimm<5>",
281281
[build_vector, bitconvert]>;
282282

283283
def vsplati16_simm5 : SplatComplexPattern<vsplat_simm5, v8i16, 1,
284-
"selectVSplatSimm5",
284+
"selectVSplatSimm<5>",
285285
[build_vector, bitconvert]>;
286286

287287
def vsplati32_uimm2 : SplatComplexPattern<vsplat_uimm2, v4i32, 1,
288-
"selectVSplatUimm2",
288+
"selectVSplatUimm<2>",
289289
[build_vector, bitconvert]>;
290290

291291
def vsplati32_uimm5 : SplatComplexPattern<vsplat_uimm5, v4i32, 1,
292-
"selectVSplatUimm5",
292+
"selectVSplatUimm<5>",
293293
[build_vector, bitconvert]>;
294294

295295
def vsplati32_simm5 : SplatComplexPattern<vsplat_simm5, v4i32, 1,
296-
"selectVSplatSimm5",
296+
"selectVSplatSimm<5>",
297297
[build_vector, bitconvert]>;
298298

299299
def vsplati64_uimm1 : SplatComplexPattern<vsplat_uimm1, v2i64, 1,
300-
"selectVSplatUimm1",
300+
"selectVSplatUimm<1>",
301301
[build_vector, bitconvert]>;
302302

303303
def vsplati64_uimm5 : SplatComplexPattern<vsplat_uimm5, v2i64, 1,
304-
"selectVSplatUimm5",
304+
"selectVSplatUimm<5>",
305305
[build_vector, bitconvert]>;
306306

307307
def vsplati64_uimm6 : SplatComplexPattern<vsplat_uimm6, v2i64, 1,
308-
"selectVSplatUimm6",
308+
"selectVSplatUimm<6>",
309309
[build_vector, bitconvert]>;
310310

311311
def vsplati64_simm5 : SplatComplexPattern<vsplat_simm5, v2i64, 1,
312-
"selectVSplatSimm5",
312+
"selectVSplatSimm<5>",
313313
[build_vector, bitconvert]>;
314314

315315
// Any build_vector that is a constant splat with a value that is an exact

llvm/lib/Target/Mips/MipsSEISelDAGToDAG.cpp

Lines changed: 0 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -564,52 +564,6 @@ selectVSplatCommon(SDValue N, SDValue &Imm, bool Signed,
564564
return false;
565565
}
566566

567-
// Select constant vector splats.
568-
bool MipsSEDAGToDAGISel::
569-
selectVSplatUimm1(SDValue N, SDValue &Imm) const {
570-
return selectVSplatCommon(N, Imm, false, 1);
571-
}
572-
573-
bool MipsSEDAGToDAGISel::
574-
selectVSplatUimm2(SDValue N, SDValue &Imm) const {
575-
return selectVSplatCommon(N, Imm, false, 2);
576-
}
577-
578-
bool MipsSEDAGToDAGISel::
579-
selectVSplatUimm3(SDValue N, SDValue &Imm) const {
580-
return selectVSplatCommon(N, Imm, false, 3);
581-
}
582-
583-
// Select constant vector splats.
584-
bool MipsSEDAGToDAGISel::
585-
selectVSplatUimm4(SDValue N, SDValue &Imm) const {
586-
return selectVSplatCommon(N, Imm, false, 4);
587-
}
588-
589-
// Select constant vector splats.
590-
bool MipsSEDAGToDAGISel::
591-
selectVSplatUimm5(SDValue N, SDValue &Imm) const {
592-
return selectVSplatCommon(N, Imm, false, 5);
593-
}
594-
595-
// Select constant vector splats.
596-
bool MipsSEDAGToDAGISel::
597-
selectVSplatUimm6(SDValue N, SDValue &Imm) const {
598-
return selectVSplatCommon(N, Imm, false, 6);
599-
}
600-
601-
// Select constant vector splats.
602-
bool MipsSEDAGToDAGISel::
603-
selectVSplatUimm8(SDValue N, SDValue &Imm) const {
604-
return selectVSplatCommon(N, Imm, false, 8);
605-
}
606-
607-
// Select constant vector splats.
608-
bool MipsSEDAGToDAGISel::
609-
selectVSplatSimm5(SDValue N, SDValue &Imm) const {
610-
return selectVSplatCommon(N, Imm, true, 5);
611-
}
612-
613567
// Select constant vector splats whose value is a power of 2.
614568
//
615569
// In addition to the requirements of selectVSplat(), this function returns

llvm/lib/Target/Mips/MipsSEISelDAGToDAG.h

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -95,23 +95,7 @@ class MipsSEDAGToDAGISel : public MipsDAGToDAGISel {
9595
unsigned MinSizeInBits) const override;
9696
/// Select constant vector splats whose value fits in a given integer.
9797
bool selectVSplatCommon(SDValue N, SDValue &Imm, bool Signed,
98-
unsigned ImmBitSize) const;
99-
/// Select constant vector splats whose value fits in a uimm1.
100-
bool selectVSplatUimm1(SDValue N, SDValue &Imm) const override;
101-
/// Select constant vector splats whose value fits in a uimm2.
102-
bool selectVSplatUimm2(SDValue N, SDValue &Imm) const override;
103-
/// Select constant vector splats whose value fits in a uimm3.
104-
bool selectVSplatUimm3(SDValue N, SDValue &Imm) const override;
105-
/// Select constant vector splats whose value fits in a uimm4.
106-
bool selectVSplatUimm4(SDValue N, SDValue &Imm) const override;
107-
/// Select constant vector splats whose value fits in a uimm5.
108-
bool selectVSplatUimm5(SDValue N, SDValue &Imm) const override;
109-
/// Select constant vector splats whose value fits in a uimm6.
110-
bool selectVSplatUimm6(SDValue N, SDValue &Imm) const override;
111-
/// Select constant vector splats whose value fits in a uimm8.
112-
bool selectVSplatUimm8(SDValue N, SDValue &Imm) const override;
113-
/// Select constant vector splats whose value fits in a simm5.
114-
bool selectVSplatSimm5(SDValue N, SDValue &Imm) const override;
98+
unsigned ImmBitSize) const override;
11599
/// Select constant vector splats whose value is a power of 2.
116100
bool selectVSplatUimmPow2(SDValue N, SDValue &Imm) const override;
117101
/// Select constant vector splats whose value is the inverse of a

0 commit comments

Comments
 (0)