1 ; NOTE: Assertions have been autogenerated by update_test_checks.py 2 ; RUN: opt < %s -instsimplify -S | FileCheck %s 3 4 define i1 @max1(i32 %x, i32 %y) { 5 ; CHECK-LABEL: @max1( 6 ; CHECK: ret i1 false 7 ; 8 %c = icmp sgt i32 %x, %y 9 %m = select i1 %c, i32 %x, i32 %y 10 %r = icmp slt i32 %m, %x 11 ret i1 %r 12 } 13 14 define i1 @max2(i32 %x, i32 %y) { 15 ; CHECK-LABEL: @max2( 16 ; CHECK: ret i1 true 17 ; 18 %c = icmp sge i32 %x, %y 19 %m = select i1 %c, i32 %x, i32 %y 20 %r = icmp sge i32 %m, %x 21 ret i1 %r 22 } 23 24 define i1 @max3(i32 %x, i32 %y) { 25 ; CHECK-LABEL: @max3( 26 ; CHECK: ret i1 false 27 ; 28 %c = icmp ugt i32 %x, %y 29 %m = select i1 %c, i32 %x, i32 %y 30 %r = icmp ult i32 %m, %x 31 ret i1 %r 32 } 33 34 define i1 @max4(i32 %x, i32 %y) { 35 ; CHECK-LABEL: @max4( 36 ; CHECK: ret i1 true 37 ; 38 %c = icmp uge i32 %x, %y 39 %m = select i1 %c, i32 %x, i32 %y 40 %r = icmp uge i32 %m, %x 41 ret i1 %r 42 } 43 44 define i1 @max5(i32 %x, i32 %y) { 45 ; CHECK-LABEL: @max5( 46 ; CHECK: ret i1 false 47 ; 48 %c = icmp sgt i32 %x, %y 49 %m = select i1 %c, i32 %x, i32 %y 50 %r = icmp sgt i32 %x, %m 51 ret i1 %r 52 } 53 54 define i1 @max6(i32 %x, i32 %y) { 55 ; CHECK-LABEL: @max6( 56 ; CHECK: ret i1 true 57 ; 58 %c = icmp sge i32 %x, %y 59 %m = select i1 %c, i32 %x, i32 %y 60 %r = icmp sle i32 %x, %m 61 ret i1 %r 62 } 63 64 define i1 @max7(i32 %x, i32 %y) { 65 ; CHECK-LABEL: @max7( 66 ; CHECK: ret i1 false 67 ; 68 %c = icmp ugt i32 %x, %y 69 %m = select i1 %c, i32 %x, i32 %y 70 %r = icmp ugt i32 %x, %m 71 ret i1 %r 72 } 73 74 define i1 @max8(i32 %x, i32 %y) { 75 ; CHECK-LABEL: @max8( 76 ; CHECK: ret i1 true 77 ; 78 %c = icmp uge i32 %x, %y 79 %m = select i1 %c, i32 %x, i32 %y 80 %r = icmp ule i32 %x, %m 81 ret i1 %r 82 } 83 84 define i1 @min1(i32 %x, i32 %y) { 85 ; CHECK-LABEL: @min1( 86 ; CHECK: ret i1 false 87 ; 88 %c = icmp sgt i32 %x, %y 89 %m = select i1 %c, i32 %y, i32 %x 90 %r = icmp sgt i32 %m, %x 91 ret i1 %r 92 } 93 94 define i1 @min2(i32 %x, i32 %y) { 95 ; CHECK-LABEL: @min2( 96 ; CHECK: ret i1 true 97 ; 98 %c = icmp sge i32 %x, %y 99 %m = select i1 %c, i32 %y, i32 %x 100 %r = icmp sle i32 %m, %x 101 ret i1 %r 102 } 103 104 define i1 @min3(i32 %x, i32 %y) { 105 ; CHECK-LABEL: @min3( 106 ; CHECK: ret i1 false 107 ; 108 %c = icmp ugt i32 %x, %y 109 %m = select i1 %c, i32 %y, i32 %x 110 %r = icmp ugt i32 %m, %x 111 ret i1 %r 112 } 113 114 define i1 @min4(i32 %x, i32 %y) { 115 ; CHECK-LABEL: @min4( 116 ; CHECK: ret i1 true 117 ; 118 %c = icmp uge i32 %x, %y 119 %m = select i1 %c, i32 %y, i32 %x 120 %r = icmp ule i32 %m, %x 121 ret i1 %r 122 } 123 124 define i1 @min5(i32 %x, i32 %y) { 125 ; CHECK-LABEL: @min5( 126 ; CHECK: ret i1 false 127 ; 128 %c = icmp sgt i32 %x, %y 129 %m = select i1 %c, i32 %y, i32 %x 130 %r = icmp slt i32 %x, %m 131 ret i1 %r 132 } 133 134 define i1 @min6(i32 %x, i32 %y) { 135 ; CHECK-LABEL: @min6( 136 ; CHECK: ret i1 true 137 ; 138 %c = icmp sge i32 %x, %y 139 %m = select i1 %c, i32 %y, i32 %x 140 %r = icmp sge i32 %x, %m 141 ret i1 %r 142 } 143 144 define i1 @min7(i32 %x, i32 %y) { 145 ; CHECK-LABEL: @min7( 146 ; CHECK: ret i1 false 147 ; 148 %c = icmp ugt i32 %x, %y 149 %m = select i1 %c, i32 %y, i32 %x 150 %r = icmp ult i32 %x, %m 151 ret i1 %r 152 } 153 154 define i1 @min8(i32 %x, i32 %y) { 155 ; CHECK-LABEL: @min8( 156 ; CHECK: ret i1 true 157 ; 158 %c = icmp uge i32 %x, %y 159 %m = select i1 %c, i32 %y, i32 %x 160 %r = icmp uge i32 %x, %m 161 ret i1 %r 162 } 163 164 define i1 @maxmin1(i32 %x, i32 %y, i32 %z) { 165 ; CHECK-LABEL: @maxmin1( 166 ; CHECK: ret i1 true 167 ; 168 %c1 = icmp sge i32 %x, %y 169 %max = select i1 %c1, i32 %x, i32 %y 170 %c2 = icmp sge i32 %x, %z 171 %min = select i1 %c2, i32 %z, i32 %x 172 %c = icmp sge i32 %max, %min 173 ret i1 %c 174 } 175 176 define i1 @maxmin2(i32 %x, i32 %y, i32 %z) { 177 ; CHECK-LABEL: @maxmin2( 178 ; CHECK: ret i1 false 179 ; 180 %c1 = icmp sge i32 %x, %y 181 %max = select i1 %c1, i32 %x, i32 %y 182 %c2 = icmp sge i32 %x, %z 183 %min = select i1 %c2, i32 %z, i32 %x 184 %c = icmp sgt i32 %min, %max 185 ret i1 %c 186 } 187 188 define i1 @maxmin3(i32 %x, i32 %y, i32 %z) { 189 ; CHECK-LABEL: @maxmin3( 190 ; CHECK: ret i1 true 191 ; 192 %c1 = icmp sge i32 %x, %y 193 %max = select i1 %c1, i32 %x, i32 %y 194 %c2 = icmp sge i32 %x, %z 195 %min = select i1 %c2, i32 %z, i32 %x 196 %c = icmp sle i32 %min, %max 197 ret i1 %c 198 } 199 200 define i1 @maxmin4(i32 %x, i32 %y, i32 %z) { 201 ; CHECK-LABEL: @maxmin4( 202 ; CHECK: ret i1 false 203 ; 204 %c1 = icmp sge i32 %x, %y 205 %max = select i1 %c1, i32 %x, i32 %y 206 %c2 = icmp sge i32 %x, %z 207 %min = select i1 %c2, i32 %z, i32 %x 208 %c = icmp slt i32 %max, %min 209 ret i1 %c 210 } 211 212 define i1 @maxmin5(i32 %x, i32 %y, i32 %z) { 213 ; CHECK-LABEL: @maxmin5( 214 ; CHECK: ret i1 true 215 ; 216 %c1 = icmp uge i32 %x, %y 217 %max = select i1 %c1, i32 %x, i32 %y 218 %c2 = icmp uge i32 %x, %z 219 %min = select i1 %c2, i32 %z, i32 %x 220 %c = icmp uge i32 %max, %min 221 ret i1 %c 222 } 223 224 define i1 @maxmin6(i32 %x, i32 %y, i32 %z) { 225 ; CHECK-LABEL: @maxmin6( 226 ; CHECK: ret i1 false 227 ; 228 %c1 = icmp uge i32 %x, %y 229 %max = select i1 %c1, i32 %x, i32 %y 230 %c2 = icmp uge i32 %x, %z 231 %min = select i1 %c2, i32 %z, i32 %x 232 %c = icmp ugt i32 %min, %max 233 ret i1 %c 234 } 235 236 define i1 @maxmin7(i32 %x, i32 %y, i32 %z) { 237 ; CHECK-LABEL: @maxmin7( 238 ; CHECK: ret i1 true 239 ; 240 %c1 = icmp uge i32 %x, %y 241 %max = select i1 %c1, i32 %x, i32 %y 242 %c2 = icmp uge i32 %x, %z 243 %min = select i1 %c2, i32 %z, i32 %x 244 %c = icmp ule i32 %min, %max 245 ret i1 %c 246 } 247 248 define i1 @maxmin8(i32 %x, i32 %y, i32 %z) { 249 ; CHECK-LABEL: @maxmin8( 250 ; CHECK: ret i1 false 251 ; 252 %c1 = icmp uge i32 %x, %y 253 %max = select i1 %c1, i32 %x, i32 %y 254 %c2 = icmp uge i32 %x, %z 255 %min = select i1 %c2, i32 %z, i32 %x 256 %c = icmp ult i32 %max, %min 257 ret i1 %c 258 } 259 260 define i1 @eqcmp1(i32 %x, i32 %y) { 261 ; CHECK-LABEL: @eqcmp1( 262 ; CHECK: [[C:%.*]] = icmp sge i32 %x, %y 263 ; CHECK-NEXT: ret i1 [[C]] 264 ; 265 %c = icmp sge i32 %x, %y 266 %max = select i1 %c, i32 %x, i32 %y 267 %r = icmp eq i32 %max, %x 268 ret i1 %r 269 } 270 271 define i1 @eqcmp2(i32 %x, i32 %y) { 272 ; CHECK-LABEL: @eqcmp2( 273 ; CHECK: [[C:%.*]] = icmp sge i32 %x, %y 274 ; CHECK-NEXT: ret i1 [[C]] 275 ; 276 %c = icmp sge i32 %x, %y 277 %max = select i1 %c, i32 %x, i32 %y 278 %r = icmp eq i32 %x, %max 279 ret i1 %r 280 } 281 282 define i1 @eqcmp3(i32 %x, i32 %y) { 283 ; CHECK-LABEL: @eqcmp3( 284 ; CHECK: [[C:%.*]] = icmp uge i32 %x, %y 285 ; CHECK-NEXT: ret i1 [[C]] 286 ; 287 %c = icmp uge i32 %x, %y 288 %max = select i1 %c, i32 %x, i32 %y 289 %r = icmp eq i32 %max, %x 290 ret i1 %r 291 } 292 293 define i1 @eqcmp4(i32 %x, i32 %y) { 294 ; CHECK-LABEL: @eqcmp4( 295 ; CHECK: [[C:%.*]] = icmp uge i32 %x, %y 296 ; CHECK-NEXT: ret i1 [[C]] 297 ; 298 %c = icmp uge i32 %x, %y 299 %max = select i1 %c, i32 %x, i32 %y 300 %r = icmp eq i32 %x, %max 301 ret i1 %r 302 } 303