@@ -5449,6 +5449,52 @@ defm : SelectSetCCSwapOperands<setle, "CMGE">;
5449
5449
defm : SelectSetCCSwapOperands<setult, "CMHI">;
5450
5450
defm : SelectSetCCSwapOperands<setule, "CMHS">;
5451
5451
5452
+ multiclass SelectSetCCZeroRHS<PatFrags InFrag, string INST> {
5453
+ def : Pat<(v8i8 (InFrag (v8i8 V64:$Rn), immAllZerosV)),
5454
+ (v8i8 (!cast<Instruction>(INST # v8i8rz) (v8i8 V64:$Rn)))>;
5455
+ def : Pat<(v16i8 (InFrag (v16i8 V128:$Rn), immAllZerosV)),
5456
+ (v16i8 (!cast<Instruction>(INST # v16i8rz) (v16i8 V128:$Rn)))>;
5457
+ def : Pat<(v4i16 (InFrag (v4i16 V64:$Rn), immAllZerosV)),
5458
+ (v4i16 (!cast<Instruction>(INST # v4i16rz) (v4i16 V64:$Rn)))>;
5459
+ def : Pat<(v8i16 (InFrag (v8i16 V128:$Rn), immAllZerosV)),
5460
+ (v8i16 (!cast<Instruction>(INST # v8i16rz) (v8i16 V128:$Rn)))>;
5461
+ def : Pat<(v2i32 (InFrag (v2i32 V64:$Rn), immAllZerosV)),
5462
+ (v2i32 (!cast<Instruction>(INST # v2i32rz) (v2i32 V64:$Rn)))>;
5463
+ def : Pat<(v4i32 (InFrag (v4i32 V128:$Rn), immAllZerosV)),
5464
+ (v4i32 (!cast<Instruction>(INST # v4i32rz) (v4i32 V128:$Rn)))>;
5465
+ def : Pat<(v2i64 (InFrag (v2i64 V128:$Rn), immAllZerosV)),
5466
+ (v2i64 (!cast<Instruction>(INST # v2i64rz) (v2i64 V128:$Rn)))>;
5467
+ }
5468
+
5469
+ defm : SelectSetCCZeroRHS<seteq, "CMEQ">;
5470
+ defm : SelectSetCCZeroRHS<setgt, "CMGT">;
5471
+ defm : SelectSetCCZeroRHS<setge, "CMGE">;
5472
+ defm : SelectSetCCZeroRHS<setlt, "CMLT">;
5473
+ defm : SelectSetCCZeroRHS<setle, "CMLE">;
5474
+
5475
+ multiclass SelectSetCCZeroLHS<PatFrags InFrag, string INST> {
5476
+ def : Pat<(v8i8 (InFrag immAllZerosV, (v8i8 V64:$Rn))),
5477
+ (v8i8 (!cast<Instruction>(INST # v8i8rz) (v8i8 V64:$Rn)))>;
5478
+ def : Pat<(v16i8 (InFrag immAllZerosV, (v16i8 V128:$Rn))),
5479
+ (v16i8 (!cast<Instruction>(INST # v16i8rz) (v16i8 V128:$Rn)))>;
5480
+ def : Pat<(v4i16 (InFrag immAllZerosV, (v4i16 V64:$Rn))),
5481
+ (v4i16 (!cast<Instruction>(INST # v4i16rz) (v4i16 V64:$Rn)))>;
5482
+ def : Pat<(v8i16 (InFrag immAllZerosV, (v8i16 V128:$Rn))),
5483
+ (v8i16 (!cast<Instruction>(INST # v8i16rz) (v8i16 V128:$Rn)))>;
5484
+ def : Pat<(v2i32 (InFrag immAllZerosV, (v2i32 V64:$Rn))),
5485
+ (v2i32 (!cast<Instruction>(INST # v2i32rz) (v2i32 V64:$Rn)))>;
5486
+ def : Pat<(v4i32 (InFrag immAllZerosV, (v4i32 V128:$Rn))),
5487
+ (v4i32 (!cast<Instruction>(INST # v4i32rz) (v4i32 V128:$Rn)))>;
5488
+ def : Pat<(v2i64 (InFrag immAllZerosV, (v2i64 V128:$Rn))),
5489
+ (v2i64 (!cast<Instruction>(INST # v2i64rz) (v2i64 V128:$Rn)))>;
5490
+ }
5491
+
5492
+ defm : SelectSetCCZeroLHS<seteq, "CMEQ">;
5493
+ defm : SelectSetCCZeroLHS<setgt, "CMLT">;
5494
+ defm : SelectSetCCZeroLHS<setge, "CMLE">;
5495
+ defm : SelectSetCCZeroLHS<setlt, "CMGT">;
5496
+ defm : SelectSetCCZeroLHS<setle, "CMGE">;
5497
+
5452
5498
let Predicates = [HasNEON] in {
5453
5499
def : InstAlias<"mov{\t$dst.16b, $src.16b|.16b\t$dst, $src}",
5454
5500
(ORRv16i8 V128:$dst, V128:$src, V128:$src), 1>;
0 commit comments