Skip to content

Commit 0e163e7

Browse files
authored
[X86][MC] Not emit {evex} for VEX-promoted instructions with GPR operands (#74039)
To align with 1. GNU binutils's behavior for APX instructions 2. LLVM's behaviour for EVEX intructions with VEX variant
1 parent 604c29e commit 0e163e7

File tree

4 files changed

+52
-46
lines changed

4 files changed

+52
-46
lines changed

llvm/lib/Target/X86/X86InstrAVX512.td

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2855,8 +2855,8 @@ defm VFPCLASS : avx512_fp_fpclass_all<"vfpclass", 0x66, 0x67, SchedWriteFCmp>, E
28552855
multiclass avx512_mask_mov<bits<8> opc_kk, bits<8> opc_km, bits<8> opc_mk,
28562856
string OpcodeStr, RegisterClass KRC, ValueType vvt,
28572857
X86MemOperand x86memop, string Suffix = ""> {
2858-
let explicitOpPrefix = !if(!eq(Suffix, ""), NoExplicitOpPrefix, ExplicitEVEX) in {
2859-
let isMoveReg = 1, hasSideEffects = 0, SchedRW = [WriteMove] in
2858+
let isMoveReg = 1, hasSideEffects = 0, SchedRW = [WriteMove],
2859+
explicitOpPrefix = !if(!eq(Suffix, ""), NoExplicitOpPrefix, ExplicitEVEX) in
28602860
def kk#Suffix : I<opc_kk, MRMSrcReg, (outs KRC:$dst), (ins KRC:$src),
28612861
!strconcat(OpcodeStr, "\t{$src, $dst|$dst, $src}"), []>,
28622862
Sched<[WriteMove]>;
@@ -2868,13 +2868,12 @@ multiclass avx512_mask_mov<bits<8> opc_kk, bits<8> opc_km, bits<8> opc_mk,
28682868
!strconcat(OpcodeStr, "\t{$src, $dst|$dst, $src}"),
28692869
[(store KRC:$src, addr:$dst)]>,
28702870
Sched<[WriteStore]>;
2871-
}
28722871
}
28732872

28742873
multiclass avx512_mask_mov_gpr<bits<8> opc_kr, bits<8> opc_rk,
28752874
string OpcodeStr, RegisterClass KRC,
28762875
RegisterClass GRC, string Suffix = ""> {
2877-
let hasSideEffects = 0, explicitOpPrefix = !if(!eq(Suffix, ""), NoExplicitOpPrefix, ExplicitEVEX) in {
2876+
let hasSideEffects = 0 in {
28782877
def kr#Suffix : I<opc_kr, MRMSrcReg, (outs KRC:$dst), (ins GRC:$src),
28792878
!strconcat(OpcodeStr, "\t{$src, $dst|$dst, $src}"), []>,
28802879
Sched<[WriteMove]>;

llvm/test/MC/Disassembler/X86/apx/kmov.txt

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,25 @@
11
# RUN: llvm-mc -triple x86_64 -disassemble %s | FileCheck %s --check-prefix=ATT
22
# RUN: llvm-mc -triple x86_64 -disassemble -output-asm-variant=1 %s | FileCheck %s --check-prefix=INTEL
33

4+
# ATT: {evex} kmovb %k1, %k2
5+
# INTEL: {evex} kmovb k2, k1
6+
0x62,0xf1,0x7d,0x08,0x90,0xd1
7+
8+
# ATT: {evex} kmovw %k1, %k2
9+
# INTEL: {evex} kmovw k2, k1
10+
0x62,0xf1,0x7c,0x08,0x90,0xd1
11+
12+
# ATT: {evex} kmovd %k1, %k2
13+
# INTEL: {evex} kmovd k2, k1
14+
0x62,0xf1,0xfd,0x08,0x90,0xd1
15+
16+
# ATT: {evex} kmovq %k1, %k2
17+
# INTEL: {evex} kmovq k2, k1
18+
0x62,0xf1,0xfc,0x08,0x90,0xd1
19+
20+
# ATT-NOT: {evex}
21+
# INTEL-NOT: {evex}
22+
423
# ATT: kmovb %r16d, %k1
524
# INTEL: kmovb k1, r16d
625
0x62,0xf9,0x7d,0x08,0x92,0xc8
@@ -64,19 +83,3 @@
6483
# ATT: kmovq %k1, (%r16,%r17)
6584
# INTEL: kmovq qword ptr [r16 + r17], k1
6685
0x62,0xf9,0xf8,0x08,0x91,0x0c,0x08
67-
68-
# ATT: {evex} kmovb %k1, %k2
69-
# INTEL: {evex} kmovb k2, k1
70-
0x62,0xf1,0x7d,0x08,0x90,0xd1
71-
72-
# ATT: {evex} kmovw %k1, %k2
73-
# INTEL: {evex} kmovw k2, k1
74-
0x62,0xf1,0x7c,0x08,0x90,0xd1
75-
76-
# ATT: {evex} kmovd %k1, %k2
77-
# INTEL: {evex} kmovd k2, k1
78-
0x62,0xf1,0xfd,0x08,0x90,0xd1
79-
80-
# ATT: {evex} kmovq %k1, %k2
81-
# INTEL: {evex} kmovq k2, k1
82-
0x62,0xf1,0xfc,0x08,0x90,0xd1

llvm/test/MC/X86/apx/kmov-att.s

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,21 @@
33

44
# ERROR-COUNT-20: error:
55
# ERROR-NOT: error:
6+
# CHECK: {evex} kmovb %k1, %k2
7+
# CHECK: encoding: [0x62,0xf1,0x7d,0x08,0x90,0xd1]
8+
{evex} kmovb %k1, %k2
9+
# CHECK: {evex} kmovw %k1, %k2
10+
# CHECK: encoding: [0x62,0xf1,0x7c,0x08,0x90,0xd1]
11+
{evex} kmovw %k1, %k2
12+
# CHECK: {evex} kmovd %k1, %k2
13+
# CHECK: encoding: [0x62,0xf1,0xfd,0x08,0x90,0xd1]
14+
{evex} kmovd %k1, %k2
15+
# CHECK: {evex} kmovq %k1, %k2
16+
# CHECK: encoding: [0x62,0xf1,0xfc,0x08,0x90,0xd1]
17+
{evex} kmovq %k1, %k2
18+
19+
# CHECK-NOT: {evex}
20+
621
# CHECK: kmovb %r16d, %k1
722
# CHECK: encoding: [0x62,0xf9,0x7d,0x08,0x92,0xc8]
823
kmovb %r16d, %k1
@@ -54,16 +69,3 @@
5469
# CHECK: kmovq %k1, (%r16,%r17)
5570
# CHECK: encoding: [0x62,0xf9,0xf8,0x08,0x91,0x0c,0x08]
5671
kmovq %k1, (%r16,%r17)
57-
58-
# CHECK: {evex} kmovb %k1, %k2
59-
# CHECK: encoding: [0x62,0xf1,0x7d,0x08,0x90,0xd1]
60-
{evex} kmovb %k1, %k2
61-
# CHECK: {evex} kmovw %k1, %k2
62-
# CHECK: encoding: [0x62,0xf1,0x7c,0x08,0x90,0xd1]
63-
{evex} kmovw %k1, %k2
64-
# CHECK: {evex} kmovd %k1, %k2
65-
# CHECK: encoding: [0x62,0xf1,0xfd,0x08,0x90,0xd1]
66-
{evex} kmovd %k1, %k2
67-
# CHECK: {evex} kmovq %k1, %k2
68-
# CHECK: encoding: [0x62,0xf1,0xfc,0x08,0x90,0xd1]
69-
{evex} kmovq %k1, %k2

llvm/test/MC/X86/apx/kmov-intel.s

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,20 @@
11
# RUN: llvm-mc -triple x86_64 -show-encoding -x86-asm-syntax=intel -output-asm-variant=1 %s | FileCheck %s
22

3+
# CHECK: {evex} kmovb k2, k1
4+
# CHECK: encoding: [0x62,0xf1,0x7d,0x08,0x90,0xd1]
5+
{evex} kmovb k2, k1
6+
# CHECK: {evex} kmovw k2, k1
7+
# CHECK: encoding: [0x62,0xf1,0x7c,0x08,0x90,0xd1]
8+
{evex} kmovw k2, k1
9+
# CHECK: {evex} kmovd k2, k1
10+
# CHECK: encoding: [0x62,0xf1,0xfd,0x08,0x90,0xd1]
11+
{evex} kmovd k2, k1
12+
# CHECK: {evex} kmovq k2, k1
13+
# CHECK: encoding: [0x62,0xf1,0xfc,0x08,0x90,0xd1]
14+
{evex} kmovq k2, k1
15+
16+
# CHECK-NOT: {evex}
17+
318
# CHECK: kmovb k1, r16d
419
# CHECK: encoding: [0x62,0xf9,0x7d,0x08,0x92,0xc8]
520
kmovb k1, r16d
@@ -51,16 +66,3 @@
5166
# CHECK: kmovq qword ptr [r16 + r17], k1
5267
# CHECK: encoding: [0x62,0xf9,0xf8,0x08,0x91,0x0c,0x08]
5368
kmovq qword ptr [r16 + r17], k1
54-
55-
# CHECK: {evex} kmovb k2, k1
56-
# CHECK: encoding: [0x62,0xf1,0x7d,0x08,0x90,0xd1]
57-
{evex} kmovb k2, k1
58-
# CHECK: {evex} kmovw k2, k1
59-
# CHECK: encoding: [0x62,0xf1,0x7c,0x08,0x90,0xd1]
60-
{evex} kmovw k2, k1
61-
# CHECK: {evex} kmovd k2, k1
62-
# CHECK: encoding: [0x62,0xf1,0xfd,0x08,0x90,0xd1]
63-
{evex} kmovd k2, k1
64-
# CHECK: {evex} kmovq k2, k1
65-
# CHECK: encoding: [0x62,0xf1,0xfc,0x08,0x90,0xd1]
66-
{evex} kmovq k2, k1

0 commit comments

Comments
 (0)