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