Skip to content

Commit a0a840a

Browse files
committed
[X86][GlobalISel] Precommit tests for fcmov (NFC)
Tests are for #157377
1 parent 110fcb2 commit a0a840a

File tree

2 files changed

+160
-15
lines changed

2 files changed

+160
-15
lines changed

llvm/test/CodeGen/X86/fcmove.ll

Lines changed: 0 additions & 15 deletions
This file was deleted.
Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc < %s -mtriple=i686-linux-gnu -mattr=+cmov -fast-isel -fast-isel-abort=1 | FileCheck %s --check-prefix=X86
3+
; RUN: llc < %s -mtriple=i686-linux-gnu -mattr=+cmov -global-isel -global-isel-abort=2 | FileCheck %s --check-prefix=X86-GISEL
4+
; RUN: llc < %s -mtriple=i686-linux-gnu -mattr=+cmov -fast-isel=0 -global-isel=0 | FileCheck %s --check-prefix=X86
5+
; RUN: llc < %s -mtriple=x86_64-linux-gnu -fast-isel -fast-isel-abort=1 | FileCheck %s --check-prefix=X64
6+
; RUN: llc < %s -mtriple=x86_64-linux-gnu -global-isel -global-isel-abort=2 | FileCheck %s --check-prefix=X64-GISEL
7+
; RUN: llc < %s -mtriple=x86_64-linux-gnu -fast-isel=0 -global-isel=0 | FileCheck %s --check-prefix=X64
8+
9+
; Test that we can generate an fcmove, and also that it passes verification.
10+
11+
define x86_fp80 @cmove_cmp(x86_fp80 %a, x86_fp80 %b, i32 %c) {
12+
; X86-LABEL: cmove_cmp:
13+
; X86: # %bb.0:
14+
; X86-NEXT: fldt {{[0-9]+}}(%esp)
15+
; X86-NEXT: fldt {{[0-9]+}}(%esp)
16+
; X86-NEXT: cmpl $0, {{[0-9]+}}(%esp)
17+
; X86-NEXT: fadd %st(1), %st
18+
; X86-NEXT: fxch %st(1)
19+
; X86-NEXT: fcmove %st(1), %st
20+
; X86-NEXT: fstp %st(1)
21+
; X86-NEXT: retl
22+
;
23+
; X86-GISEL-LABEL: cmove_cmp:
24+
; X86-GISEL: # %bb.0:
25+
; X86-GISEL-NEXT: fldt {{[0-9]+}}(%esp)
26+
; X86-GISEL-NEXT: fldt {{[0-9]+}}(%esp)
27+
; X86-GISEL-NEXT: cmpl $0, {{[0-9]+}}(%esp)
28+
; X86-GISEL-NEXT: fadd %st(1), %st
29+
; X86-GISEL-NEXT: fxch %st(1)
30+
; X86-GISEL-NEXT: fcmove %st(1), %st
31+
; X86-GISEL-NEXT: fstp %st(1)
32+
; X86-GISEL-NEXT: retl
33+
;
34+
; X64-LABEL: cmove_cmp:
35+
; X64: # %bb.0:
36+
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
37+
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
38+
; X64-NEXT: testl %edi, %edi
39+
; X64-NEXT: fadd %st(1), %st
40+
; X64-NEXT: fxch %st(1)
41+
; X64-NEXT: fcmove %st(1), %st
42+
; X64-NEXT: fstp %st(1)
43+
; X64-NEXT: retq
44+
;
45+
; X64-GISEL-LABEL: cmove_cmp:
46+
; X64-GISEL: # %bb.0:
47+
; X64-GISEL-NEXT: fldt {{[0-9]+}}(%rsp)
48+
; X64-GISEL-NEXT: fldt {{[0-9]+}}(%rsp)
49+
; X64-GISEL-NEXT: testl %edi, %edi
50+
; X64-GISEL-NEXT: fadd %st(1), %st
51+
; X64-GISEL-NEXT: fxch %st(1)
52+
; X64-GISEL-NEXT: fcmove %st(1), %st
53+
; X64-GISEL-NEXT: fstp %st(1)
54+
; X64-GISEL-NEXT: retq
55+
%test = icmp eq i32 %c, 0
56+
%add = fadd x86_fp80 %a, %b
57+
%ret = select i1 %test, x86_fp80 %add, x86_fp80 %b
58+
ret x86_fp80 %ret
59+
}
60+
61+
define x86_fp80 @cmove_arg(x86_fp80 %a, x86_fp80 %b, i1 %test) {
62+
; X86-LABEL: cmove_arg:
63+
; X86: # %bb.0:
64+
; X86-NEXT: fldt {{[0-9]+}}(%esp)
65+
; X86-NEXT: fldt {{[0-9]+}}(%esp)
66+
; X86-NEXT: fadd %st(1), %st
67+
; X86-NEXT: testb $1, {{[0-9]+}}(%esp)
68+
; X86-NEXT: fxch %st(1)
69+
; X86-NEXT: fcmovne %st(1), %st
70+
; X86-NEXT: fstp %st(1)
71+
; X86-NEXT: retl
72+
;
73+
; X86-GISEL-LABEL: cmove_arg:
74+
; X86-GISEL: # %bb.0:
75+
; X86-GISEL-NEXT: fldt {{[0-9]+}}(%esp)
76+
; X86-GISEL-NEXT: fldt {{[0-9]+}}(%esp)
77+
; X86-GISEL-NEXT: fadd %st(1), %st
78+
; X86-GISEL-NEXT: testb $1, {{[0-9]+}}(%esp)
79+
; X86-GISEL-NEXT: fxch %st(1)
80+
; X86-GISEL-NEXT: fcmovne %st(1), %st
81+
; X86-GISEL-NEXT: fstp %st(1)
82+
; X86-GISEL-NEXT: retl
83+
;
84+
; X64-LABEL: cmove_arg:
85+
; X64: # %bb.0:
86+
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
87+
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
88+
; X64-NEXT: fadd %st(1), %st
89+
; X64-NEXT: testb $1, %dil
90+
; X64-NEXT: fxch %st(1)
91+
; X64-NEXT: fcmovne %st(1), %st
92+
; X64-NEXT: fstp %st(1)
93+
; X64-NEXT: retq
94+
;
95+
; X64-GISEL-LABEL: cmove_arg:
96+
; X64-GISEL: # %bb.0:
97+
; X64-GISEL-NEXT: fldt {{[0-9]+}}(%rsp)
98+
; X64-GISEL-NEXT: fldt {{[0-9]+}}(%rsp)
99+
; X64-GISEL-NEXT: fadd %st(1), %st
100+
; X64-GISEL-NEXT: testb $1, %dil
101+
; X64-GISEL-NEXT: fxch %st(1)
102+
; X64-GISEL-NEXT: fcmovne %st(1), %st
103+
; X64-GISEL-NEXT: fstp %st(1)
104+
; X64-GISEL-NEXT: retq
105+
%add = fadd x86_fp80 %a, %b
106+
%ret = select i1 %test, x86_fp80 %add, x86_fp80 %b
107+
ret x86_fp80 %ret
108+
}
109+
110+
define x86_fp80 @cmove_load(x86_fp80 %a, x86_fp80 %b, ptr %p) {
111+
; X86-LABEL: cmove_load:
112+
; X86: # %bb.0:
113+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
114+
; X86-NEXT: fldt {{[0-9]+}}(%esp)
115+
; X86-NEXT: fldt {{[0-9]+}}(%esp)
116+
; X86-NEXT: fadd %st(1), %st
117+
; X86-NEXT: cmpb $0, (%eax)
118+
; X86-NEXT: fxch %st(1)
119+
; X86-NEXT: fcmovne %st(1), %st
120+
; X86-NEXT: fstp %st(1)
121+
; X86-NEXT: retl
122+
;
123+
; X86-GISEL-LABEL: cmove_load:
124+
; X86-GISEL: # %bb.0:
125+
; X86-GISEL-NEXT: movl {{[0-9]+}}(%esp), %eax
126+
; X86-GISEL-NEXT: fldt {{[0-9]+}}(%esp)
127+
; X86-GISEL-NEXT: fldt {{[0-9]+}}(%esp)
128+
; X86-GISEL-NEXT: fadd %st(1), %st
129+
; X86-GISEL-NEXT: cmpb $0, (%eax)
130+
; X86-GISEL-NEXT: fxch %st(1)
131+
; X86-GISEL-NEXT: fcmovne %st(1), %st
132+
; X86-GISEL-NEXT: fstp %st(1)
133+
; X86-GISEL-NEXT: retl
134+
;
135+
; X64-LABEL: cmove_load:
136+
; X64: # %bb.0:
137+
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
138+
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
139+
; X64-NEXT: fadd %st(1), %st
140+
; X64-NEXT: cmpb $0, (%rdi)
141+
; X64-NEXT: fxch %st(1)
142+
; X64-NEXT: fcmovne %st(1), %st
143+
; X64-NEXT: fstp %st(1)
144+
; X64-NEXT: retq
145+
;
146+
; X64-GISEL-LABEL: cmove_load:
147+
; X64-GISEL: # %bb.0:
148+
; X64-GISEL-NEXT: fldt {{[0-9]+}}(%rsp)
149+
; X64-GISEL-NEXT: fldt {{[0-9]+}}(%rsp)
150+
; X64-GISEL-NEXT: fadd %st(1), %st
151+
; X64-GISEL-NEXT: cmpb $0, (%rdi)
152+
; X64-GISEL-NEXT: fxch %st(1)
153+
; X64-GISEL-NEXT: fcmovne %st(1), %st
154+
; X64-GISEL-NEXT: fstp %st(1)
155+
; X64-GISEL-NEXT: retq
156+
%test = load i1, ptr %p
157+
%add = fadd x86_fp80 %a, %b
158+
%ret = select i1 %test, x86_fp80 %add, x86_fp80 %b
159+
ret x86_fp80 %ret
160+
}

0 commit comments

Comments
 (0)