1 ; RUN: llc -mtriple=i686-linux-gnu %s -o - | FileCheck %s
4 define i32 @branch_eq(i64 %a, i64 %b) {
6 %cmp = icmp eq i64 %a, %b
7 br i1 %cmp, label %bb1, label %bb2
13 ; CHECK-LABEL: branch_eq:
14 ; CHECK: movl 4(%esp), [[LHSLo:%[a-z]+]]
15 ; CHECK: movl 8(%esp), [[LHSHi:%[a-z]+]]
16 ; CHECK: xorl 16(%esp), [[LHSHi]]
17 ; CHECK: xorl 12(%esp), [[LHSLo]]
18 ; CHECK: orl [[LHSHi]], [[LHSLo]]
19 ; CHECK: jne [[FALSE:.LBB[0-9_]+]]
20 ; CHECK: movl $1, %eax
23 ; CHECK: movl $2, %eax
27 define i32 @branch_slt(i64 %a, i64 %b) {
29 %cmp = icmp slt i64 %a, %b
30 br i1 %cmp, label %bb1, label %bb2
36 ; CHECK-LABEL: branch_slt:
37 ; CHECK: movl 4(%esp), [[LHSLo:%[a-z]+]]
38 ; CHECK: movl 8(%esp), [[LHSHi:%[a-z]+]]
39 ; CHECK: cmpl 12(%esp), [[LHSLo]]
40 ; CHECK: sbbl 16(%esp), [[LHSHi]]
41 ; CHECK: jge [[FALSE:.LBB[0-9_]+]]
42 ; CHECK: movl $1, %eax
45 ; CHECK: movl $2, %eax
49 define i32 @branch_ule(i64 %a, i64 %b) {
51 %cmp = icmp ule i64 %a, %b
52 br i1 %cmp, label %bb1, label %bb2
58 ; CHECK-LABEL: branch_ule:
59 ; CHECK: movl 12(%esp), [[RHSLo:%[a-z]+]]
60 ; CHECK: movl 16(%esp), [[RHSHi:%[a-z]+]]
61 ; CHECK: cmpl 4(%esp), [[RHSLo]]
62 ; CHECK: sbbl 8(%esp), [[RHSHi]]
63 ; CHECK: jb [[FALSE:.LBB[0-9_]+]]
64 ; CHECK: movl $1, %eax
67 ; CHECK: movl $2, %eax
71 define i32 @set_gt(i64 %a, i64 %b) {
73 %cmp = icmp sgt i64 %a, %b
74 %res = select i1 %cmp, i32 1, i32 0
77 ; CHECK-LABEL: set_gt:
78 ; CHECK: movl 12(%esp), [[RHSLo:%[a-z]+]]
79 ; CHECK: movl 16(%esp), [[RHSHi:%[a-z]+]]
80 ; CHECK: cmpl 4(%esp), [[RHSLo]]
81 ; CHECK: sbbl 8(%esp), [[RHSHi]]
86 define i32 @test_wide(i128 %a, i128 %b) {
88 %cmp = icmp slt i128 %a, %b
89 br i1 %cmp, label %bb1, label %bb2
95 ; CHECK-LABEL: test_wide:
96 ; CHECK: cmpl 24(%esp)
97 ; CHECK: sbbl 28(%esp)
98 ; CHECK: sbbl 32(%esp)
99 ; CHECK: sbbl 36(%esp)
100 ; CHECK: jge [[FALSE:.LBB[0-9_]+]]
101 ; CHECK: movl $1, %eax
104 ; CHECK: movl $2, %eax
108 define i32 @test_carry_false(i64 %a, i64 %b) {
110 %x = and i64 %a, -4294967296 ;0xffffffff00000000
111 %y = and i64 %b, -4294967296
112 %cmp = icmp slt i64 %x, %y
113 br i1 %cmp, label %bb1, label %bb2
119 ; The comparison of the low bits will be folded to a CARRY_FALSE node. Make
120 ; sure the code can handle that.
121 ; CHECK-LABEL: carry_false:
122 ; CHECK: movl 8(%esp), [[LHSHi:%[a-z]+]]
123 ; CHECK: cmpl 16(%esp), [[LHSHi]]
124 ; CHECK: jge [[FALSE:.LBB[0-9_]+]]
125 ; CHECK: movl $1, %eax
128 ; CHECK: movl $2, %eax