xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/commute-xop.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -O3 -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=+avx,+xop < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @commute_fold_vpcomb(<16 x i8>* %a0, <16 x i8> %a1) {
4*9880d681SAndroid Build Coastguard Worker  ;CHECK-LABEL: commute_fold_vpcomb
5*9880d681SAndroid Build Coastguard Worker  ;CHECK:       vpcomgtb (%rdi), %xmm0, %xmm0
6*9880d681SAndroid Build Coastguard Worker  %1 = load <16 x i8>, <16 x i8>* %a0
7*9880d681SAndroid Build Coastguard Worker  %2 = call <16 x i8> @llvm.x86.xop.vpcomb(<16 x i8> %1, <16 x i8> %a1, i8 0) ; vpcomltb
8*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
9*9880d681SAndroid Build Coastguard Worker}
10*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.x86.xop.vpcomb(<16 x i8>, <16 x i8>, i8) nounwind readnone
11*9880d681SAndroid Build Coastguard Worker
12*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @commute_fold_vpcomd(<4 x i32>* %a0, <4 x i32> %a1) {
13*9880d681SAndroid Build Coastguard Worker  ;CHECK-LABEL: commute_fold_vpcomd
14*9880d681SAndroid Build Coastguard Worker  ;CHECK:       vpcomged (%rdi), %xmm0, %xmm0
15*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32>* %a0
16*9880d681SAndroid Build Coastguard Worker  %2 = call <4 x i32> @llvm.x86.xop.vpcomd(<4 x i32> %1, <4 x i32> %a1, i8 1) ; vpcomled
17*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
18*9880d681SAndroid Build Coastguard Worker}
19*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vpcomd(<4 x i32>, <4 x i32>, i8) nounwind readnone
20*9880d681SAndroid Build Coastguard Worker
21*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @commute_fold_vpcomq(<2 x i64>* %a0, <2 x i64> %a1) {
22*9880d681SAndroid Build Coastguard Worker  ;CHECK-LABEL: commute_fold_vpcomq
23*9880d681SAndroid Build Coastguard Worker  ;CHECK:       vpcomltq (%rdi), %xmm0, %xmm0
24*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x i64>, <2 x i64>* %a0
25*9880d681SAndroid Build Coastguard Worker  %2 = call <2 x i64> @llvm.x86.xop.vpcomq(<2 x i64> %1, <2 x i64> %a1, i8 2) ; vpcomgtq
26*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %2
27*9880d681SAndroid Build Coastguard Worker}
28*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vpcomq(<2 x i64>, <2 x i64>, i8) nounwind readnone
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @commute_fold_vpcomub(<16 x i8>* %a0, <16 x i8> %a1) {
31*9880d681SAndroid Build Coastguard Worker  ;CHECK-LABEL: commute_fold_vpcomub
32*9880d681SAndroid Build Coastguard Worker  ;CHECK:       vpcomleub (%rdi), %xmm0, %xmm0
33*9880d681SAndroid Build Coastguard Worker  %1 = load <16 x i8>, <16 x i8>* %a0
34*9880d681SAndroid Build Coastguard Worker  %2 = call <16 x i8> @llvm.x86.xop.vpcomub(<16 x i8> %1, <16 x i8> %a1, i8 3) ; vpcomgeub
35*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
36*9880d681SAndroid Build Coastguard Worker}
37*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.x86.xop.vpcomub(<16 x i8>, <16 x i8>, i8) nounwind readnone
38*9880d681SAndroid Build Coastguard Worker
39*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @commute_fold_vpcomud(<4 x i32>* %a0, <4 x i32> %a1) {
40*9880d681SAndroid Build Coastguard Worker  ;CHECK-LABEL: commute_fold_vpcomud
41*9880d681SAndroid Build Coastguard Worker  ;CHECK:       vpcomequd (%rdi), %xmm0, %xmm0
42*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32>* %a0
43*9880d681SAndroid Build Coastguard Worker  %2 = call <4 x i32> @llvm.x86.xop.vpcomud(<4 x i32> %1, <4 x i32> %a1, i8 4) ; vpcomequd
44*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
45*9880d681SAndroid Build Coastguard Worker}
46*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vpcomud(<4 x i32>, <4 x i32>, i8) nounwind readnone
47*9880d681SAndroid Build Coastguard Worker
48*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @commute_fold_vpcomuq(<2 x i64>* %a0, <2 x i64> %a1) {
49*9880d681SAndroid Build Coastguard Worker  ;CHECK-LABEL: commute_fold_vpcomuq
50*9880d681SAndroid Build Coastguard Worker  ;CHECK:       vpcomnequq (%rdi), %xmm0, %xmm0
51*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x i64>, <2 x i64>* %a0
52*9880d681SAndroid Build Coastguard Worker  %2 = call <2 x i64> @llvm.x86.xop.vpcomuq(<2 x i64> %1, <2 x i64> %a1, i8 5) ; vpcomnequq
53*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %2
54*9880d681SAndroid Build Coastguard Worker}
55*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vpcomuq(<2 x i64>, <2 x i64>, i8) nounwind readnone
56*9880d681SAndroid Build Coastguard Worker
57*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @commute_fold_vpcomuw(<8 x i16>* %a0, <8 x i16> %a1) {
58*9880d681SAndroid Build Coastguard Worker  ;CHECK-LABEL: commute_fold_vpcomuw
59*9880d681SAndroid Build Coastguard Worker  ;CHECK:       vpcomfalseuw (%rdi), %xmm0, %xmm0
60*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a0
61*9880d681SAndroid Build Coastguard Worker  %2 = call <8 x i16> @llvm.x86.xop.vpcomuw(<8 x i16> %1, <8 x i16> %a1, i8 6) ; vpcomfalseuw
62*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
63*9880d681SAndroid Build Coastguard Worker}
64*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.xop.vpcomuw(<8 x i16>, <8 x i16>, i8) nounwind readnone
65*9880d681SAndroid Build Coastguard Worker
66*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @commute_fold_vpcomw(<8 x i16>* %a0, <8 x i16> %a1) {
67*9880d681SAndroid Build Coastguard Worker  ;CHECK-LABEL: commute_fold_vpcomw
68*9880d681SAndroid Build Coastguard Worker  ;CHECK:       vpcomtruew (%rdi), %xmm0, %xmm0
69*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a0
70*9880d681SAndroid Build Coastguard Worker  %2 = call <8 x i16> @llvm.x86.xop.vpcomw(<8 x i16> %1, <8 x i16> %a1, i8 7) ; vpcomtruew
71*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
72*9880d681SAndroid Build Coastguard Worker}
73*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.xop.vpcomw(<8 x i16>, <8 x i16>, i8) nounwind readnone
74*9880d681SAndroid Build Coastguard Worker
75*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @commute_fold_vpmacsdd(<4 x i32>* %a0, <4 x i32> %a1, <4 x i32> %a2) {
76*9880d681SAndroid Build Coastguard Worker  ;CHECK-LABEL: commute_fold_vpmacsdd
77*9880d681SAndroid Build Coastguard Worker  ;CHECK:       vpmacsdd %xmm1, (%rdi), %xmm0, %xmm0
78*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32>* %a0
79*9880d681SAndroid Build Coastguard Worker  %2 = call <4 x i32> @llvm.x86.xop.vpmacsdd(<4 x i32> %1, <4 x i32> %a1, <4 x i32> %a2)
80*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
81*9880d681SAndroid Build Coastguard Worker}
82*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vpmacsdd(<4 x i32>, <4 x i32>, <4 x i32>) nounwind readnone
83*9880d681SAndroid Build Coastguard Worker
84*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @commute_fold_vpmacsdqh(<4 x i32>* %a0, <4 x i32> %a1, <2 x i64> %a2) {
85*9880d681SAndroid Build Coastguard Worker  ;CHECK-LABEL: commute_fold_vpmacsdqh
86*9880d681SAndroid Build Coastguard Worker  ;CHECK:       vpmacsdqh %xmm1, (%rdi), %xmm0, %xmm0
87*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32>* %a0
88*9880d681SAndroid Build Coastguard Worker  %2 = call <2 x i64> @llvm.x86.xop.vpmacsdqh(<4 x i32> %1, <4 x i32> %a1, <2 x i64> %a2)
89*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %2
90*9880d681SAndroid Build Coastguard Worker}
91*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vpmacsdqh(<4 x i32>, <4 x i32>, <2 x i64>) nounwind readnone
92*9880d681SAndroid Build Coastguard Worker
93*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @commute_fold_vpmacsdql(<4 x i32>* %a0, <4 x i32> %a1, <2 x i64> %a2) {
94*9880d681SAndroid Build Coastguard Worker  ;CHECK-LABEL: commute_fold_vpmacsdql
95*9880d681SAndroid Build Coastguard Worker  ;CHECK:       vpmacsdql %xmm1, (%rdi), %xmm0, %xmm0
96*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32>* %a0
97*9880d681SAndroid Build Coastguard Worker  %2 = call <2 x i64> @llvm.x86.xop.vpmacsdql(<4 x i32> %1, <4 x i32> %a1, <2 x i64> %a2)
98*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %2
99*9880d681SAndroid Build Coastguard Worker}
100*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vpmacsdql(<4 x i32>, <4 x i32>, <2 x i64>) nounwind readnone
101*9880d681SAndroid Build Coastguard Worker
102*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @commute_fold_vpmacssdd(<4 x i32>* %a0, <4 x i32> %a1, <4 x i32> %a2) {
103*9880d681SAndroid Build Coastguard Worker  ;CHECK-LABEL: commute_fold_vpmacssdd
104*9880d681SAndroid Build Coastguard Worker  ;CHECK:       vpmacssdd %xmm1, (%rdi), %xmm0, %xmm0
105*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32>* %a0
106*9880d681SAndroid Build Coastguard Worker  %2 = call <4 x i32> @llvm.x86.xop.vpmacssdd(<4 x i32> %1, <4 x i32> %a1, <4 x i32> %a2)
107*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
108*9880d681SAndroid Build Coastguard Worker}
109*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vpmacssdd(<4 x i32>, <4 x i32>, <4 x i32>) nounwind readnone
110*9880d681SAndroid Build Coastguard Worker
111*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @commute_fold_vpmacssdqh(<4 x i32>* %a0, <4 x i32> %a1, <2 x i64> %a2) {
112*9880d681SAndroid Build Coastguard Worker  ;CHECK-LABEL: commute_fold_vpmacssdqh
113*9880d681SAndroid Build Coastguard Worker  ;CHECK:       vpmacssdqh %xmm1, (%rdi), %xmm0, %xmm0
114*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32>* %a0
115*9880d681SAndroid Build Coastguard Worker  %2 = call <2 x i64> @llvm.x86.xop.vpmacssdqh(<4 x i32> %1, <4 x i32> %a1, <2 x i64> %a2)
116*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %2
117*9880d681SAndroid Build Coastguard Worker}
118*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vpmacssdqh(<4 x i32>, <4 x i32>, <2 x i64>) nounwind readnone
119*9880d681SAndroid Build Coastguard Worker
120*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @commute_fold_vpmacssdql(<4 x i32>* %a0, <4 x i32> %a1, <2 x i64> %a2) {
121*9880d681SAndroid Build Coastguard Worker  ;CHECK-LABEL: commute_fold_vpmacssdql
122*9880d681SAndroid Build Coastguard Worker  ;CHECK:       vpmacssdql %xmm1, (%rdi), %xmm0, %xmm0
123*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32>* %a0
124*9880d681SAndroid Build Coastguard Worker  %2 = call <2 x i64> @llvm.x86.xop.vpmacssdql(<4 x i32> %1, <4 x i32> %a1, <2 x i64> %a2)
125*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %2
126*9880d681SAndroid Build Coastguard Worker}
127*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vpmacssdql(<4 x i32>, <4 x i32>, <2 x i64>) nounwind readnone
128*9880d681SAndroid Build Coastguard Worker
129*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @commute_fold_vpmacsswd(<8 x i16>* %a0, <8 x i16> %a1, <4 x i32> %a2) {
130*9880d681SAndroid Build Coastguard Worker  ;CHECK-LABEL: commute_fold_vpmacsswd
131*9880d681SAndroid Build Coastguard Worker  ;CHECK:       vpmacsswd %xmm1, (%rdi), %xmm0, %xmm0
132*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a0
133*9880d681SAndroid Build Coastguard Worker  %2 = call <4 x i32> @llvm.x86.xop.vpmacsswd(<8 x i16> %1, <8 x i16> %a1, <4 x i32> %a2)
134*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
135*9880d681SAndroid Build Coastguard Worker}
136*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vpmacsswd(<8 x i16>, <8 x i16>, <4 x i32>) nounwind readnone
137*9880d681SAndroid Build Coastguard Worker
138*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @commute_fold_vpmacssww(<8 x i16>* %a0, <8 x i16> %a1, <8 x i16> %a2) {
139*9880d681SAndroid Build Coastguard Worker  ;CHECK-LABEL: commute_fold_vpmacssww
140*9880d681SAndroid Build Coastguard Worker  ;CHECK:       vpmacssww %xmm1, (%rdi), %xmm0, %xmm0
141*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a0
142*9880d681SAndroid Build Coastguard Worker  %2 = call <8 x i16> @llvm.x86.xop.vpmacssww(<8 x i16> %1, <8 x i16> %a1, <8 x i16> %a2)
143*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
144*9880d681SAndroid Build Coastguard Worker}
145*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.xop.vpmacssww(<8 x i16>, <8 x i16>, <8 x i16>) nounwind readnone
146*9880d681SAndroid Build Coastguard Worker
147*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @commute_fold_vpmacswd(<8 x i16>* %a0, <8 x i16> %a1, <4 x i32> %a2) {
148*9880d681SAndroid Build Coastguard Worker  ;CHECK-LABEL: commute_fold_vpmacswd
149*9880d681SAndroid Build Coastguard Worker  ;CHECK:       vpmacswd %xmm1, (%rdi), %xmm0, %xmm0
150*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a0
151*9880d681SAndroid Build Coastguard Worker  %2 = call <4 x i32> @llvm.x86.xop.vpmacswd(<8 x i16> %1, <8 x i16> %a1, <4 x i32> %a2)
152*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
153*9880d681SAndroid Build Coastguard Worker}
154*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vpmacswd(<8 x i16>, <8 x i16>, <4 x i32>) nounwind readnone
155*9880d681SAndroid Build Coastguard Worker
156*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @commute_fold_vpmacsww(<8 x i16>* %a0, <8 x i16> %a1, <8 x i16> %a2) {
157*9880d681SAndroid Build Coastguard Worker  ;CHECK-LABEL: commute_fold_vpmacsww
158*9880d681SAndroid Build Coastguard Worker  ;CHECK:       vpmacsww %xmm1, (%rdi), %xmm0, %xmm0
159*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a0
160*9880d681SAndroid Build Coastguard Worker  %2 = call <8 x i16> @llvm.x86.xop.vpmacsww(<8 x i16> %1, <8 x i16> %a1, <8 x i16> %a2)
161*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
162*9880d681SAndroid Build Coastguard Worker}
163*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.xop.vpmacsww(<8 x i16>, <8 x i16>, <8 x i16>) nounwind readnone
164*9880d681SAndroid Build Coastguard Worker
165*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @commute_fold_vpmadcsswd(<8 x i16>* %a0, <8 x i16> %a1, <4 x i32> %a2) {
166*9880d681SAndroid Build Coastguard Worker  ;CHECK-LABEL: commute_fold_vpmadcsswd
167*9880d681SAndroid Build Coastguard Worker  ;CHECK:       vpmadcsswd %xmm1, (%rdi), %xmm0, %xmm0
168*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a0
169*9880d681SAndroid Build Coastguard Worker  %2 = call <4 x i32> @llvm.x86.xop.vpmadcsswd(<8 x i16> %1, <8 x i16> %a1, <4 x i32> %a2)
170*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
171*9880d681SAndroid Build Coastguard Worker}
172*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vpmadcsswd(<8 x i16>, <8 x i16>, <4 x i32>) nounwind readnone
173*9880d681SAndroid Build Coastguard Worker
174*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @commute_fold_vpmadcswd(<8 x i16>* %a0, <8 x i16> %a1, <4 x i32> %a2) {
175*9880d681SAndroid Build Coastguard Worker  ;CHECK-LABEL: commute_fold_vpmadcswd
176*9880d681SAndroid Build Coastguard Worker  ;CHECK:       vpmadcswd %xmm1, (%rdi), %xmm0, %xmm0
177*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a0
178*9880d681SAndroid Build Coastguard Worker  %2 = call <4 x i32> @llvm.x86.xop.vpmadcswd(<8 x i16> %1, <8 x i16> %a1, <4 x i32> %a2)
179*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
180*9880d681SAndroid Build Coastguard Worker}
181*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vpmadcswd(<8 x i16>, <8 x i16>, <4 x i32>) nounwind readnone
182*9880d681SAndroid Build Coastguard Worker
183*9880d681SAndroid Build Coastguard Worker
184*9880d681SAndroid Build Coastguard Worker
185