@@ -5357,7 +5357,7 @@ multiclass sve_int_dup_imm_pred_merge_inst<
53575357 (!cast<Instruction>(NAME) $Zd, $Pg, $imm, $shift)>;
53585358}
53595359
5360- multiclass sve_int_dup_imm_pred_merge<string asm> {
5360+ multiclass sve_int_dup_imm_pred_merge<string asm, SDPatternOperator op > {
53615361 defm _B : sve_int_dup_imm_pred_merge_inst<0b00, asm, ZPR8, cpy_imm8_opt_lsl_i8,
53625362 nxv16i8, nxv16i1, i32, SVECpyDupImm8Pat>;
53635363 defm _H : sve_int_dup_imm_pred_merge_inst<0b01, asm, ZPR16, cpy_imm8_opt_lsl_i16,
@@ -5386,6 +5386,15 @@ multiclass sve_int_dup_imm_pred_merge<string asm> {
53865386 (!cast<Instruction>(NAME # _D) $Zd, $Pg, 0, 0)>;
53875387 def : Pat<(vselect PPRAny:$Pg, (SVEDup0), (nxv2f64 ZPR:$Zd)),
53885388 (!cast<Instruction>(NAME # _D) $Zd, $Pg, 0, 0)>;
5389+
5390+ def : Pat<(nxv16i8 (op nxv16i1:$pg, (i32 (SVECpyDupImm8Pat i32:$a, i32:$b)), nxv16i8:$zd)),
5391+ (!cast<Instruction>(NAME # _B) $zd, $pg, $a, $b)>;
5392+ def : Pat<(nxv8i16 (op nxv8i1:$pg, (i32 (SVECpyDupImm16Pat i32:$a, i32:$b)), nxv8i16:$zd)),
5393+ (!cast<Instruction>(NAME # _H) $zd, $pg, $a, $b)>;
5394+ def : Pat<(nxv4i32 (op nxv4i1:$pg, (i32 (SVECpyDupImm32Pat i32:$a, i32:$b)), nxv4i32:$zd)),
5395+ (!cast<Instruction>(NAME # _S) $zd, $pg, $a, $b)>;
5396+ def : Pat<(nxv2i64 (op nxv2i1:$pg, (i64 (SVECpyDupImm64Pat i32:$a, i32:$b)), nxv2i64:$zd)),
5397+ (!cast<Instruction>(NAME # _D) $zd, $pg, $a, $b)>;
53895398}
53905399
53915400multiclass sve_int_dup_imm_pred_zero_inst<
@@ -5407,7 +5416,7 @@ multiclass sve_int_dup_imm_pred_zero_inst<
54075416 (!cast<Instruction>(NAME) $Pg, $imm, $shift)>;
54085417}
54095418
5410- multiclass sve_int_dup_imm_pred_zero<string asm> {
5419+ multiclass sve_int_dup_imm_pred_zero<string asm, SDPatternOperator op > {
54115420 defm _B : sve_int_dup_imm_pred_zero_inst<0b00, asm, ZPR8, cpy_imm8_opt_lsl_i8,
54125421 nxv16i8, nxv16i1, i32, SVECpyDupImm8Pat>;
54135422 defm _H : sve_int_dup_imm_pred_zero_inst<0b01, asm, ZPR16, cpy_imm8_opt_lsl_i16,
@@ -5416,6 +5425,15 @@ multiclass sve_int_dup_imm_pred_zero<string asm> {
54165425 nxv4i32, nxv4i1, i32, SVECpyDupImm32Pat>;
54175426 defm _D : sve_int_dup_imm_pred_zero_inst<0b11, asm, ZPR64, cpy_imm8_opt_lsl_i64,
54185427 nxv2i64, nxv2i1, i64, SVECpyDupImm64Pat>;
5428+
5429+ def : Pat<(nxv16i8 (op nxv16i1:$pg, (i32 (SVECpyDupImm8Pat i32:$a, i32:$b)), (SVEDup0))),
5430+ (!cast<Instruction>(NAME # _B) $pg, $a, $b)>;
5431+ def : Pat<(nxv8i16 (op nxv8i1:$pg, (i32 (SVECpyDupImm16Pat i32:$a, i32:$b)), (SVEDup0))),
5432+ (!cast<Instruction>(NAME # _H) $pg, $a, $b)>;
5433+ def : Pat<(nxv4i32 (op nxv4i1:$pg, (i32 (SVECpyDupImm32Pat i32:$a, i32:$b)), (SVEDup0))),
5434+ (!cast<Instruction>(NAME # _S) $pg, $a, $b)>;
5435+ def : Pat<(nxv2i64 (op nxv2i1:$pg, (i64 (SVECpyDupImm64Pat i32:$a, i32:$b)), (SVEDup0))),
5436+ (!cast<Instruction>(NAME # _D) $pg, $a, $b)>;
54195437}
54205438
54215439//===----------------------------------------------------------------------===//
0 commit comments