comparison test/CodeGen/X86/fast-isel-select-cmov2.ll @ 95:afa8332a0e37 LLVM3.8

LLVM 3.8
author Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
date Tue, 13 Oct 2015 17:48:58 +0900
parents 54457678186b
children 3a76565eade5
comparison
equal deleted inserted replaced
84:f3e34b893a5f 95:afa8332a0e37
1 ; RUN: llc < %s -mtriple=x86_64-apple-darwin10 | FileCheck %s 1 ; RUN: llc < %s -mtriple=x86_64-apple-darwin10 | FileCheck %s --check-prefix=CHECK --check-prefix=SDAG
2 ; RUN: llc < %s -mtriple=x86_64-apple-darwin10 -fast-isel -fast-isel-abort | FileCheck %s 2 ; RUN: llc < %s -mtriple=x86_64-apple-darwin10 -fast-isel -fast-isel-abort=1 | FileCheck %s --check-prefix=CHECK --check-prefix=FAST
3 3
4 ; Test all the cmp predicates that can feed an integer conditional move. 4 ; Test all the cmp predicates that can feed an integer conditional move.
5 5
6 define i64 @select_fcmp_false_cmov(double %a, double %b, i64 %c, i64 %d) { 6 define i64 @select_fcmp_false_cmov(double %a, double %b, i64 %c, i64 %d) {
7 ; CHECK-LABEL: select_fcmp_false_cmov 7 ; CHECK-LABEL: select_fcmp_false_cmov
13 } 13 }
14 14
15 define i64 @select_fcmp_oeq_cmov(double %a, double %b, i64 %c, i64 %d) { 15 define i64 @select_fcmp_oeq_cmov(double %a, double %b, i64 %c, i64 %d) {
16 ; CHECK-LABEL: select_fcmp_oeq_cmov 16 ; CHECK-LABEL: select_fcmp_oeq_cmov
17 ; CHECK: ucomisd %xmm1, %xmm0 17 ; CHECK: ucomisd %xmm1, %xmm0
18 ; CHECK-NEXT: setnp %al 18 ; SDAG-NEXT: cmovneq %rsi, %rdi
19 ; CHECK-NEXT: sete %cl 19 ; SDAG-NEXT: cmovpq %rsi, %rdi
20 ; CHECK-NEXT: testb %al, %cl 20 ; SDAG-NEXT: movq %rdi, %rax
21 ; CHECK-NEXT: cmoveq %rsi, %rdi 21 ; FAST-NEXT: setnp %al
22 ; FAST-NEXT: sete %cl
23 ; FAST-NEXT: testb %al, %cl
24 ; FAST-NEXT: cmoveq %rsi, %rdi
22 %1 = fcmp oeq double %a, %b 25 %1 = fcmp oeq double %a, %b
23 %2 = select i1 %1, i64 %c, i64 %d 26 %2 = select i1 %1, i64 %c, i64 %d
24 ret i64 %2 27 ret i64 %2
25 } 28 }
26 29
133 } 136 }
134 137
135 define i64 @select_fcmp_une_cmov(double %a, double %b, i64 %c, i64 %d) { 138 define i64 @select_fcmp_une_cmov(double %a, double %b, i64 %c, i64 %d) {
136 ; CHECK-LABEL: select_fcmp_une_cmov 139 ; CHECK-LABEL: select_fcmp_une_cmov
137 ; CHECK: ucomisd %xmm1, %xmm0 140 ; CHECK: ucomisd %xmm1, %xmm0
138 ; CHECK-NEXT: setp %al 141 ; SDAG-NEXT: cmovneq %rdi, %rsi
139 ; CHECK-NEXT: setne %cl 142 ; SDAG-NEXT: cmovpq %rdi, %rsi
140 ; CHECK-NEXT: orb %al, %cl 143 ; SDAG-NEXT: movq %rsi, %rax
141 ; CHECK-NEXT: cmoveq %rsi, %rdi 144 ; FAST-NEXT: setp %al
145 ; FAST-NEXT: setne %cl
146 ; FAST-NEXT: orb %al, %cl
147 ; FAST-NEXT: cmoveq %rsi, %rdi
142 %1 = fcmp une double %a, %b 148 %1 = fcmp une double %a, %b
143 %2 = select i1 %1, i64 %c, i64 %d 149 %2 = select i1 %1, i64 %c, i64 %d
144 ret i64 %2 150 ret i64 %2
145 } 151 }
146 152