1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt < %s -passes=instsimplify -S | FileCheck %s 3 4declare i8 @llvm.smin.i8(i8, i8) 5declare i8 @llvm.smax.i8(i8, i8) 6declare i8 @llvm.umin.i8(i8, i8) 7declare i8 @llvm.umax.i8(i8, i8) 8declare <4 x i8> @llvm.smin.v4i8(<4 x i8>, <4 x i8>) 9declare <4 x i8> @llvm.smax.v4i8(<4 x i8>, <4 x i8>) 10declare <4 x i8> @llvm.umin.v4i8(<4 x i8>, <4 x i8>) 11declare <4 x i8> @llvm.umax.v4i8(<4 x i8>, <4 x i8>) 12 13; smin 14 15define i8 @slt_xy_smin_fval(i8 %x, i8 %y) { 16; CHECK-LABEL: @slt_xy_smin_fval( 17; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smin.i8(i8 [[X:%.*]], i8 [[Y:%.*]]) 18; CHECK-NEXT: ret i8 [[M]] 19; 20 %i = icmp slt i8 %x, %y 21 %m = call i8 @llvm.smin.i8(i8 %x, i8 %y) 22 %r = select i1 %i, i8 %x, i8 %m 23 ret i8 %r 24} 25 26define i8 @sle_xy_smin_fval(i8 %x, i8 %y) { 27; CHECK-LABEL: @sle_xy_smin_fval( 28; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smin.i8(i8 [[Y:%.*]], i8 [[X:%.*]]) 29; CHECK-NEXT: ret i8 [[M]] 30; 31 %i = icmp sle i8 %x, %y 32 %m = call i8 @llvm.smin.i8(i8 %y, i8 %x) 33 %r = select i1 %i, i8 %x, i8 %m 34 ret i8 %r 35} 36 37define i8 @sgt_xy_smin_fval(i8 %x, i8 %y) { 38; CHECK-LABEL: @sgt_xy_smin_fval( 39; CHECK-NEXT: ret i8 [[X:%.*]] 40; 41 %i = icmp sgt i8 %x, %y 42 %m = call i8 @llvm.smin.i8(i8 %x, i8 %y) 43 %r = select i1 %i, i8 %x, i8 %m 44 ret i8 %r 45} 46 47define i8 @sge_xy_smin_fval(i8 %x, i8 %y) { 48; CHECK-LABEL: @sge_xy_smin_fval( 49; CHECK-NEXT: ret i8 [[X:%.*]] 50; 51 %i = icmp sge i8 %x, %y 52 %m = call i8 @llvm.smin.i8(i8 %y, i8 %x) 53 %r = select i1 %i, i8 %x, i8 %m 54 ret i8 %r 55} 56 57define i8 @ult_xy_smin_fval(i8 %x, i8 %y) { 58; CHECK-LABEL: @ult_xy_smin_fval( 59; CHECK-NEXT: [[I:%.*]] = icmp ult i8 [[X:%.*]], [[Y:%.*]] 60; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smin.i8(i8 [[X]], i8 [[Y]]) 61; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[X]], i8 [[M]] 62; CHECK-NEXT: ret i8 [[R]] 63; 64 %i = icmp ult i8 %x, %y 65 %m = call i8 @llvm.smin.i8(i8 %x, i8 %y) 66 %r = select i1 %i, i8 %x, i8 %m 67 ret i8 %r 68} 69 70define i8 @ule_xy_smin_fval(i8 %x, i8 %y) { 71; CHECK-LABEL: @ule_xy_smin_fval( 72; CHECK-NEXT: [[I:%.*]] = icmp ule i8 [[X:%.*]], [[Y:%.*]] 73; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smin.i8(i8 [[Y]], i8 [[X]]) 74; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[X]], i8 [[M]] 75; CHECK-NEXT: ret i8 [[R]] 76; 77 %i = icmp ule i8 %x, %y 78 %m = call i8 @llvm.smin.i8(i8 %y, i8 %x) 79 %r = select i1 %i, i8 %x, i8 %m 80 ret i8 %r 81} 82 83define i8 @ugt_xy_smin_fval(i8 %x, i8 %y) { 84; CHECK-LABEL: @ugt_xy_smin_fval( 85; CHECK-NEXT: [[I:%.*]] = icmp ugt i8 [[X:%.*]], [[Y:%.*]] 86; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smin.i8(i8 [[X]], i8 [[Y]]) 87; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[X]], i8 [[M]] 88; CHECK-NEXT: ret i8 [[R]] 89; 90 %i = icmp ugt i8 %x, %y 91 %m = call i8 @llvm.smin.i8(i8 %x, i8 %y) 92 %r = select i1 %i, i8 %x, i8 %m 93 ret i8 %r 94} 95 96define i8 @uge_xy_smin_fval(i8 %x, i8 %y) { 97; CHECK-LABEL: @uge_xy_smin_fval( 98; CHECK-NEXT: [[I:%.*]] = icmp uge i8 [[X:%.*]], [[Y:%.*]] 99; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smin.i8(i8 [[Y]], i8 [[X]]) 100; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[X]], i8 [[M]] 101; CHECK-NEXT: ret i8 [[R]] 102; 103 %i = icmp uge i8 %x, %y 104 %m = call i8 @llvm.smin.i8(i8 %y, i8 %x) 105 %r = select i1 %i, i8 %x, i8 %m 106 ret i8 %r 107} 108 109define i8 @eq_xy_smin_fval(i8 %x, i8 %y) { 110; CHECK-LABEL: @eq_xy_smin_fval( 111; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smin.i8(i8 [[X:%.*]], i8 [[Y:%.*]]) 112; CHECK-NEXT: ret i8 [[M]] 113; 114 %i = icmp eq i8 %x, %y 115 %m = call i8 @llvm.smin.i8(i8 %x, i8 %y) 116 %r = select i1 %i, i8 %x, i8 %m 117 ret i8 %r 118} 119 120define i8 @ne_xy_smin_fval(i8 %x, i8 %y) { 121; CHECK-LABEL: @ne_xy_smin_fval( 122; CHECK-NEXT: ret i8 [[X:%.*]] 123; 124 %i = icmp ne i8 %x, %y 125 %m = call i8 @llvm.smin.i8(i8 %y, i8 %x) 126 %r = select i1 %i, i8 %x, i8 %m 127 ret i8 %r 128} 129 130; swap icmp operands 131 132define i8 @slt_yx_smin_fval(i8 %x, i8 %y) { 133; CHECK-LABEL: @slt_yx_smin_fval( 134; CHECK-NEXT: ret i8 [[X:%.*]] 135; 136 %i = icmp slt i8 %y, %x 137 %m = call i8 @llvm.smin.i8(i8 %x, i8 %y) 138 %r = select i1 %i, i8 %x, i8 %m 139 ret i8 %r 140} 141 142define i8 @sle_yx_smin_fval(i8 %x, i8 %y) { 143; CHECK-LABEL: @sle_yx_smin_fval( 144; CHECK-NEXT: ret i8 [[X:%.*]] 145; 146 %i = icmp sle i8 %y, %x 147 %m = call i8 @llvm.smin.i8(i8 %y, i8 %x) 148 %r = select i1 %i, i8 %x, i8 %m 149 ret i8 %r 150} 151 152define i8 @sgt_yx_smin_fval(i8 %x, i8 %y) { 153; CHECK-LABEL: @sgt_yx_smin_fval( 154; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smin.i8(i8 [[X:%.*]], i8 [[Y:%.*]]) 155; CHECK-NEXT: ret i8 [[M]] 156; 157 %i = icmp sgt i8 %y, %x 158 %m = call i8 @llvm.smin.i8(i8 %x, i8 %y) 159 %r = select i1 %i, i8 %x, i8 %m 160 ret i8 %r 161} 162 163define i8 @sge_yx_smin_fval(i8 %x, i8 %y) { 164; CHECK-LABEL: @sge_yx_smin_fval( 165; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smin.i8(i8 [[Y:%.*]], i8 [[X:%.*]]) 166; CHECK-NEXT: ret i8 [[M]] 167; 168 %i = icmp sge i8 %y, %x 169 %m = call i8 @llvm.smin.i8(i8 %y, i8 %x) 170 %r = select i1 %i, i8 %x, i8 %m 171 ret i8 %r 172} 173 174define i8 @ult_yx_smin_fval(i8 %x, i8 %y) { 175; CHECK-LABEL: @ult_yx_smin_fval( 176; CHECK-NEXT: [[I:%.*]] = icmp ult i8 [[Y:%.*]], [[X:%.*]] 177; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smin.i8(i8 [[X]], i8 [[Y]]) 178; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[X]], i8 [[M]] 179; CHECK-NEXT: ret i8 [[R]] 180; 181 %i = icmp ult i8 %y, %x 182 %m = call i8 @llvm.smin.i8(i8 %x, i8 %y) 183 %r = select i1 %i, i8 %x, i8 %m 184 ret i8 %r 185} 186 187define i8 @ule_yx_smin_fval(i8 %x, i8 %y) { 188; CHECK-LABEL: @ule_yx_smin_fval( 189; CHECK-NEXT: [[I:%.*]] = icmp ule i8 [[Y:%.*]], [[X:%.*]] 190; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smin.i8(i8 [[Y]], i8 [[X]]) 191; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[X]], i8 [[M]] 192; CHECK-NEXT: ret i8 [[R]] 193; 194 %i = icmp ule i8 %y, %x 195 %m = call i8 @llvm.smin.i8(i8 %y, i8 %x) 196 %r = select i1 %i, i8 %x, i8 %m 197 ret i8 %r 198} 199 200define i8 @ugt_yx_smin_fval(i8 %x, i8 %y) { 201; CHECK-LABEL: @ugt_yx_smin_fval( 202; CHECK-NEXT: [[I:%.*]] = icmp ugt i8 [[Y:%.*]], [[X:%.*]] 203; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smin.i8(i8 [[X]], i8 [[Y]]) 204; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[X]], i8 [[M]] 205; CHECK-NEXT: ret i8 [[R]] 206; 207 %i = icmp ugt i8 %y, %x 208 %m = call i8 @llvm.smin.i8(i8 %x, i8 %y) 209 %r = select i1 %i, i8 %x, i8 %m 210 ret i8 %r 211} 212 213define i8 @uge_yx_smin_fval(i8 %x, i8 %y) { 214; CHECK-LABEL: @uge_yx_smin_fval( 215; CHECK-NEXT: [[I:%.*]] = icmp uge i8 [[Y:%.*]], [[X:%.*]] 216; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smin.i8(i8 [[Y]], i8 [[X]]) 217; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[X]], i8 [[M]] 218; CHECK-NEXT: ret i8 [[R]] 219; 220 %i = icmp uge i8 %y, %x 221 %m = call i8 @llvm.smin.i8(i8 %y, i8 %x) 222 %r = select i1 %i, i8 %x, i8 %m 223 ret i8 %r 224} 225 226define i8 @eq_yx_smin_fval(i8 %x, i8 %y) { 227; CHECK-LABEL: @eq_yx_smin_fval( 228; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smin.i8(i8 [[X:%.*]], i8 [[Y:%.*]]) 229; CHECK-NEXT: ret i8 [[M]] 230; 231 %i = icmp eq i8 %y, %x 232 %m = call i8 @llvm.smin.i8(i8 %x, i8 %y) 233 %r = select i1 %i, i8 %x, i8 %m 234 ret i8 %r 235} 236 237define i8 @ne_yx_smin_fval(i8 %x, i8 %y) { 238; CHECK-LABEL: @ne_yx_smin_fval( 239; CHECK-NEXT: ret i8 [[X:%.*]] 240; 241 %i = icmp ne i8 %y, %x 242 %m = call i8 @llvm.smin.i8(i8 %y, i8 %x) 243 %r = select i1 %i, i8 %x, i8 %m 244 ret i8 %r 245} 246 247; swap select operands 248 249define i8 @slt_xy_smin_tval(i8 %x, i8 %y) { 250; CHECK-LABEL: @slt_xy_smin_tval( 251; CHECK-NEXT: ret i8 [[X:%.*]] 252; 253 %i = icmp slt i8 %x, %y 254 %m = call i8 @llvm.smin.i8(i8 %x, i8 %y) 255 %r = select i1 %i, i8 %m, i8 %x 256 ret i8 %r 257} 258 259define i8 @sle_xy_smin_tval(i8 %x, i8 %y) { 260; CHECK-LABEL: @sle_xy_smin_tval( 261; CHECK-NEXT: ret i8 [[X:%.*]] 262; 263 %i = icmp sle i8 %x, %y 264 %m = call i8 @llvm.smin.i8(i8 %y, i8 %x) 265 %r = select i1 %i, i8 %m, i8 %x 266 ret i8 %r 267} 268 269define i8 @sgt_xy_smin_tval(i8 %x, i8 %y) { 270; CHECK-LABEL: @sgt_xy_smin_tval( 271; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smin.i8(i8 [[X:%.*]], i8 [[Y:%.*]]) 272; CHECK-NEXT: ret i8 [[M]] 273; 274 %i = icmp sgt i8 %x, %y 275 %m = call i8 @llvm.smin.i8(i8 %x, i8 %y) 276 %r = select i1 %i, i8 %m, i8 %x 277 ret i8 %r 278} 279 280define i8 @sge_xy_smin_tval(i8 %x, i8 %y) { 281; CHECK-LABEL: @sge_xy_smin_tval( 282; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smin.i8(i8 [[Y:%.*]], i8 [[X:%.*]]) 283; CHECK-NEXT: ret i8 [[M]] 284; 285 %i = icmp sge i8 %x, %y 286 %m = call i8 @llvm.smin.i8(i8 %y, i8 %x) 287 %r = select i1 %i, i8 %m, i8 %x 288 ret i8 %r 289} 290 291define i8 @ult_xy_smin_tval(i8 %x, i8 %y) { 292; CHECK-LABEL: @ult_xy_smin_tval( 293; CHECK-NEXT: [[I:%.*]] = icmp ult i8 [[X:%.*]], [[Y:%.*]] 294; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smin.i8(i8 [[X]], i8 [[Y]]) 295; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[M]], i8 [[X]] 296; CHECK-NEXT: ret i8 [[R]] 297; 298 %i = icmp ult i8 %x, %y 299 %m = call i8 @llvm.smin.i8(i8 %x, i8 %y) 300 %r = select i1 %i, i8 %m, i8 %x 301 ret i8 %r 302} 303 304define i8 @ule_xy_smin_tval(i8 %x, i8 %y) { 305; CHECK-LABEL: @ule_xy_smin_tval( 306; CHECK-NEXT: [[I:%.*]] = icmp ule i8 [[X:%.*]], [[Y:%.*]] 307; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smin.i8(i8 [[Y]], i8 [[X]]) 308; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[M]], i8 [[X]] 309; CHECK-NEXT: ret i8 [[R]] 310; 311 %i = icmp ule i8 %x, %y 312 %m = call i8 @llvm.smin.i8(i8 %y, i8 %x) 313 %r = select i1 %i, i8 %m, i8 %x 314 ret i8 %r 315} 316 317define i8 @ugt_xy_smin_tval(i8 %x, i8 %y) { 318; CHECK-LABEL: @ugt_xy_smin_tval( 319; CHECK-NEXT: [[I:%.*]] = icmp ugt i8 [[X:%.*]], [[Y:%.*]] 320; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smin.i8(i8 [[X]], i8 [[Y]]) 321; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[M]], i8 [[X]] 322; CHECK-NEXT: ret i8 [[R]] 323; 324 %i = icmp ugt i8 %x, %y 325 %m = call i8 @llvm.smin.i8(i8 %x, i8 %y) 326 %r = select i1 %i, i8 %m, i8 %x 327 ret i8 %r 328} 329 330define i8 @uge_xy_smin_tval(i8 %x, i8 %y) { 331; CHECK-LABEL: @uge_xy_smin_tval( 332; CHECK-NEXT: [[I:%.*]] = icmp uge i8 [[X:%.*]], [[Y:%.*]] 333; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smin.i8(i8 [[Y]], i8 [[X]]) 334; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[M]], i8 [[X]] 335; CHECK-NEXT: ret i8 [[R]] 336; 337 %i = icmp uge i8 %x, %y 338 %m = call i8 @llvm.smin.i8(i8 %y, i8 %x) 339 %r = select i1 %i, i8 %m, i8 %x 340 ret i8 %r 341} 342 343define i8 @eq_xy_smin_tval(i8 %x, i8 %y) { 344; CHECK-LABEL: @eq_xy_smin_tval( 345; CHECK-NEXT: ret i8 [[X:%.*]] 346; 347 %i = icmp eq i8 %x, %y 348 %m = call i8 @llvm.smin.i8(i8 %x, i8 %y) 349 %r = select i1 %i, i8 %m, i8 %x 350 ret i8 %r 351} 352 353define i8 @ne_xy_smin_tval(i8 %x, i8 %y) { 354; CHECK-LABEL: @ne_xy_smin_tval( 355; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smin.i8(i8 [[Y:%.*]], i8 [[X:%.*]]) 356; CHECK-NEXT: ret i8 [[M]] 357; 358 %i = icmp ne i8 %x, %y 359 %m = call i8 @llvm.smin.i8(i8 %y, i8 %x) 360 %r = select i1 %i, i8 %m, i8 %x 361 ret i8 %r 362} 363 364; swap icmp and select operands 365 366define i8 @slt_yx_smin_tval(i8 %x, i8 %y) { 367; CHECK-LABEL: @slt_yx_smin_tval( 368; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smin.i8(i8 [[X:%.*]], i8 [[Y:%.*]]) 369; CHECK-NEXT: ret i8 [[M]] 370; 371 %i = icmp slt i8 %y, %x 372 %m = call i8 @llvm.smin.i8(i8 %x, i8 %y) 373 %r = select i1 %i, i8 %m, i8 %x 374 ret i8 %r 375} 376 377define i8 @sle_yx_smin_tval(i8 %x, i8 %y) { 378; CHECK-LABEL: @sle_yx_smin_tval( 379; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smin.i8(i8 [[Y:%.*]], i8 [[X:%.*]]) 380; CHECK-NEXT: ret i8 [[M]] 381; 382 %i = icmp sle i8 %y, %x 383 %m = call i8 @llvm.smin.i8(i8 %y, i8 %x) 384 %r = select i1 %i, i8 %m, i8 %x 385 ret i8 %r 386} 387 388define i8 @sgt_yx_smin_tval(i8 %x, i8 %y) { 389; CHECK-LABEL: @sgt_yx_smin_tval( 390; CHECK-NEXT: ret i8 [[X:%.*]] 391; 392 %i = icmp sgt i8 %y, %x 393 %m = call i8 @llvm.smin.i8(i8 %x, i8 %y) 394 %r = select i1 %i, i8 %m, i8 %x 395 ret i8 %r 396} 397 398define i8 @sge_yx_smin_tval(i8 %x, i8 %y) { 399; CHECK-LABEL: @sge_yx_smin_tval( 400; CHECK-NEXT: ret i8 [[X:%.*]] 401; 402 %i = icmp sge i8 %y, %x 403 %m = call i8 @llvm.smin.i8(i8 %y, i8 %x) 404 %r = select i1 %i, i8 %m, i8 %x 405 ret i8 %r 406} 407 408define i8 @ult_yx_smin_tval(i8 %x, i8 %y) { 409; CHECK-LABEL: @ult_yx_smin_tval( 410; CHECK-NEXT: [[I:%.*]] = icmp ult i8 [[Y:%.*]], [[X:%.*]] 411; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smin.i8(i8 [[X]], i8 [[Y]]) 412; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[M]], i8 [[X]] 413; CHECK-NEXT: ret i8 [[R]] 414; 415 %i = icmp ult i8 %y, %x 416 %m = call i8 @llvm.smin.i8(i8 %x, i8 %y) 417 %r = select i1 %i, i8 %m, i8 %x 418 ret i8 %r 419} 420 421define i8 @ule_yx_smin_tval(i8 %x, i8 %y) { 422; CHECK-LABEL: @ule_yx_smin_tval( 423; CHECK-NEXT: [[I:%.*]] = icmp ule i8 [[Y:%.*]], [[X:%.*]] 424; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smin.i8(i8 [[Y]], i8 [[X]]) 425; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[M]], i8 [[X]] 426; CHECK-NEXT: ret i8 [[R]] 427; 428 %i = icmp ule i8 %y, %x 429 %m = call i8 @llvm.smin.i8(i8 %y, i8 %x) 430 %r = select i1 %i, i8 %m, i8 %x 431 ret i8 %r 432} 433 434define i8 @ugt_yx_smin_tval(i8 %x, i8 %y) { 435; CHECK-LABEL: @ugt_yx_smin_tval( 436; CHECK-NEXT: [[I:%.*]] = icmp ugt i8 [[Y:%.*]], [[X:%.*]] 437; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smin.i8(i8 [[X]], i8 [[Y]]) 438; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[M]], i8 [[X]] 439; CHECK-NEXT: ret i8 [[R]] 440; 441 %i = icmp ugt i8 %y, %x 442 %m = call i8 @llvm.smin.i8(i8 %x, i8 %y) 443 %r = select i1 %i, i8 %m, i8 %x 444 ret i8 %r 445} 446 447define i8 @uge_yx_smin_tval(i8 %x, i8 %y) { 448; CHECK-LABEL: @uge_yx_smin_tval( 449; CHECK-NEXT: [[I:%.*]] = icmp uge i8 [[Y:%.*]], [[X:%.*]] 450; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smin.i8(i8 [[Y]], i8 [[X]]) 451; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[M]], i8 [[X]] 452; CHECK-NEXT: ret i8 [[R]] 453; 454 %i = icmp uge i8 %y, %x 455 %m = call i8 @llvm.smin.i8(i8 %y, i8 %x) 456 %r = select i1 %i, i8 %m, i8 %x 457 ret i8 %r 458} 459 460define i8 @eq_yx_smin_tval(i8 %x, i8 %y) { 461; CHECK-LABEL: @eq_yx_smin_tval( 462; CHECK-NEXT: ret i8 [[X:%.*]] 463; 464 %i = icmp eq i8 %y, %x 465 %m = call i8 @llvm.smin.i8(i8 %x, i8 %y) 466 %r = select i1 %i, i8 %m, i8 %x 467 ret i8 %r 468} 469 470define i8 @ne_yx_smin_tval(i8 %x, i8 %y) { 471; CHECK-LABEL: @ne_yx_smin_tval( 472; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smin.i8(i8 [[Y:%.*]], i8 [[X:%.*]]) 473; CHECK-NEXT: ret i8 [[M]] 474; 475 %i = icmp ne i8 %y, %x 476 %m = call i8 @llvm.smin.i8(i8 %y, i8 %x) 477 %r = select i1 %i, i8 %m, i8 %x 478 ret i8 %r 479} 480 481; smax 482 483define i8 @slt_xy_smax_fval(i8 %x, i8 %y) { 484; CHECK-LABEL: @slt_xy_smax_fval( 485; CHECK-NEXT: ret i8 [[X:%.*]] 486; 487 %i = icmp slt i8 %x, %y 488 %m = call i8 @llvm.smax.i8(i8 %x, i8 %y) 489 %r = select i1 %i, i8 %x, i8 %m 490 ret i8 %r 491} 492 493define i8 @sle_xy_smax_fval(i8 %x, i8 %y) { 494; CHECK-LABEL: @sle_xy_smax_fval( 495; CHECK-NEXT: ret i8 [[X:%.*]] 496; 497 %i = icmp sle i8 %x, %y 498 %m = call i8 @llvm.smax.i8(i8 %y, i8 %x) 499 %r = select i1 %i, i8 %x, i8 %m 500 ret i8 %r 501} 502 503define i8 @sgt_xy_smax_fval(i8 %x, i8 %y) { 504; CHECK-LABEL: @sgt_xy_smax_fval( 505; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smax.i8(i8 [[X:%.*]], i8 [[Y:%.*]]) 506; CHECK-NEXT: ret i8 [[M]] 507; 508 %i = icmp sgt i8 %x, %y 509 %m = call i8 @llvm.smax.i8(i8 %x, i8 %y) 510 %r = select i1 %i, i8 %x, i8 %m 511 ret i8 %r 512} 513 514define i8 @sge_xy_smax_fval(i8 %x, i8 %y) { 515; CHECK-LABEL: @sge_xy_smax_fval( 516; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smax.i8(i8 [[Y:%.*]], i8 [[X:%.*]]) 517; CHECK-NEXT: ret i8 [[M]] 518; 519 %i = icmp sge i8 %x, %y 520 %m = call i8 @llvm.smax.i8(i8 %y, i8 %x) 521 %r = select i1 %i, i8 %x, i8 %m 522 ret i8 %r 523} 524 525define i8 @ult_xy_smax_fval(i8 %x, i8 %y) { 526; CHECK-LABEL: @ult_xy_smax_fval( 527; CHECK-NEXT: [[I:%.*]] = icmp ult i8 [[X:%.*]], [[Y:%.*]] 528; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smax.i8(i8 [[X]], i8 [[Y]]) 529; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[X]], i8 [[M]] 530; CHECK-NEXT: ret i8 [[R]] 531; 532 %i = icmp ult i8 %x, %y 533 %m = call i8 @llvm.smax.i8(i8 %x, i8 %y) 534 %r = select i1 %i, i8 %x, i8 %m 535 ret i8 %r 536} 537 538define i8 @ule_xy_smax_fval(i8 %x, i8 %y) { 539; CHECK-LABEL: @ule_xy_smax_fval( 540; CHECK-NEXT: [[I:%.*]] = icmp ule i8 [[X:%.*]], [[Y:%.*]] 541; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smax.i8(i8 [[Y]], i8 [[X]]) 542; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[X]], i8 [[M]] 543; CHECK-NEXT: ret i8 [[R]] 544; 545 %i = icmp ule i8 %x, %y 546 %m = call i8 @llvm.smax.i8(i8 %y, i8 %x) 547 %r = select i1 %i, i8 %x, i8 %m 548 ret i8 %r 549} 550 551define i8 @ugt_xy_smax_fval(i8 %x, i8 %y) { 552; CHECK-LABEL: @ugt_xy_smax_fval( 553; CHECK-NEXT: [[I:%.*]] = icmp ugt i8 [[X:%.*]], [[Y:%.*]] 554; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smax.i8(i8 [[X]], i8 [[Y]]) 555; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[X]], i8 [[M]] 556; CHECK-NEXT: ret i8 [[R]] 557; 558 %i = icmp ugt i8 %x, %y 559 %m = call i8 @llvm.smax.i8(i8 %x, i8 %y) 560 %r = select i1 %i, i8 %x, i8 %m 561 ret i8 %r 562} 563 564define i8 @uge_xy_smax_fval(i8 %x, i8 %y) { 565; CHECK-LABEL: @uge_xy_smax_fval( 566; CHECK-NEXT: [[I:%.*]] = icmp uge i8 [[X:%.*]], [[Y:%.*]] 567; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smax.i8(i8 [[Y]], i8 [[X]]) 568; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[X]], i8 [[M]] 569; CHECK-NEXT: ret i8 [[R]] 570; 571 %i = icmp uge i8 %x, %y 572 %m = call i8 @llvm.smax.i8(i8 %y, i8 %x) 573 %r = select i1 %i, i8 %x, i8 %m 574 ret i8 %r 575} 576 577define i8 @eq_xy_smax_fval(i8 %x, i8 %y) { 578; CHECK-LABEL: @eq_xy_smax_fval( 579; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smax.i8(i8 [[X:%.*]], i8 [[Y:%.*]]) 580; CHECK-NEXT: ret i8 [[M]] 581; 582 %i = icmp eq i8 %x, %y 583 %m = call i8 @llvm.smax.i8(i8 %x, i8 %y) 584 %r = select i1 %i, i8 %x, i8 %m 585 ret i8 %r 586} 587 588define i8 @ne_xy_smax_fval(i8 %x, i8 %y) { 589; CHECK-LABEL: @ne_xy_smax_fval( 590; CHECK-NEXT: ret i8 [[X:%.*]] 591; 592 %i = icmp ne i8 %x, %y 593 %m = call i8 @llvm.smax.i8(i8 %y, i8 %x) 594 %r = select i1 %i, i8 %x, i8 %m 595 ret i8 %r 596} 597 598; swap icmp operands 599 600define i8 @slt_yx_smax_fval(i8 %x, i8 %y) { 601; CHECK-LABEL: @slt_yx_smax_fval( 602; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smax.i8(i8 [[X:%.*]], i8 [[Y:%.*]]) 603; CHECK-NEXT: ret i8 [[M]] 604; 605 %i = icmp slt i8 %y, %x 606 %m = call i8 @llvm.smax.i8(i8 %x, i8 %y) 607 %r = select i1 %i, i8 %x, i8 %m 608 ret i8 %r 609} 610 611define i8 @sle_yx_smax_fval(i8 %x, i8 %y) { 612; CHECK-LABEL: @sle_yx_smax_fval( 613; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smax.i8(i8 [[Y:%.*]], i8 [[X:%.*]]) 614; CHECK-NEXT: ret i8 [[M]] 615; 616 %i = icmp sle i8 %y, %x 617 %m = call i8 @llvm.smax.i8(i8 %y, i8 %x) 618 %r = select i1 %i, i8 %x, i8 %m 619 ret i8 %r 620} 621 622define i8 @sgt_yx_smax_fval(i8 %x, i8 %y) { 623; CHECK-LABEL: @sgt_yx_smax_fval( 624; CHECK-NEXT: ret i8 [[X:%.*]] 625; 626 %i = icmp sgt i8 %y, %x 627 %m = call i8 @llvm.smax.i8(i8 %x, i8 %y) 628 %r = select i1 %i, i8 %x, i8 %m 629 ret i8 %r 630} 631 632define i8 @sge_yx_smax_fval(i8 %x, i8 %y) { 633; CHECK-LABEL: @sge_yx_smax_fval( 634; CHECK-NEXT: ret i8 [[X:%.*]] 635; 636 %i = icmp sge i8 %y, %x 637 %m = call i8 @llvm.smax.i8(i8 %y, i8 %x) 638 %r = select i1 %i, i8 %x, i8 %m 639 ret i8 %r 640} 641 642define i8 @ult_yx_smax_fval(i8 %x, i8 %y) { 643; CHECK-LABEL: @ult_yx_smax_fval( 644; CHECK-NEXT: [[I:%.*]] = icmp ult i8 [[Y:%.*]], [[X:%.*]] 645; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smax.i8(i8 [[X]], i8 [[Y]]) 646; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[X]], i8 [[M]] 647; CHECK-NEXT: ret i8 [[R]] 648; 649 %i = icmp ult i8 %y, %x 650 %m = call i8 @llvm.smax.i8(i8 %x, i8 %y) 651 %r = select i1 %i, i8 %x, i8 %m 652 ret i8 %r 653} 654 655define i8 @ule_yx_smax_fval(i8 %x, i8 %y) { 656; CHECK-LABEL: @ule_yx_smax_fval( 657; CHECK-NEXT: [[I:%.*]] = icmp ule i8 [[Y:%.*]], [[X:%.*]] 658; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smax.i8(i8 [[Y]], i8 [[X]]) 659; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[X]], i8 [[M]] 660; CHECK-NEXT: ret i8 [[R]] 661; 662 %i = icmp ule i8 %y, %x 663 %m = call i8 @llvm.smax.i8(i8 %y, i8 %x) 664 %r = select i1 %i, i8 %x, i8 %m 665 ret i8 %r 666} 667 668define i8 @ugt_yx_smax_fval(i8 %x, i8 %y) { 669; CHECK-LABEL: @ugt_yx_smax_fval( 670; CHECK-NEXT: [[I:%.*]] = icmp ugt i8 [[Y:%.*]], [[X:%.*]] 671; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smax.i8(i8 [[X]], i8 [[Y]]) 672; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[X]], i8 [[M]] 673; CHECK-NEXT: ret i8 [[R]] 674; 675 %i = icmp ugt i8 %y, %x 676 %m = call i8 @llvm.smax.i8(i8 %x, i8 %y) 677 %r = select i1 %i, i8 %x, i8 %m 678 ret i8 %r 679} 680 681define i8 @uge_yx_smax_fval(i8 %x, i8 %y) { 682; CHECK-LABEL: @uge_yx_smax_fval( 683; CHECK-NEXT: [[I:%.*]] = icmp uge i8 [[Y:%.*]], [[X:%.*]] 684; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smax.i8(i8 [[Y]], i8 [[X]]) 685; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[X]], i8 [[M]] 686; CHECK-NEXT: ret i8 [[R]] 687; 688 %i = icmp uge i8 %y, %x 689 %m = call i8 @llvm.smax.i8(i8 %y, i8 %x) 690 %r = select i1 %i, i8 %x, i8 %m 691 ret i8 %r 692} 693 694define i8 @eq_yx_smax_fval(i8 %x, i8 %y) { 695; CHECK-LABEL: @eq_yx_smax_fval( 696; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smax.i8(i8 [[X:%.*]], i8 [[Y:%.*]]) 697; CHECK-NEXT: ret i8 [[M]] 698; 699 %i = icmp eq i8 %y, %x 700 %m = call i8 @llvm.smax.i8(i8 %x, i8 %y) 701 %r = select i1 %i, i8 %x, i8 %m 702 ret i8 %r 703} 704 705define i8 @ne_yx_smax_fval(i8 %x, i8 %y) { 706; CHECK-LABEL: @ne_yx_smax_fval( 707; CHECK-NEXT: ret i8 [[X:%.*]] 708; 709 %i = icmp ne i8 %y, %x 710 %m = call i8 @llvm.smax.i8(i8 %y, i8 %x) 711 %r = select i1 %i, i8 %x, i8 %m 712 ret i8 %r 713} 714 715; swap select operands 716 717define i8 @slt_xy_smax_tval(i8 %x, i8 %y) { 718; CHECK-LABEL: @slt_xy_smax_tval( 719; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smax.i8(i8 [[X:%.*]], i8 [[Y:%.*]]) 720; CHECK-NEXT: ret i8 [[M]] 721; 722 %i = icmp slt i8 %x, %y 723 %m = call i8 @llvm.smax.i8(i8 %x, i8 %y) 724 %r = select i1 %i, i8 %m, i8 %x 725 ret i8 %r 726} 727 728define i8 @sle_xy_smax_tval(i8 %x, i8 %y) { 729; CHECK-LABEL: @sle_xy_smax_tval( 730; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smax.i8(i8 [[Y:%.*]], i8 [[X:%.*]]) 731; CHECK-NEXT: ret i8 [[M]] 732; 733 %i = icmp sle i8 %x, %y 734 %m = call i8 @llvm.smax.i8(i8 %y, i8 %x) 735 %r = select i1 %i, i8 %m, i8 %x 736 ret i8 %r 737} 738 739define i8 @sgt_xy_smax_tval(i8 %x, i8 %y) { 740; CHECK-LABEL: @sgt_xy_smax_tval( 741; CHECK-NEXT: ret i8 [[X:%.*]] 742; 743 %i = icmp sgt i8 %x, %y 744 %m = call i8 @llvm.smax.i8(i8 %x, i8 %y) 745 %r = select i1 %i, i8 %m, i8 %x 746 ret i8 %r 747} 748 749define i8 @sge_xy_smax_tval(i8 %x, i8 %y) { 750; CHECK-LABEL: @sge_xy_smax_tval( 751; CHECK-NEXT: ret i8 [[X:%.*]] 752; 753 %i = icmp sge i8 %x, %y 754 %m = call i8 @llvm.smax.i8(i8 %y, i8 %x) 755 %r = select i1 %i, i8 %m, i8 %x 756 ret i8 %r 757} 758 759define i8 @ult_xy_smax_tval(i8 %x, i8 %y) { 760; CHECK-LABEL: @ult_xy_smax_tval( 761; CHECK-NEXT: [[I:%.*]] = icmp ult i8 [[X:%.*]], [[Y:%.*]] 762; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smax.i8(i8 [[X]], i8 [[Y]]) 763; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[M]], i8 [[X]] 764; CHECK-NEXT: ret i8 [[R]] 765; 766 %i = icmp ult i8 %x, %y 767 %m = call i8 @llvm.smax.i8(i8 %x, i8 %y) 768 %r = select i1 %i, i8 %m, i8 %x 769 ret i8 %r 770} 771 772define i8 @ule_xy_smax_tval(i8 %x, i8 %y) { 773; CHECK-LABEL: @ule_xy_smax_tval( 774; CHECK-NEXT: [[I:%.*]] = icmp ule i8 [[X:%.*]], [[Y:%.*]] 775; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smax.i8(i8 [[Y]], i8 [[X]]) 776; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[M]], i8 [[X]] 777; CHECK-NEXT: ret i8 [[R]] 778; 779 %i = icmp ule i8 %x, %y 780 %m = call i8 @llvm.smax.i8(i8 %y, i8 %x) 781 %r = select i1 %i, i8 %m, i8 %x 782 ret i8 %r 783} 784 785define i8 @ugt_xy_smax_tval(i8 %x, i8 %y) { 786; CHECK-LABEL: @ugt_xy_smax_tval( 787; CHECK-NEXT: [[I:%.*]] = icmp ugt i8 [[X:%.*]], [[Y:%.*]] 788; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smax.i8(i8 [[X]], i8 [[Y]]) 789; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[M]], i8 [[X]] 790; CHECK-NEXT: ret i8 [[R]] 791; 792 %i = icmp ugt i8 %x, %y 793 %m = call i8 @llvm.smax.i8(i8 %x, i8 %y) 794 %r = select i1 %i, i8 %m, i8 %x 795 ret i8 %r 796} 797 798define i8 @uge_xy_smax_tval(i8 %x, i8 %y) { 799; CHECK-LABEL: @uge_xy_smax_tval( 800; CHECK-NEXT: [[I:%.*]] = icmp uge i8 [[X:%.*]], [[Y:%.*]] 801; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smax.i8(i8 [[Y]], i8 [[X]]) 802; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[M]], i8 [[X]] 803; CHECK-NEXT: ret i8 [[R]] 804; 805 %i = icmp uge i8 %x, %y 806 %m = call i8 @llvm.smax.i8(i8 %y, i8 %x) 807 %r = select i1 %i, i8 %m, i8 %x 808 ret i8 %r 809} 810 811define i8 @eq_xy_smax_tval(i8 %x, i8 %y) { 812; CHECK-LABEL: @eq_xy_smax_tval( 813; CHECK-NEXT: ret i8 [[X:%.*]] 814; 815 %i = icmp eq i8 %x, %y 816 %m = call i8 @llvm.smax.i8(i8 %x, i8 %y) 817 %r = select i1 %i, i8 %m, i8 %x 818 ret i8 %r 819} 820 821define i8 @ne_xy_smax_tval(i8 %x, i8 %y) { 822; CHECK-LABEL: @ne_xy_smax_tval( 823; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smax.i8(i8 [[Y:%.*]], i8 [[X:%.*]]) 824; CHECK-NEXT: ret i8 [[M]] 825; 826 %i = icmp ne i8 %x, %y 827 %m = call i8 @llvm.smax.i8(i8 %y, i8 %x) 828 %r = select i1 %i, i8 %m, i8 %x 829 ret i8 %r 830} 831 832; swap icmp and select operands 833 834define i8 @slt_yx_smax_tval(i8 %x, i8 %y) { 835; CHECK-LABEL: @slt_yx_smax_tval( 836; CHECK-NEXT: ret i8 [[X:%.*]] 837; 838 %i = icmp slt i8 %y, %x 839 %m = call i8 @llvm.smax.i8(i8 %x, i8 %y) 840 %r = select i1 %i, i8 %m, i8 %x 841 ret i8 %r 842} 843 844define i8 @sle_yx_smax_tval(i8 %x, i8 %y) { 845; CHECK-LABEL: @sle_yx_smax_tval( 846; CHECK-NEXT: ret i8 [[X:%.*]] 847; 848 %i = icmp sle i8 %y, %x 849 %m = call i8 @llvm.smax.i8(i8 %y, i8 %x) 850 %r = select i1 %i, i8 %m, i8 %x 851 ret i8 %r 852} 853 854define i8 @sgt_yx_smax_tval(i8 %x, i8 %y) { 855; CHECK-LABEL: @sgt_yx_smax_tval( 856; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smax.i8(i8 [[X:%.*]], i8 [[Y:%.*]]) 857; CHECK-NEXT: ret i8 [[M]] 858; 859 %i = icmp sgt i8 %y, %x 860 %m = call i8 @llvm.smax.i8(i8 %x, i8 %y) 861 %r = select i1 %i, i8 %m, i8 %x 862 ret i8 %r 863} 864 865define i8 @sge_yx_smax_tval(i8 %x, i8 %y) { 866; CHECK-LABEL: @sge_yx_smax_tval( 867; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smax.i8(i8 [[Y:%.*]], i8 [[X:%.*]]) 868; CHECK-NEXT: ret i8 [[M]] 869; 870 %i = icmp sge i8 %y, %x 871 %m = call i8 @llvm.smax.i8(i8 %y, i8 %x) 872 %r = select i1 %i, i8 %m, i8 %x 873 ret i8 %r 874} 875 876define i8 @ult_yx_smax_tval(i8 %x, i8 %y) { 877; CHECK-LABEL: @ult_yx_smax_tval( 878; CHECK-NEXT: [[I:%.*]] = icmp ult i8 [[Y:%.*]], [[X:%.*]] 879; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smax.i8(i8 [[X]], i8 [[Y]]) 880; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[M]], i8 [[X]] 881; CHECK-NEXT: ret i8 [[R]] 882; 883 %i = icmp ult i8 %y, %x 884 %m = call i8 @llvm.smax.i8(i8 %x, i8 %y) 885 %r = select i1 %i, i8 %m, i8 %x 886 ret i8 %r 887} 888 889define i8 @ule_yx_smax_tval(i8 %x, i8 %y) { 890; CHECK-LABEL: @ule_yx_smax_tval( 891; CHECK-NEXT: [[I:%.*]] = icmp ule i8 [[Y:%.*]], [[X:%.*]] 892; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smax.i8(i8 [[Y]], i8 [[X]]) 893; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[M]], i8 [[X]] 894; CHECK-NEXT: ret i8 [[R]] 895; 896 %i = icmp ule i8 %y, %x 897 %m = call i8 @llvm.smax.i8(i8 %y, i8 %x) 898 %r = select i1 %i, i8 %m, i8 %x 899 ret i8 %r 900} 901 902define i8 @ugt_yx_smax_tval(i8 %x, i8 %y) { 903; CHECK-LABEL: @ugt_yx_smax_tval( 904; CHECK-NEXT: [[I:%.*]] = icmp ugt i8 [[Y:%.*]], [[X:%.*]] 905; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smax.i8(i8 [[X]], i8 [[Y]]) 906; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[M]], i8 [[X]] 907; CHECK-NEXT: ret i8 [[R]] 908; 909 %i = icmp ugt i8 %y, %x 910 %m = call i8 @llvm.smax.i8(i8 %x, i8 %y) 911 %r = select i1 %i, i8 %m, i8 %x 912 ret i8 %r 913} 914 915define i8 @uge_yx_smax_tval(i8 %x, i8 %y) { 916; CHECK-LABEL: @uge_yx_smax_tval( 917; CHECK-NEXT: [[I:%.*]] = icmp uge i8 [[Y:%.*]], [[X:%.*]] 918; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smax.i8(i8 [[Y]], i8 [[X]]) 919; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[M]], i8 [[X]] 920; CHECK-NEXT: ret i8 [[R]] 921; 922 %i = icmp uge i8 %y, %x 923 %m = call i8 @llvm.smax.i8(i8 %y, i8 %x) 924 %r = select i1 %i, i8 %m, i8 %x 925 ret i8 %r 926} 927 928define i8 @eq_yx_smax_tval(i8 %x, i8 %y) { 929; CHECK-LABEL: @eq_yx_smax_tval( 930; CHECK-NEXT: ret i8 [[X:%.*]] 931; 932 %i = icmp eq i8 %y, %x 933 %m = call i8 @llvm.smax.i8(i8 %x, i8 %y) 934 %r = select i1 %i, i8 %m, i8 %x 935 ret i8 %r 936} 937 938define i8 @ne_yx_smax_tval(i8 %x, i8 %y) { 939; CHECK-LABEL: @ne_yx_smax_tval( 940; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smax.i8(i8 [[Y:%.*]], i8 [[X:%.*]]) 941; CHECK-NEXT: ret i8 [[M]] 942; 943 %i = icmp ne i8 %y, %x 944 %m = call i8 @llvm.smax.i8(i8 %y, i8 %x) 945 %r = select i1 %i, i8 %m, i8 %x 946 ret i8 %r 947} 948 949; umin 950 951define i8 @slt_xy_umin_fval(i8 %x, i8 %y) { 952; CHECK-LABEL: @slt_xy_umin_fval( 953; CHECK-NEXT: [[I:%.*]] = icmp slt i8 [[X:%.*]], [[Y:%.*]] 954; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umin.i8(i8 [[X]], i8 [[Y]]) 955; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[X]], i8 [[M]] 956; CHECK-NEXT: ret i8 [[R]] 957; 958 %i = icmp slt i8 %x, %y 959 %m = call i8 @llvm.umin.i8(i8 %x, i8 %y) 960 %r = select i1 %i, i8 %x, i8 %m 961 ret i8 %r 962} 963 964define i8 @sle_xy_umin_fval(i8 %x, i8 %y) { 965; CHECK-LABEL: @sle_xy_umin_fval( 966; CHECK-NEXT: [[I:%.*]] = icmp sle i8 [[X:%.*]], [[Y:%.*]] 967; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umin.i8(i8 [[Y]], i8 [[X]]) 968; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[X]], i8 [[M]] 969; CHECK-NEXT: ret i8 [[R]] 970; 971 %i = icmp sle i8 %x, %y 972 %m = call i8 @llvm.umin.i8(i8 %y, i8 %x) 973 %r = select i1 %i, i8 %x, i8 %m 974 ret i8 %r 975} 976 977define i8 @sgt_xy_umin_fval(i8 %x, i8 %y) { 978; CHECK-LABEL: @sgt_xy_umin_fval( 979; CHECK-NEXT: [[I:%.*]] = icmp sgt i8 [[X:%.*]], [[Y:%.*]] 980; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umin.i8(i8 [[X]], i8 [[Y]]) 981; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[X]], i8 [[M]] 982; CHECK-NEXT: ret i8 [[R]] 983; 984 %i = icmp sgt i8 %x, %y 985 %m = call i8 @llvm.umin.i8(i8 %x, i8 %y) 986 %r = select i1 %i, i8 %x, i8 %m 987 ret i8 %r 988} 989 990define i8 @sge_xy_umin_fval(i8 %x, i8 %y) { 991; CHECK-LABEL: @sge_xy_umin_fval( 992; CHECK-NEXT: [[I:%.*]] = icmp sge i8 [[X:%.*]], [[Y:%.*]] 993; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umin.i8(i8 [[Y]], i8 [[X]]) 994; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[X]], i8 [[M]] 995; CHECK-NEXT: ret i8 [[R]] 996; 997 %i = icmp sge i8 %x, %y 998 %m = call i8 @llvm.umin.i8(i8 %y, i8 %x) 999 %r = select i1 %i, i8 %x, i8 %m 1000 ret i8 %r 1001} 1002 1003define i8 @ult_xy_umin_fval(i8 %x, i8 %y) { 1004; CHECK-LABEL: @ult_xy_umin_fval( 1005; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umin.i8(i8 [[X:%.*]], i8 [[Y:%.*]]) 1006; CHECK-NEXT: ret i8 [[M]] 1007; 1008 %i = icmp ult i8 %x, %y 1009 %m = call i8 @llvm.umin.i8(i8 %x, i8 %y) 1010 %r = select i1 %i, i8 %x, i8 %m 1011 ret i8 %r 1012} 1013 1014define i8 @ule_xy_umin_fval(i8 %x, i8 %y) { 1015; CHECK-LABEL: @ule_xy_umin_fval( 1016; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umin.i8(i8 [[Y:%.*]], i8 [[X:%.*]]) 1017; CHECK-NEXT: ret i8 [[M]] 1018; 1019 %i = icmp ule i8 %x, %y 1020 %m = call i8 @llvm.umin.i8(i8 %y, i8 %x) 1021 %r = select i1 %i, i8 %x, i8 %m 1022 ret i8 %r 1023} 1024 1025define i8 @ugt_xy_umin_fval(i8 %x, i8 %y) { 1026; CHECK-LABEL: @ugt_xy_umin_fval( 1027; CHECK-NEXT: ret i8 [[X:%.*]] 1028; 1029 %i = icmp ugt i8 %x, %y 1030 %m = call i8 @llvm.umin.i8(i8 %x, i8 %y) 1031 %r = select i1 %i, i8 %x, i8 %m 1032 ret i8 %r 1033} 1034 1035define i8 @uge_xy_umin_fval(i8 %x, i8 %y) { 1036; CHECK-LABEL: @uge_xy_umin_fval( 1037; CHECK-NEXT: ret i8 [[X:%.*]] 1038; 1039 %i = icmp uge i8 %x, %y 1040 %m = call i8 @llvm.umin.i8(i8 %y, i8 %x) 1041 %r = select i1 %i, i8 %x, i8 %m 1042 ret i8 %r 1043} 1044 1045define i8 @eq_xy_umin_fval(i8 %x, i8 %y) { 1046; CHECK-LABEL: @eq_xy_umin_fval( 1047; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umin.i8(i8 [[X:%.*]], i8 [[Y:%.*]]) 1048; CHECK-NEXT: ret i8 [[M]] 1049; 1050 %i = icmp eq i8 %x, %y 1051 %m = call i8 @llvm.umin.i8(i8 %x, i8 %y) 1052 %r = select i1 %i, i8 %x, i8 %m 1053 ret i8 %r 1054} 1055 1056define i8 @ne_xy_umin_fval(i8 %x, i8 %y) { 1057; CHECK-LABEL: @ne_xy_umin_fval( 1058; CHECK-NEXT: ret i8 [[X:%.*]] 1059; 1060 %i = icmp ne i8 %x, %y 1061 %m = call i8 @llvm.umin.i8(i8 %y, i8 %x) 1062 %r = select i1 %i, i8 %x, i8 %m 1063 ret i8 %r 1064} 1065 1066; swap icmp operands 1067 1068define i8 @slt_yx_umin_fval(i8 %x, i8 %y) { 1069; CHECK-LABEL: @slt_yx_umin_fval( 1070; CHECK-NEXT: [[I:%.*]] = icmp slt i8 [[Y:%.*]], [[X:%.*]] 1071; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umin.i8(i8 [[X]], i8 [[Y]]) 1072; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[X]], i8 [[M]] 1073; CHECK-NEXT: ret i8 [[R]] 1074; 1075 %i = icmp slt i8 %y, %x 1076 %m = call i8 @llvm.umin.i8(i8 %x, i8 %y) 1077 %r = select i1 %i, i8 %x, i8 %m 1078 ret i8 %r 1079} 1080 1081define i8 @sle_yx_umin_fval(i8 %x, i8 %y) { 1082; CHECK-LABEL: @sle_yx_umin_fval( 1083; CHECK-NEXT: [[I:%.*]] = icmp sle i8 [[Y:%.*]], [[X:%.*]] 1084; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umin.i8(i8 [[Y]], i8 [[X]]) 1085; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[X]], i8 [[M]] 1086; CHECK-NEXT: ret i8 [[R]] 1087; 1088 %i = icmp sle i8 %y, %x 1089 %m = call i8 @llvm.umin.i8(i8 %y, i8 %x) 1090 %r = select i1 %i, i8 %x, i8 %m 1091 ret i8 %r 1092} 1093 1094define i8 @sgt_yx_umin_fval(i8 %x, i8 %y) { 1095; CHECK-LABEL: @sgt_yx_umin_fval( 1096; CHECK-NEXT: [[I:%.*]] = icmp sgt i8 [[Y:%.*]], [[X:%.*]] 1097; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umin.i8(i8 [[X]], i8 [[Y]]) 1098; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[X]], i8 [[M]] 1099; CHECK-NEXT: ret i8 [[R]] 1100; 1101 %i = icmp sgt i8 %y, %x 1102 %m = call i8 @llvm.umin.i8(i8 %x, i8 %y) 1103 %r = select i1 %i, i8 %x, i8 %m 1104 ret i8 %r 1105} 1106 1107define i8 @sge_yx_umin_fval(i8 %x, i8 %y) { 1108; CHECK-LABEL: @sge_yx_umin_fval( 1109; CHECK-NEXT: [[I:%.*]] = icmp sge i8 [[Y:%.*]], [[X:%.*]] 1110; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umin.i8(i8 [[Y]], i8 [[X]]) 1111; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[X]], i8 [[M]] 1112; CHECK-NEXT: ret i8 [[R]] 1113; 1114 %i = icmp sge i8 %y, %x 1115 %m = call i8 @llvm.umin.i8(i8 %y, i8 %x) 1116 %r = select i1 %i, i8 %x, i8 %m 1117 ret i8 %r 1118} 1119 1120define i8 @ult_yx_umin_fval(i8 %x, i8 %y) { 1121; CHECK-LABEL: @ult_yx_umin_fval( 1122; CHECK-NEXT: ret i8 [[X:%.*]] 1123; 1124 %i = icmp ult i8 %y, %x 1125 %m = call i8 @llvm.umin.i8(i8 %x, i8 %y) 1126 %r = select i1 %i, i8 %x, i8 %m 1127 ret i8 %r 1128} 1129 1130define i8 @ule_yx_umin_fval(i8 %x, i8 %y) { 1131; CHECK-LABEL: @ule_yx_umin_fval( 1132; CHECK-NEXT: ret i8 [[X:%.*]] 1133; 1134 %i = icmp ule i8 %y, %x 1135 %m = call i8 @llvm.umin.i8(i8 %y, i8 %x) 1136 %r = select i1 %i, i8 %x, i8 %m 1137 ret i8 %r 1138} 1139 1140define i8 @ugt_yx_umin_fval(i8 %x, i8 %y) { 1141; CHECK-LABEL: @ugt_yx_umin_fval( 1142; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umin.i8(i8 [[X:%.*]], i8 [[Y:%.*]]) 1143; CHECK-NEXT: ret i8 [[M]] 1144; 1145 %i = icmp ugt i8 %y, %x 1146 %m = call i8 @llvm.umin.i8(i8 %x, i8 %y) 1147 %r = select i1 %i, i8 %x, i8 %m 1148 ret i8 %r 1149} 1150 1151define i8 @uge_yx_umin_fval(i8 %x, i8 %y) { 1152; CHECK-LABEL: @uge_yx_umin_fval( 1153; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umin.i8(i8 [[Y:%.*]], i8 [[X:%.*]]) 1154; CHECK-NEXT: ret i8 [[M]] 1155; 1156 %i = icmp uge i8 %y, %x 1157 %m = call i8 @llvm.umin.i8(i8 %y, i8 %x) 1158 %r = select i1 %i, i8 %x, i8 %m 1159 ret i8 %r 1160} 1161 1162define i8 @eq_yx_umin_fval(i8 %x, i8 %y) { 1163; CHECK-LABEL: @eq_yx_umin_fval( 1164; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umin.i8(i8 [[X:%.*]], i8 [[Y:%.*]]) 1165; CHECK-NEXT: ret i8 [[M]] 1166; 1167 %i = icmp eq i8 %y, %x 1168 %m = call i8 @llvm.umin.i8(i8 %x, i8 %y) 1169 %r = select i1 %i, i8 %x, i8 %m 1170 ret i8 %r 1171} 1172 1173define i8 @ne_yx_umin_fval(i8 %x, i8 %y) { 1174; CHECK-LABEL: @ne_yx_umin_fval( 1175; CHECK-NEXT: ret i8 [[X:%.*]] 1176; 1177 %i = icmp ne i8 %y, %x 1178 %m = call i8 @llvm.umin.i8(i8 %y, i8 %x) 1179 %r = select i1 %i, i8 %x, i8 %m 1180 ret i8 %r 1181} 1182 1183; swap select operands 1184 1185define i8 @slt_xy_umin_tval(i8 %x, i8 %y) { 1186; CHECK-LABEL: @slt_xy_umin_tval( 1187; CHECK-NEXT: [[I:%.*]] = icmp slt i8 [[X:%.*]], [[Y:%.*]] 1188; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umin.i8(i8 [[X]], i8 [[Y]]) 1189; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[M]], i8 [[X]] 1190; CHECK-NEXT: ret i8 [[R]] 1191; 1192 %i = icmp slt i8 %x, %y 1193 %m = call i8 @llvm.umin.i8(i8 %x, i8 %y) 1194 %r = select i1 %i, i8 %m, i8 %x 1195 ret i8 %r 1196} 1197 1198define i8 @sle_xy_umin_tval(i8 %x, i8 %y) { 1199; CHECK-LABEL: @sle_xy_umin_tval( 1200; CHECK-NEXT: [[I:%.*]] = icmp sle i8 [[X:%.*]], [[Y:%.*]] 1201; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umin.i8(i8 [[Y]], i8 [[X]]) 1202; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[M]], i8 [[X]] 1203; CHECK-NEXT: ret i8 [[R]] 1204; 1205 %i = icmp sle i8 %x, %y 1206 %m = call i8 @llvm.umin.i8(i8 %y, i8 %x) 1207 %r = select i1 %i, i8 %m, i8 %x 1208 ret i8 %r 1209} 1210 1211define i8 @sgt_xy_umin_tval(i8 %x, i8 %y) { 1212; CHECK-LABEL: @sgt_xy_umin_tval( 1213; CHECK-NEXT: [[I:%.*]] = icmp sgt i8 [[X:%.*]], [[Y:%.*]] 1214; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umin.i8(i8 [[X]], i8 [[Y]]) 1215; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[M]], i8 [[X]] 1216; CHECK-NEXT: ret i8 [[R]] 1217; 1218 %i = icmp sgt i8 %x, %y 1219 %m = call i8 @llvm.umin.i8(i8 %x, i8 %y) 1220 %r = select i1 %i, i8 %m, i8 %x 1221 ret i8 %r 1222} 1223 1224define i8 @sge_xy_umin_tval(i8 %x, i8 %y) { 1225; CHECK-LABEL: @sge_xy_umin_tval( 1226; CHECK-NEXT: [[I:%.*]] = icmp sge i8 [[X:%.*]], [[Y:%.*]] 1227; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umin.i8(i8 [[Y]], i8 [[X]]) 1228; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[M]], i8 [[X]] 1229; CHECK-NEXT: ret i8 [[R]] 1230; 1231 %i = icmp sge i8 %x, %y 1232 %m = call i8 @llvm.umin.i8(i8 %y, i8 %x) 1233 %r = select i1 %i, i8 %m, i8 %x 1234 ret i8 %r 1235} 1236 1237define i8 @ult_xy_umin_tval(i8 %x, i8 %y) { 1238; CHECK-LABEL: @ult_xy_umin_tval( 1239; CHECK-NEXT: ret i8 [[X:%.*]] 1240; 1241 %i = icmp ult i8 %x, %y 1242 %m = call i8 @llvm.umin.i8(i8 %x, i8 %y) 1243 %r = select i1 %i, i8 %m, i8 %x 1244 ret i8 %r 1245} 1246 1247define i8 @ule_xy_umin_tval(i8 %x, i8 %y) { 1248; CHECK-LABEL: @ule_xy_umin_tval( 1249; CHECK-NEXT: ret i8 [[X:%.*]] 1250; 1251 %i = icmp ule i8 %x, %y 1252 %m = call i8 @llvm.umin.i8(i8 %y, i8 %x) 1253 %r = select i1 %i, i8 %m, i8 %x 1254 ret i8 %r 1255} 1256 1257define i8 @ugt_xy_umin_tval(i8 %x, i8 %y) { 1258; CHECK-LABEL: @ugt_xy_umin_tval( 1259; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umin.i8(i8 [[X:%.*]], i8 [[Y:%.*]]) 1260; CHECK-NEXT: ret i8 [[M]] 1261; 1262 %i = icmp ugt i8 %x, %y 1263 %m = call i8 @llvm.umin.i8(i8 %x, i8 %y) 1264 %r = select i1 %i, i8 %m, i8 %x 1265 ret i8 %r 1266} 1267 1268define i8 @uge_xy_umin_tval(i8 %x, i8 %y) { 1269; CHECK-LABEL: @uge_xy_umin_tval( 1270; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umin.i8(i8 [[Y:%.*]], i8 [[X:%.*]]) 1271; CHECK-NEXT: ret i8 [[M]] 1272; 1273 %i = icmp uge i8 %x, %y 1274 %m = call i8 @llvm.umin.i8(i8 %y, i8 %x) 1275 %r = select i1 %i, i8 %m, i8 %x 1276 ret i8 %r 1277} 1278 1279define i8 @eq_xy_umin_tval(i8 %x, i8 %y) { 1280; CHECK-LABEL: @eq_xy_umin_tval( 1281; CHECK-NEXT: ret i8 [[X:%.*]] 1282; 1283 %i = icmp eq i8 %x, %y 1284 %m = call i8 @llvm.umin.i8(i8 %x, i8 %y) 1285 %r = select i1 %i, i8 %m, i8 %x 1286 ret i8 %r 1287} 1288 1289define i8 @ne_xy_umin_tval(i8 %x, i8 %y) { 1290; CHECK-LABEL: @ne_xy_umin_tval( 1291; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umin.i8(i8 [[Y:%.*]], i8 [[X:%.*]]) 1292; CHECK-NEXT: ret i8 [[M]] 1293; 1294 %i = icmp ne i8 %x, %y 1295 %m = call i8 @llvm.umin.i8(i8 %y, i8 %x) 1296 %r = select i1 %i, i8 %m, i8 %x 1297 ret i8 %r 1298} 1299 1300; swap icmp and select operands 1301 1302define i8 @slt_yx_umin_tval(i8 %x, i8 %y) { 1303; CHECK-LABEL: @slt_yx_umin_tval( 1304; CHECK-NEXT: [[I:%.*]] = icmp slt i8 [[Y:%.*]], [[X:%.*]] 1305; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umin.i8(i8 [[X]], i8 [[Y]]) 1306; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[M]], i8 [[X]] 1307; CHECK-NEXT: ret i8 [[R]] 1308; 1309 %i = icmp slt i8 %y, %x 1310 %m = call i8 @llvm.umin.i8(i8 %x, i8 %y) 1311 %r = select i1 %i, i8 %m, i8 %x 1312 ret i8 %r 1313} 1314 1315define i8 @sle_yx_umin_tval(i8 %x, i8 %y) { 1316; CHECK-LABEL: @sle_yx_umin_tval( 1317; CHECK-NEXT: [[I:%.*]] = icmp sle i8 [[Y:%.*]], [[X:%.*]] 1318; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umin.i8(i8 [[Y]], i8 [[X]]) 1319; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[M]], i8 [[X]] 1320; CHECK-NEXT: ret i8 [[R]] 1321; 1322 %i = icmp sle i8 %y, %x 1323 %m = call i8 @llvm.umin.i8(i8 %y, i8 %x) 1324 %r = select i1 %i, i8 %m, i8 %x 1325 ret i8 %r 1326} 1327 1328define i8 @sgt_yx_umin_tval(i8 %x, i8 %y) { 1329; CHECK-LABEL: @sgt_yx_umin_tval( 1330; CHECK-NEXT: [[I:%.*]] = icmp sgt i8 [[Y:%.*]], [[X:%.*]] 1331; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umin.i8(i8 [[X]], i8 [[Y]]) 1332; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[M]], i8 [[X]] 1333; CHECK-NEXT: ret i8 [[R]] 1334; 1335 %i = icmp sgt i8 %y, %x 1336 %m = call i8 @llvm.umin.i8(i8 %x, i8 %y) 1337 %r = select i1 %i, i8 %m, i8 %x 1338 ret i8 %r 1339} 1340 1341define i8 @sge_yx_umin_tval(i8 %x, i8 %y) { 1342; CHECK-LABEL: @sge_yx_umin_tval( 1343; CHECK-NEXT: [[I:%.*]] = icmp sge i8 [[Y:%.*]], [[X:%.*]] 1344; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umin.i8(i8 [[Y]], i8 [[X]]) 1345; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[M]], i8 [[X]] 1346; CHECK-NEXT: ret i8 [[R]] 1347; 1348 %i = icmp sge i8 %y, %x 1349 %m = call i8 @llvm.umin.i8(i8 %y, i8 %x) 1350 %r = select i1 %i, i8 %m, i8 %x 1351 ret i8 %r 1352} 1353 1354define i8 @ult_yx_umin_tval(i8 %x, i8 %y) { 1355; CHECK-LABEL: @ult_yx_umin_tval( 1356; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umin.i8(i8 [[X:%.*]], i8 [[Y:%.*]]) 1357; CHECK-NEXT: ret i8 [[M]] 1358; 1359 %i = icmp ult i8 %y, %x 1360 %m = call i8 @llvm.umin.i8(i8 %x, i8 %y) 1361 %r = select i1 %i, i8 %m, i8 %x 1362 ret i8 %r 1363} 1364 1365define i8 @ule_yx_umin_tval(i8 %x, i8 %y) { 1366; CHECK-LABEL: @ule_yx_umin_tval( 1367; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umin.i8(i8 [[Y:%.*]], i8 [[X:%.*]]) 1368; CHECK-NEXT: ret i8 [[M]] 1369; 1370 %i = icmp ule i8 %y, %x 1371 %m = call i8 @llvm.umin.i8(i8 %y, i8 %x) 1372 %r = select i1 %i, i8 %m, i8 %x 1373 ret i8 %r 1374} 1375 1376define i8 @ugt_yx_umin_tval(i8 %x, i8 %y) { 1377; CHECK-LABEL: @ugt_yx_umin_tval( 1378; CHECK-NEXT: ret i8 [[X:%.*]] 1379; 1380 %i = icmp ugt i8 %y, %x 1381 %m = call i8 @llvm.umin.i8(i8 %x, i8 %y) 1382 %r = select i1 %i, i8 %m, i8 %x 1383 ret i8 %r 1384} 1385 1386define i8 @uge_yx_umin_tval(i8 %x, i8 %y) { 1387; CHECK-LABEL: @uge_yx_umin_tval( 1388; CHECK-NEXT: ret i8 [[X:%.*]] 1389; 1390 %i = icmp uge i8 %y, %x 1391 %m = call i8 @llvm.umin.i8(i8 %y, i8 %x) 1392 %r = select i1 %i, i8 %m, i8 %x 1393 ret i8 %r 1394} 1395 1396define i8 @eq_yx_umin_tval(i8 %x, i8 %y) { 1397; CHECK-LABEL: @eq_yx_umin_tval( 1398; CHECK-NEXT: ret i8 [[X:%.*]] 1399; 1400 %i = icmp eq i8 %y, %x 1401 %m = call i8 @llvm.umin.i8(i8 %x, i8 %y) 1402 %r = select i1 %i, i8 %m, i8 %x 1403 ret i8 %r 1404} 1405 1406define i8 @ne_yx_umin_tval(i8 %x, i8 %y) { 1407; CHECK-LABEL: @ne_yx_umin_tval( 1408; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umin.i8(i8 [[Y:%.*]], i8 [[X:%.*]]) 1409; CHECK-NEXT: ret i8 [[M]] 1410; 1411 %i = icmp ne i8 %y, %x 1412 %m = call i8 @llvm.umin.i8(i8 %y, i8 %x) 1413 %r = select i1 %i, i8 %m, i8 %x 1414 ret i8 %r 1415} 1416 1417; umax 1418 1419define i8 @slt_xy_umax_fval(i8 %x, i8 %y) { 1420; CHECK-LABEL: @slt_xy_umax_fval( 1421; CHECK-NEXT: [[I:%.*]] = icmp slt i8 [[X:%.*]], [[Y:%.*]] 1422; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umax.i8(i8 [[X]], i8 [[Y]]) 1423; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[X]], i8 [[M]] 1424; CHECK-NEXT: ret i8 [[R]] 1425; 1426 %i = icmp slt i8 %x, %y 1427 %m = call i8 @llvm.umax.i8(i8 %x, i8 %y) 1428 %r = select i1 %i, i8 %x, i8 %m 1429 ret i8 %r 1430} 1431 1432define i8 @sle_xy_umax_fval(i8 %x, i8 %y) { 1433; CHECK-LABEL: @sle_xy_umax_fval( 1434; CHECK-NEXT: [[I:%.*]] = icmp sle i8 [[X:%.*]], [[Y:%.*]] 1435; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umax.i8(i8 [[Y]], i8 [[X]]) 1436; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[X]], i8 [[M]] 1437; CHECK-NEXT: ret i8 [[R]] 1438; 1439 %i = icmp sle i8 %x, %y 1440 %m = call i8 @llvm.umax.i8(i8 %y, i8 %x) 1441 %r = select i1 %i, i8 %x, i8 %m 1442 ret i8 %r 1443} 1444 1445define i8 @sgt_xy_umax_fval(i8 %x, i8 %y) { 1446; CHECK-LABEL: @sgt_xy_umax_fval( 1447; CHECK-NEXT: [[I:%.*]] = icmp sgt i8 [[X:%.*]], [[Y:%.*]] 1448; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umax.i8(i8 [[X]], i8 [[Y]]) 1449; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[X]], i8 [[M]] 1450; CHECK-NEXT: ret i8 [[R]] 1451; 1452 %i = icmp sgt i8 %x, %y 1453 %m = call i8 @llvm.umax.i8(i8 %x, i8 %y) 1454 %r = select i1 %i, i8 %x, i8 %m 1455 ret i8 %r 1456} 1457 1458define i8 @sge_xy_umax_fval(i8 %x, i8 %y) { 1459; CHECK-LABEL: @sge_xy_umax_fval( 1460; CHECK-NEXT: [[I:%.*]] = icmp sge i8 [[X:%.*]], [[Y:%.*]] 1461; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umax.i8(i8 [[Y]], i8 [[X]]) 1462; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[X]], i8 [[M]] 1463; CHECK-NEXT: ret i8 [[R]] 1464; 1465 %i = icmp sge i8 %x, %y 1466 %m = call i8 @llvm.umax.i8(i8 %y, i8 %x) 1467 %r = select i1 %i, i8 %x, i8 %m 1468 ret i8 %r 1469} 1470 1471define i8 @ult_xy_umax_fval(i8 %x, i8 %y) { 1472; CHECK-LABEL: @ult_xy_umax_fval( 1473; CHECK-NEXT: ret i8 [[X:%.*]] 1474; 1475 %i = icmp ult i8 %x, %y 1476 %m = call i8 @llvm.umax.i8(i8 %x, i8 %y) 1477 %r = select i1 %i, i8 %x, i8 %m 1478 ret i8 %r 1479} 1480 1481define i8 @ule_xy_umax_fval(i8 %x, i8 %y) { 1482; CHECK-LABEL: @ule_xy_umax_fval( 1483; CHECK-NEXT: ret i8 [[X:%.*]] 1484; 1485 %i = icmp ule i8 %x, %y 1486 %m = call i8 @llvm.umax.i8(i8 %y, i8 %x) 1487 %r = select i1 %i, i8 %x, i8 %m 1488 ret i8 %r 1489} 1490 1491define i8 @ugt_xy_umax_fval(i8 %x, i8 %y) { 1492; CHECK-LABEL: @ugt_xy_umax_fval( 1493; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umax.i8(i8 [[X:%.*]], i8 [[Y:%.*]]) 1494; CHECK-NEXT: ret i8 [[M]] 1495; 1496 %i = icmp ugt i8 %x, %y 1497 %m = call i8 @llvm.umax.i8(i8 %x, i8 %y) 1498 %r = select i1 %i, i8 %x, i8 %m 1499 ret i8 %r 1500} 1501 1502define i8 @uge_xy_umax_fval(i8 %x, i8 %y) { 1503; CHECK-LABEL: @uge_xy_umax_fval( 1504; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umax.i8(i8 [[Y:%.*]], i8 [[X:%.*]]) 1505; CHECK-NEXT: ret i8 [[M]] 1506; 1507 %i = icmp uge i8 %x, %y 1508 %m = call i8 @llvm.umax.i8(i8 %y, i8 %x) 1509 %r = select i1 %i, i8 %x, i8 %m 1510 ret i8 %r 1511} 1512 1513define i8 @eq_xy_umax_fval(i8 %x, i8 %y) { 1514; CHECK-LABEL: @eq_xy_umax_fval( 1515; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umax.i8(i8 [[X:%.*]], i8 [[Y:%.*]]) 1516; CHECK-NEXT: ret i8 [[M]] 1517; 1518 %i = icmp eq i8 %x, %y 1519 %m = call i8 @llvm.umax.i8(i8 %x, i8 %y) 1520 %r = select i1 %i, i8 %x, i8 %m 1521 ret i8 %r 1522} 1523 1524define i8 @ne_xy_umax_fval(i8 %x, i8 %y) { 1525; CHECK-LABEL: @ne_xy_umax_fval( 1526; CHECK-NEXT: ret i8 [[X:%.*]] 1527; 1528 %i = icmp ne i8 %x, %y 1529 %m = call i8 @llvm.umax.i8(i8 %y, i8 %x) 1530 %r = select i1 %i, i8 %x, i8 %m 1531 ret i8 %r 1532} 1533 1534; swap icmp operands 1535 1536define i8 @slt_yx_umax_fval(i8 %x, i8 %y) { 1537; CHECK-LABEL: @slt_yx_umax_fval( 1538; CHECK-NEXT: [[I:%.*]] = icmp slt i8 [[Y:%.*]], [[X:%.*]] 1539; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umax.i8(i8 [[X]], i8 [[Y]]) 1540; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[X]], i8 [[M]] 1541; CHECK-NEXT: ret i8 [[R]] 1542; 1543 %i = icmp slt i8 %y, %x 1544 %m = call i8 @llvm.umax.i8(i8 %x, i8 %y) 1545 %r = select i1 %i, i8 %x, i8 %m 1546 ret i8 %r 1547} 1548 1549define i8 @sle_yx_umax_fval(i8 %x, i8 %y) { 1550; CHECK-LABEL: @sle_yx_umax_fval( 1551; CHECK-NEXT: [[I:%.*]] = icmp sle i8 [[Y:%.*]], [[X:%.*]] 1552; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umax.i8(i8 [[Y]], i8 [[X]]) 1553; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[X]], i8 [[M]] 1554; CHECK-NEXT: ret i8 [[R]] 1555; 1556 %i = icmp sle i8 %y, %x 1557 %m = call i8 @llvm.umax.i8(i8 %y, i8 %x) 1558 %r = select i1 %i, i8 %x, i8 %m 1559 ret i8 %r 1560} 1561 1562define i8 @sgt_yx_umax_fval(i8 %x, i8 %y) { 1563; CHECK-LABEL: @sgt_yx_umax_fval( 1564; CHECK-NEXT: [[I:%.*]] = icmp sgt i8 [[Y:%.*]], [[X:%.*]] 1565; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umax.i8(i8 [[X]], i8 [[Y]]) 1566; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[X]], i8 [[M]] 1567; CHECK-NEXT: ret i8 [[R]] 1568; 1569 %i = icmp sgt i8 %y, %x 1570 %m = call i8 @llvm.umax.i8(i8 %x, i8 %y) 1571 %r = select i1 %i, i8 %x, i8 %m 1572 ret i8 %r 1573} 1574 1575define i8 @sge_yx_umax_fval(i8 %x, i8 %y) { 1576; CHECK-LABEL: @sge_yx_umax_fval( 1577; CHECK-NEXT: [[I:%.*]] = icmp sge i8 [[Y:%.*]], [[X:%.*]] 1578; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umax.i8(i8 [[Y]], i8 [[X]]) 1579; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[X]], i8 [[M]] 1580; CHECK-NEXT: ret i8 [[R]] 1581; 1582 %i = icmp sge i8 %y, %x 1583 %m = call i8 @llvm.umax.i8(i8 %y, i8 %x) 1584 %r = select i1 %i, i8 %x, i8 %m 1585 ret i8 %r 1586} 1587 1588define i8 @ult_yx_umax_fval(i8 %x, i8 %y) { 1589; CHECK-LABEL: @ult_yx_umax_fval( 1590; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umax.i8(i8 [[X:%.*]], i8 [[Y:%.*]]) 1591; CHECK-NEXT: ret i8 [[M]] 1592; 1593 %i = icmp ult i8 %y, %x 1594 %m = call i8 @llvm.umax.i8(i8 %x, i8 %y) 1595 %r = select i1 %i, i8 %x, i8 %m 1596 ret i8 %r 1597} 1598 1599define i8 @ule_yx_umax_fval(i8 %x, i8 %y) { 1600; CHECK-LABEL: @ule_yx_umax_fval( 1601; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umax.i8(i8 [[Y:%.*]], i8 [[X:%.*]]) 1602; CHECK-NEXT: ret i8 [[M]] 1603; 1604 %i = icmp ule i8 %y, %x 1605 %m = call i8 @llvm.umax.i8(i8 %y, i8 %x) 1606 %r = select i1 %i, i8 %x, i8 %m 1607 ret i8 %r 1608} 1609 1610define i8 @ugt_yx_umax_fval(i8 %x, i8 %y) { 1611; CHECK-LABEL: @ugt_yx_umax_fval( 1612; CHECK-NEXT: ret i8 [[X:%.*]] 1613; 1614 %i = icmp ugt i8 %y, %x 1615 %m = call i8 @llvm.umax.i8(i8 %x, i8 %y) 1616 %r = select i1 %i, i8 %x, i8 %m 1617 ret i8 %r 1618} 1619 1620define i8 @uge_yx_umax_fval(i8 %x, i8 %y) { 1621; CHECK-LABEL: @uge_yx_umax_fval( 1622; CHECK-NEXT: ret i8 [[X:%.*]] 1623; 1624 %i = icmp uge i8 %y, %x 1625 %m = call i8 @llvm.umax.i8(i8 %y, i8 %x) 1626 %r = select i1 %i, i8 %x, i8 %m 1627 ret i8 %r 1628} 1629 1630define i8 @eq_yx_umax_fval(i8 %x, i8 %y) { 1631; CHECK-LABEL: @eq_yx_umax_fval( 1632; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umax.i8(i8 [[X:%.*]], i8 [[Y:%.*]]) 1633; CHECK-NEXT: ret i8 [[M]] 1634; 1635 %i = icmp eq i8 %y, %x 1636 %m = call i8 @llvm.umax.i8(i8 %x, i8 %y) 1637 %r = select i1 %i, i8 %x, i8 %m 1638 ret i8 %r 1639} 1640 1641define i8 @ne_yx_umax_fval(i8 %x, i8 %y) { 1642; CHECK-LABEL: @ne_yx_umax_fval( 1643; CHECK-NEXT: ret i8 [[X:%.*]] 1644; 1645 %i = icmp ne i8 %y, %x 1646 %m = call i8 @llvm.umax.i8(i8 %y, i8 %x) 1647 %r = select i1 %i, i8 %x, i8 %m 1648 ret i8 %r 1649} 1650 1651; swap select operands 1652 1653define i8 @slt_xy_umax_tval(i8 %x, i8 %y) { 1654; CHECK-LABEL: @slt_xy_umax_tval( 1655; CHECK-NEXT: [[I:%.*]] = icmp slt i8 [[X:%.*]], [[Y:%.*]] 1656; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umax.i8(i8 [[X]], i8 [[Y]]) 1657; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[M]], i8 [[X]] 1658; CHECK-NEXT: ret i8 [[R]] 1659; 1660 %i = icmp slt i8 %x, %y 1661 %m = call i8 @llvm.umax.i8(i8 %x, i8 %y) 1662 %r = select i1 %i, i8 %m, i8 %x 1663 ret i8 %r 1664} 1665 1666define i8 @sle_xy_umax_tval(i8 %x, i8 %y) { 1667; CHECK-LABEL: @sle_xy_umax_tval( 1668; CHECK-NEXT: [[I:%.*]] = icmp sle i8 [[X:%.*]], [[Y:%.*]] 1669; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umax.i8(i8 [[Y]], i8 [[X]]) 1670; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[M]], i8 [[X]] 1671; CHECK-NEXT: ret i8 [[R]] 1672; 1673 %i = icmp sle i8 %x, %y 1674 %m = call i8 @llvm.umax.i8(i8 %y, i8 %x) 1675 %r = select i1 %i, i8 %m, i8 %x 1676 ret i8 %r 1677} 1678 1679define i8 @sgt_xy_umax_tval(i8 %x, i8 %y) { 1680; CHECK-LABEL: @sgt_xy_umax_tval( 1681; CHECK-NEXT: [[I:%.*]] = icmp sgt i8 [[X:%.*]], [[Y:%.*]] 1682; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umax.i8(i8 [[X]], i8 [[Y]]) 1683; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[M]], i8 [[X]] 1684; CHECK-NEXT: ret i8 [[R]] 1685; 1686 %i = icmp sgt i8 %x, %y 1687 %m = call i8 @llvm.umax.i8(i8 %x, i8 %y) 1688 %r = select i1 %i, i8 %m, i8 %x 1689 ret i8 %r 1690} 1691 1692define i8 @sge_xy_umax_tval(i8 %x, i8 %y) { 1693; CHECK-LABEL: @sge_xy_umax_tval( 1694; CHECK-NEXT: [[I:%.*]] = icmp sge i8 [[X:%.*]], [[Y:%.*]] 1695; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umax.i8(i8 [[Y]], i8 [[X]]) 1696; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[M]], i8 [[X]] 1697; CHECK-NEXT: ret i8 [[R]] 1698; 1699 %i = icmp sge i8 %x, %y 1700 %m = call i8 @llvm.umax.i8(i8 %y, i8 %x) 1701 %r = select i1 %i, i8 %m, i8 %x 1702 ret i8 %r 1703} 1704 1705define i8 @ult_xy_umax_tval(i8 %x, i8 %y) { 1706; CHECK-LABEL: @ult_xy_umax_tval( 1707; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umax.i8(i8 [[X:%.*]], i8 [[Y:%.*]]) 1708; CHECK-NEXT: ret i8 [[M]] 1709; 1710 %i = icmp ult i8 %x, %y 1711 %m = call i8 @llvm.umax.i8(i8 %x, i8 %y) 1712 %r = select i1 %i, i8 %m, i8 %x 1713 ret i8 %r 1714} 1715 1716define i8 @ule_xy_umax_tval(i8 %x, i8 %y) { 1717; CHECK-LABEL: @ule_xy_umax_tval( 1718; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umax.i8(i8 [[Y:%.*]], i8 [[X:%.*]]) 1719; CHECK-NEXT: ret i8 [[M]] 1720; 1721 %i = icmp ule i8 %x, %y 1722 %m = call i8 @llvm.umax.i8(i8 %y, i8 %x) 1723 %r = select i1 %i, i8 %m, i8 %x 1724 ret i8 %r 1725} 1726 1727define i8 @ugt_xy_umax_tval(i8 %x, i8 %y) { 1728; CHECK-LABEL: @ugt_xy_umax_tval( 1729; CHECK-NEXT: ret i8 [[X:%.*]] 1730; 1731 %i = icmp ugt i8 %x, %y 1732 %m = call i8 @llvm.umax.i8(i8 %x, i8 %y) 1733 %r = select i1 %i, i8 %m, i8 %x 1734 ret i8 %r 1735} 1736 1737define i8 @uge_xy_umax_tval(i8 %x, i8 %y) { 1738; CHECK-LABEL: @uge_xy_umax_tval( 1739; CHECK-NEXT: ret i8 [[X:%.*]] 1740; 1741 %i = icmp uge i8 %x, %y 1742 %m = call i8 @llvm.umax.i8(i8 %y, i8 %x) 1743 %r = select i1 %i, i8 %m, i8 %x 1744 ret i8 %r 1745} 1746 1747define i8 @eq_xy_umax_tval(i8 %x, i8 %y) { 1748; CHECK-LABEL: @eq_xy_umax_tval( 1749; CHECK-NEXT: ret i8 [[X:%.*]] 1750; 1751 %i = icmp eq i8 %x, %y 1752 %m = call i8 @llvm.umax.i8(i8 %x, i8 %y) 1753 %r = select i1 %i, i8 %m, i8 %x 1754 ret i8 %r 1755} 1756 1757define i8 @ne_xy_umax_tval(i8 %x, i8 %y) { 1758; CHECK-LABEL: @ne_xy_umax_tval( 1759; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umax.i8(i8 [[Y:%.*]], i8 [[X:%.*]]) 1760; CHECK-NEXT: ret i8 [[M]] 1761; 1762 %i = icmp ne i8 %x, %y 1763 %m = call i8 @llvm.umax.i8(i8 %y, i8 %x) 1764 %r = select i1 %i, i8 %m, i8 %x 1765 ret i8 %r 1766} 1767 1768; swap icmp and select operands 1769 1770define i8 @slt_yx_umax_tval(i8 %x, i8 %y) { 1771; CHECK-LABEL: @slt_yx_umax_tval( 1772; CHECK-NEXT: [[I:%.*]] = icmp slt i8 [[Y:%.*]], [[X:%.*]] 1773; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umax.i8(i8 [[X]], i8 [[Y]]) 1774; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[M]], i8 [[X]] 1775; CHECK-NEXT: ret i8 [[R]] 1776; 1777 %i = icmp slt i8 %y, %x 1778 %m = call i8 @llvm.umax.i8(i8 %x, i8 %y) 1779 %r = select i1 %i, i8 %m, i8 %x 1780 ret i8 %r 1781} 1782 1783define i8 @sle_yx_umax_tval(i8 %x, i8 %y) { 1784; CHECK-LABEL: @sle_yx_umax_tval( 1785; CHECK-NEXT: [[I:%.*]] = icmp sle i8 [[Y:%.*]], [[X:%.*]] 1786; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umax.i8(i8 [[Y]], i8 [[X]]) 1787; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[M]], i8 [[X]] 1788; CHECK-NEXT: ret i8 [[R]] 1789; 1790 %i = icmp sle i8 %y, %x 1791 %m = call i8 @llvm.umax.i8(i8 %y, i8 %x) 1792 %r = select i1 %i, i8 %m, i8 %x 1793 ret i8 %r 1794} 1795 1796define i8 @sgt_yx_umax_tval(i8 %x, i8 %y) { 1797; CHECK-LABEL: @sgt_yx_umax_tval( 1798; CHECK-NEXT: [[I:%.*]] = icmp sgt i8 [[Y:%.*]], [[X:%.*]] 1799; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umax.i8(i8 [[X]], i8 [[Y]]) 1800; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[M]], i8 [[X]] 1801; CHECK-NEXT: ret i8 [[R]] 1802; 1803 %i = icmp sgt i8 %y, %x 1804 %m = call i8 @llvm.umax.i8(i8 %x, i8 %y) 1805 %r = select i1 %i, i8 %m, i8 %x 1806 ret i8 %r 1807} 1808 1809define i8 @sge_yx_umax_tval(i8 %x, i8 %y) { 1810; CHECK-LABEL: @sge_yx_umax_tval( 1811; CHECK-NEXT: [[I:%.*]] = icmp sge i8 [[Y:%.*]], [[X:%.*]] 1812; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umax.i8(i8 [[Y]], i8 [[X]]) 1813; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[M]], i8 [[X]] 1814; CHECK-NEXT: ret i8 [[R]] 1815; 1816 %i = icmp sge i8 %y, %x 1817 %m = call i8 @llvm.umax.i8(i8 %y, i8 %x) 1818 %r = select i1 %i, i8 %m, i8 %x 1819 ret i8 %r 1820} 1821 1822define i8 @ult_yx_umax_tval(i8 %x, i8 %y) { 1823; CHECK-LABEL: @ult_yx_umax_tval( 1824; CHECK-NEXT: ret i8 [[X:%.*]] 1825; 1826 %i = icmp ult i8 %y, %x 1827 %m = call i8 @llvm.umax.i8(i8 %x, i8 %y) 1828 %r = select i1 %i, i8 %m, i8 %x 1829 ret i8 %r 1830} 1831 1832define i8 @ule_yx_umax_tval(i8 %x, i8 %y) { 1833; CHECK-LABEL: @ule_yx_umax_tval( 1834; CHECK-NEXT: ret i8 [[X:%.*]] 1835; 1836 %i = icmp ule i8 %y, %x 1837 %m = call i8 @llvm.umax.i8(i8 %y, i8 %x) 1838 %r = select i1 %i, i8 %m, i8 %x 1839 ret i8 %r 1840} 1841 1842define i8 @ugt_yx_umax_tval(i8 %x, i8 %y) { 1843; CHECK-LABEL: @ugt_yx_umax_tval( 1844; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umax.i8(i8 [[X:%.*]], i8 [[Y:%.*]]) 1845; CHECK-NEXT: ret i8 [[M]] 1846; 1847 %i = icmp ugt i8 %y, %x 1848 %m = call i8 @llvm.umax.i8(i8 %x, i8 %y) 1849 %r = select i1 %i, i8 %m, i8 %x 1850 ret i8 %r 1851} 1852 1853define i8 @uge_yx_umax_tval(i8 %x, i8 %y) { 1854; CHECK-LABEL: @uge_yx_umax_tval( 1855; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umax.i8(i8 [[Y:%.*]], i8 [[X:%.*]]) 1856; CHECK-NEXT: ret i8 [[M]] 1857; 1858 %i = icmp uge i8 %y, %x 1859 %m = call i8 @llvm.umax.i8(i8 %y, i8 %x) 1860 %r = select i1 %i, i8 %m, i8 %x 1861 ret i8 %r 1862} 1863 1864define i8 @eq_yx_umax_tval(i8 %x, i8 %y) { 1865; CHECK-LABEL: @eq_yx_umax_tval( 1866; CHECK-NEXT: ret i8 [[X:%.*]] 1867; 1868 %i = icmp eq i8 %y, %x 1869 %m = call i8 @llvm.umax.i8(i8 %x, i8 %y) 1870 %r = select i1 %i, i8 %m, i8 %x 1871 ret i8 %r 1872} 1873 1874define i8 @ne_yx_umax_tval(i8 %x, i8 %y) { 1875; CHECK-LABEL: @ne_yx_umax_tval( 1876; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umax.i8(i8 [[Y:%.*]], i8 [[X:%.*]]) 1877; CHECK-NEXT: ret i8 [[M]] 1878; 1879 %i = icmp ne i8 %y, %x 1880 %m = call i8 @llvm.umax.i8(i8 %y, i8 %x) 1881 %r = select i1 %i, i8 %m, i8 %x 1882 ret i8 %r 1883} 1884 1885; negative test - wrong cmp op 1886 1887define i8 @ne_yz_umax_tval(i8 %x, i8 %y, i8 %z) { 1888; CHECK-LABEL: @ne_yz_umax_tval( 1889; CHECK-NEXT: [[I:%.*]] = icmp ne i8 [[Y:%.*]], [[Z:%.*]] 1890; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umax.i8(i8 [[Y]], i8 [[X:%.*]]) 1891; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[M]], i8 [[X]] 1892; CHECK-NEXT: ret i8 [[R]] 1893; 1894 %i = icmp ne i8 %y, %z 1895 %m = call i8 @llvm.umax.i8(i8 %y, i8 %x) 1896 %r = select i1 %i, i8 %m, i8 %x 1897 ret i8 %r 1898} 1899 1900; negative test - wrong max op 1901 1902define i8 @ne_yx_umax_tval_wrong_op(i8 %x, i8 %y, i8 %z) { 1903; CHECK-LABEL: @ne_yx_umax_tval_wrong_op( 1904; CHECK-NEXT: [[I:%.*]] = icmp ne i8 [[Y:%.*]], [[X:%.*]] 1905; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umax.i8(i8 [[Z:%.*]], i8 [[X]]) 1906; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[M]], i8 [[X]] 1907; CHECK-NEXT: ret i8 [[R]] 1908; 1909 %i = icmp ne i8 %y, %x 1910 %m = call i8 @llvm.umax.i8(i8 %z, i8 %x) 1911 %r = select i1 %i, i8 %m, i8 %x 1912 ret i8 %r 1913} 1914 1915; negative test - wrong cmp op 1916 1917define i8 @eq_yz_umax_tval(i8 %x, i8 %y, i8 %z) { 1918; CHECK-LABEL: @eq_yz_umax_tval( 1919; CHECK-NEXT: [[I:%.*]] = icmp eq i8 [[Y:%.*]], [[Z:%.*]] 1920; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umax.i8(i8 [[Y]], i8 [[X:%.*]]) 1921; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[M]], i8 [[X]] 1922; CHECK-NEXT: ret i8 [[R]] 1923; 1924 %i = icmp eq i8 %y, %z 1925 %m = call i8 @llvm.umax.i8(i8 %y, i8 %x) 1926 %r = select i1 %i, i8 %m, i8 %x 1927 ret i8 %r 1928} 1929 1930; negative test - wrong max op 1931 1932define i8 @eq_yx_umax_tval_wrong_op(i8 %x, i8 %y, i8 %z) { 1933; CHECK-LABEL: @eq_yx_umax_tval_wrong_op( 1934; CHECK-NEXT: [[I:%.*]] = icmp eq i8 [[Y:%.*]], [[X:%.*]] 1935; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umax.i8(i8 [[Z:%.*]], i8 [[X]]) 1936; CHECK-NEXT: [[R:%.*]] = select i1 [[I]], i8 [[M]], i8 [[X]] 1937; CHECK-NEXT: ret i8 [[R]] 1938; 1939 %i = icmp eq i8 %y, %x 1940 %m = call i8 @llvm.umax.i8(i8 %z, i8 %x) 1941 %r = select i1 %i, i8 %m, i8 %x 1942 ret i8 %r 1943} 1944 1945; select with smin pred 1946 1947define <4 x i8> @slt_xy_smin_select_y_shuf_fval(<4 x i8> %x, <4 x i8> %y) { 1948; CHECK-LABEL: @slt_xy_smin_select_y_shuf_fval( 1949; CHECK-NEXT: [[M:%.*]] = call <4 x i8> @llvm.smin.v4i8(<4 x i8> [[X:%.*]], <4 x i8> [[Y:%.*]]) 1950; CHECK-NEXT: ret <4 x i8> [[M]] 1951; 1952 %i = icmp slt <4 x i8> %x, %y 1953 %m = call <4 x i8> @llvm.smin.v4i8(<4 x i8> %x, <4 x i8> %y) 1954 %s = shufflevector <4 x i8> %y, <4 x i8> %m, <4 x i32> <i32 0, i32 1, i32 6, i32 7> 1955 %r = select <4 x i1> %i, <4 x i8> %x, <4 x i8> %s 1956 ret <4 x i8> %r 1957} 1958 1959; negative test - wrong pred 1960 1961define <4 x i8> @sgt_xy_smin_select_y_shuf_fval(<4 x i8> %x, <4 x i8> %y) { 1962; CHECK-LABEL: @sgt_xy_smin_select_y_shuf_fval( 1963; CHECK-NEXT: [[I:%.*]] = icmp sgt <4 x i8> [[X:%.*]], [[Y:%.*]] 1964; CHECK-NEXT: [[M:%.*]] = call <4 x i8> @llvm.smin.v4i8(<4 x i8> [[X]], <4 x i8> [[Y]]) 1965; CHECK-NEXT: [[S:%.*]] = shufflevector <4 x i8> [[Y]], <4 x i8> [[M]], <4 x i32> <i32 0, i32 1, i32 6, i32 7> 1966; CHECK-NEXT: [[R:%.*]] = select <4 x i1> [[I]], <4 x i8> [[X]], <4 x i8> [[S]] 1967; CHECK-NEXT: ret <4 x i8> [[R]] 1968; 1969 %i = icmp sgt <4 x i8> %x, %y 1970 %m = call <4 x i8> @llvm.smin.v4i8(<4 x i8> %x, <4 x i8> %y) 1971 %s = shufflevector <4 x i8> %y, <4 x i8> %m, <4 x i32> <i32 0, i32 1, i32 6, i32 7> 1972 %r = select <4 x i1> %i, <4 x i8> %x, <4 x i8> %s 1973 ret <4 x i8> %r 1974} 1975 1976; negative test - wrong shuffle op 1977 1978define <4 x i8> @slt_xy_smin_select_x_shuf_fval(<4 x i8> %x, <4 x i8> %y) { 1979; CHECK-LABEL: @slt_xy_smin_select_x_shuf_fval( 1980; CHECK-NEXT: [[I:%.*]] = icmp slt <4 x i8> [[X:%.*]], [[Y:%.*]] 1981; CHECK-NEXT: [[M:%.*]] = call <4 x i8> @llvm.smin.v4i8(<4 x i8> [[X]], <4 x i8> [[Y]]) 1982; CHECK-NEXT: [[S:%.*]] = shufflevector <4 x i8> [[X]], <4 x i8> [[M]], <4 x i32> <i32 0, i32 1, i32 6, i32 7> 1983; CHECK-NEXT: [[R:%.*]] = select <4 x i1> [[I]], <4 x i8> [[X]], <4 x i8> [[S]] 1984; CHECK-NEXT: ret <4 x i8> [[R]] 1985; 1986 %i = icmp slt <4 x i8> %x, %y 1987 %m = call <4 x i8> @llvm.smin.v4i8(<4 x i8> %x, <4 x i8> %y) 1988 %s = shufflevector <4 x i8> %x, <4 x i8> %m, <4 x i32> <i32 0, i32 1, i32 6, i32 7> 1989 %r = select <4 x i1> %i, <4 x i8> %x, <4 x i8> %s 1990 ret <4 x i8> %r 1991} 1992 1993; select with non-strict smax pred 1994 1995define <4 x i8> @sge_xy_smax_select_y_shuf_fval(<4 x i8> %x, <4 x i8> %y) { 1996; CHECK-LABEL: @sge_xy_smax_select_y_shuf_fval( 1997; CHECK-NEXT: [[M:%.*]] = call <4 x i8> @llvm.smax.v4i8(<4 x i8> [[Y:%.*]], <4 x i8> [[X:%.*]]) 1998; CHECK-NEXT: ret <4 x i8> [[M]] 1999; 2000 %i = icmp sge <4 x i8> %x, %y 2001 %m = call <4 x i8> @llvm.smax.v4i8(<4 x i8> %y, <4 x i8> %x) 2002 %s = shufflevector <4 x i8> %y, <4 x i8> %m, <4 x i32> <i32 4, i32 1, i32 6, i32 3> 2003 %r = select <4 x i1> %i, <4 x i8> %x, <4 x i8> %s 2004 ret <4 x i8> %r 2005} 2006 2007; negative test - wrong (swapped) pred 2008 2009define <4 x i8> @sle_yx_smax_select_y_shuf_fval(<4 x i8> %x, <4 x i8> %y) { 2010; CHECK-LABEL: @sle_yx_smax_select_y_shuf_fval( 2011; CHECK-NEXT: [[I:%.*]] = icmp sge <4 x i8> [[Y:%.*]], [[X:%.*]] 2012; CHECK-NEXT: [[M:%.*]] = call <4 x i8> @llvm.smax.v4i8(<4 x i8> [[Y]], <4 x i8> [[X]]) 2013; CHECK-NEXT: [[S:%.*]] = shufflevector <4 x i8> [[Y]], <4 x i8> [[M]], <4 x i32> <i32 4, i32 1, i32 6, i32 3> 2014; CHECK-NEXT: [[R:%.*]] = select <4 x i1> [[I]], <4 x i8> [[X]], <4 x i8> [[S]] 2015; CHECK-NEXT: ret <4 x i8> [[R]] 2016; 2017 %i = icmp sge <4 x i8> %y, %x 2018 %m = call <4 x i8> @llvm.smax.v4i8(<4 x i8> %y, <4 x i8> %x) 2019 %s = shufflevector <4 x i8> %y, <4 x i8> %m, <4 x i32> <i32 4, i32 1, i32 6, i32 3> 2020 %r = select <4 x i1> %i, <4 x i8> %x, <4 x i8> %s 2021 ret <4 x i8> %r 2022} 2023 2024; negative test - wrong shuffle op 2025 2026define <4 x i8> @sge_xy_smax_select_x_shuf_fval(<4 x i8> %x, <4 x i8> %y) { 2027; CHECK-LABEL: @sge_xy_smax_select_x_shuf_fval( 2028; CHECK-NEXT: [[I:%.*]] = icmp sge <4 x i8> [[X:%.*]], [[Y:%.*]] 2029; CHECK-NEXT: [[M:%.*]] = call <4 x i8> @llvm.smax.v4i8(<4 x i8> [[Y]], <4 x i8> [[X]]) 2030; CHECK-NEXT: [[S:%.*]] = shufflevector <4 x i8> [[X]], <4 x i8> [[M]], <4 x i32> <i32 4, i32 1, i32 6, i32 3> 2031; CHECK-NEXT: [[R:%.*]] = select <4 x i1> [[I]], <4 x i8> [[X]], <4 x i8> [[S]] 2032; CHECK-NEXT: ret <4 x i8> [[R]] 2033; 2034 %i = icmp sge <4 x i8> %x, %y 2035 %m = call <4 x i8> @llvm.smax.v4i8(<4 x i8> %y, <4 x i8> %x) 2036 %s = shufflevector <4 x i8> %x, <4 x i8> %m, <4 x i32> <i32 4, i32 1, i32 6, i32 3> 2037 %r = select <4 x i1> %i, <4 x i8> %x, <4 x i8> %s 2038 ret <4 x i8> %r 2039} 2040 2041; select with non-strict inverted umin pred 2042 2043define <4 x i8> @uge_xy_umin_select_y_shuf_tval(<4 x i8> %x, <4 x i8> %y) { 2044; CHECK-LABEL: @uge_xy_umin_select_y_shuf_tval( 2045; CHECK-NEXT: [[M:%.*]] = call <4 x i8> @llvm.umin.v4i8(<4 x i8> [[X:%.*]], <4 x i8> [[Y:%.*]]) 2046; CHECK-NEXT: ret <4 x i8> [[M]] 2047; 2048 %i = icmp uge <4 x i8> %x, %y 2049 %m = call <4 x i8> @llvm.umin.v4i8(<4 x i8> %x, <4 x i8> %y) 2050 %s = shufflevector <4 x i8> %m, <4 x i8> %y, <4 x i32> <i32 0, i32 1, i32 2, i32 7> 2051 %r = select <4 x i1> %i, <4 x i8> %s, <4 x i8> %x 2052 ret <4 x i8> %r 2053} 2054 2055; negative test - wrong pred 2056 2057define <4 x i8> @uge_xy_umin_select_y_shuf_fval(<4 x i8> %x, <4 x i8> %y) { 2058; CHECK-LABEL: @uge_xy_umin_select_y_shuf_fval( 2059; CHECK-NEXT: [[I:%.*]] = icmp uge <4 x i8> [[X:%.*]], [[Y:%.*]] 2060; CHECK-NEXT: [[M:%.*]] = call <4 x i8> @llvm.umin.v4i8(<4 x i8> [[X]], <4 x i8> [[Y]]) 2061; CHECK-NEXT: [[S:%.*]] = shufflevector <4 x i8> [[M]], <4 x i8> [[Y]], <4 x i32> <i32 0, i32 1, i32 2, i32 7> 2062; CHECK-NEXT: [[R:%.*]] = select <4 x i1> [[I]], <4 x i8> [[X]], <4 x i8> [[S]] 2063; CHECK-NEXT: ret <4 x i8> [[R]] 2064; 2065 %i = icmp uge <4 x i8> %x, %y 2066 %m = call <4 x i8> @llvm.umin.v4i8(<4 x i8> %x, <4 x i8> %y) 2067 %s = shufflevector <4 x i8> %m, <4 x i8> %y, <4 x i32> <i32 0, i32 1, i32 2, i32 7> 2068 %r = select <4 x i1> %i, <4 x i8> %x, <4 x i8> %s 2069 ret <4 x i8> %r 2070} 2071 2072; negative test - wrong shuffle op 2073 2074define <4 x i8> @uge_xy_umin_select_x_shuf_tval(<4 x i8> %x, <4 x i8> %y) { 2075; CHECK-LABEL: @uge_xy_umin_select_x_shuf_tval( 2076; CHECK-NEXT: [[I:%.*]] = icmp uge <4 x i8> [[X:%.*]], [[Y:%.*]] 2077; CHECK-NEXT: [[M:%.*]] = call <4 x i8> @llvm.umin.v4i8(<4 x i8> [[X]], <4 x i8> [[Y]]) 2078; CHECK-NEXT: [[S:%.*]] = shufflevector <4 x i8> [[M]], <4 x i8> [[X]], <4 x i32> <i32 0, i32 1, i32 2, i32 7> 2079; CHECK-NEXT: [[R:%.*]] = select <4 x i1> [[I]], <4 x i8> [[S]], <4 x i8> [[X]] 2080; CHECK-NEXT: ret <4 x i8> [[R]] 2081; 2082 %i = icmp uge <4 x i8> %x, %y 2083 %m = call <4 x i8> @llvm.umin.v4i8(<4 x i8> %x, <4 x i8> %y) 2084 %s = shufflevector <4 x i8> %m, <4 x i8> %x, <4 x i32> <i32 0, i32 1, i32 2, i32 7> 2085 %r = select <4 x i1> %i, <4 x i8> %s, <4 x i8> %x 2086 ret <4 x i8> %r 2087} 2088 2089; select with swapped umax pred 2090 2091define <4 x i8> @ult_yx_umax_select_y_shuf_fval(<4 x i8> %x, <4 x i8> %y) { 2092; CHECK-LABEL: @ult_yx_umax_select_y_shuf_fval( 2093; CHECK-NEXT: [[M:%.*]] = call <4 x i8> @llvm.umax.v4i8(<4 x i8> [[Y:%.*]], <4 x i8> [[X:%.*]]) 2094; CHECK-NEXT: ret <4 x i8> [[M]] 2095; 2096 %i = icmp ult <4 x i8> %y, %x 2097 %m = call <4 x i8> @llvm.umax.v4i8(<4 x i8> %y, <4 x i8> %x) 2098 %s = shufflevector <4 x i8> %y, <4 x i8> %m, <4 x i32> <i32 4, i32 1, i32 2, i32 3> 2099 %r = select <4 x i1> %i, <4 x i8> %x, <4 x i8> %s 2100 ret <4 x i8> %r 2101} 2102 2103; negative test - wrong (inverted+swapped) pred 2104 2105define <4 x i8> @ult_yx_umax_select_y_shuf_tval(<4 x i8> %x, <4 x i8> %y) { 2106; CHECK-LABEL: @ult_yx_umax_select_y_shuf_tval( 2107; CHECK-NEXT: [[I:%.*]] = icmp ult <4 x i8> [[Y:%.*]], [[X:%.*]] 2108; CHECK-NEXT: [[M:%.*]] = call <4 x i8> @llvm.umax.v4i8(<4 x i8> [[Y]], <4 x i8> [[X]]) 2109; CHECK-NEXT: [[S:%.*]] = shufflevector <4 x i8> [[Y]], <4 x i8> [[M]], <4 x i32> <i32 4, i32 1, i32 2, i32 3> 2110; CHECK-NEXT: [[R:%.*]] = select <4 x i1> [[I]], <4 x i8> [[S]], <4 x i8> [[X]] 2111; CHECK-NEXT: ret <4 x i8> [[R]] 2112; 2113 %i = icmp ult <4 x i8> %y, %x 2114 %m = call <4 x i8> @llvm.umax.v4i8(<4 x i8> %y, <4 x i8> %x) 2115 %s = shufflevector <4 x i8> %y, <4 x i8> %m, <4 x i32> <i32 4, i32 1, i32 2, i32 3> 2116 %r = select <4 x i1> %i, <4 x i8> %s, <4 x i8> %x 2117 ret <4 x i8> %r 2118} 2119 2120; negative test - wrong shuffle mask 2121 2122define <4 x i8> @ult_yx_umax_select_y_shuf_mask_fval(<4 x i8> %x, <4 x i8> %y) { 2123; CHECK-LABEL: @ult_yx_umax_select_y_shuf_mask_fval( 2124; CHECK-NEXT: [[I:%.*]] = icmp ult <4 x i8> [[Y:%.*]], [[X:%.*]] 2125; CHECK-NEXT: [[M:%.*]] = call <4 x i8> @llvm.umax.v4i8(<4 x i8> [[Y]], <4 x i8> [[X]]) 2126; CHECK-NEXT: [[S:%.*]] = shufflevector <4 x i8> [[Y]], <4 x i8> [[M]], <4 x i32> <i32 5, i32 1, i32 2, i32 3> 2127; CHECK-NEXT: [[R:%.*]] = select <4 x i1> [[I]], <4 x i8> [[X]], <4 x i8> [[S]] 2128; CHECK-NEXT: ret <4 x i8> [[R]] 2129; 2130 %i = icmp ult <4 x i8> %y, %x 2131 %m = call <4 x i8> @llvm.umax.v4i8(<4 x i8> %y, <4 x i8> %x) 2132 %s = shufflevector <4 x i8> %y, <4 x i8> %m, <4 x i32> <i32 5, i32 1, i32 2, i32 3> 2133 %r = select <4 x i1> %i, <4 x i8> %x, <4 x i8> %s 2134 ret <4 x i8> %r 2135} 2136 2137define i8 @select_umin_with_icmp_zero(i8 %x, i8 %y) { 2138; CHECK-LABEL: @select_umin_with_icmp_zero( 2139; CHECK-NEXT: ret i8 0 2140; 2141 %min = call i8 @llvm.umin.i8(i8 %x, i8 %y) 2142 %cmp = icmp eq i8 %x, 0 2143 %sel = select i1 %cmp, i8 %min, i8 0 2144 ret i8 %sel 2145} 2146