@@ -3989,7 +3989,7 @@ let Constraints = "$src1 = $dst" in {
39893989
39903990let ExeDomain = SSEPackedInt in {
39913991multiclass sse2_pinsrw<bit Is2Addr = 1> {
3992- def rr : Ii8<0xC4, MRMSrcReg,
3992+ def rri : Ii8<0xC4, MRMSrcReg,
39933993 (outs VR128:$dst), (ins VR128:$src1,
39943994 GR32orGR64:$src2, u8imm:$src3),
39953995 !if(Is2Addr,
@@ -3998,7 +3998,7 @@ multiclass sse2_pinsrw<bit Is2Addr = 1> {
39983998 [(set VR128:$dst,
39993999 (X86pinsrw VR128:$src1, GR32orGR64:$src2, timm:$src3))]>,
40004000 Sched<[WriteVecInsert, ReadDefault, ReadInt2Fpu]>;
4001- def rm : Ii8<0xC4, MRMSrcMem,
4001+ def rmi : Ii8<0xC4, MRMSrcMem,
40024002 (outs VR128:$dst), (ins VR128:$src1,
40034003 i16mem:$src2, u8imm:$src3),
40044004 !if(Is2Addr,
@@ -4012,13 +4012,13 @@ multiclass sse2_pinsrw<bit Is2Addr = 1> {
40124012
40134013// Extract
40144014let Predicates = [HasAVX, NoBWI] in
4015- def VPEXTRWrr : Ii8<0xC5, MRMSrcReg,
4015+ def VPEXTRWrri : Ii8<0xC5, MRMSrcReg,
40164016 (outs GR32orGR64:$dst), (ins VR128:$src1, u8imm:$src2),
40174017 "vpextrw\t{$src2, $src1, $dst|$dst, $src1, $src2}",
40184018 [(set GR32orGR64:$dst, (X86pextrw (v8i16 VR128:$src1),
40194019 timm:$src2))]>,
40204020 TB, PD, VEX, WIG, Sched<[WriteVecExtract]>;
4021- def PEXTRWrr : PDIi8<0xC5, MRMSrcReg,
4021+ def PEXTRWrri : PDIi8<0xC5, MRMSrcReg,
40224022 (outs GR32orGR64:$dst), (ins VR128:$src1, u8imm:$src2),
40234023 "pextrw\t{$src2, $src1, $dst|$dst, $src1, $src2}",
40244024 [(set GR32orGR64:$dst, (X86pextrw (v8i16 VR128:$src1),
@@ -4036,16 +4036,16 @@ defm PINSRW : sse2_pinsrw, TB, PD;
40364036
40374037// Always select FP16 instructions if available.
40384038let Predicates = [UseSSE2], AddedComplexity = -10 in {
4039- def : Pat<(f16 (load addr:$src)), (COPY_TO_REGCLASS (PINSRWrm (v8i16 (IMPLICIT_DEF)), addr:$src, 0), FR16)>;
4040- def : Pat<(store f16:$src, addr:$dst), (MOV16mr addr:$dst, (EXTRACT_SUBREG (PEXTRWrr (v8i16 (COPY_TO_REGCLASS FR16:$src, VR128)), 0), sub_16bit))>;
4041- def : Pat<(i16 (bitconvert f16:$src)), (EXTRACT_SUBREG (PEXTRWrr (v8i16 (COPY_TO_REGCLASS FR16:$src, VR128)), 0), sub_16bit)>;
4042- def : Pat<(f16 (bitconvert i16:$src)), (COPY_TO_REGCLASS (PINSRWrr (v8i16 (IMPLICIT_DEF)), (INSERT_SUBREG (IMPLICIT_DEF), GR16:$src, sub_16bit), 0), FR16)>;
4039+ def : Pat<(f16 (load addr:$src)), (COPY_TO_REGCLASS (PINSRWrmi (v8i16 (IMPLICIT_DEF)), addr:$src, 0), FR16)>;
4040+ def : Pat<(store f16:$src, addr:$dst), (MOV16mr addr:$dst, (EXTRACT_SUBREG (PEXTRWrri (v8i16 (COPY_TO_REGCLASS FR16:$src, VR128)), 0), sub_16bit))>;
4041+ def : Pat<(i16 (bitconvert f16:$src)), (EXTRACT_SUBREG (PEXTRWrri (v8i16 (COPY_TO_REGCLASS FR16:$src, VR128)), 0), sub_16bit)>;
4042+ def : Pat<(f16 (bitconvert i16:$src)), (COPY_TO_REGCLASS (PINSRWrri (v8i16 (IMPLICIT_DEF)), (INSERT_SUBREG (IMPLICIT_DEF), GR16:$src, sub_16bit), 0), FR16)>;
40434043}
40444044
40454045let Predicates = [HasAVX, NoBWI] in {
4046- def : Pat<(f16 (load addr:$src)), (COPY_TO_REGCLASS (VPINSRWrm (v8i16 (IMPLICIT_DEF)), addr:$src, 0), FR16)>;
4047- def : Pat<(i16 (bitconvert f16:$src)), (EXTRACT_SUBREG (VPEXTRWrr (v8i16 (COPY_TO_REGCLASS FR16:$src, VR128)), 0), sub_16bit)>;
4048- def : Pat<(f16 (bitconvert i16:$src)), (COPY_TO_REGCLASS (VPINSRWrr (v8i16 (IMPLICIT_DEF)), (INSERT_SUBREG (IMPLICIT_DEF), GR16:$src, sub_16bit), 0), FR16)>;
4046+ def : Pat<(f16 (load addr:$src)), (COPY_TO_REGCLASS (VPINSRWrmi (v8i16 (IMPLICIT_DEF)), addr:$src, 0), FR16)>;
4047+ def : Pat<(i16 (bitconvert f16:$src)), (EXTRACT_SUBREG (VPEXTRWrri (v8i16 (COPY_TO_REGCLASS FR16:$src, VR128)), 0), sub_16bit)>;
4048+ def : Pat<(f16 (bitconvert i16:$src)), (COPY_TO_REGCLASS (VPINSRWrri (v8i16 (IMPLICIT_DEF)), (INSERT_SUBREG (IMPLICIT_DEF), GR16:$src, sub_16bit), 0), FR16)>;
40494049}
40504050
40514051//===---------------------------------------------------------------------===//
@@ -5234,15 +5234,15 @@ let Predicates = [UseSSE41] in {
52345234
52355235/// SS41I_binop_ext8 - SSE 4.1 extract 8 bits to 32 bit reg or 8 bit mem
52365236multiclass SS41I_extract8<bits<8> opc, string OpcodeStr> {
5237- def rr : SS4AIi8<opc, MRMDestReg, (outs GR32orGR64:$dst),
5237+ def rri : SS4AIi8<opc, MRMDestReg, (outs GR32orGR64:$dst),
52385238 (ins VR128:$src1, u8imm:$src2),
52395239 !strconcat(OpcodeStr,
52405240 "\t{$src2, $src1, $dst|$dst, $src1, $src2}"),
52415241 [(set GR32orGR64:$dst, (X86pextrb (v16i8 VR128:$src1),
52425242 timm:$src2))]>,
52435243 Sched<[WriteVecExtract]>;
52445244 let hasSideEffects = 0, mayStore = 1 in
5245- def mr : SS4AIi8<opc, MRMDestMem, (outs),
5245+ def mri : SS4AIi8<opc, MRMDestMem, (outs),
52465246 (ins i8mem:$dst, VR128:$src1, u8imm:$src2),
52475247 !strconcat(OpcodeStr,
52485248 "\t{$src2, $src1, $dst|$dst, $src1, $src2}"),
@@ -5259,14 +5259,14 @@ defm PEXTRB : SS41I_extract8<0x14, "pextrb">;
52595259/// SS41I_extract16 - SSE 4.1 extract 16 bits to memory destination
52605260multiclass SS41I_extract16<bits<8> opc, string OpcodeStr> {
52615261 let isCodeGenOnly = 1, ForceDisassemble = 1, hasSideEffects = 0 in
5262- def rr_REV : SS4AIi8<opc, MRMDestReg, (outs GR32orGR64:$dst),
5262+ def rri_REV : SS4AIi8<opc, MRMDestReg, (outs GR32orGR64:$dst),
52635263 (ins VR128:$src1, u8imm:$src2),
52645264 !strconcat(OpcodeStr,
52655265 "\t{$src2, $src1, $dst|$dst, $src1, $src2}"), []>,
52665266 Sched<[WriteVecExtract]>;
52675267
52685268 let hasSideEffects = 0, mayStore = 1 in
5269- def mr : SS4AIi8<opc, MRMDestMem, (outs),
5269+ def mri : SS4AIi8<opc, MRMDestMem, (outs),
52705270 (ins i16mem:$dst, VR128:$src1, u8imm:$src2),
52715271 !strconcat(OpcodeStr,
52725272 "\t{$src2, $src1, $dst|$dst, $src1, $src2}"),
@@ -5280,22 +5280,22 @@ let Predicates = [HasAVX, NoBWI] in
52805280defm PEXTRW : SS41I_extract16<0x15, "pextrw">;
52815281
52825282let Predicates = [UseSSE41] in
5283- def : Pat<(store f16:$src, addr:$dst), (PEXTRWmr addr:$dst, (v8i16 (COPY_TO_REGCLASS FR16:$src, VR128)), 0)>;
5283+ def : Pat<(store f16:$src, addr:$dst), (PEXTRWmri addr:$dst, (v8i16 (COPY_TO_REGCLASS FR16:$src, VR128)), 0)>;
52845284
52855285let Predicates = [HasAVX, NoBWI] in
5286- def : Pat<(store f16:$src, addr:$dst), (VPEXTRWmr addr:$dst, (v8i16 (COPY_TO_REGCLASS FR16:$src, VR128)), 0)>;
5286+ def : Pat<(store f16:$src, addr:$dst), (VPEXTRWmri addr:$dst, (v8i16 (COPY_TO_REGCLASS FR16:$src, VR128)), 0)>;
52875287
52885288
52895289/// SS41I_extract32 - SSE 4.1 extract 32 bits to int reg or memory destination
52905290multiclass SS41I_extract32<bits<8> opc, string OpcodeStr> {
5291- def rr : SS4AIi8<opc, MRMDestReg, (outs GR32:$dst),
5291+ def rri : SS4AIi8<opc, MRMDestReg, (outs GR32:$dst),
52925292 (ins VR128:$src1, u8imm:$src2),
52935293 !strconcat(OpcodeStr,
52945294 "\t{$src2, $src1, $dst|$dst, $src1, $src2}"),
52955295 [(set GR32:$dst,
52965296 (extractelt (v4i32 VR128:$src1), imm:$src2))]>,
52975297 Sched<[WriteVecExtract]>;
5298- def mr : SS4AIi8<opc, MRMDestMem, (outs),
5298+ def mri : SS4AIi8<opc, MRMDestMem, (outs),
52995299 (ins i32mem:$dst, VR128:$src1, u8imm:$src2),
53005300 !strconcat(OpcodeStr,
53015301 "\t{$src2, $src1, $dst|$dst, $src1, $src2}"),
@@ -5310,14 +5310,14 @@ defm PEXTRD : SS41I_extract32<0x16, "pextrd">;
53105310
53115311/// SS41I_extract32 - SSE 4.1 extract 32 bits to int reg or memory destination
53125312multiclass SS41I_extract64<bits<8> opc, string OpcodeStr> {
5313- def rr : SS4AIi8<opc, MRMDestReg, (outs GR64:$dst),
5313+ def rri : SS4AIi8<opc, MRMDestReg, (outs GR64:$dst),
53145314 (ins VR128:$src1, u8imm:$src2),
53155315 !strconcat(OpcodeStr,
53165316 "\t{$src2, $src1, $dst|$dst, $src1, $src2}"),
53175317 [(set GR64:$dst,
53185318 (extractelt (v2i64 VR128:$src1), imm:$src2))]>,
53195319 Sched<[WriteVecExtract]>;
5320- def mr : SS4AIi8<opc, MRMDestMem, (outs),
5320+ def mri : SS4AIi8<opc, MRMDestMem, (outs),
53215321 (ins i64mem:$dst, VR128:$src1, u8imm:$src2),
53225322 !strconcat(OpcodeStr,
53235323 "\t{$src2, $src1, $dst|$dst, $src1, $src2}"),
@@ -5359,7 +5359,7 @@ let ExeDomain = SSEPackedSingle in {
53595359//===----------------------------------------------------------------------===//
53605360
53615361multiclass SS41I_insert8<bits<8> opc, string asm, bit Is2Addr = 1> {
5362- def rr : SS4AIi8<opc, MRMSrcReg, (outs VR128:$dst),
5362+ def rri : SS4AIi8<opc, MRMSrcReg, (outs VR128:$dst),
53635363 (ins VR128:$src1, GR32orGR64:$src2, u8imm:$src3),
53645364 !if(Is2Addr,
53655365 !strconcat(asm, "\t{$src3, $src2, $dst|$dst, $src2, $src3}"),
@@ -5368,7 +5368,7 @@ multiclass SS41I_insert8<bits<8> opc, string asm, bit Is2Addr = 1> {
53685368 [(set VR128:$dst,
53695369 (X86pinsrb VR128:$src1, GR32orGR64:$src2, timm:$src3))]>,
53705370 Sched<[WriteVecInsert, ReadDefault, ReadInt2Fpu]>;
5371- def rm : SS4AIi8<opc, MRMSrcMem, (outs VR128:$dst),
5371+ def rmi : SS4AIi8<opc, MRMSrcMem, (outs VR128:$dst),
53725372 (ins VR128:$src1, i8mem:$src2, u8imm:$src3),
53735373 !if(Is2Addr,
53745374 !strconcat(asm, "\t{$src3, $src2, $dst|$dst, $src2, $src3}"),
@@ -5382,15 +5382,15 @@ multiclass SS41I_insert8<bits<8> opc, string asm, bit Is2Addr = 1> {
53825382let Predicates = [HasAVX, NoBWI] in {
53835383 defm VPINSRB : SS41I_insert8<0x20, "vpinsrb", 0>, VEX, VVVV, WIG;
53845384 def : Pat<(X86pinsrb VR128:$src1, (i32 (anyext (i8 GR8:$src2))), timm:$src3),
5385- (VPINSRBrr VR128:$src1, (INSERT_SUBREG (i32 (IMPLICIT_DEF)),
5386- GR8:$src2, sub_8bit), timm:$src3)>;
5385+ (VPINSRBrri VR128:$src1, (INSERT_SUBREG (i32 (IMPLICIT_DEF)),
5386+ GR8:$src2, sub_8bit), timm:$src3)>;
53875387}
53885388
53895389let Constraints = "$src1 = $dst" in
53905390 defm PINSRB : SS41I_insert8<0x20, "pinsrb">;
53915391
53925392multiclass SS41I_insert32<bits<8> opc, string asm, bit Is2Addr = 1> {
5393- def rr : SS4AIi8<opc, MRMSrcReg, (outs VR128:$dst),
5393+ def rri : SS4AIi8<opc, MRMSrcReg, (outs VR128:$dst),
53945394 (ins VR128:$src1, GR32:$src2, u8imm:$src3),
53955395 !if(Is2Addr,
53965396 !strconcat(asm, "\t{$src3, $src2, $dst|$dst, $src2, $src3}"),
@@ -5399,7 +5399,7 @@ multiclass SS41I_insert32<bits<8> opc, string asm, bit Is2Addr = 1> {
53995399 [(set VR128:$dst,
54005400 (v4i32 (insertelt VR128:$src1, GR32:$src2, imm:$src3)))]>,
54015401 Sched<[WriteVecInsert, ReadDefault, ReadInt2Fpu]>;
5402- def rm : SS4AIi8<opc, MRMSrcMem, (outs VR128:$dst),
5402+ def rmi : SS4AIi8<opc, MRMSrcMem, (outs VR128:$dst),
54035403 (ins VR128:$src1, i32mem:$src2, u8imm:$src3),
54045404 !if(Is2Addr,
54055405 !strconcat(asm, "\t{$src3, $src2, $dst|$dst, $src2, $src3}"),
@@ -5416,7 +5416,7 @@ let Constraints = "$src1 = $dst" in
54165416 defm PINSRD : SS41I_insert32<0x22, "pinsrd">;
54175417
54185418multiclass SS41I_insert64<bits<8> opc, string asm, bit Is2Addr = 1> {
5419- def rr : SS4AIi8<opc, MRMSrcReg, (outs VR128:$dst),
5419+ def rri : SS4AIi8<opc, MRMSrcReg, (outs VR128:$dst),
54205420 (ins VR128:$src1, GR64:$src2, u8imm:$src3),
54215421 !if(Is2Addr,
54225422 !strconcat(asm, "\t{$src3, $src2, $dst|$dst, $src2, $src3}"),
@@ -5425,7 +5425,7 @@ multiclass SS41I_insert64<bits<8> opc, string asm, bit Is2Addr = 1> {
54255425 [(set VR128:$dst,
54265426 (v2i64 (insertelt VR128:$src1, GR64:$src2, imm:$src3)))]>,
54275427 Sched<[WriteVecInsert, ReadDefault, ReadInt2Fpu]>;
5428- def rm : SS4AIi8<opc, MRMSrcMem, (outs VR128:$dst),
5428+ def rmi : SS4AIi8<opc, MRMSrcMem, (outs VR128:$dst),
54295429 (ins VR128:$src1, i64mem:$src2, u8imm:$src3),
54305430 !if(Is2Addr,
54315431 !strconcat(asm, "\t{$src3, $src2, $dst|$dst, $src2, $src3}"),
0 commit comments