1; NOTE: Assertions have been autogenerated by update_test_checks.py 2; RUN: opt < %s -instsimplify -S | FileCheck %s 3 4define 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 14define 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 24define 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 34define 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 44define 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 54define 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 64define 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 74define 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 84define 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 94define 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 104define 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 114define 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 124define 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 134define 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 144define 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 154define 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 164define 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 176define 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 188define 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 200define 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 212define 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 224define 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 236define 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 248define 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 260define 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 271define 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 282define 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 293define 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