@@ -2175,10 +2175,7 @@ let AddedComplexity = 400, Predicates = [IsISA3_1, HasVSX] in {
2175
2175
// - Other vector types [v16i8, v8i16] require COPY_TO_REGCLASS to/from VRRC
2176
2176
// =============================================================================
2177
2177
2178
- class XXEvalPattern<dag pattern, bits<8> imm>
2179
- : Pat<(v4i32 pattern), (XXEVAL $vA, $vB, $vC, imm)> {}
2180
-
2181
- class XXEvalPatterns<ValueType Vt, dag InputPattern, bits<8> Imm>
2178
+ class XXEvalPattern<ValueType Vt, dag InputPattern, bits<8> Imm>
2182
2179
: Pat<(Vt InputPattern),
2183
2180
!if(!or(!eq(Vt, v4i32), !eq(Vt, v2i64)),
2184
2181
// VSRC path: direct XXEVAL for v4i32 and v2i64
@@ -2246,26 +2243,26 @@ def VEqv
2246
2243
// =============================================================================
2247
2244
multiclass XXEvalTernarySelectAnd<ValueType Vt> {
2248
2245
// Pattern: A ? XOR(B,C) : AND(B,C) XXEVAL immediate value: 22
2249
- def : XXEvalPatterns <
2246
+ def : XXEvalPattern <
2250
2247
Vt, (vselect Vt:$vA, (VXor Vt:$vB, Vt:$vC), (VAnd Vt:$vB, Vt:$vC)),
2251
2248
22>;
2252
2249
2253
2250
// Pattern: A ? NOR(B,C) : AND(B,C) XXEVAL immediate value: 24
2254
- def : XXEvalPatterns <
2251
+ def : XXEvalPattern <
2255
2252
Vt, (vselect Vt:$vA, (VNor Vt:$vB, Vt:$vC), (VAnd Vt:$vB, Vt:$vC)),
2256
2253
24>;
2257
2254
2258
2255
// Pattern: A ? EQV(B,C) : AND(B,C) XXEVAL immediate value: 25
2259
- def : XXEvalPatterns <
2256
+ def : XXEvalPattern <
2260
2257
Vt, (vselect Vt:$vA, (VEqv Vt:$vB, Vt:$vC), (VAnd Vt:$vB, Vt:$vC)),
2261
2258
25>;
2262
2259
2263
2260
// Pattern: A ? NOT(C) : AND(B,C) XXEVAL immediate value: 26
2264
- def : XXEvalPatterns <
2261
+ def : XXEvalPattern <
2265
2262
Vt, (vselect Vt:$vA, (VNot Vt:$vC), (VAnd Vt:$vB, Vt:$vC)), 26>;
2266
2263
2267
2264
// Pattern: A ? NOT(B) : AND(B,C) XXEVAL immediate value: 28
2268
- def : XXEvalPatterns <
2265
+ def : XXEvalPattern <
2269
2266
Vt, (vselect Vt:$vA, (VNot Vt:$vB), (VAnd Vt:$vB, Vt:$vC)), 28>;
2270
2267
}
2271
2268
@@ -2299,83 +2296,83 @@ let Predicates = [PrefixInstrs, HasP10Vector] in {
2299
2296
// Anonymous patterns for XXEVAL
2300
2297
// AND
2301
2298
// and(A, B, C)
2302
- def : XXEvalPattern<(and v4i32:$vA, (and v4i32:$vB, v4i32:$vC)), 1>;
2299
+ def : XXEvalPattern<v4i32, (and v4i32:$vA, (and v4i32:$vB, v4i32:$vC)), 1>;
2303
2300
// and(A, xor(B, C))
2304
- def : XXEvalPattern<(and v4i32:$vA, (xor v4i32:$vB, v4i32:$vC)), 6>;
2301
+ def : XXEvalPattern<v4i32, (and v4i32:$vA, (xor v4i32:$vB, v4i32:$vC)), 6>;
2305
2302
// and(A, or(B, C))
2306
- def : XXEvalPattern<(and v4i32:$vA, (or v4i32:$vB, v4i32:$vC)), 7>;
2303
+ def : XXEvalPattern<v4i32, (and v4i32:$vA, (or v4i32:$vB, v4i32:$vC)), 7>;
2307
2304
// and(A, nor(B, C))
2308
- def : XXEvalPattern<(and v4i32:$vA, (vnot (or v4i32:$vB, v4i32:$vC))), 8>;
2305
+ def : XXEvalPattern<v4i32, (and v4i32:$vA, (vnot (or v4i32:$vB, v4i32:$vC))), 8>;
2309
2306
// and(A, eqv(B, C))
2310
- def : XXEvalPattern<(and v4i32:$vA, (vnot (xor v4i32:$vB, v4i32:$vC))), 9>;
2307
+ def : XXEvalPattern<v4i32, (and v4i32:$vA, (vnot (xor v4i32:$vB, v4i32:$vC))), 9>;
2311
2308
// and(A, nand(B, C))
2312
- def : XXEvalPattern<(and v4i32:$vA, (vnot (and v4i32:$vB, v4i32:$vC))), 14>;
2309
+ def : XXEvalPattern<v4i32, (and v4i32:$vA, (vnot (and v4i32:$vB, v4i32:$vC))), 14>;
2313
2310
2314
2311
// NAND
2315
2312
// nand(A, B, C)
2316
- def : XXEvalPattern<(vnot (and v4i32:$vA, (and v4i32:$vB, v4i32:$vC))),
2313
+ def : XXEvalPattern<v4i32, (vnot (and v4i32:$vA, (and v4i32:$vB, v4i32:$vC))),
2317
2314
!sub(255, 1)>;
2318
2315
// nand(A, xor(B, C))
2319
- def : XXEvalPattern<(vnot (and v4i32:$vA, (xor v4i32:$vB, v4i32:$vC))),
2316
+ def : XXEvalPattern<v4i32, (vnot (and v4i32:$vA, (xor v4i32:$vB, v4i32:$vC))),
2320
2317
!sub(255, 6)>;
2321
2318
// nand(A, or(B, C))
2322
- def : XXEvalPattern<(vnot (and v4i32:$vA, (or v4i32:$vB, v4i32:$vC))),
2319
+ def : XXEvalPattern<v4i32, (vnot (and v4i32:$vA, (or v4i32:$vB, v4i32:$vC))),
2323
2320
!sub(255, 7)>;
2324
2321
// nand(A, nor(B, C))
2325
- def : XXEvalPattern<(or (vnot v4i32:$vA), (or v4i32:$vB, v4i32:$vC)),
2322
+ def : XXEvalPattern<v4i32, (or (vnot v4i32:$vA), (or v4i32:$vB, v4i32:$vC)),
2326
2323
!sub(255, 8)>;
2327
2324
// nand(A, eqv(B, C))
2328
- def : XXEvalPattern<(or (vnot v4i32:$vA), (xor v4i32:$vB, v4i32:$vC)),
2325
+ def : XXEvalPattern<v4i32, (or (vnot v4i32:$vA), (xor v4i32:$vB, v4i32:$vC)),
2329
2326
!sub(255, 9)>;
2330
2327
// nand(A, nand(B, C))
2331
- def : XXEvalPattern<(or (vnot v4i32:$vA), (and v4i32:$vB, v4i32:$vC)),
2328
+ def : XXEvalPattern<v4i32, (or (vnot v4i32:$vA), (and v4i32:$vB, v4i32:$vC)),
2332
2329
!sub(255, 14)>;
2333
2330
2334
2331
// EQV
2335
2332
// (eqv A, B, C)
2336
- def : XXEvalPattern<(or (and v4i32:$vA, (and v4i32:$vB, v4i32:$vC)),
2333
+ def : XXEvalPattern<v4i32, (or (and v4i32:$vA, (and v4i32:$vB, v4i32:$vC)),
2337
2334
(vnot (or v4i32:$vA, (or v4i32:$vB, v4i32:$vC)))),
2338
2335
150>;
2339
2336
// (eqv A, (and B, C))
2340
- def : XXEvalPattern<(vnot (xor v4i32:$vA, (and v4i32:$vB, v4i32:$vC))), 225>;
2337
+ def : XXEvalPattern<v4i32, (vnot (xor v4i32:$vA, (and v4i32:$vB, v4i32:$vC))), 225>;
2341
2338
// (eqv A, (or B, C))
2342
- def : XXEvalPattern<(vnot (xor v4i32:$vA, (or v4i32:$vB, v4i32:$vC))), 135>;
2339
+ def : XXEvalPattern<v4i32, (vnot (xor v4i32:$vA, (or v4i32:$vB, v4i32:$vC))), 135>;
2343
2340
2344
2341
// NOR
2345
2342
// (nor A, B, C)
2346
- def : XXEvalPattern<(vnot (or v4i32:$vA, (or v4i32:$vB, v4i32:$vC))), 128>;
2343
+ def : XXEvalPattern<v4i32, (vnot (or v4i32:$vA, (or v4i32:$vB, v4i32:$vC))), 128>;
2347
2344
// (nor A, (and B, C))
2348
- def : XXEvalPattern<(vnot (or v4i32:$vA, (and v4i32:$vB, v4i32:$vC))), 224>;
2345
+ def : XXEvalPattern<v4i32, (vnot (or v4i32:$vA, (and v4i32:$vB, v4i32:$vC))), 224>;
2349
2346
// (nor A, (eqv B, C))
2350
- def : XXEvalPattern<(and (vnot v4i32:$vA), (xor v4i32:$vB, v4i32:$vC)), 96>;
2347
+ def : XXEvalPattern<v4i32, (and (vnot v4i32:$vA), (xor v4i32:$vB, v4i32:$vC)), 96>;
2351
2348
// (nor A, (nand B, C))
2352
- def : XXEvalPattern<(and (vnot v4i32:$vA), (and v4i32:$vB, v4i32:$vC)), 16>;
2349
+ def : XXEvalPattern<v4i32, (and (vnot v4i32:$vA), (and v4i32:$vB, v4i32:$vC)), 16>;
2353
2350
// (nor A, (nor B, C))
2354
- def : XXEvalPattern<(and (vnot v4i32:$vA), (or v4i32:$vB, v4i32:$vC)), 112>;
2351
+ def : XXEvalPattern<v4i32, (and (vnot v4i32:$vA), (or v4i32:$vB, v4i32:$vC)), 112>;
2355
2352
// (nor A, (xor B, C))
2356
- def : XXEvalPattern<(vnot (or v4i32:$vA, (xor v4i32:$vB, v4i32:$vC))), 144>;
2353
+ def : XXEvalPattern<v4i32, (vnot (or v4i32:$vA, (xor v4i32:$vB, v4i32:$vC))), 144>;
2357
2354
2358
2355
// OR
2359
2356
// (or A, B, C)
2360
- def : XXEvalPattern<(or v4i32:$vA, (or v4i32:$vB, v4i32:$vC)), 127>;
2357
+ def : XXEvalPattern<v4i32, (or v4i32:$vA, (or v4i32:$vB, v4i32:$vC)), 127>;
2361
2358
// (or A, (and B, C))
2362
- def : XXEvalPattern<(or v4i32:$vA, (and v4i32:$vB, v4i32:$vC)), 31>;
2359
+ def : XXEvalPattern<v4i32, (or v4i32:$vA, (and v4i32:$vB, v4i32:$vC)), 31>;
2363
2360
// (or A, (eqv B, C))
2364
- def : XXEvalPattern<(or v4i32:$vA, (vnot (xor v4i32:$vB, v4i32:$vC))), 159>;
2361
+ def : XXEvalPattern<v4i32, (or v4i32:$vA, (vnot (xor v4i32:$vB, v4i32:$vC))), 159>;
2365
2362
// (or A, (nand B, C))
2366
- def : XXEvalPattern<(or v4i32:$vA, (vnot (and v4i32:$vB, v4i32:$vC))), 239>;
2363
+ def : XXEvalPattern<v4i32, (or v4i32:$vA, (vnot (and v4i32:$vB, v4i32:$vC))), 239>;
2367
2364
// (or A, (nor B, C))
2368
- def : XXEvalPattern<(or v4i32:$vA, (vnot (or v4i32:$vB, v4i32:$vC))), 143>;
2365
+ def : XXEvalPattern<v4i32, (or v4i32:$vA, (vnot (or v4i32:$vB, v4i32:$vC))), 143>;
2369
2366
// (or A, (xor B, C))
2370
- def : XXEvalPattern<(or v4i32:$vA, (xor v4i32:$vB, v4i32:$vC)), 111>;
2367
+ def : XXEvalPattern<v4i32, (or v4i32:$vA, (xor v4i32:$vB, v4i32:$vC)), 111>;
2371
2368
2372
2369
// XOR
2373
2370
// (xor A, B, C)
2374
- def : XXEvalPattern<(xor v4i32:$vA, (xor v4i32:$vB, v4i32:$vC)), 105>;
2371
+ def : XXEvalPattern<v4i32, (xor v4i32:$vA, (xor v4i32:$vB, v4i32:$vC)), 105>;
2375
2372
// (xor A, (and B, C))
2376
- def : XXEvalPattern<(xor v4i32:$vA, (and v4i32:$vB, v4i32:$vC)), 30>;
2373
+ def : XXEvalPattern<v4i32, (xor v4i32:$vA, (and v4i32:$vB, v4i32:$vC)), 30>;
2377
2374
// (xor A, (or B, C))
2378
- def : XXEvalPattern<(xor v4i32:$vA, (or v4i32:$vB, v4i32:$vC)), 120>;
2375
+ def : XXEvalPattern<v4i32, (xor v4i32:$vA, (or v4i32:$vB, v4i32:$vC)), 120>;
2379
2376
2380
2377
// XXEval Patterns for ternary Operations.
2381
2378
foreach Ty = [v4i32, v2i64, v8i16, v16i8] in {
0 commit comments