Mercurial > hg > CbC > CbC_llvm
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 |