Skip to content

Commit 6d5f26c

Browse files
author
mattarde
committed
update review comments for sh,sd and format
1 parent 06ab8e7 commit 6d5f26c

File tree

4 files changed

+165
-41
lines changed

4 files changed

+165
-41
lines changed

llvm/lib/Target/X86/X86ISelLowering.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49521,8 +49521,8 @@ static SDValue combineCompareEqual(SDNode *N, SelectionDAG &DAG,
4952149521
// See X86ATTInstPrinter.cpp:printSSECC().
4952249522
unsigned x86cc = (cc0 == X86::COND_E) ? 0 : 4;
4952349523

49524-
// VCOMXSS simplifies conditional code sequence into single setcc node.
49525-
// Earlier until COMI, it required upto 2 SETCC's to test CC.
49524+
// VCOMXSS simplifies conditional code sequence into single setcc
49525+
// node. Earlier until COMI, it required upto 2 SETCC's to test CC.
4952649526
if (Subtarget.hasAVX10_2()) {
4952749527
return getSETCC(
4952849528
((cc0 == X86::COND_E) ? X86::COND_E : X86::COND_NE),

llvm/lib/Target/X86/X86InstrAVX10.td

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1583,6 +1583,12 @@ multiclass avx10_com_ef_int<bits<8> Opc, X86VectorVTInfo _, SDNode OpNode,
15831583

15841584
let Defs = [EFLAGS], Uses = [MXCSR], Predicates = [HasAVX10_2] in {
15851585

1586+
defm VUCOMXSDZ : avx10_com_ef<0x2e, FR64X, f64, X86ucomi512,
1587+
"vucomxsd", f64mem, loadf64, SSEPackedSingle>,
1588+
TB, XS, VEX_LIG, REX_W, EVEX_CD8<64, CD8VT1>;
1589+
defm VUCOMXSHZ : avx10_com_ef<0x2e, FR16X, f16, X86ucomi512,
1590+
"vucomxsh", f16mem, loadf16, SSEPackedSingle>,
1591+
T_MAP5, XD, EVEX_CD8<16, CD8VT1>;
15861592
defm VUCOMXSSZ : avx10_com_ef<0x2e, FR32X, f32, X86ucomi512,
15871593
"vucomxss", f32mem, loadf32, SSEPackedSingle>,
15881594
TB, XD, VEX_LIG, EVEX_CD8<32, CD8VT1>;

llvm/test/CodeGen/X86/avx10_2-cmp.ll

Lines changed: 155 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -2,66 +2,127 @@
22
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx10.2-512 | FileCheck %s --check-prefix=X64
33
; RUN: llc < %s -mtriple=i386-unknown-unknown -mattr=+avx10.2-512 | FileCheck %s --check-prefix=X86
44

5-
define i1 @oeq(float %x, float %y) {
6-
; X64-LABEL: oeq:
5+
define i1 @hoeq(half %x, half %y) {
6+
; X64-LABEL: hoeq:
77
; X64: # %bb.0:
8-
; X64-NEXT: vucomxss %xmm1, %xmm0
8+
; X64-NEXT: vucomxsh %xmm1, %xmm0
99
; X64-NEXT: sete %al
1010
; X64-NEXT: retq
1111
;
12-
; X86-LABEL: oeq:
12+
; X86-LABEL: hoeq:
1313
; X86: # %bb.0:
14-
; X86-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
15-
; X86-NEXT: vucomxss {{[0-9]+}}(%esp), %xmm0
14+
; X86-NEXT: vmovsh {{.*#+}} xmm0 = mem[0],zero,zero,zero,zero,zero,zero,zero
15+
; X86-NEXT: vucomxsh {{[0-9]+}}(%esp), %xmm0
1616
; X86-NEXT: sete %al
1717
; X86-NEXT: retl
18-
%1 = fcmp oeq float %x, %y
18+
%1 = fcmp oeq half %x, %y
1919
ret i1 %1
2020
}
2121

22-
define i1 @une(float %x, float %y) {
23-
; X64-LABEL: une:
22+
define i1 @hune(half %x, half %y) {
23+
; X64-LABEL: hune:
2424
; X64: # %bb.0:
25-
; X64-NEXT: vucomxss %xmm1, %xmm0
25+
; X64-NEXT: vucomxsh %xmm1, %xmm0
2626
; X64-NEXT: setne %al
2727
; X64-NEXT: retq
2828
;
29-
; X86-LABEL: une:
29+
; X86-LABEL: hune:
30+
; X86: # %bb.0:
31+
; X86-NEXT: vmovsh {{.*#+}} xmm0 = mem[0],zero,zero,zero,zero,zero,zero,zero
32+
; X86-NEXT: vucomxsh {{[0-9]+}}(%esp), %xmm0
33+
; X86-NEXT: setne %al
34+
; X86-NEXT: retl
35+
%1 = fcmp une half %x, %y
36+
ret i1 %1
37+
}
38+
39+
define i1 @hoeq_mem(ptr %xp, ptr %yp) {
40+
; X64-LABEL: hoeq_mem:
41+
; X64: # %bb.0:
42+
; X64-NEXT: vmovsh {{.*#+}} xmm0 = mem[0],zero,zero,zero,zero,zero,zero,zero
43+
; X64-NEXT: vucomxsh (%rsi), %xmm0
44+
; X64-NEXT: sete %al
45+
; X64-NEXT: retq
46+
;
47+
; X86-LABEL: hoeq_mem:
48+
; X86: # %bb.0:
49+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
50+
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
51+
; X86-NEXT: vmovsh {{.*#+}} xmm0 = mem[0],zero,zero,zero,zero,zero,zero,zero
52+
; X86-NEXT: vucomxsh (%eax), %xmm0
53+
; X86-NEXT: sete %al
54+
; X86-NEXT: retl
55+
%x = load half, ptr %xp
56+
%y = load half, ptr %yp
57+
%1 = fcmp oeq half %x, %y
58+
ret i1 %1
59+
}
60+
61+
define i1 @hune_mem(ptr %xp, ptr %yp) {
62+
; X64-LABEL: hune_mem:
63+
; X64: # %bb.0:
64+
; X64-NEXT: vmovsh {{.*#+}} xmm0 = mem[0],zero,zero,zero,zero,zero,zero,zero
65+
; X64-NEXT: vucomxsh (%rsi), %xmm0
66+
; X64-NEXT: setne %al
67+
; X64-NEXT: retq
68+
;
69+
; X86-LABEL: hune_mem:
70+
; X86: # %bb.0:
71+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
72+
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
73+
; X86-NEXT: vmovsh {{.*#+}} xmm0 = mem[0],zero,zero,zero,zero,zero,zero,zero
74+
; X86-NEXT: vucomxsh (%eax), %xmm0
75+
; X86-NEXT: setne %al
76+
; X86-NEXT: retl
77+
%x = load half, ptr %xp
78+
%y = load half, ptr %yp
79+
%1 = fcmp une half %x, %y
80+
ret i1 %1
81+
}
82+
83+
define i1 @foeq(float %x, float %y) {
84+
; X64-LABEL: foeq:
85+
; X64: # %bb.0:
86+
; X64-NEXT: vucomxss %xmm1, %xmm0
87+
; X64-NEXT: sete %al
88+
; X64-NEXT: retq
89+
;
90+
; X86-LABEL: foeq:
3091
; X86: # %bb.0:
3192
; X86-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
3293
; X86-NEXT: vucomxss {{[0-9]+}}(%esp), %xmm0
33-
; X86-NEXT: setne %al
94+
; X86-NEXT: sete %al
3495
; X86-NEXT: retl
35-
%1 = fcmp une float %x, %y
96+
%1 = fcmp oeq float %x, %y
3697
ret i1 %1
3798
}
3899

39-
define i1 @ogt(float %x, float %y) {
40-
; X64-LABEL: ogt:
100+
define i1 @fune(float %x, float %y) {
101+
; X64-LABEL: fune:
41102
; X64: # %bb.0:
42-
; X64-NEXT: vucomiss %xmm1, %xmm0
43-
; X64-NEXT: seta %al
103+
; X64-NEXT: vucomxss %xmm1, %xmm0
104+
; X64-NEXT: setne %al
44105
; X64-NEXT: retq
45106
;
46-
; X86-LABEL: ogt:
107+
; X86-LABEL: fune:
47108
; X86: # %bb.0:
48109
; X86-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
49-
; X86-NEXT: vucomiss {{[0-9]+}}(%esp), %xmm0
50-
; X86-NEXT: seta %al
110+
; X86-NEXT: vucomxss {{[0-9]+}}(%esp), %xmm0
111+
; X86-NEXT: setne %al
51112
; X86-NEXT: retl
52-
%1 = fcmp ogt float %x, %y
113+
%1 = fcmp une float %x, %y
53114
ret i1 %1
54115
}
55116

56-
define i1 @oeq_mem(ptr %xp, ptr %yp) {
57-
; X64-LABEL: oeq_mem:
117+
define i1 @foeq_mem(ptr %xp, ptr %yp) {
118+
; X64-LABEL: foeq_mem:
58119
; X64: # %bb.0:
59120
; X64-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
60121
; X64-NEXT: vucomxss (%rsi), %xmm0
61122
; X64-NEXT: sete %al
62123
; X64-NEXT: retq
63124
;
64-
; X86-LABEL: oeq_mem:
125+
; X86-LABEL: foeq_mem:
65126
; X86: # %bb.0:
66127
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
67128
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
@@ -75,15 +136,15 @@ define i1 @oeq_mem(ptr %xp, ptr %yp) {
75136
ret i1 %1
76137
}
77138

78-
define i1 @une_mem(ptr %xp, ptr %yp) {
79-
; X64-LABEL: une_mem:
139+
define i1 @fune_mem(ptr %xp, ptr %yp) {
140+
; X64-LABEL: fune_mem:
80141
; X64: # %bb.0:
81142
; X64-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
82143
; X64-NEXT: vucomxss (%rsi), %xmm0
83144
; X64-NEXT: setne %al
84145
; X64-NEXT: retq
85146
;
86-
; X86-LABEL: une_mem:
147+
; X86-LABEL: fune_mem:
87148
; X86: # %bb.0:
88149
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
89150
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
@@ -97,25 +158,80 @@ define i1 @une_mem(ptr %xp, ptr %yp) {
97158
ret i1 %1
98159
}
99160

161+
define i1 @doeq(double %x, double %y) {
162+
; X64-LABEL: doeq:
163+
; X64: # %bb.0:
164+
; X64-NEXT: vucomxsd %xmm1, %xmm0
165+
; X64-NEXT: sete %al
166+
; X64-NEXT: retq
167+
;
168+
; X86-LABEL: doeq:
169+
; X86: # %bb.0:
170+
; X86-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero
171+
; X86-NEXT: vucomxsd {{[0-9]+}}(%esp), %xmm0
172+
; X86-NEXT: sete %al
173+
; X86-NEXT: retl
174+
%1 = fcmp oeq double %x, %y
175+
ret i1 %1
176+
}
100177

101-
define i1 @ogt_mem(ptr %xp, ptr %yp) {
102-
; X64-LABEL: ogt_mem:
178+
define i1 @dune(double %x, double %y) {
179+
; X64-LABEL: dune:
103180
; X64: # %bb.0:
104-
; X64-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
105-
; X64-NEXT: vucomiss (%rsi), %xmm0
106-
; X64-NEXT: seta %al
181+
; X64-NEXT: vucomxsd %xmm1, %xmm0
182+
; X64-NEXT: setne %al
107183
; X64-NEXT: retq
108184
;
109-
; X86-LABEL: ogt_mem:
185+
; X86-LABEL: dune:
186+
; X86: # %bb.0:
187+
; X86-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero
188+
; X86-NEXT: vucomxsd {{[0-9]+}}(%esp), %xmm0
189+
; X86-NEXT: setne %al
190+
; X86-NEXT: retl
191+
%1 = fcmp une double %x, %y
192+
ret i1 %1
193+
}
194+
195+
define i1 @doeq_mem(ptr %xp, ptr %yp) {
196+
; X64-LABEL: doeq_mem:
197+
; X64: # %bb.0:
198+
; X64-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero
199+
; X64-NEXT: vucomxsd (%rsi), %xmm0
200+
; X64-NEXT: sete %al
201+
; X64-NEXT: retq
202+
;
203+
; X86-LABEL: doeq_mem:
110204
; X86: # %bb.0:
111205
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
112206
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
113-
; X86-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
114-
; X86-NEXT: vucomiss (%eax), %xmm0
115-
; X86-NEXT: seta %al
207+
; X86-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero
208+
; X86-NEXT: vucomxsd (%eax), %xmm0
209+
; X86-NEXT: sete %al
116210
; X86-NEXT: retl
117-
%x = load float, ptr %xp
118-
%y = load float, ptr %yp
119-
%1 = fcmp ogt float %x, %y
211+
%x = load double, ptr %xp
212+
%y = load double, ptr %yp
213+
%1 = fcmp oeq double %x, %y
214+
ret i1 %1
215+
}
216+
217+
define i1 @dune_mem(ptr %xp, ptr %yp) {
218+
; X64-LABEL: dune_mem:
219+
; X64: # %bb.0:
220+
; X64-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero
221+
; X64-NEXT: vucomxsd (%rsi), %xmm0
222+
; X64-NEXT: setne %al
223+
; X64-NEXT: retq
224+
;
225+
; X86-LABEL: dune_mem:
226+
; X86: # %bb.0:
227+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
228+
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
229+
; X86-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero
230+
; X86-NEXT: vucomxsd (%eax), %xmm0
231+
; X86-NEXT: setne %al
232+
; X86-NEXT: retl
233+
%x = load double, ptr %xp
234+
%y = load double, ptr %yp
235+
%1 = fcmp une double %x, %y
120236
ret i1 %1
121237
}

llvm/test/TableGen/x86-fold-tables.inc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1959,7 +1959,9 @@ static const X86FoldTableEntry Table1[] = {
19591959
{X86::VUCOMISSZrr_Int, X86::VUCOMISSZrm_Int, TB_NO_REVERSE},
19601960
{X86::VUCOMISSrr, X86::VUCOMISSrm, 0},
19611961
{X86::VUCOMISSrr_Int, X86::VUCOMISSrm_Int, TB_NO_REVERSE},
1962+
{X86::VUCOMXSDZrr, X86::VUCOMXSDZrm, 0},
19621963
{X86::VUCOMXSDZrr_Int, X86::VUCOMXSDZrm_Int, TB_NO_REVERSE},
1964+
{X86::VUCOMXSHZrr, X86::VUCOMXSHZrm, 0},
19631965
{X86::VUCOMXSHZrr_Int, X86::VUCOMXSHZrm_Int, TB_NO_REVERSE},
19641966
{X86::VUCOMXSSZrr, X86::VUCOMXSSZrm, 0},
19651967
{X86::VUCOMXSSZrr_Int, X86::VUCOMXSSZrm_Int, TB_NO_REVERSE},

0 commit comments

Comments
 (0)