11; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
22; 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
3+ ; RUN: llc < %s -mtriple=i686-linux-gnu -mattr=+cmov -global-isel -global-isel-abort=1 | FileCheck %s --check-prefix=X86-GISEL
44; RUN: llc < %s -mtriple=i686-linux-gnu -mattr=+cmov -fast-isel=0 -global-isel=0 | FileCheck %s --check-prefix=X86
55; 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
6+ ; RUN: llc < %s -mtriple=x86_64-linux-gnu -global-isel -global-isel-abort=1 | FileCheck %s --check-prefix=X64-GISEL
77; RUN: llc < %s -mtriple=x86_64-linux-gnu -fast-isel=0 -global-isel=0 | FileCheck %s --check-prefix=X64
88
99; Test that we can generate an fcmove, and also that it passes verification.
@@ -24,8 +24,12 @@ define x86_fp80 @cmove_cmp(x86_fp80 %a, x86_fp80 %b, i32 %c) {
2424; X86-GISEL: # %bb.0:
2525; X86-GISEL-NEXT: fldt {{[0-9]+}}(%esp)
2626; X86-GISEL-NEXT: fldt {{[0-9]+}}(%esp)
27+ ; X86-GISEL-NEXT: xorl %eax, %eax
2728; X86-GISEL-NEXT: cmpl $0, {{[0-9]+}}(%esp)
28- ; X86-GISEL-NEXT: fadd %st(1), %st
29+ ; X86-GISEL-NEXT: sete %al
30+ ; X86-GISEL-NEXT: fadd %st, %st(1)
31+ ; X86-GISEL-NEXT: andl $1, %eax
32+ ; X86-GISEL-NEXT: testl %eax, %eax
2933; X86-GISEL-NEXT: fxch %st(1)
3034; X86-GISEL-NEXT: fcmove %st(1), %st
3135; X86-GISEL-NEXT: fstp %st(1)
@@ -46,8 +50,12 @@ define x86_fp80 @cmove_cmp(x86_fp80 %a, x86_fp80 %b, i32 %c) {
4650; X64-GISEL: # %bb.0:
4751; X64-GISEL-NEXT: fldt {{[0-9]+}}(%rsp)
4852; X64-GISEL-NEXT: fldt {{[0-9]+}}(%rsp)
49- ; X64-GISEL-NEXT: testl %edi, %edi
50- ; X64-GISEL-NEXT: fadd %st(1), %st
53+ ; X64-GISEL-NEXT: xorl %eax, %eax
54+ ; X64-GISEL-NEXT: cmpl $0, %edi
55+ ; X64-GISEL-NEXT: sete %al
56+ ; X64-GISEL-NEXT: fadd %st, %st(1)
57+ ; X64-GISEL-NEXT: andl $1, %eax
58+ ; X64-GISEL-NEXT: testl %eax, %eax
5159; X64-GISEL-NEXT: fxch %st(1)
5260; X64-GISEL-NEXT: fcmove %st(1), %st
5361; X64-GISEL-NEXT: fstp %st(1)
@@ -74,10 +82,12 @@ define x86_fp80 @cmove_arg(x86_fp80 %a, x86_fp80 %b, i1 %test) {
7482; X86-GISEL: # %bb.0:
7583; X86-GISEL-NEXT: fldt {{[0-9]+}}(%esp)
7684; X86-GISEL-NEXT: fldt {{[0-9]+}}(%esp)
77- ; X86-GISEL-NEXT: fadd %st(1), %st
78- ; X86-GISEL-NEXT: testb $1, {{[0-9]+}}(%esp)
85+ ; X86-GISEL-NEXT: fadd %st, %st(1)
86+ ; X86-GISEL-NEXT: movl $1, %eax
87+ ; X86-GISEL-NEXT: andl {{[0-9]+}}(%esp), %eax
88+ ; X86-GISEL-NEXT: testl %eax, %eax
7989; X86-GISEL-NEXT: fxch %st(1)
80- ; X86-GISEL-NEXT: fcmovne %st(1), %st
90+ ; X86-GISEL-NEXT: fcmove %st(1), %st
8191; X86-GISEL-NEXT: fstp %st(1)
8292; X86-GISEL-NEXT: retl
8393;
@@ -96,10 +106,11 @@ define x86_fp80 @cmove_arg(x86_fp80 %a, x86_fp80 %b, i1 %test) {
96106; X64-GISEL: # %bb.0:
97107; X64-GISEL-NEXT: fldt {{[0-9]+}}(%rsp)
98108; X64-GISEL-NEXT: fldt {{[0-9]+}}(%rsp)
99- ; X64-GISEL-NEXT: fadd %st(1), %st
100- ; X64-GISEL-NEXT: testb $1, %dil
109+ ; X64-GISEL-NEXT: fadd %st, %st(1)
110+ ; X64-GISEL-NEXT: andl $1, %edi
111+ ; X64-GISEL-NEXT: testl %edi, %edi
101112; X64-GISEL-NEXT: fxch %st(1)
102- ; X64-GISEL-NEXT: fcmovne %st(1), %st
113+ ; X64-GISEL-NEXT: fcmove %st(1), %st
103114; X64-GISEL-NEXT: fstp %st(1)
104115; X64-GISEL-NEXT: retq
105116 %add = fadd x86_fp80 %a , %b
@@ -122,13 +133,15 @@ define x86_fp80 @cmove_load(x86_fp80 %a, x86_fp80 %b, ptr %p) {
122133;
123134; X86-GISEL-LABEL: cmove_load:
124135; X86-GISEL: # %bb.0:
125- ; X86-GISEL-NEXT: movl {{[0-9]+}}(%esp), %eax
126136; X86-GISEL-NEXT: fldt {{[0-9]+}}(%esp)
127137; X86-GISEL-NEXT: fldt {{[0-9]+}}(%esp)
128- ; X86-GISEL-NEXT: fadd %st(1), %st
129- ; X86-GISEL-NEXT: cmpb $0, (%eax)
138+ ; X86-GISEL-NEXT: movl {{[0-9]+}}(%esp), %eax
139+ ; X86-GISEL-NEXT: fadd %st, %st(1)
140+ ; X86-GISEL-NEXT: movzbl (%eax), %eax
141+ ; X86-GISEL-NEXT: andl $1, %eax
142+ ; X86-GISEL-NEXT: testl %eax, %eax
130143; X86-GISEL-NEXT: fxch %st(1)
131- ; X86-GISEL-NEXT: fcmovne %st(1), %st
144+ ; X86-GISEL-NEXT: fcmove %st(1), %st
132145; X86-GISEL-NEXT: fstp %st(1)
133146; X86-GISEL-NEXT: retl
134147;
@@ -147,10 +160,12 @@ define x86_fp80 @cmove_load(x86_fp80 %a, x86_fp80 %b, ptr %p) {
147160; X64-GISEL: # %bb.0:
148161; X64-GISEL-NEXT: fldt {{[0-9]+}}(%rsp)
149162; X64-GISEL-NEXT: fldt {{[0-9]+}}(%rsp)
150- ; X64-GISEL-NEXT: fadd %st(1), %st
151- ; X64-GISEL-NEXT: cmpb $0, (%rdi)
163+ ; X64-GISEL-NEXT: fadd %st, %st(1)
164+ ; X64-GISEL-NEXT: movzbl (%rdi), %eax
165+ ; X64-GISEL-NEXT: andl $1, %eax
166+ ; X64-GISEL-NEXT: testl %eax, %eax
152167; X64-GISEL-NEXT: fxch %st(1)
153- ; X64-GISEL-NEXT: fcmovne %st(1), %st
168+ ; X64-GISEL-NEXT: fcmove %st(1), %st
154169; X64-GISEL-NEXT: fstp %st(1)
155170; X64-GISEL-NEXT: retq
156171 %test = load i1 , ptr %p
0 commit comments