xref: /llvm-project/llvm/test/CodeGen/X86/tree_way_unsigned_cmp.ll (revision 16ca1fee5e55658a2a2a77b25ab39225b5566d97)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=x86_64-unknown | FileCheck %s
3
4; PR19758
5
6define i32 @unsigned_tree_way_cmp_i32(i32 %a, i32 %b) {
7; CHECK-LABEL: unsigned_tree_way_cmp_i32:
8; CHECK:       # %bb.0:
9; CHECK-NEXT:    xorl %ecx, %ecx
10; CHECK-NEXT:    cmpl %esi, %edi
11; CHECK-NEXT:    seta %cl
12; CHECK-NEXT:    movl $-1, %eax
13; CHECK-NEXT:    cmovael %ecx, %eax
14; CHECK-NEXT:    retq
15  %c = icmp ult i32 %a, %b
16  %d = icmp ugt i32 %a, %b
17  %z = zext i1 %d to i32
18  %res = select i1 %c, i32 -1, i32 %z
19  ret i32 %res
20}
21
22define i32 @unsigned_tree_way_cmp_i64(i64 %a, i64 %b) {
23; CHECK-LABEL: unsigned_tree_way_cmp_i64:
24; CHECK:       # %bb.0:
25; CHECK-NEXT:    xorl %ecx, %ecx
26; CHECK-NEXT:    cmpq %rsi, %rdi
27; CHECK-NEXT:    seta %cl
28; CHECK-NEXT:    movl $-1, %eax
29; CHECK-NEXT:    cmovael %ecx, %eax
30; CHECK-NEXT:    retq
31  %c = icmp ult i64 %a, %b
32  %d = icmp ugt i64 %a, %b
33  %z = zext i1 %d to i32
34  %res = select i1 %c, i32 -1, i32 %z
35  ret i32 %res
36}
37
38define i32 @signed_tree_way_cmp(i32 %a, i32 %b) {
39; CHECK-LABEL: signed_tree_way_cmp:
40; CHECK:       # %bb.0:
41; CHECK-NEXT:    xorl %ecx, %ecx
42; CHECK-NEXT:    cmpl %esi, %edi
43; CHECK-NEXT:    setg %cl
44; CHECK-NEXT:    movl $-1, %eax
45; CHECK-NEXT:    cmovgel %ecx, %eax
46; CHECK-NEXT:    retq
47  %c = icmp slt i32 %a, %b
48  %d = icmp sgt i32 %a, %b
49  %z = zext i1 %d to i32
50  %res = select i1 %c, i32 -1, i32 %z
51  ret i32 %res
52}
53
54define i32 @signed_tree_way_cmp_i64(i64 %a, i64 %b) {
55; CHECK-LABEL: signed_tree_way_cmp_i64:
56; CHECK:       # %bb.0:
57; CHECK-NEXT:    xorl %ecx, %ecx
58; CHECK-NEXT:    cmpq %rsi, %rdi
59; CHECK-NEXT:    setg %cl
60; CHECK-NEXT:    movl $-1, %eax
61; CHECK-NEXT:    cmovgel %ecx, %eax
62; CHECK-NEXT:    retq
63  %c = icmp slt i64 %a, %b
64  %d = icmp sgt i64 %a, %b
65  %z = zext i1 %d to i32
66  %res = select i1 %c, i32 -1, i32 %z
67  ret i32 %res
68}
69