1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt < %s -instsimplify -S | FileCheck %s 3 4declare i32 @llvm.vector.reduce.add.v1i32(<1 x i32> %a) 5declare i32 @llvm.vector.reduce.add.v8i32(<8 x i32> %a) 6declare i32 @llvm.vector.reduce.mul.v1i32(<1 x i32> %a) 7declare i32 @llvm.vector.reduce.mul.v8i32(<8 x i32> %a) 8declare i32 @llvm.vector.reduce.and.v1i32(<1 x i32> %a) 9declare i32 @llvm.vector.reduce.and.v8i32(<8 x i32> %a) 10declare i32 @llvm.vector.reduce.or.v1i32(<1 x i32> %a) 11declare i32 @llvm.vector.reduce.or.v8i32(<8 x i32> %a) 12declare i32 @llvm.vector.reduce.xor.v1i32(<1 x i32> %a) 13declare i32 @llvm.vector.reduce.xor.v8i32(<8 x i32> %a) 14declare i32 @llvm.vector.reduce.smin.v1i32(<1 x i32> %a) 15declare i32 @llvm.vector.reduce.smin.v8i32(<8 x i32> %a) 16declare i32 @llvm.vector.reduce.smax.v1i32(<1 x i32> %a) 17declare i32 @llvm.vector.reduce.smax.v8i32(<8 x i32> %a) 18declare i32 @llvm.vector.reduce.umin.v1i32(<1 x i32> %a) 19declare i32 @llvm.vector.reduce.umin.v8i32(<8 x i32> %a) 20declare i32 @llvm.vector.reduce.umax.v1i32(<1 x i32> %a) 21declare i32 @llvm.vector.reduce.umax.v8i32(<8 x i32> %a) 22 23 24define i32 @add_0() { 25; CHECK-LABEL: @add_0( 26; CHECK-NEXT: ret i32 0 27; 28 %x = call i32 @llvm.vector.reduce.add.v8i32(<8 x i32> zeroinitializer) 29 ret i32 %x 30} 31 32define i32 @add_1() { 33; CHECK-LABEL: @add_1( 34; CHECK-NEXT: ret i32 8 35; 36 %x = call i32 @llvm.vector.reduce.add.v8i32(<8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>) 37 ret i32 %x 38} 39 40define i32 @add_inc() { 41; CHECK-LABEL: @add_inc( 42; CHECK-NEXT: ret i32 18 43; 44 %x = call i32 @llvm.vector.reduce.add.v8i32(<8 x i32> <i32 1, i32 -3, i32 5, i32 7, i32 2, i32 4, i32 -6, i32 8>) 45 ret i32 %x 46} 47 48define i32 @add_1v() { 49; CHECK-LABEL: @add_1v( 50; CHECK-NEXT: ret i32 10 51; 52 %x = call i32 @llvm.vector.reduce.add.v1i32(<1 x i32> <i32 10>) 53 ret i32 %x 54} 55 56define i32 @add_undef() { 57; CHECK-LABEL: @add_undef( 58; CHECK-NEXT: [[X:%.*]] = call i32 @llvm.vector.reduce.add.v8i32(<8 x i32> undef) 59; CHECK-NEXT: ret i32 [[X]] 60; 61 %x = call i32 @llvm.vector.reduce.add.v8i32(<8 x i32> undef) 62 ret i32 %x 63} 64 65define i32 @add_undef1() { 66; CHECK-LABEL: @add_undef1( 67; CHECK-NEXT: [[X:%.*]] = call i32 @llvm.vector.reduce.add.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>) 68; CHECK-NEXT: ret i32 [[X]] 69; 70 %x = call i32 @llvm.vector.reduce.add.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>) 71 ret i32 %x 72} 73 74define i32 @add_poison() { 75; CHECK-LABEL: @add_poison( 76; CHECK-NEXT: ret i32 poison 77; 78 %x = call i32 @llvm.vector.reduce.add.v8i32(<8 x i32> poison) 79 ret i32 %x 80} 81 82define i32 @add_poison1() { 83; CHECK-LABEL: @add_poison1( 84; CHECK-NEXT: ret i32 poison 85; 86 %x = call i32 @llvm.vector.reduce.add.v8i32(<8 x i32> <i32 1, i32 1, i32 poison, i32 1, i32 1, i32 42, i32 1, i32 1>) 87 ret i32 %x 88} 89 90define i32 @mul_0() { 91; CHECK-LABEL: @mul_0( 92; CHECK-NEXT: ret i32 0 93; 94 %x = call i32 @llvm.vector.reduce.mul.v8i32(<8 x i32> zeroinitializer) 95 ret i32 %x 96} 97 98define i32 @mul_1() { 99; CHECK-LABEL: @mul_1( 100; CHECK-NEXT: ret i32 1 101; 102 %x = call i32 @llvm.vector.reduce.mul.v8i32(<8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>) 103 ret i32 %x 104} 105 106define i32 @mul_inc() { 107; CHECK-LABEL: @mul_inc( 108; CHECK-NEXT: ret i32 40320 109; 110 %x = call i32 @llvm.vector.reduce.mul.v8i32(<8 x i32> <i32 1, i32 -3, i32 5, i32 7, i32 2, i32 4, i32 -6, i32 8>) 111 ret i32 %x 112} 113 114define i32 @mul_1v() { 115; CHECK-LABEL: @mul_1v( 116; CHECK-NEXT: ret i32 10 117; 118 %x = call i32 @llvm.vector.reduce.mul.v1i32(<1 x i32> <i32 10>) 119 ret i32 %x 120} 121 122define i32 @mul_undef() { 123; CHECK-LABEL: @mul_undef( 124; CHECK-NEXT: [[X:%.*]] = call i32 @llvm.vector.reduce.mul.v8i32(<8 x i32> undef) 125; CHECK-NEXT: ret i32 [[X]] 126; 127 %x = call i32 @llvm.vector.reduce.mul.v8i32(<8 x i32> undef) 128 ret i32 %x 129} 130 131define i32 @mul_undef1() { 132; CHECK-LABEL: @mul_undef1( 133; CHECK-NEXT: [[X:%.*]] = call i32 @llvm.vector.reduce.mul.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>) 134; CHECK-NEXT: ret i32 [[X]] 135; 136 %x = call i32 @llvm.vector.reduce.mul.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>) 137 ret i32 %x 138} 139 140define i32 @mul_poison() { 141; CHECK-LABEL: @mul_poison( 142; CHECK-NEXT: ret i32 poison 143; 144 %x = call i32 @llvm.vector.reduce.mul.v8i32(<8 x i32> poison) 145 ret i32 %x 146} 147 148define i32 @mul_poison1() { 149; CHECK-LABEL: @mul_poison1( 150; CHECK-NEXT: ret i32 poison 151; 152 %x = call i32 @llvm.vector.reduce.mul.v8i32(<8 x i32> <i32 0, i32 1, i32 poison, i32 1, i32 1, i32 1, i32 1, i32 1>) 153 ret i32 %x 154} 155 156define i32 @and_0() { 157; CHECK-LABEL: @and_0( 158; CHECK-NEXT: ret i32 0 159; 160 %x = call i32 @llvm.vector.reduce.and.v8i32(<8 x i32> zeroinitializer) 161 ret i32 %x 162} 163 164define i32 @and_1() { 165; CHECK-LABEL: @and_1( 166; CHECK-NEXT: ret i32 1 167; 168 %x = call i32 @llvm.vector.reduce.and.v8i32(<8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>) 169 ret i32 %x 170} 171 172define i32 @and_inc() { 173; CHECK-LABEL: @and_inc( 174; CHECK-NEXT: ret i32 0 175; 176 %x = call i32 @llvm.vector.reduce.and.v8i32(<8 x i32> <i32 1, i32 -3, i32 5, i32 7, i32 2, i32 4, i32 -6, i32 8>) 177 ret i32 %x 178} 179 180define i32 @and_1v() { 181; CHECK-LABEL: @and_1v( 182; CHECK-NEXT: ret i32 10 183; 184 %x = call i32 @llvm.vector.reduce.and.v1i32(<1 x i32> <i32 10>) 185 ret i32 %x 186} 187 188define i32 @and_undef() { 189; CHECK-LABEL: @and_undef( 190; CHECK-NEXT: [[X:%.*]] = call i32 @llvm.vector.reduce.and.v8i32(<8 x i32> undef) 191; CHECK-NEXT: ret i32 [[X]] 192; 193 %x = call i32 @llvm.vector.reduce.and.v8i32(<8 x i32> undef) 194 ret i32 %x 195} 196 197define i32 @and_undef1() { 198; CHECK-LABEL: @and_undef1( 199; CHECK-NEXT: [[X:%.*]] = call i32 @llvm.vector.reduce.and.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>) 200; CHECK-NEXT: ret i32 [[X]] 201; 202 %x = call i32 @llvm.vector.reduce.and.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>) 203 ret i32 %x 204} 205 206define i32 @and_poison() { 207; CHECK-LABEL: @and_poison( 208; CHECK-NEXT: ret i32 poison 209; 210 %x = call i32 @llvm.vector.reduce.and.v8i32(<8 x i32> poison) 211 ret i32 %x 212} 213 214define i32 @and_poison1() { 215; CHECK-LABEL: @and_poison1( 216; CHECK-NEXT: ret i32 poison 217; 218 %x = call i32 @llvm.vector.reduce.and.v8i32(<8 x i32> <i32 -1, i32 1, i32 poison, i32 1, i32 1, i32 1, i32 1, i32 1>) 219 ret i32 %x 220} 221 222define i32 @or_0() { 223; CHECK-LABEL: @or_0( 224; CHECK-NEXT: ret i32 0 225; 226 %x = call i32 @llvm.vector.reduce.or.v8i32(<8 x i32> zeroinitializer) 227 ret i32 %x 228} 229 230define i32 @or_1() { 231; CHECK-LABEL: @or_1( 232; CHECK-NEXT: ret i32 1 233; 234 %x = call i32 @llvm.vector.reduce.or.v8i32(<8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>) 235 ret i32 %x 236} 237 238define i32 @or_inc() { 239; CHECK-LABEL: @or_inc( 240; CHECK-NEXT: ret i32 -1 241; 242 %x = call i32 @llvm.vector.reduce.or.v8i32(<8 x i32> <i32 1, i32 -3, i32 5, i32 7, i32 2, i32 4, i32 -6, i32 8>) 243 ret i32 %x 244} 245 246define i32 @or_1v() { 247; CHECK-LABEL: @or_1v( 248; CHECK-NEXT: ret i32 10 249; 250 %x = call i32 @llvm.vector.reduce.or.v1i32(<1 x i32> <i32 10>) 251 ret i32 %x 252} 253 254define i32 @or_undef() { 255; CHECK-LABEL: @or_undef( 256; CHECK-NEXT: [[X:%.*]] = call i32 @llvm.vector.reduce.or.v8i32(<8 x i32> undef) 257; CHECK-NEXT: ret i32 [[X]] 258; 259 %x = call i32 @llvm.vector.reduce.or.v8i32(<8 x i32> undef) 260 ret i32 %x 261} 262 263define i32 @or_undef1() { 264; CHECK-LABEL: @or_undef1( 265; CHECK-NEXT: [[X:%.*]] = call i32 @llvm.vector.reduce.or.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>) 266; CHECK-NEXT: ret i32 [[X]] 267; 268 %x = call i32 @llvm.vector.reduce.or.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>) 269 ret i32 %x 270} 271 272define i32 @or_poison() { 273; CHECK-LABEL: @or_poison( 274; CHECK-NEXT: ret i32 poison 275; 276 %x = call i32 @llvm.vector.reduce.or.v8i32(<8 x i32> poison) 277 ret i32 %x 278} 279 280define i32 @or_poison1() { 281; CHECK-LABEL: @or_poison1( 282; CHECK-NEXT: ret i32 poison 283; 284 %x = call i32 @llvm.vector.reduce.or.v8i32(<8 x i32> <i32 1, i32 0, i32 poison, i32 1, i32 1, i32 1, i32 1, i32 1>) 285 ret i32 %x 286} 287 288define i32 @xor_0() { 289; CHECK-LABEL: @xor_0( 290; CHECK-NEXT: ret i32 0 291; 292 %x = call i32 @llvm.vector.reduce.xor.v8i32(<8 x i32> zeroinitializer) 293 ret i32 %x 294} 295 296define i32 @xor_1() { 297; CHECK-LABEL: @xor_1( 298; CHECK-NEXT: ret i32 0 299; 300 %x = call i32 @llvm.vector.reduce.xor.v8i32(<8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>) 301 ret i32 %x 302} 303 304define i32 @xor_inc() { 305; CHECK-LABEL: @xor_inc( 306; CHECK-NEXT: ret i32 10 307; 308 %x = call i32 @llvm.vector.reduce.xor.v8i32(<8 x i32> <i32 1, i32 -3, i32 5, i32 7, i32 2, i32 4, i32 -6, i32 8>) 309 ret i32 %x 310} 311 312define i32 @xor_1v() { 313; CHECK-LABEL: @xor_1v( 314; CHECK-NEXT: ret i32 10 315; 316 %x = call i32 @llvm.vector.reduce.xor.v1i32(<1 x i32> <i32 10>) 317 ret i32 %x 318} 319 320define i32 @xor_undef() { 321; CHECK-LABEL: @xor_undef( 322; CHECK-NEXT: [[X:%.*]] = call i32 @llvm.vector.reduce.xor.v8i32(<8 x i32> undef) 323; CHECK-NEXT: ret i32 [[X]] 324; 325 %x = call i32 @llvm.vector.reduce.xor.v8i32(<8 x i32> undef) 326 ret i32 %x 327} 328 329define i32 @xor_undef1() { 330; CHECK-LABEL: @xor_undef1( 331; CHECK-NEXT: [[X:%.*]] = call i32 @llvm.vector.reduce.xor.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>) 332; CHECK-NEXT: ret i32 [[X]] 333; 334 %x = call i32 @llvm.vector.reduce.xor.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>) 335 ret i32 %x 336} 337 338define i32 @xor_poison() { 339; CHECK-LABEL: @xor_poison( 340; CHECK-NEXT: ret i32 poison 341; 342 %x = call i32 @llvm.vector.reduce.xor.v8i32(<8 x i32> poison) 343 ret i32 %x 344} 345 346define i32 @xor_poison1() { 347; CHECK-LABEL: @xor_poison1( 348; CHECK-NEXT: ret i32 poison 349; 350 %x = call i32 @llvm.vector.reduce.xor.v8i32(<8 x i32> <i32 poison, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>) 351 ret i32 %x 352} 353 354define i32 @smin_0() { 355; CHECK-LABEL: @smin_0( 356; CHECK-NEXT: ret i32 0 357; 358 %x = call i32 @llvm.vector.reduce.smin.v8i32(<8 x i32> zeroinitializer) 359 ret i32 %x 360} 361 362define i32 @smin_1() { 363; CHECK-LABEL: @smin_1( 364; CHECK-NEXT: ret i32 1 365; 366 %x = call i32 @llvm.vector.reduce.smin.v8i32(<8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>) 367 ret i32 %x 368} 369 370define i32 @smin_inc() { 371; CHECK-LABEL: @smin_inc( 372; CHECK-NEXT: ret i32 -6 373; 374 %x = call i32 @llvm.vector.reduce.smin.v8i32(<8 x i32> <i32 1, i32 -3, i32 5, i32 7, i32 2, i32 4, i32 -6, i32 8>) 375 ret i32 %x 376} 377 378define i32 @smin_1v() { 379; CHECK-LABEL: @smin_1v( 380; CHECK-NEXT: ret i32 10 381; 382 %x = call i32 @llvm.vector.reduce.smin.v1i32(<1 x i32> <i32 10>) 383 ret i32 %x 384} 385 386define i32 @smin_undef() { 387; CHECK-LABEL: @smin_undef( 388; CHECK-NEXT: [[X:%.*]] = call i32 @llvm.vector.reduce.smin.v8i32(<8 x i32> undef) 389; CHECK-NEXT: ret i32 [[X]] 390; 391 %x = call i32 @llvm.vector.reduce.smin.v8i32(<8 x i32> undef) 392 ret i32 %x 393} 394 395define i32 @smin_undef1() { 396; CHECK-LABEL: @smin_undef1( 397; CHECK-NEXT: [[X:%.*]] = call i32 @llvm.vector.reduce.smin.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>) 398; CHECK-NEXT: ret i32 [[X]] 399; 400 %x = call i32 @llvm.vector.reduce.smin.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>) 401 ret i32 %x 402} 403 404define i32 @smin_poison() { 405; CHECK-LABEL: @smin_poison( 406; CHECK-NEXT: ret i32 poison 407; 408 %x = call i32 @llvm.vector.reduce.smin.v8i32(<8 x i32> poison) 409 ret i32 %x 410} 411 412define i32 @smin_poison1() { 413; CHECK-LABEL: @smin_poison1( 414; CHECK-NEXT: ret i32 poison 415; 416 %x = call i32 @llvm.vector.reduce.smin.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 poison, i32 1, i32 1, i32 1>) 417 ret i32 %x 418} 419 420define i32 @smax_0() { 421; CHECK-LABEL: @smax_0( 422; CHECK-NEXT: ret i32 0 423; 424 %x = call i32 @llvm.vector.reduce.smax.v8i32(<8 x i32> zeroinitializer) 425 ret i32 %x 426} 427 428define i32 @smax_1() { 429; CHECK-LABEL: @smax_1( 430; CHECK-NEXT: ret i32 1 431; 432 %x = call i32 @llvm.vector.reduce.smax.v8i32(<8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>) 433 ret i32 %x 434} 435 436define i32 @smax_inc() { 437; CHECK-LABEL: @smax_inc( 438; CHECK-NEXT: ret i32 8 439; 440 %x = call i32 @llvm.vector.reduce.smax.v8i32(<8 x i32> <i32 1, i32 -3, i32 5, i32 7, i32 2, i32 4, i32 -6, i32 8>) 441 ret i32 %x 442} 443 444define i32 @smax_1v() { 445; CHECK-LABEL: @smax_1v( 446; CHECK-NEXT: ret i32 10 447; 448 %x = call i32 @llvm.vector.reduce.smax.v1i32(<1 x i32> <i32 10>) 449 ret i32 %x 450} 451 452define i32 @smax_undef() { 453; CHECK-LABEL: @smax_undef( 454; CHECK-NEXT: [[X:%.*]] = call i32 @llvm.vector.reduce.smax.v8i32(<8 x i32> undef) 455; CHECK-NEXT: ret i32 [[X]] 456; 457 %x = call i32 @llvm.vector.reduce.smax.v8i32(<8 x i32> undef) 458 ret i32 %x 459} 460 461define i32 @smax_undef1() { 462; CHECK-LABEL: @smax_undef1( 463; CHECK-NEXT: [[X:%.*]] = call i32 @llvm.vector.reduce.smax.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>) 464; CHECK-NEXT: ret i32 [[X]] 465; 466 %x = call i32 @llvm.vector.reduce.smax.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>) 467 ret i32 %x 468} 469 470define i32 @smax_poison() { 471; CHECK-LABEL: @smax_poison( 472; CHECK-NEXT: ret i32 poison 473; 474 %x = call i32 @llvm.vector.reduce.smax.v8i32(<8 x i32> poison) 475 ret i32 %x 476} 477 478define i32 @smax_poison1() { 479; CHECK-LABEL: @smax_poison1( 480; CHECK-NEXT: ret i32 poison 481; 482 %x = call i32 @llvm.vector.reduce.smax.v8i32(<8 x i32> <i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 poison>) 483 ret i32 %x 484} 485 486define i32 @umin_0() { 487; CHECK-LABEL: @umin_0( 488; CHECK-NEXT: ret i32 0 489; 490 %x = call i32 @llvm.vector.reduce.umin.v8i32(<8 x i32> zeroinitializer) 491 ret i32 %x 492} 493 494define i32 @umin_1() { 495; CHECK-LABEL: @umin_1( 496; CHECK-NEXT: ret i32 1 497; 498 %x = call i32 @llvm.vector.reduce.umin.v8i32(<8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>) 499 ret i32 %x 500} 501 502define i32 @umin_inc() { 503; CHECK-LABEL: @umin_inc( 504; CHECK-NEXT: ret i32 1 505; 506 %x = call i32 @llvm.vector.reduce.umin.v8i32(<8 x i32> <i32 1, i32 -3, i32 5, i32 7, i32 2, i32 4, i32 -6, i32 8>) 507 ret i32 %x 508} 509 510define i32 @umin_1v() { 511; CHECK-LABEL: @umin_1v( 512; CHECK-NEXT: ret i32 10 513; 514 %x = call i32 @llvm.vector.reduce.umin.v1i32(<1 x i32> <i32 10>) 515 ret i32 %x 516} 517 518define i32 @umin_undef() { 519; CHECK-LABEL: @umin_undef( 520; CHECK-NEXT: [[X:%.*]] = call i32 @llvm.vector.reduce.umin.v8i32(<8 x i32> undef) 521; CHECK-NEXT: ret i32 [[X]] 522; 523 %x = call i32 @llvm.vector.reduce.umin.v8i32(<8 x i32> undef) 524 ret i32 %x 525} 526 527define i32 @umin_undef1() { 528; CHECK-LABEL: @umin_undef1( 529; CHECK-NEXT: [[X:%.*]] = call i32 @llvm.vector.reduce.umin.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>) 530; CHECK-NEXT: ret i32 [[X]] 531; 532 %x = call i32 @llvm.vector.reduce.umin.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>) 533 ret i32 %x 534} 535 536define i32 @umin_poison() { 537; CHECK-LABEL: @umin_poison( 538; CHECK-NEXT: ret i32 poison 539; 540 %x = call i32 @llvm.vector.reduce.umin.v8i32(<8 x i32> poison) 541 ret i32 %x 542} 543 544define i32 @umin_poison1() { 545; CHECK-LABEL: @umin_poison1( 546; CHECK-NEXT: ret i32 poison 547; 548 %x = call i32 @llvm.vector.reduce.umin.v8i32(<8 x i32> <i32 1, i32 1, i32 -1, i32 poison, i32 1, i32 1, i32 1, i32 1>) 549 ret i32 %x 550} 551 552define i32 @umax_0() { 553; CHECK-LABEL: @umax_0( 554; CHECK-NEXT: ret i32 0 555; 556 %x = call i32 @llvm.vector.reduce.umax.v8i32(<8 x i32> zeroinitializer) 557 ret i32 %x 558} 559 560define i32 @umax_1() { 561; CHECK-LABEL: @umax_1( 562; CHECK-NEXT: ret i32 1 563; 564 %x = call i32 @llvm.vector.reduce.umax.v8i32(<8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>) 565 ret i32 %x 566} 567 568define i32 @umax_inc() { 569; CHECK-LABEL: @umax_inc( 570; CHECK-NEXT: ret i32 -3 571; 572 %x = call i32 @llvm.vector.reduce.umax.v8i32(<8 x i32> <i32 1, i32 -3, i32 5, i32 7, i32 2, i32 4, i32 -6, i32 8>) 573 ret i32 %x 574} 575 576define i32 @umax_1v() { 577; CHECK-LABEL: @umax_1v( 578; CHECK-NEXT: ret i32 10 579; 580 %x = call i32 @llvm.vector.reduce.umax.v1i32(<1 x i32> <i32 10>) 581 ret i32 %x 582} 583 584define i32 @umax_undef() { 585; CHECK-LABEL: @umax_undef( 586; CHECK-NEXT: [[X:%.*]] = call i32 @llvm.vector.reduce.umax.v8i32(<8 x i32> undef) 587; CHECK-NEXT: ret i32 [[X]] 588; 589 %x = call i32 @llvm.vector.reduce.umax.v8i32(<8 x i32> undef) 590 ret i32 %x 591} 592 593define i32 @umax_undef1() { 594; CHECK-LABEL: @umax_undef1( 595; CHECK-NEXT: [[X:%.*]] = call i32 @llvm.vector.reduce.umax.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>) 596; CHECK-NEXT: ret i32 [[X]] 597; 598 %x = call i32 @llvm.vector.reduce.umax.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>) 599 ret i32 %x 600} 601 602define i32 @umax_poison() { 603; CHECK-LABEL: @umax_poison( 604; CHECK-NEXT: ret i32 poison 605; 606 %x = call i32 @llvm.vector.reduce.umax.v8i32(<8 x i32> poison) 607 ret i32 %x 608} 609 610define i32 @umax_poison1() { 611; CHECK-LABEL: @umax_poison1( 612; CHECK-NEXT: ret i32 poison 613; 614 %x = call i32 @llvm.vector.reduce.umax.v8i32(<8 x i32> <i32 1, i32 1, i32 poison, i32 1, i32 1, i32 poison, i32 1, i32 1>) 615 ret i32 %x 616} 617