Evan Cheng | 99b653c | 2009-12-15 00:41:36 +0000 | [diff] [blame] | 1 | ; RUN: llc < %s -mtriple=x86_64-apple-darwin | FileCheck %s |
Evan Cheng | ad9c0a3 | 2009-12-15 00:53:42 +0000 | [diff] [blame] | 2 | ; rdar://7329206 |
| 3 | |
| 4 | ; Use sbb x, x to materialize carry bit in a GPR. The value is either |
| 5 | ; all 1's or all 0's. |
Evan Cheng | 99b653c | 2009-12-15 00:41:36 +0000 | [diff] [blame] | 6 | |
| 7 | define zeroext i16 @t1(i16 zeroext %x) nounwind readnone ssp { |
| 8 | entry: |
| 9 | ; CHECK: t1: |
| 10 | ; CHECK: seta %al |
| 11 | ; CHECK: movzbl %al, %eax |
| 12 | ; CHECK: shll $5, %eax |
| 13 | %0 = icmp ugt i16 %x, 26 ; <i1> [#uses=1] |
| 14 | %iftmp.1.0 = select i1 %0, i16 32, i16 0 ; <i16> [#uses=1] |
| 15 | ret i16 %iftmp.1.0 |
| 16 | } |
| 17 | |
Evan Cheng | ad9c0a3 | 2009-12-15 00:53:42 +0000 | [diff] [blame] | 18 | define zeroext i16 @t2(i16 zeroext %x) nounwind readnone ssp { |
| 19 | entry: |
| 20 | ; CHECK: t2: |
| 21 | ; CHECK: sbbl %eax, %eax |
| 22 | ; CHECK: andl $32, %eax |
| 23 | %0 = icmp ult i16 %x, 26 ; <i1> [#uses=1] |
| 24 | %iftmp.0.0 = select i1 %0, i16 32, i16 0 ; <i16> [#uses=1] |
| 25 | ret i16 %iftmp.0.0 |
| 26 | } |
| 27 | |
| 28 | define i64 @t3(i64 %x) nounwind readnone ssp { |
| 29 | entry: |
| 30 | ; CHECK: t3: |
| 31 | ; CHECK: sbbq %rax, %rax |
| 32 | ; CHECK: andq $64, %rax |
| 33 | %0 = icmp ult i64 %x, 18 ; <i1> [#uses=1] |
| 34 | %iftmp.2.0 = select i1 %0, i64 64, i64 0 ; <i64> [#uses=1] |
| 35 | ret i64 %iftmp.2.0 |
| 36 | } |