@@ -5449,6 +5449,52 @@ defm : SelectSetCCSwapOperands<setle, "CMGE">;
54495449defm : SelectSetCCSwapOperands<setult, "CMHI">;
54505450defm : SelectSetCCSwapOperands<setule, "CMHS">;
54515451
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+
54525498let Predicates = [HasNEON] in {
54535499def : InstAlias<"mov{\t$dst.16b, $src.16b|.16b\t$dst, $src}",
54545500 (ORRv16i8 V128:$dst, V128:$src, V128:$src), 1>;
0 commit comments