[LLVM][IR] Use splat syntax when printing ConstantExpr based splats. (#116856)
[llvm-project.git] / llvm / test / Transforms / ConstraintElimination / uscmp.ll
blob63ac050f2c3c5e66605dc4ff482a810647b3caa1
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt -passes=constraint-elimination -S %s | FileCheck %s
4 define i8 @scmp_1(i32 %x, i32 %y) {
5 ; CHECK-LABEL: @scmp_1(
6 ; CHECK-NEXT:    [[COND:%.*]] = icmp sgt i32 [[X:%.*]], [[Y:%.*]]
7 ; CHECK-NEXT:    br i1 [[COND]], label [[TRUE:%.*]], label [[FALSE:%.*]]
8 ; CHECK:       true:
9 ; CHECK-NEXT:    ret i8 1
10 ; CHECK:       false:
11 ; CHECK-NEXT:    ret i8 20
13   %cond = icmp sgt i32 %x, %y
14   br i1 %cond, label %true, label %false
15 true:
16   %r = call i8 @llvm.scmp(i32 %x, i32 %y)
17   ret i8 %r
18 false:
19   ret i8 20
22 define i8 @ucmp_1(i32 %x, i32 %y) {
23 ; CHECK-LABEL: @ucmp_1(
24 ; CHECK-NEXT:    [[COND:%.*]] = icmp ult i32 [[X:%.*]], [[Y:%.*]]
25 ; CHECK-NEXT:    br i1 [[COND]], label [[TRUE:%.*]], label [[FALSE:%.*]]
26 ; CHECK:       true:
27 ; CHECK-NEXT:    ret i8 -1
28 ; CHECK:       false:
29 ; CHECK-NEXT:    ret i8 20
31   %cond = icmp ult i32 %x, %y
32   br i1 %cond, label %true, label %false
33 true:
34   %r = call i8 @llvm.ucmp(i32 %x, i32 %y)
35   ret i8 %r
36 false:
37   ret i8 20
40 define i8 @scmp_2(i32 %x, i32 %y) {
41 ; CHECK-LABEL: @scmp_2(
42 ; CHECK-NEXT:    [[COND:%.*]] = icmp sge i32 [[X:%.*]], [[Y:%.*]]
43 ; CHECK-NEXT:    br i1 [[COND]], label [[TRUE:%.*]], label [[FALSE:%.*]]
44 ; CHECK:       true:
45 ; CHECK-NEXT:    ret i8 20
46 ; CHECK:       false:
47 ; CHECK-NEXT:    ret i8 -1
49   %cond = icmp sge i32 %x, %y
50   br i1 %cond, label %true, label %false
51 true:
52   ret i8 20
53 false:
54   %r = call i8 @llvm.scmp(i32 %x, i32 %y)
55   ret i8 %r
58 define i8 @ucmp_2(i32 %x, i32 %y) {
59 ; CHECK-LABEL: @ucmp_2(
60 ; CHECK-NEXT:    [[COND:%.*]] = icmp ule i32 [[X:%.*]], [[Y:%.*]]
61 ; CHECK-NEXT:    br i1 [[COND]], label [[TRUE:%.*]], label [[FALSE:%.*]]
62 ; CHECK:       true:
63 ; CHECK-NEXT:    ret i8 20
64 ; CHECK:       false:
65 ; CHECK-NEXT:    ret i8 1
67   %cond = icmp ule i32 %x, %y
68   br i1 %cond, label %true, label %false
69 true:
70   ret i8 20
71 false:
72   %r = call i8 @llvm.ucmp(i32 %x, i32 %y)
73   ret i8 %r
76 define i8 @scmp_3(i32 %x, i32 %y) {
77 ; CHECK-LABEL: @scmp_3(
78 ; CHECK-NEXT:    [[COND:%.*]] = icmp eq i32 [[X:%.*]], [[Y:%.*]]
79 ; CHECK-NEXT:    br i1 [[COND]], label [[TRUE:%.*]], label [[FALSE:%.*]]
80 ; CHECK:       true:
81 ; CHECK-NEXT:    ret i8 0
82 ; CHECK:       false:
83 ; CHECK-NEXT:    ret i8 20
85   %cond = icmp eq i32 %x, %y
86   br i1 %cond, label %true, label %false
87 true:
88   %r = call i8 @llvm.scmp(i32 %x, i32 %y)
89   ret i8 %r
90 false:
91   ret i8 20
94 define i8 @ucmp_3(i32 %x, i32 %y) {
95 ; CHECK-LABEL: @ucmp_3(
96 ; CHECK-NEXT:    [[COND:%.*]] = icmp eq i32 [[X:%.*]], [[Y:%.*]]
97 ; CHECK-NEXT:    br i1 [[COND]], label [[TRUE:%.*]], label [[FALSE:%.*]]
98 ; CHECK:       true:
99 ; CHECK-NEXT:    ret i8 0
100 ; CHECK:       false:
101 ; CHECK-NEXT:    ret i8 20
103   %cond = icmp eq i32 %x, %y
104   br i1 %cond, label %true, label %false
105 true:
106   %r = call i8 @llvm.ucmp(i32 %x, i32 %y)
107   ret i8 %r
108 false:
109   ret i8 20
112 ; Negative test: signedness mismatch
113 define i8 @scmp_4(i32 %x, i32 %y) {
114 ; CHECK-LABEL: @scmp_4(
115 ; CHECK-NEXT:    [[COND:%.*]] = icmp ugt i32 [[X:%.*]], [[Y:%.*]]
116 ; CHECK-NEXT:    br i1 [[COND]], label [[TRUE:%.*]], label [[FALSE:%.*]]
117 ; CHECK:       true:
118 ; CHECK-NEXT:    ret i8 20
119 ; CHECK:       false:
120 ; CHECK-NEXT:    [[R:%.*]] = call i8 @llvm.scmp.i8.i32(i32 [[X]], i32 [[Y]])
121 ; CHECK-NEXT:    ret i8 [[R]]
123   %cond = icmp ugt i32 %x, %y
124   br i1 %cond, label %true, label %false
125 true:
126   ret i8 20
127 false:
128   %r = call i8 @llvm.scmp(i32 %x, i32 %y)
129   ret i8 %r
132 define i8 @ucmp_4(i32 %x, i32 %y) {
133 ; CHECK-LABEL: @ucmp_4(
134 ; CHECK-NEXT:    [[COND:%.*]] = icmp slt i32 [[X:%.*]], [[Y:%.*]]
135 ; CHECK-NEXT:    br i1 [[COND]], label [[TRUE:%.*]], label [[FALSE:%.*]]
136 ; CHECK:       true:
137 ; CHECK-NEXT:    ret i8 20
138 ; CHECK:       false:
139 ; CHECK-NEXT:    [[R:%.*]] = call i8 @llvm.ucmp.i8.i32(i32 [[X]], i32 [[Y]])
140 ; CHECK-NEXT:    ret i8 [[R]]
142   %cond = icmp slt i32 %x, %y
143   br i1 %cond, label %true, label %false
144 true:
145   ret i8 20
146 false:
147   %r = call i8 @llvm.ucmp(i32 %x, i32 %y)
148   ret i8 %r