1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2 2; RUN: llc < %s -verify-machineinstrs -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers -mattr=+simd128 | FileCheck %s 3 4; Tests that bool vecreduce produces anytrue and alltrue instructions 5 6target triple = "wasm32-unknown-unknown" 7 8declare i1 @llvm.vector.reduce.or.v2i1(<2 x i1>) 9declare i1 @llvm.vector.reduce.or.v4i1(<4 x i1>) 10declare i1 @llvm.vector.reduce.or.v7i1(<7 x i1>) 11declare i1 @llvm.vector.reduce.or.v8i1(<8 x i1>) 12declare i1 @llvm.vector.reduce.or.v16i1(<16 x i1>) 13declare i1 @llvm.vector.reduce.or.v64i1(<64 x i1>) 14declare i1 @llvm.vector.reduce.and.v2i1(<2 x i1>) 15declare i1 @llvm.vector.reduce.and.v4i1(<4 x i1>) 16declare i1 @llvm.vector.reduce.and.v7i1(<7 x i1>) 17declare i1 @llvm.vector.reduce.and.v8i1(<8 x i1>) 18declare i1 @llvm.vector.reduce.and.v16i1(<16 x i1>) 19declare i1 @llvm.vector.reduce.and.v64i1(<64 x i1> %x) 20 21; ===================== 22; Regular vectors of i1 23; ===================== 24 25define i1 @test_any_v8i1(<8 x i1> %x) { 26; CHECK-LABEL: test_any_v8i1: 27; CHECK: .functype test_any_v8i1 (v128) -> (i32) 28; CHECK-NEXT: # %bb.0: 29; CHECK-NEXT: i32.const $push0=, 15 30; CHECK-NEXT: i16x8.shl $push1=, $0, $pop0 31; CHECK-NEXT: i32.const $push4=, 15 32; CHECK-NEXT: i16x8.shr_s $push2=, $pop1, $pop4 33; CHECK-NEXT: v128.any_true $push3=, $pop2 34; CHECK-NEXT: return $pop3 35 %ret = call i1 @llvm.vector.reduce.or.v8i1(<8 x i1> %x) 36 ret i1 %ret 37} 38 39define i1 @test_all_v8i1(<8 x i1> %x) { 40; CHECK-LABEL: test_all_v8i1: 41; CHECK: .functype test_all_v8i1 (v128) -> (i32) 42; CHECK-NEXT: # %bb.0: 43; CHECK-NEXT: i32.const $push0=, 15 44; CHECK-NEXT: i16x8.shl $push1=, $0, $pop0 45; CHECK-NEXT: i32.const $push4=, 15 46; CHECK-NEXT: i16x8.shr_s $push2=, $pop1, $pop4 47; CHECK-NEXT: i16x8.all_true $push3=, $pop2 48; CHECK-NEXT: return $pop3 49 %ret = call i1 @llvm.vector.reduce.and.v8i1(<8 x i1> %x) 50 ret i1 %ret 51} 52 53define i1 @test_none_v8i1(<8 x i1> %x) { 54; CHECK-LABEL: test_none_v8i1: 55; CHECK: .functype test_none_v8i1 (v128) -> (i32) 56; CHECK-NEXT: # %bb.0: 57; CHECK-NEXT: i32.const $push0=, 15 58; CHECK-NEXT: i16x8.shl $push1=, $0, $pop0 59; CHECK-NEXT: i32.const $push6=, 15 60; CHECK-NEXT: i16x8.shr_s $push2=, $pop1, $pop6 61; CHECK-NEXT: v128.any_true $push3=, $pop2 62; CHECK-NEXT: i32.const $push4=, 1 63; CHECK-NEXT: i32.xor $push5=, $pop3, $pop4 64; CHECK-NEXT: return $pop5 65 %any = call i1 @llvm.vector.reduce.or.v8i1(<8 x i1> %x) 66 %none = xor i1 %any, 1 67 ret i1 %none 68} 69 70define i1 @test_not_all_v8i1(<8 x i1> %x) { 71; CHECK-LABEL: test_not_all_v8i1: 72; CHECK: .functype test_not_all_v8i1 (v128) -> (i32) 73; CHECK-NEXT: # %bb.0: 74; CHECK-NEXT: i32.const $push0=, 15 75; CHECK-NEXT: i16x8.shl $push1=, $0, $pop0 76; CHECK-NEXT: i32.const $push6=, 15 77; CHECK-NEXT: i16x8.shr_s $push2=, $pop1, $pop6 78; CHECK-NEXT: i16x8.all_true $push3=, $pop2 79; CHECK-NEXT: i32.const $push4=, 1 80; CHECK-NEXT: i32.xor $push5=, $pop3, $pop4 81; CHECK-NEXT: return $pop5 82 %all = call i1 @llvm.vector.reduce.and.v8i1(<8 x i1> %x) 83 %notall = xor i1 %all, 1 84 ret i1 %notall 85} 86 87define i1 @test_any_v16i1(<16 x i1> %x) { 88; CHECK-LABEL: test_any_v16i1: 89; CHECK: .functype test_any_v16i1 (v128) -> (i32) 90; CHECK-NEXT: # %bb.0: 91; CHECK-NEXT: i32.const $push0=, 7 92; CHECK-NEXT: i8x16.shl $push1=, $0, $pop0 93; CHECK-NEXT: i32.const $push4=, 7 94; CHECK-NEXT: i8x16.shr_s $push2=, $pop1, $pop4 95; CHECK-NEXT: v128.any_true $push3=, $pop2 96; CHECK-NEXT: return $pop3 97 %ret = call i1 @llvm.vector.reduce.or.v16i1(<16 x i1> %x) 98 ret i1 %ret 99} 100 101define i1 @test_all_v16i1(<16 x i1> %x) { 102; CHECK-LABEL: test_all_v16i1: 103; CHECK: .functype test_all_v16i1 (v128) -> (i32) 104; CHECK-NEXT: # %bb.0: 105; CHECK-NEXT: i32.const $push0=, 7 106; CHECK-NEXT: i8x16.shl $push1=, $0, $pop0 107; CHECK-NEXT: i32.const $push4=, 7 108; CHECK-NEXT: i8x16.shr_s $push2=, $pop1, $pop4 109; CHECK-NEXT: i8x16.all_true $push3=, $pop2 110; CHECK-NEXT: return $pop3 111 %ret = call i1 @llvm.vector.reduce.and.v16i1(<16 x i1> %x) 112 ret i1 %ret 113} 114 115; ================================== 116; Regular vectors of larger integers 117; ================================== 118 119define i1 @test_any_v16i8(<16 x i8> %x) { 120; CHECK-LABEL: test_any_v16i8: 121; CHECK: .functype test_any_v16i8 (v128) -> (i32) 122; CHECK-NEXT: # %bb.0: 123; CHECK-NEXT: i32.const $push0=, 7 124; CHECK-NEXT: i8x16.shl $push1=, $0, $pop0 125; CHECK-NEXT: i32.const $push4=, 7 126; CHECK-NEXT: i8x16.shr_s $push2=, $pop1, $pop4 127; CHECK-NEXT: v128.any_true $push3=, $pop2 128; CHECK-NEXT: return $pop3 129 %bits = trunc <16 x i8> %x to <16 x i1> 130 %ret = call i1 @llvm.vector.reduce.or.v16i1(<16 x i1> %bits) 131 ret i1 %ret 132} 133 134define i1 @test_all_v16i8(<16 x i8> %x) { 135; CHECK-LABEL: test_all_v16i8: 136; CHECK: .functype test_all_v16i8 (v128) -> (i32) 137; CHECK-NEXT: # %bb.0: 138; CHECK-NEXT: i32.const $push0=, 7 139; CHECK-NEXT: i8x16.shl $push1=, $0, $pop0 140; CHECK-NEXT: i32.const $push4=, 7 141; CHECK-NEXT: i8x16.shr_s $push2=, $pop1, $pop4 142; CHECK-NEXT: i8x16.all_true $push3=, $pop2 143; CHECK-NEXT: return $pop3 144 %bits = trunc <16 x i8> %x to <16 x i1> 145 %ret = call i1 @llvm.vector.reduce.and.v16i1(<16 x i1> %bits) 146 ret i1 %ret 147} 148 149define i1 @test_any_v8i16(<8 x i16> %x) { 150; CHECK-LABEL: test_any_v8i16: 151; CHECK: .functype test_any_v8i16 (v128) -> (i32) 152; CHECK-NEXT: # %bb.0: 153; CHECK-NEXT: i32.const $push0=, 15 154; CHECK-NEXT: i16x8.shl $push1=, $0, $pop0 155; CHECK-NEXT: i32.const $push4=, 15 156; CHECK-NEXT: i16x8.shr_s $push2=, $pop1, $pop4 157; CHECK-NEXT: v128.any_true $push3=, $pop2 158; CHECK-NEXT: return $pop3 159 %bits = trunc <8 x i16> %x to <8 x i1> 160 %ret = call i1 @llvm.vector.reduce.or.v8i1(<8 x i1> %bits) 161 ret i1 %ret 162} 163 164define i1 @test_all_v8i16(<8 x i16> %x) { 165; CHECK-LABEL: test_all_v8i16: 166; CHECK: .functype test_all_v8i16 (v128) -> (i32) 167; CHECK-NEXT: # %bb.0: 168; CHECK-NEXT: i32.const $push0=, 15 169; CHECK-NEXT: i16x8.shl $push1=, $0, $pop0 170; CHECK-NEXT: i32.const $push4=, 15 171; CHECK-NEXT: i16x8.shr_s $push2=, $pop1, $pop4 172; CHECK-NEXT: i16x8.all_true $push3=, $pop2 173; CHECK-NEXT: return $pop3 174 %bits = trunc <8 x i16> %x to <8 x i1> 175 %ret = call i1 @llvm.vector.reduce.and.v8i1(<8 x i1> %bits) 176 ret i1 %ret 177} 178 179define i1 @test_any_v4i32(<4 x i32> %x) { 180; CHECK-LABEL: test_any_v4i32: 181; CHECK: .functype test_any_v4i32 (v128) -> (i32) 182; CHECK-NEXT: # %bb.0: 183; CHECK-NEXT: i32.const $push0=, 31 184; CHECK-NEXT: i32x4.shl $push1=, $0, $pop0 185; CHECK-NEXT: i32.const $push4=, 31 186; CHECK-NEXT: i32x4.shr_s $push2=, $pop1, $pop4 187; CHECK-NEXT: v128.any_true $push3=, $pop2 188; CHECK-NEXT: return $pop3 189 %bits = trunc <4 x i32> %x to <4 x i1> 190 %ret = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> %bits) 191 ret i1 %ret 192} 193 194define i1 @test_all_v4i32(<4 x i32> %x) { 195; CHECK-LABEL: test_all_v4i32: 196; CHECK: .functype test_all_v4i32 (v128) -> (i32) 197; CHECK-NEXT: # %bb.0: 198; CHECK-NEXT: i32.const $push0=, 31 199; CHECK-NEXT: i32x4.shl $push1=, $0, $pop0 200; CHECK-NEXT: i32.const $push4=, 31 201; CHECK-NEXT: i32x4.shr_s $push2=, $pop1, $pop4 202; CHECK-NEXT: i32x4.all_true $push3=, $pop2 203; CHECK-NEXT: return $pop3 204 %bits = trunc <4 x i32> %x to <4 x i1> 205 %ret = call i1 @llvm.vector.reduce.and.v4i1(<4 x i1> %bits) 206 ret i1 %ret 207} 208 209define i1 @test_any_v2i64(<2 x i64> %x) { 210; CHECK-LABEL: test_any_v2i64: 211; CHECK: .functype test_any_v2i64 (v128) -> (i32) 212; CHECK-NEXT: # %bb.0: 213; CHECK-NEXT: i32.const $push0=, 63 214; CHECK-NEXT: i64x2.shl $push1=, $0, $pop0 215; CHECK-NEXT: i32.const $push4=, 63 216; CHECK-NEXT: i64x2.shr_s $push2=, $pop1, $pop4 217; CHECK-NEXT: v128.any_true $push3=, $pop2 218; CHECK-NEXT: return $pop3 219 %bits = trunc <2 x i64> %x to <2 x i1> 220 %ret = call i1 @llvm.vector.reduce.or.v2i1(<2 x i1> %bits) 221 ret i1 %ret 222} 223 224define i1 @test_all_v2i64(<2 x i64> %x) { 225; CHECK-LABEL: test_all_v2i64: 226; CHECK: .functype test_all_v2i64 (v128) -> (i32) 227; CHECK-NEXT: # %bb.0: 228; CHECK-NEXT: i32.const $push0=, 63 229; CHECK-NEXT: i64x2.shl $push1=, $0, $pop0 230; CHECK-NEXT: i32.const $push4=, 63 231; CHECK-NEXT: i64x2.shr_s $push2=, $pop1, $pop4 232; CHECK-NEXT: i64x2.all_true $push3=, $pop2 233; CHECK-NEXT: return $pop3 234 %bits = trunc <2 x i64> %x to <2 x i1> 235 %ret = call i1 @llvm.vector.reduce.and.v2i1(<2 x i1> %bits) 236 ret i1 %ret 237} 238 239; ==================== 240; Unusual vector sizes 241; ==================== 242 243define i1 @test_any_v7i1(<7 x i1> %x) { 244; CHECK-LABEL: test_any_v7i1: 245; CHECK: .functype test_any_v7i1 (i32, i32, i32, i32, i32, i32, i32) -> (i32) 246; CHECK-NEXT: # %bb.0: 247; CHECK-NEXT: i32.or $push0=, $0, $1 248; CHECK-NEXT: i32.or $push1=, $pop0, $2 249; CHECK-NEXT: i32.or $push2=, $pop1, $3 250; CHECK-NEXT: i32.or $push3=, $pop2, $4 251; CHECK-NEXT: i32.or $push4=, $pop3, $5 252; CHECK-NEXT: i32.or $push5=, $pop4, $6 253; CHECK-NEXT: return $pop5 254 %ret = call i1 @llvm.vector.reduce.or.v7i1(<7 x i1> %x) 255 ret i1 %ret 256} 257 258define i1 @test_all_v7i1(<7 x i1> %x) { 259; CHECK-LABEL: test_all_v7i1: 260; CHECK: .functype test_all_v7i1 (i32, i32, i32, i32, i32, i32, i32) -> (i32) 261; CHECK-NEXT: # %bb.0: 262; CHECK-NEXT: i32.and $push0=, $0, $1 263; CHECK-NEXT: i32.and $push1=, $pop0, $2 264; CHECK-NEXT: i32.and $push2=, $pop1, $3 265; CHECK-NEXT: i32.and $push3=, $pop2, $4 266; CHECK-NEXT: i32.and $push4=, $pop3, $5 267; CHECK-NEXT: i32.and $push5=, $pop4, $6 268; CHECK-NEXT: i32.const $push6=, 1 269; CHECK-NEXT: i32.and $push7=, $pop5, $pop6 270; CHECK-NEXT: return $pop7 271 %ret = call i1 @llvm.vector.reduce.and.v7i1(<7 x i1> %x) 272 ret i1 %ret 273} 274 275define i1 @test_any_v8i8(<8 x i8> %x) { 276; CHECK-LABEL: test_any_v8i8: 277; CHECK: .functype test_any_v8i8 (v128) -> (i32) 278; CHECK-NEXT: # %bb.0: 279; CHECK-NEXT: i8x16.shuffle $push0=, $0, $0, 0, 0, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0 280; CHECK-NEXT: i32.const $push1=, 15 281; CHECK-NEXT: i16x8.shl $push2=, $pop0, $pop1 282; CHECK-NEXT: i32.const $push5=, 15 283; CHECK-NEXT: i16x8.shr_s $push3=, $pop2, $pop5 284; CHECK-NEXT: v128.any_true $push4=, $pop3 285; CHECK-NEXT: return $pop4 286 %bits = trunc <8 x i8> %x to <8 x i1> 287 %ret = call i1 @llvm.vector.reduce.or.v8i1(<8 x i1> %bits) 288 ret i1 %ret 289} 290 291define i1 @test_all_v8i8(<8 x i8> %x) { 292; CHECK-LABEL: test_all_v8i8: 293; CHECK: .functype test_all_v8i8 (v128) -> (i32) 294; CHECK-NEXT: # %bb.0: 295; CHECK-NEXT: i8x16.shuffle $push0=, $0, $0, 0, 0, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0 296; CHECK-NEXT: i32.const $push1=, 15 297; CHECK-NEXT: i16x8.shl $push2=, $pop0, $pop1 298; CHECK-NEXT: i32.const $push5=, 15 299; CHECK-NEXT: i16x8.shr_s $push3=, $pop2, $pop5 300; CHECK-NEXT: i16x8.all_true $push4=, $pop3 301; CHECK-NEXT: return $pop4 302 %bits = trunc <8 x i8> %x to <8 x i1> 303 %ret = call i1 @llvm.vector.reduce.and.v8i1(<8 x i1> %bits) 304 ret i1 %ret 305} 306 307;; TODO: Improve this codegen. 308define i1 @test_any_v64i8(<64 x i8> %x) { 309; CHECK-LABEL: test_any_v64i8: 310; CHECK: .functype test_any_v64i8 (v128, v128, v128, v128) -> (i32) 311; CHECK-NEXT: # %bb.0: 312; CHECK-NEXT: global.get $push264=, __stack_pointer 313; CHECK-NEXT: i32.const $push265=, 16 314; CHECK-NEXT: i32.sub $drop=, $pop264, $pop265 315; CHECK-NEXT: i8x16.extract_lane_u $push254=, $0, 15 316; CHECK-NEXT: i8x16.extract_lane_u $push253=, $2, 15 317; CHECK-NEXT: i32.or $push255=, $pop254, $pop253 318; CHECK-NEXT: i32.const $push133=, 15 319; CHECK-NEXT: i32.shl $push256=, $pop255, $pop133 320; CHECK-NEXT: i8x16.extract_lane_u $push195=, $0, 0 321; CHECK-NEXT: i32.const $push1=, 1 322; CHECK-NEXT: i32.and $push196=, $pop195, $pop1 323; CHECK-NEXT: i8x16.extract_lane_u $push197=, $0, 1 324; CHECK-NEXT: i32.const $push368=, 1 325; CHECK-NEXT: i32.and $push198=, $pop197, $pop368 326; CHECK-NEXT: i32.const $push367=, 1 327; CHECK-NEXT: i32.shl $push199=, $pop198, $pop367 328; CHECK-NEXT: i32.or $push200=, $pop196, $pop199 329; CHECK-NEXT: i8x16.extract_lane_u $push201=, $0, 2 330; CHECK-NEXT: i32.const $push366=, 1 331; CHECK-NEXT: i32.and $push202=, $pop201, $pop366 332; CHECK-NEXT: i32.const $push9=, 2 333; CHECK-NEXT: i32.shl $push203=, $pop202, $pop9 334; CHECK-NEXT: i32.or $push204=, $pop200, $pop203 335; CHECK-NEXT: i8x16.extract_lane_u $push205=, $0, 3 336; CHECK-NEXT: i32.const $push365=, 1 337; CHECK-NEXT: i32.and $push206=, $pop205, $pop365 338; CHECK-NEXT: i32.const $push14=, 3 339; CHECK-NEXT: i32.shl $push207=, $pop206, $pop14 340; CHECK-NEXT: i32.or $push208=, $pop204, $pop207 341; CHECK-NEXT: i8x16.extract_lane_u $push209=, $0, 4 342; CHECK-NEXT: i32.const $push364=, 1 343; CHECK-NEXT: i32.and $push210=, $pop209, $pop364 344; CHECK-NEXT: i32.const $push19=, 4 345; CHECK-NEXT: i32.shl $push211=, $pop210, $pop19 346; CHECK-NEXT: i32.or $push212=, $pop208, $pop211 347; CHECK-NEXT: i8x16.extract_lane_u $push213=, $0, 5 348; CHECK-NEXT: i32.const $push363=, 1 349; CHECK-NEXT: i32.and $push214=, $pop213, $pop363 350; CHECK-NEXT: i32.const $push24=, 5 351; CHECK-NEXT: i32.shl $push215=, $pop214, $pop24 352; CHECK-NEXT: i32.or $push216=, $pop212, $pop215 353; CHECK-NEXT: i8x16.extract_lane_u $push217=, $0, 6 354; CHECK-NEXT: i32.const $push362=, 1 355; CHECK-NEXT: i32.and $push218=, $pop217, $pop362 356; CHECK-NEXT: i32.const $push29=, 6 357; CHECK-NEXT: i32.shl $push219=, $pop218, $pop29 358; CHECK-NEXT: i32.or $push220=, $pop216, $pop219 359; CHECK-NEXT: i8x16.extract_lane_u $push221=, $0, 7 360; CHECK-NEXT: i32.const $push361=, 1 361; CHECK-NEXT: i32.and $push222=, $pop221, $pop361 362; CHECK-NEXT: i32.const $push34=, 7 363; CHECK-NEXT: i32.shl $push223=, $pop222, $pop34 364; CHECK-NEXT: i32.or $push224=, $pop220, $pop223 365; CHECK-NEXT: i8x16.extract_lane_u $push225=, $0, 8 366; CHECK-NEXT: i32.const $push360=, 1 367; CHECK-NEXT: i32.and $push226=, $pop225, $pop360 368; CHECK-NEXT: i32.const $push39=, 8 369; CHECK-NEXT: i32.shl $push227=, $pop226, $pop39 370; CHECK-NEXT: i32.or $push228=, $pop224, $pop227 371; CHECK-NEXT: i8x16.extract_lane_u $push229=, $0, 9 372; CHECK-NEXT: i32.const $push359=, 1 373; CHECK-NEXT: i32.and $push230=, $pop229, $pop359 374; CHECK-NEXT: i32.const $push44=, 9 375; CHECK-NEXT: i32.shl $push231=, $pop230, $pop44 376; CHECK-NEXT: i32.or $push232=, $pop228, $pop231 377; CHECK-NEXT: i8x16.extract_lane_u $push233=, $0, 10 378; CHECK-NEXT: i32.const $push358=, 1 379; CHECK-NEXT: i32.and $push234=, $pop233, $pop358 380; CHECK-NEXT: i32.const $push49=, 10 381; CHECK-NEXT: i32.shl $push235=, $pop234, $pop49 382; CHECK-NEXT: i32.or $push236=, $pop232, $pop235 383; CHECK-NEXT: i8x16.extract_lane_u $push237=, $0, 11 384; CHECK-NEXT: i32.const $push357=, 1 385; CHECK-NEXT: i32.and $push238=, $pop237, $pop357 386; CHECK-NEXT: i32.const $push54=, 11 387; CHECK-NEXT: i32.shl $push239=, $pop238, $pop54 388; CHECK-NEXT: i32.or $push240=, $pop236, $pop239 389; CHECK-NEXT: i8x16.extract_lane_u $push241=, $0, 12 390; CHECK-NEXT: i32.const $push356=, 1 391; CHECK-NEXT: i32.and $push242=, $pop241, $pop356 392; CHECK-NEXT: i32.const $push59=, 12 393; CHECK-NEXT: i32.shl $push243=, $pop242, $pop59 394; CHECK-NEXT: i32.or $push244=, $pop240, $pop243 395; CHECK-NEXT: i8x16.extract_lane_u $push245=, $0, 13 396; CHECK-NEXT: i32.const $push355=, 1 397; CHECK-NEXT: i32.and $push246=, $pop245, $pop355 398; CHECK-NEXT: i32.const $push64=, 13 399; CHECK-NEXT: i32.shl $push247=, $pop246, $pop64 400; CHECK-NEXT: i32.or $push248=, $pop244, $pop247 401; CHECK-NEXT: i8x16.extract_lane_u $push249=, $0, 14 402; CHECK-NEXT: i32.const $push354=, 1 403; CHECK-NEXT: i32.and $push250=, $pop249, $pop354 404; CHECK-NEXT: i32.const $push69=, 14 405; CHECK-NEXT: i32.shl $push251=, $pop250, $pop69 406; CHECK-NEXT: i32.or $push252=, $pop248, $pop251 407; CHECK-NEXT: i32.or $push257=, $pop256, $pop252 408; CHECK-NEXT: i8x16.extract_lane_u $push137=, $2, 0 409; CHECK-NEXT: i32.const $push353=, 1 410; CHECK-NEXT: i32.and $push138=, $pop137, $pop353 411; CHECK-NEXT: i8x16.extract_lane_u $push139=, $2, 1 412; CHECK-NEXT: i32.const $push352=, 1 413; CHECK-NEXT: i32.and $push140=, $pop139, $pop352 414; CHECK-NEXT: i32.const $push351=, 1 415; CHECK-NEXT: i32.shl $push141=, $pop140, $pop351 416; CHECK-NEXT: i32.or $push142=, $pop138, $pop141 417; CHECK-NEXT: i8x16.extract_lane_u $push143=, $2, 2 418; CHECK-NEXT: i32.const $push350=, 1 419; CHECK-NEXT: i32.and $push144=, $pop143, $pop350 420; CHECK-NEXT: i32.const $push349=, 2 421; CHECK-NEXT: i32.shl $push145=, $pop144, $pop349 422; CHECK-NEXT: i32.or $push146=, $pop142, $pop145 423; CHECK-NEXT: i8x16.extract_lane_u $push147=, $2, 3 424; CHECK-NEXT: i32.const $push348=, 1 425; CHECK-NEXT: i32.and $push148=, $pop147, $pop348 426; CHECK-NEXT: i32.const $push347=, 3 427; CHECK-NEXT: i32.shl $push149=, $pop148, $pop347 428; CHECK-NEXT: i32.or $push150=, $pop146, $pop149 429; CHECK-NEXT: i8x16.extract_lane_u $push151=, $2, 4 430; CHECK-NEXT: i32.const $push346=, 1 431; CHECK-NEXT: i32.and $push152=, $pop151, $pop346 432; CHECK-NEXT: i32.const $push345=, 4 433; CHECK-NEXT: i32.shl $push153=, $pop152, $pop345 434; CHECK-NEXT: i32.or $push154=, $pop150, $pop153 435; CHECK-NEXT: i8x16.extract_lane_u $push155=, $2, 5 436; CHECK-NEXT: i32.const $push344=, 1 437; CHECK-NEXT: i32.and $push156=, $pop155, $pop344 438; CHECK-NEXT: i32.const $push343=, 5 439; CHECK-NEXT: i32.shl $push157=, $pop156, $pop343 440; CHECK-NEXT: i32.or $push158=, $pop154, $pop157 441; CHECK-NEXT: i8x16.extract_lane_u $push159=, $2, 6 442; CHECK-NEXT: i32.const $push342=, 1 443; CHECK-NEXT: i32.and $push160=, $pop159, $pop342 444; CHECK-NEXT: i32.const $push341=, 6 445; CHECK-NEXT: i32.shl $push161=, $pop160, $pop341 446; CHECK-NEXT: i32.or $push162=, $pop158, $pop161 447; CHECK-NEXT: i8x16.extract_lane_u $push163=, $2, 7 448; CHECK-NEXT: i32.const $push340=, 1 449; CHECK-NEXT: i32.and $push164=, $pop163, $pop340 450; CHECK-NEXT: i32.const $push339=, 7 451; CHECK-NEXT: i32.shl $push165=, $pop164, $pop339 452; CHECK-NEXT: i32.or $push166=, $pop162, $pop165 453; CHECK-NEXT: i8x16.extract_lane_u $push167=, $2, 8 454; CHECK-NEXT: i32.const $push338=, 1 455; CHECK-NEXT: i32.and $push168=, $pop167, $pop338 456; CHECK-NEXT: i32.const $push337=, 8 457; CHECK-NEXT: i32.shl $push169=, $pop168, $pop337 458; CHECK-NEXT: i32.or $push170=, $pop166, $pop169 459; CHECK-NEXT: i8x16.extract_lane_u $push171=, $2, 9 460; CHECK-NEXT: i32.const $push336=, 1 461; CHECK-NEXT: i32.and $push172=, $pop171, $pop336 462; CHECK-NEXT: i32.const $push335=, 9 463; CHECK-NEXT: i32.shl $push173=, $pop172, $pop335 464; CHECK-NEXT: i32.or $push174=, $pop170, $pop173 465; CHECK-NEXT: i8x16.extract_lane_u $push175=, $2, 10 466; CHECK-NEXT: i32.const $push334=, 1 467; CHECK-NEXT: i32.and $push176=, $pop175, $pop334 468; CHECK-NEXT: i32.const $push333=, 10 469; CHECK-NEXT: i32.shl $push177=, $pop176, $pop333 470; CHECK-NEXT: i32.or $push178=, $pop174, $pop177 471; CHECK-NEXT: i8x16.extract_lane_u $push179=, $2, 11 472; CHECK-NEXT: i32.const $push332=, 1 473; CHECK-NEXT: i32.and $push180=, $pop179, $pop332 474; CHECK-NEXT: i32.const $push331=, 11 475; CHECK-NEXT: i32.shl $push181=, $pop180, $pop331 476; CHECK-NEXT: i32.or $push182=, $pop178, $pop181 477; CHECK-NEXT: i8x16.extract_lane_u $push183=, $2, 12 478; CHECK-NEXT: i32.const $push330=, 1 479; CHECK-NEXT: i32.and $push184=, $pop183, $pop330 480; CHECK-NEXT: i32.const $push329=, 12 481; CHECK-NEXT: i32.shl $push185=, $pop184, $pop329 482; CHECK-NEXT: i32.or $push186=, $pop182, $pop185 483; CHECK-NEXT: i8x16.extract_lane_u $push187=, $2, 13 484; CHECK-NEXT: i32.const $push328=, 1 485; CHECK-NEXT: i32.and $push188=, $pop187, $pop328 486; CHECK-NEXT: i32.const $push327=, 13 487; CHECK-NEXT: i32.shl $push189=, $pop188, $pop327 488; CHECK-NEXT: i32.or $push190=, $pop186, $pop189 489; CHECK-NEXT: i8x16.extract_lane_u $push191=, $2, 14 490; CHECK-NEXT: i32.const $push326=, 1 491; CHECK-NEXT: i32.and $push192=, $pop191, $pop326 492; CHECK-NEXT: i32.const $push325=, 14 493; CHECK-NEXT: i32.shl $push193=, $pop192, $pop325 494; CHECK-NEXT: i32.or $push194=, $pop190, $pop193 495; CHECK-NEXT: i32.or $push258=, $pop257, $pop194 496; CHECK-NEXT: i8x16.extract_lane_u $push131=, $1, 15 497; CHECK-NEXT: i8x16.extract_lane_u $push130=, $3, 15 498; CHECK-NEXT: i32.or $push132=, $pop131, $pop130 499; CHECK-NEXT: i32.const $push324=, 15 500; CHECK-NEXT: i32.shl $push134=, $pop132, $pop324 501; CHECK-NEXT: i8x16.extract_lane_u $push72=, $1, 0 502; CHECK-NEXT: i32.const $push323=, 1 503; CHECK-NEXT: i32.and $push73=, $pop72, $pop323 504; CHECK-NEXT: i8x16.extract_lane_u $push74=, $1, 1 505; CHECK-NEXT: i32.const $push322=, 1 506; CHECK-NEXT: i32.and $push75=, $pop74, $pop322 507; CHECK-NEXT: i32.const $push321=, 1 508; CHECK-NEXT: i32.shl $push76=, $pop75, $pop321 509; CHECK-NEXT: i32.or $push77=, $pop73, $pop76 510; CHECK-NEXT: i8x16.extract_lane_u $push78=, $1, 2 511; CHECK-NEXT: i32.const $push320=, 1 512; CHECK-NEXT: i32.and $push79=, $pop78, $pop320 513; CHECK-NEXT: i32.const $push319=, 2 514; CHECK-NEXT: i32.shl $push80=, $pop79, $pop319 515; CHECK-NEXT: i32.or $push81=, $pop77, $pop80 516; CHECK-NEXT: i8x16.extract_lane_u $push82=, $1, 3 517; CHECK-NEXT: i32.const $push318=, 1 518; CHECK-NEXT: i32.and $push83=, $pop82, $pop318 519; CHECK-NEXT: i32.const $push317=, 3 520; CHECK-NEXT: i32.shl $push84=, $pop83, $pop317 521; CHECK-NEXT: i32.or $push85=, $pop81, $pop84 522; CHECK-NEXT: i8x16.extract_lane_u $push86=, $1, 4 523; CHECK-NEXT: i32.const $push316=, 1 524; CHECK-NEXT: i32.and $push87=, $pop86, $pop316 525; CHECK-NEXT: i32.const $push315=, 4 526; CHECK-NEXT: i32.shl $push88=, $pop87, $pop315 527; CHECK-NEXT: i32.or $push89=, $pop85, $pop88 528; CHECK-NEXT: i8x16.extract_lane_u $push90=, $1, 5 529; CHECK-NEXT: i32.const $push314=, 1 530; CHECK-NEXT: i32.and $push91=, $pop90, $pop314 531; CHECK-NEXT: i32.const $push313=, 5 532; CHECK-NEXT: i32.shl $push92=, $pop91, $pop313 533; CHECK-NEXT: i32.or $push93=, $pop89, $pop92 534; CHECK-NEXT: i8x16.extract_lane_u $push94=, $1, 6 535; CHECK-NEXT: i32.const $push312=, 1 536; CHECK-NEXT: i32.and $push95=, $pop94, $pop312 537; CHECK-NEXT: i32.const $push311=, 6 538; CHECK-NEXT: i32.shl $push96=, $pop95, $pop311 539; CHECK-NEXT: i32.or $push97=, $pop93, $pop96 540; CHECK-NEXT: i8x16.extract_lane_u $push98=, $1, 7 541; CHECK-NEXT: i32.const $push310=, 1 542; CHECK-NEXT: i32.and $push99=, $pop98, $pop310 543; CHECK-NEXT: i32.const $push309=, 7 544; CHECK-NEXT: i32.shl $push100=, $pop99, $pop309 545; CHECK-NEXT: i32.or $push101=, $pop97, $pop100 546; CHECK-NEXT: i8x16.extract_lane_u $push102=, $1, 8 547; CHECK-NEXT: i32.const $push308=, 1 548; CHECK-NEXT: i32.and $push103=, $pop102, $pop308 549; CHECK-NEXT: i32.const $push307=, 8 550; CHECK-NEXT: i32.shl $push104=, $pop103, $pop307 551; CHECK-NEXT: i32.or $push105=, $pop101, $pop104 552; CHECK-NEXT: i8x16.extract_lane_u $push106=, $1, 9 553; CHECK-NEXT: i32.const $push306=, 1 554; CHECK-NEXT: i32.and $push107=, $pop106, $pop306 555; CHECK-NEXT: i32.const $push305=, 9 556; CHECK-NEXT: i32.shl $push108=, $pop107, $pop305 557; CHECK-NEXT: i32.or $push109=, $pop105, $pop108 558; CHECK-NEXT: i8x16.extract_lane_u $push110=, $1, 10 559; CHECK-NEXT: i32.const $push304=, 1 560; CHECK-NEXT: i32.and $push111=, $pop110, $pop304 561; CHECK-NEXT: i32.const $push303=, 10 562; CHECK-NEXT: i32.shl $push112=, $pop111, $pop303 563; CHECK-NEXT: i32.or $push113=, $pop109, $pop112 564; CHECK-NEXT: i8x16.extract_lane_u $push114=, $1, 11 565; CHECK-NEXT: i32.const $push302=, 1 566; CHECK-NEXT: i32.and $push115=, $pop114, $pop302 567; CHECK-NEXT: i32.const $push301=, 11 568; CHECK-NEXT: i32.shl $push116=, $pop115, $pop301 569; CHECK-NEXT: i32.or $push117=, $pop113, $pop116 570; CHECK-NEXT: i8x16.extract_lane_u $push118=, $1, 12 571; CHECK-NEXT: i32.const $push300=, 1 572; CHECK-NEXT: i32.and $push119=, $pop118, $pop300 573; CHECK-NEXT: i32.const $push299=, 12 574; CHECK-NEXT: i32.shl $push120=, $pop119, $pop299 575; CHECK-NEXT: i32.or $push121=, $pop117, $pop120 576; CHECK-NEXT: i8x16.extract_lane_u $push122=, $1, 13 577; CHECK-NEXT: i32.const $push298=, 1 578; CHECK-NEXT: i32.and $push123=, $pop122, $pop298 579; CHECK-NEXT: i32.const $push297=, 13 580; CHECK-NEXT: i32.shl $push124=, $pop123, $pop297 581; CHECK-NEXT: i32.or $push125=, $pop121, $pop124 582; CHECK-NEXT: i8x16.extract_lane_u $push126=, $1, 14 583; CHECK-NEXT: i32.const $push296=, 1 584; CHECK-NEXT: i32.and $push127=, $pop126, $pop296 585; CHECK-NEXT: i32.const $push295=, 14 586; CHECK-NEXT: i32.shl $push128=, $pop127, $pop295 587; CHECK-NEXT: i32.or $push129=, $pop125, $pop128 588; CHECK-NEXT: i32.or $push135=, $pop134, $pop129 589; CHECK-NEXT: i8x16.extract_lane_u $push0=, $3, 0 590; CHECK-NEXT: i32.const $push294=, 1 591; CHECK-NEXT: i32.and $push2=, $pop0, $pop294 592; CHECK-NEXT: i8x16.extract_lane_u $push3=, $3, 1 593; CHECK-NEXT: i32.const $push293=, 1 594; CHECK-NEXT: i32.and $push4=, $pop3, $pop293 595; CHECK-NEXT: i32.const $push292=, 1 596; CHECK-NEXT: i32.shl $push5=, $pop4, $pop292 597; CHECK-NEXT: i32.or $push6=, $pop2, $pop5 598; CHECK-NEXT: i8x16.extract_lane_u $push7=, $3, 2 599; CHECK-NEXT: i32.const $push291=, 1 600; CHECK-NEXT: i32.and $push8=, $pop7, $pop291 601; CHECK-NEXT: i32.const $push290=, 2 602; CHECK-NEXT: i32.shl $push10=, $pop8, $pop290 603; CHECK-NEXT: i32.or $push11=, $pop6, $pop10 604; CHECK-NEXT: i8x16.extract_lane_u $push12=, $3, 3 605; CHECK-NEXT: i32.const $push289=, 1 606; CHECK-NEXT: i32.and $push13=, $pop12, $pop289 607; CHECK-NEXT: i32.const $push288=, 3 608; CHECK-NEXT: i32.shl $push15=, $pop13, $pop288 609; CHECK-NEXT: i32.or $push16=, $pop11, $pop15 610; CHECK-NEXT: i8x16.extract_lane_u $push17=, $3, 4 611; CHECK-NEXT: i32.const $push287=, 1 612; CHECK-NEXT: i32.and $push18=, $pop17, $pop287 613; CHECK-NEXT: i32.const $push286=, 4 614; CHECK-NEXT: i32.shl $push20=, $pop18, $pop286 615; CHECK-NEXT: i32.or $push21=, $pop16, $pop20 616; CHECK-NEXT: i8x16.extract_lane_u $push22=, $3, 5 617; CHECK-NEXT: i32.const $push285=, 1 618; CHECK-NEXT: i32.and $push23=, $pop22, $pop285 619; CHECK-NEXT: i32.const $push284=, 5 620; CHECK-NEXT: i32.shl $push25=, $pop23, $pop284 621; CHECK-NEXT: i32.or $push26=, $pop21, $pop25 622; CHECK-NEXT: i8x16.extract_lane_u $push27=, $3, 6 623; CHECK-NEXT: i32.const $push283=, 1 624; CHECK-NEXT: i32.and $push28=, $pop27, $pop283 625; CHECK-NEXT: i32.const $push282=, 6 626; CHECK-NEXT: i32.shl $push30=, $pop28, $pop282 627; CHECK-NEXT: i32.or $push31=, $pop26, $pop30 628; CHECK-NEXT: i8x16.extract_lane_u $push32=, $3, 7 629; CHECK-NEXT: i32.const $push281=, 1 630; CHECK-NEXT: i32.and $push33=, $pop32, $pop281 631; CHECK-NEXT: i32.const $push280=, 7 632; CHECK-NEXT: i32.shl $push35=, $pop33, $pop280 633; CHECK-NEXT: i32.or $push36=, $pop31, $pop35 634; CHECK-NEXT: i8x16.extract_lane_u $push37=, $3, 8 635; CHECK-NEXT: i32.const $push279=, 1 636; CHECK-NEXT: i32.and $push38=, $pop37, $pop279 637; CHECK-NEXT: i32.const $push278=, 8 638; CHECK-NEXT: i32.shl $push40=, $pop38, $pop278 639; CHECK-NEXT: i32.or $push41=, $pop36, $pop40 640; CHECK-NEXT: i8x16.extract_lane_u $push42=, $3, 9 641; CHECK-NEXT: i32.const $push277=, 1 642; CHECK-NEXT: i32.and $push43=, $pop42, $pop277 643; CHECK-NEXT: i32.const $push276=, 9 644; CHECK-NEXT: i32.shl $push45=, $pop43, $pop276 645; CHECK-NEXT: i32.or $push46=, $pop41, $pop45 646; CHECK-NEXT: i8x16.extract_lane_u $push47=, $3, 10 647; CHECK-NEXT: i32.const $push275=, 1 648; CHECK-NEXT: i32.and $push48=, $pop47, $pop275 649; CHECK-NEXT: i32.const $push274=, 10 650; CHECK-NEXT: i32.shl $push50=, $pop48, $pop274 651; CHECK-NEXT: i32.or $push51=, $pop46, $pop50 652; CHECK-NEXT: i8x16.extract_lane_u $push52=, $3, 11 653; CHECK-NEXT: i32.const $push273=, 1 654; CHECK-NEXT: i32.and $push53=, $pop52, $pop273 655; CHECK-NEXT: i32.const $push272=, 11 656; CHECK-NEXT: i32.shl $push55=, $pop53, $pop272 657; CHECK-NEXT: i32.or $push56=, $pop51, $pop55 658; CHECK-NEXT: i8x16.extract_lane_u $push57=, $3, 12 659; CHECK-NEXT: i32.const $push271=, 1 660; CHECK-NEXT: i32.and $push58=, $pop57, $pop271 661; CHECK-NEXT: i32.const $push270=, 12 662; CHECK-NEXT: i32.shl $push60=, $pop58, $pop270 663; CHECK-NEXT: i32.or $push61=, $pop56, $pop60 664; CHECK-NEXT: i8x16.extract_lane_u $push62=, $3, 13 665; CHECK-NEXT: i32.const $push269=, 1 666; CHECK-NEXT: i32.and $push63=, $pop62, $pop269 667; CHECK-NEXT: i32.const $push268=, 13 668; CHECK-NEXT: i32.shl $push65=, $pop63, $pop268 669; CHECK-NEXT: i32.or $push66=, $pop61, $pop65 670; CHECK-NEXT: i8x16.extract_lane_u $push67=, $3, 14 671; CHECK-NEXT: i32.const $push267=, 1 672; CHECK-NEXT: i32.and $push68=, $pop67, $pop267 673; CHECK-NEXT: i32.const $push266=, 14 674; CHECK-NEXT: i32.shl $push70=, $pop68, $pop266 675; CHECK-NEXT: i32.or $push71=, $pop66, $pop70 676; CHECK-NEXT: i32.or $push136=, $pop135, $pop71 677; CHECK-NEXT: i32.or $push259=, $pop258, $pop136 678; CHECK-NEXT: i32.const $push260=, 65535 679; CHECK-NEXT: i32.and $push261=, $pop259, $pop260 680; CHECK-NEXT: i32.const $push262=, 0 681; CHECK-NEXT: i32.ne $push263=, $pop261, $pop262 682; CHECK-NEXT: return $pop263 683 %bits = trunc <64 x i8> %x to <64 x i1> 684 %ret = call i1 @llvm.vector.reduce.or.v64i1(<64 x i1> %bits) 685 ret i1 %ret 686} 687 688;; TODO: Improve this codegen. 689define i1 @test_all_v64i8(<64 x i8> %x) { 690; CHECK-LABEL: test_all_v64i8: 691; CHECK: .functype test_all_v64i8 (v128, v128, v128, v128) -> (i32) 692; CHECK-NEXT: # %bb.0: 693; CHECK-NEXT: global.get $push287=, __stack_pointer 694; CHECK-NEXT: i32.const $push288=, 16 695; CHECK-NEXT: i32.sub $drop=, $pop287, $pop288 696; CHECK-NEXT: i8x16.extract_lane_u $push220=, $2, 0 697; CHECK-NEXT: i32.const $push1=, 1 698; CHECK-NEXT: i32.and $push221=, $pop220, $pop1 699; CHECK-NEXT: i8x16.extract_lane_u $push222=, $2, 1 700; CHECK-NEXT: i32.const $push380=, 1 701; CHECK-NEXT: i32.and $push223=, $pop222, $pop380 702; CHECK-NEXT: i32.const $push379=, 1 703; CHECK-NEXT: i32.shl $push224=, $pop223, $pop379 704; CHECK-NEXT: i32.or $push225=, $pop221, $pop224 705; CHECK-NEXT: i8x16.extract_lane_u $push226=, $2, 2 706; CHECK-NEXT: i32.const $push378=, 1 707; CHECK-NEXT: i32.and $push227=, $pop226, $pop378 708; CHECK-NEXT: i32.const $push87=, 2 709; CHECK-NEXT: i32.shl $push228=, $pop227, $pop87 710; CHECK-NEXT: i32.or $push229=, $pop225, $pop228 711; CHECK-NEXT: i8x16.extract_lane_u $push230=, $2, 3 712; CHECK-NEXT: i32.const $push377=, 1 713; CHECK-NEXT: i32.and $push231=, $pop230, $pop377 714; CHECK-NEXT: i32.const $push92=, 3 715; CHECK-NEXT: i32.shl $push232=, $pop231, $pop92 716; CHECK-NEXT: i32.or $push233=, $pop229, $pop232 717; CHECK-NEXT: i8x16.extract_lane_u $push234=, $2, 4 718; CHECK-NEXT: i32.const $push376=, 1 719; CHECK-NEXT: i32.and $push235=, $pop234, $pop376 720; CHECK-NEXT: i32.const $push97=, 4 721; CHECK-NEXT: i32.shl $push236=, $pop235, $pop97 722; CHECK-NEXT: i32.or $push237=, $pop233, $pop236 723; CHECK-NEXT: i8x16.extract_lane_u $push238=, $2, 5 724; CHECK-NEXT: i32.const $push375=, 1 725; CHECK-NEXT: i32.and $push239=, $pop238, $pop375 726; CHECK-NEXT: i32.const $push102=, 5 727; CHECK-NEXT: i32.shl $push240=, $pop239, $pop102 728; CHECK-NEXT: i32.or $push241=, $pop237, $pop240 729; CHECK-NEXT: i8x16.extract_lane_u $push242=, $2, 6 730; CHECK-NEXT: i32.const $push374=, 1 731; CHECK-NEXT: i32.and $push243=, $pop242, $pop374 732; CHECK-NEXT: i32.const $push107=, 6 733; CHECK-NEXT: i32.shl $push244=, $pop243, $pop107 734; CHECK-NEXT: i32.or $push245=, $pop241, $pop244 735; CHECK-NEXT: i8x16.extract_lane_u $push246=, $2, 7 736; CHECK-NEXT: i32.const $push373=, 1 737; CHECK-NEXT: i32.and $push247=, $pop246, $pop373 738; CHECK-NEXT: i32.const $push112=, 7 739; CHECK-NEXT: i32.shl $push248=, $pop247, $pop112 740; CHECK-NEXT: i32.or $push249=, $pop245, $pop248 741; CHECK-NEXT: i8x16.extract_lane_u $push250=, $2, 8 742; CHECK-NEXT: i32.const $push372=, 1 743; CHECK-NEXT: i32.and $push251=, $pop250, $pop372 744; CHECK-NEXT: i32.const $push117=, 8 745; CHECK-NEXT: i32.shl $push252=, $pop251, $pop117 746; CHECK-NEXT: i32.or $push253=, $pop249, $pop252 747; CHECK-NEXT: i8x16.extract_lane_u $push254=, $2, 9 748; CHECK-NEXT: i32.const $push371=, 1 749; CHECK-NEXT: i32.and $push255=, $pop254, $pop371 750; CHECK-NEXT: i32.const $push122=, 9 751; CHECK-NEXT: i32.shl $push256=, $pop255, $pop122 752; CHECK-NEXT: i32.or $push257=, $pop253, $pop256 753; CHECK-NEXT: i8x16.extract_lane_u $push258=, $2, 10 754; CHECK-NEXT: i32.const $push370=, 1 755; CHECK-NEXT: i32.and $push259=, $pop258, $pop370 756; CHECK-NEXT: i32.const $push127=, 10 757; CHECK-NEXT: i32.shl $push260=, $pop259, $pop127 758; CHECK-NEXT: i32.or $push261=, $pop257, $pop260 759; CHECK-NEXT: i8x16.extract_lane_u $push262=, $2, 11 760; CHECK-NEXT: i32.const $push369=, 1 761; CHECK-NEXT: i32.and $push263=, $pop262, $pop369 762; CHECK-NEXT: i32.const $push132=, 11 763; CHECK-NEXT: i32.shl $push264=, $pop263, $pop132 764; CHECK-NEXT: i32.or $push265=, $pop261, $pop264 765; CHECK-NEXT: i8x16.extract_lane_u $push266=, $2, 12 766; CHECK-NEXT: i32.const $push368=, 1 767; CHECK-NEXT: i32.and $push267=, $pop266, $pop368 768; CHECK-NEXT: i32.const $push137=, 12 769; CHECK-NEXT: i32.shl $push268=, $pop267, $pop137 770; CHECK-NEXT: i32.or $push269=, $pop265, $pop268 771; CHECK-NEXT: i8x16.extract_lane_u $push270=, $2, 13 772; CHECK-NEXT: i32.const $push367=, 1 773; CHECK-NEXT: i32.and $push271=, $pop270, $pop367 774; CHECK-NEXT: i32.const $push142=, 13 775; CHECK-NEXT: i32.shl $push272=, $pop271, $pop142 776; CHECK-NEXT: i32.or $push273=, $pop269, $pop272 777; CHECK-NEXT: i8x16.extract_lane_u $push274=, $2, 14 778; CHECK-NEXT: i32.const $push366=, 1 779; CHECK-NEXT: i32.and $push275=, $pop274, $pop366 780; CHECK-NEXT: i32.const $push147=, 14 781; CHECK-NEXT: i32.shl $push276=, $pop275, $pop147 782; CHECK-NEXT: i32.or $push277=, $pop273, $pop276 783; CHECK-NEXT: i8x16.extract_lane_u $push278=, $2, 15 784; CHECK-NEXT: i32.const $push151=, 15 785; CHECK-NEXT: i32.shl $push279=, $pop278, $pop151 786; CHECK-NEXT: i32.or $push280=, $pop277, $pop279 787; CHECK-NEXT: i32.const $push154=, 65535 788; CHECK-NEXT: i32.and $push281=, $pop280, $pop154 789; CHECK-NEXT: i8x16.extract_lane_u $push217=, $3, 15 790; CHECK-NEXT: i32.const $push76=, 31 791; CHECK-NEXT: i32.shl $push218=, $pop217, $pop76 792; CHECK-NEXT: i8x16.extract_lane_u $push213=, $3, 14 793; CHECK-NEXT: i32.const $push365=, 1 794; CHECK-NEXT: i32.and $push214=, $pop213, $pop365 795; CHECK-NEXT: i32.const $push72=, 30 796; CHECK-NEXT: i32.shl $push215=, $pop214, $pop72 797; CHECK-NEXT: i8x16.extract_lane_u $push209=, $3, 13 798; CHECK-NEXT: i32.const $push364=, 1 799; CHECK-NEXT: i32.and $push210=, $pop209, $pop364 800; CHECK-NEXT: i32.const $push67=, 29 801; CHECK-NEXT: i32.shl $push211=, $pop210, $pop67 802; CHECK-NEXT: i8x16.extract_lane_u $push205=, $3, 12 803; CHECK-NEXT: i32.const $push363=, 1 804; CHECK-NEXT: i32.and $push206=, $pop205, $pop363 805; CHECK-NEXT: i32.const $push62=, 28 806; CHECK-NEXT: i32.shl $push207=, $pop206, $pop62 807; CHECK-NEXT: i8x16.extract_lane_u $push201=, $3, 11 808; CHECK-NEXT: i32.const $push362=, 1 809; CHECK-NEXT: i32.and $push202=, $pop201, $pop362 810; CHECK-NEXT: i32.const $push57=, 27 811; CHECK-NEXT: i32.shl $push203=, $pop202, $pop57 812; CHECK-NEXT: i8x16.extract_lane_u $push197=, $3, 10 813; CHECK-NEXT: i32.const $push361=, 1 814; CHECK-NEXT: i32.and $push198=, $pop197, $pop361 815; CHECK-NEXT: i32.const $push52=, 26 816; CHECK-NEXT: i32.shl $push199=, $pop198, $pop52 817; CHECK-NEXT: i8x16.extract_lane_u $push193=, $3, 9 818; CHECK-NEXT: i32.const $push360=, 1 819; CHECK-NEXT: i32.and $push194=, $pop193, $pop360 820; CHECK-NEXT: i32.const $push47=, 25 821; CHECK-NEXT: i32.shl $push195=, $pop194, $pop47 822; CHECK-NEXT: i8x16.extract_lane_u $push189=, $3, 8 823; CHECK-NEXT: i32.const $push359=, 1 824; CHECK-NEXT: i32.and $push190=, $pop189, $pop359 825; CHECK-NEXT: i32.const $push42=, 24 826; CHECK-NEXT: i32.shl $push191=, $pop190, $pop42 827; CHECK-NEXT: i8x16.extract_lane_u $push185=, $3, 7 828; CHECK-NEXT: i32.const $push358=, 1 829; CHECK-NEXT: i32.and $push186=, $pop185, $pop358 830; CHECK-NEXT: i32.const $push37=, 23 831; CHECK-NEXT: i32.shl $push187=, $pop186, $pop37 832; CHECK-NEXT: i8x16.extract_lane_u $push181=, $3, 6 833; CHECK-NEXT: i32.const $push357=, 1 834; CHECK-NEXT: i32.and $push182=, $pop181, $pop357 835; CHECK-NEXT: i32.const $push32=, 22 836; CHECK-NEXT: i32.shl $push183=, $pop182, $pop32 837; CHECK-NEXT: i8x16.extract_lane_u $push177=, $3, 5 838; CHECK-NEXT: i32.const $push356=, 1 839; CHECK-NEXT: i32.and $push178=, $pop177, $pop356 840; CHECK-NEXT: i32.const $push27=, 21 841; CHECK-NEXT: i32.shl $push179=, $pop178, $pop27 842; CHECK-NEXT: i8x16.extract_lane_u $push173=, $3, 4 843; CHECK-NEXT: i32.const $push355=, 1 844; CHECK-NEXT: i32.and $push174=, $pop173, $pop355 845; CHECK-NEXT: i32.const $push22=, 20 846; CHECK-NEXT: i32.shl $push175=, $pop174, $pop22 847; CHECK-NEXT: i8x16.extract_lane_u $push169=, $3, 3 848; CHECK-NEXT: i32.const $push354=, 1 849; CHECK-NEXT: i32.and $push170=, $pop169, $pop354 850; CHECK-NEXT: i32.const $push17=, 19 851; CHECK-NEXT: i32.shl $push171=, $pop170, $pop17 852; CHECK-NEXT: i8x16.extract_lane_u $push165=, $3, 2 853; CHECK-NEXT: i32.const $push353=, 1 854; CHECK-NEXT: i32.and $push166=, $pop165, $pop353 855; CHECK-NEXT: i32.const $push12=, 18 856; CHECK-NEXT: i32.shl $push167=, $pop166, $pop12 857; CHECK-NEXT: i8x16.extract_lane_u $push161=, $3, 1 858; CHECK-NEXT: i32.const $push352=, 1 859; CHECK-NEXT: i32.and $push162=, $pop161, $pop352 860; CHECK-NEXT: i32.const $push7=, 17 861; CHECK-NEXT: i32.shl $push163=, $pop162, $pop7 862; CHECK-NEXT: i8x16.extract_lane_u $push158=, $3, 0 863; CHECK-NEXT: i32.const $push351=, 1 864; CHECK-NEXT: i32.and $push159=, $pop158, $pop351 865; CHECK-NEXT: i32.const $push3=, 16 866; CHECK-NEXT: i32.shl $push160=, $pop159, $pop3 867; CHECK-NEXT: i32.or $push164=, $pop163, $pop160 868; CHECK-NEXT: i32.or $push168=, $pop167, $pop164 869; CHECK-NEXT: i32.or $push172=, $pop171, $pop168 870; CHECK-NEXT: i32.or $push176=, $pop175, $pop172 871; CHECK-NEXT: i32.or $push180=, $pop179, $pop176 872; CHECK-NEXT: i32.or $push184=, $pop183, $pop180 873; CHECK-NEXT: i32.or $push188=, $pop187, $pop184 874; CHECK-NEXT: i32.or $push192=, $pop191, $pop188 875; CHECK-NEXT: i32.or $push196=, $pop195, $pop192 876; CHECK-NEXT: i32.or $push200=, $pop199, $pop196 877; CHECK-NEXT: i32.or $push204=, $pop203, $pop200 878; CHECK-NEXT: i32.or $push208=, $pop207, $pop204 879; CHECK-NEXT: i32.or $push212=, $pop211, $pop208 880; CHECK-NEXT: i32.or $push216=, $pop215, $pop212 881; CHECK-NEXT: i32.or $push219=, $pop218, $pop216 882; CHECK-NEXT: i32.or $push282=, $pop281, $pop219 883; CHECK-NEXT: i64.extend_i32_u $push283=, $pop282 884; CHECK-NEXT: i8x16.extract_lane_u $push79=, $0, 0 885; CHECK-NEXT: i32.const $push350=, 1 886; CHECK-NEXT: i32.and $push80=, $pop79, $pop350 887; CHECK-NEXT: i8x16.extract_lane_u $push81=, $0, 1 888; CHECK-NEXT: i32.const $push349=, 1 889; CHECK-NEXT: i32.and $push82=, $pop81, $pop349 890; CHECK-NEXT: i32.const $push348=, 1 891; CHECK-NEXT: i32.shl $push83=, $pop82, $pop348 892; CHECK-NEXT: i32.or $push84=, $pop80, $pop83 893; CHECK-NEXT: i8x16.extract_lane_u $push85=, $0, 2 894; CHECK-NEXT: i32.const $push347=, 1 895; CHECK-NEXT: i32.and $push86=, $pop85, $pop347 896; CHECK-NEXT: i32.const $push346=, 2 897; CHECK-NEXT: i32.shl $push88=, $pop86, $pop346 898; CHECK-NEXT: i32.or $push89=, $pop84, $pop88 899; CHECK-NEXT: i8x16.extract_lane_u $push90=, $0, 3 900; CHECK-NEXT: i32.const $push345=, 1 901; CHECK-NEXT: i32.and $push91=, $pop90, $pop345 902; CHECK-NEXT: i32.const $push344=, 3 903; CHECK-NEXT: i32.shl $push93=, $pop91, $pop344 904; CHECK-NEXT: i32.or $push94=, $pop89, $pop93 905; CHECK-NEXT: i8x16.extract_lane_u $push95=, $0, 4 906; CHECK-NEXT: i32.const $push343=, 1 907; CHECK-NEXT: i32.and $push96=, $pop95, $pop343 908; CHECK-NEXT: i32.const $push342=, 4 909; CHECK-NEXT: i32.shl $push98=, $pop96, $pop342 910; CHECK-NEXT: i32.or $push99=, $pop94, $pop98 911; CHECK-NEXT: i8x16.extract_lane_u $push100=, $0, 5 912; CHECK-NEXT: i32.const $push341=, 1 913; CHECK-NEXT: i32.and $push101=, $pop100, $pop341 914; CHECK-NEXT: i32.const $push340=, 5 915; CHECK-NEXT: i32.shl $push103=, $pop101, $pop340 916; CHECK-NEXT: i32.or $push104=, $pop99, $pop103 917; CHECK-NEXT: i8x16.extract_lane_u $push105=, $0, 6 918; CHECK-NEXT: i32.const $push339=, 1 919; CHECK-NEXT: i32.and $push106=, $pop105, $pop339 920; CHECK-NEXT: i32.const $push338=, 6 921; CHECK-NEXT: i32.shl $push108=, $pop106, $pop338 922; CHECK-NEXT: i32.or $push109=, $pop104, $pop108 923; CHECK-NEXT: i8x16.extract_lane_u $push110=, $0, 7 924; CHECK-NEXT: i32.const $push337=, 1 925; CHECK-NEXT: i32.and $push111=, $pop110, $pop337 926; CHECK-NEXT: i32.const $push336=, 7 927; CHECK-NEXT: i32.shl $push113=, $pop111, $pop336 928; CHECK-NEXT: i32.or $push114=, $pop109, $pop113 929; CHECK-NEXT: i8x16.extract_lane_u $push115=, $0, 8 930; CHECK-NEXT: i32.const $push335=, 1 931; CHECK-NEXT: i32.and $push116=, $pop115, $pop335 932; CHECK-NEXT: i32.const $push334=, 8 933; CHECK-NEXT: i32.shl $push118=, $pop116, $pop334 934; CHECK-NEXT: i32.or $push119=, $pop114, $pop118 935; CHECK-NEXT: i8x16.extract_lane_u $push120=, $0, 9 936; CHECK-NEXT: i32.const $push333=, 1 937; CHECK-NEXT: i32.and $push121=, $pop120, $pop333 938; CHECK-NEXT: i32.const $push332=, 9 939; CHECK-NEXT: i32.shl $push123=, $pop121, $pop332 940; CHECK-NEXT: i32.or $push124=, $pop119, $pop123 941; CHECK-NEXT: i8x16.extract_lane_u $push125=, $0, 10 942; CHECK-NEXT: i32.const $push331=, 1 943; CHECK-NEXT: i32.and $push126=, $pop125, $pop331 944; CHECK-NEXT: i32.const $push330=, 10 945; CHECK-NEXT: i32.shl $push128=, $pop126, $pop330 946; CHECK-NEXT: i32.or $push129=, $pop124, $pop128 947; CHECK-NEXT: i8x16.extract_lane_u $push130=, $0, 11 948; CHECK-NEXT: i32.const $push329=, 1 949; CHECK-NEXT: i32.and $push131=, $pop130, $pop329 950; CHECK-NEXT: i32.const $push328=, 11 951; CHECK-NEXT: i32.shl $push133=, $pop131, $pop328 952; CHECK-NEXT: i32.or $push134=, $pop129, $pop133 953; CHECK-NEXT: i8x16.extract_lane_u $push135=, $0, 12 954; CHECK-NEXT: i32.const $push327=, 1 955; CHECK-NEXT: i32.and $push136=, $pop135, $pop327 956; CHECK-NEXT: i32.const $push326=, 12 957; CHECK-NEXT: i32.shl $push138=, $pop136, $pop326 958; CHECK-NEXT: i32.or $push139=, $pop134, $pop138 959; CHECK-NEXT: i8x16.extract_lane_u $push140=, $0, 13 960; CHECK-NEXT: i32.const $push325=, 1 961; CHECK-NEXT: i32.and $push141=, $pop140, $pop325 962; CHECK-NEXT: i32.const $push324=, 13 963; CHECK-NEXT: i32.shl $push143=, $pop141, $pop324 964; CHECK-NEXT: i32.or $push144=, $pop139, $pop143 965; CHECK-NEXT: i8x16.extract_lane_u $push145=, $0, 14 966; CHECK-NEXT: i32.const $push323=, 1 967; CHECK-NEXT: i32.and $push146=, $pop145, $pop323 968; CHECK-NEXT: i32.const $push322=, 14 969; CHECK-NEXT: i32.shl $push148=, $pop146, $pop322 970; CHECK-NEXT: i32.or $push149=, $pop144, $pop148 971; CHECK-NEXT: i8x16.extract_lane_u $push150=, $0, 15 972; CHECK-NEXT: i32.const $push321=, 15 973; CHECK-NEXT: i32.shl $push152=, $pop150, $pop321 974; CHECK-NEXT: i32.or $push153=, $pop149, $pop152 975; CHECK-NEXT: i32.const $push320=, 65535 976; CHECK-NEXT: i32.and $push155=, $pop153, $pop320 977; CHECK-NEXT: i8x16.extract_lane_u $push75=, $1, 15 978; CHECK-NEXT: i32.const $push319=, 31 979; CHECK-NEXT: i32.shl $push77=, $pop75, $pop319 980; CHECK-NEXT: i8x16.extract_lane_u $push70=, $1, 14 981; CHECK-NEXT: i32.const $push318=, 1 982; CHECK-NEXT: i32.and $push71=, $pop70, $pop318 983; CHECK-NEXT: i32.const $push317=, 30 984; CHECK-NEXT: i32.shl $push73=, $pop71, $pop317 985; CHECK-NEXT: i8x16.extract_lane_u $push65=, $1, 13 986; CHECK-NEXT: i32.const $push316=, 1 987; CHECK-NEXT: i32.and $push66=, $pop65, $pop316 988; CHECK-NEXT: i32.const $push315=, 29 989; CHECK-NEXT: i32.shl $push68=, $pop66, $pop315 990; CHECK-NEXT: i8x16.extract_lane_u $push60=, $1, 12 991; CHECK-NEXT: i32.const $push314=, 1 992; CHECK-NEXT: i32.and $push61=, $pop60, $pop314 993; CHECK-NEXT: i32.const $push313=, 28 994; CHECK-NEXT: i32.shl $push63=, $pop61, $pop313 995; CHECK-NEXT: i8x16.extract_lane_u $push55=, $1, 11 996; CHECK-NEXT: i32.const $push312=, 1 997; CHECK-NEXT: i32.and $push56=, $pop55, $pop312 998; CHECK-NEXT: i32.const $push311=, 27 999; CHECK-NEXT: i32.shl $push58=, $pop56, $pop311 1000; CHECK-NEXT: i8x16.extract_lane_u $push50=, $1, 10 1001; CHECK-NEXT: i32.const $push310=, 1 1002; CHECK-NEXT: i32.and $push51=, $pop50, $pop310 1003; CHECK-NEXT: i32.const $push309=, 26 1004; CHECK-NEXT: i32.shl $push53=, $pop51, $pop309 1005; CHECK-NEXT: i8x16.extract_lane_u $push45=, $1, 9 1006; CHECK-NEXT: i32.const $push308=, 1 1007; CHECK-NEXT: i32.and $push46=, $pop45, $pop308 1008; CHECK-NEXT: i32.const $push307=, 25 1009; CHECK-NEXT: i32.shl $push48=, $pop46, $pop307 1010; CHECK-NEXT: i8x16.extract_lane_u $push40=, $1, 8 1011; CHECK-NEXT: i32.const $push306=, 1 1012; CHECK-NEXT: i32.and $push41=, $pop40, $pop306 1013; CHECK-NEXT: i32.const $push305=, 24 1014; CHECK-NEXT: i32.shl $push43=, $pop41, $pop305 1015; CHECK-NEXT: i8x16.extract_lane_u $push35=, $1, 7 1016; CHECK-NEXT: i32.const $push304=, 1 1017; CHECK-NEXT: i32.and $push36=, $pop35, $pop304 1018; CHECK-NEXT: i32.const $push303=, 23 1019; CHECK-NEXT: i32.shl $push38=, $pop36, $pop303 1020; CHECK-NEXT: i8x16.extract_lane_u $push30=, $1, 6 1021; CHECK-NEXT: i32.const $push302=, 1 1022; CHECK-NEXT: i32.and $push31=, $pop30, $pop302 1023; CHECK-NEXT: i32.const $push301=, 22 1024; CHECK-NEXT: i32.shl $push33=, $pop31, $pop301 1025; CHECK-NEXT: i8x16.extract_lane_u $push25=, $1, 5 1026; CHECK-NEXT: i32.const $push300=, 1 1027; CHECK-NEXT: i32.and $push26=, $pop25, $pop300 1028; CHECK-NEXT: i32.const $push299=, 21 1029; CHECK-NEXT: i32.shl $push28=, $pop26, $pop299 1030; CHECK-NEXT: i8x16.extract_lane_u $push20=, $1, 4 1031; CHECK-NEXT: i32.const $push298=, 1 1032; CHECK-NEXT: i32.and $push21=, $pop20, $pop298 1033; CHECK-NEXT: i32.const $push297=, 20 1034; CHECK-NEXT: i32.shl $push23=, $pop21, $pop297 1035; CHECK-NEXT: i8x16.extract_lane_u $push15=, $1, 3 1036; CHECK-NEXT: i32.const $push296=, 1 1037; CHECK-NEXT: i32.and $push16=, $pop15, $pop296 1038; CHECK-NEXT: i32.const $push295=, 19 1039; CHECK-NEXT: i32.shl $push18=, $pop16, $pop295 1040; CHECK-NEXT: i8x16.extract_lane_u $push10=, $1, 2 1041; CHECK-NEXT: i32.const $push294=, 1 1042; CHECK-NEXT: i32.and $push11=, $pop10, $pop294 1043; CHECK-NEXT: i32.const $push293=, 18 1044; CHECK-NEXT: i32.shl $push13=, $pop11, $pop293 1045; CHECK-NEXT: i8x16.extract_lane_u $push5=, $1, 1 1046; CHECK-NEXT: i32.const $push292=, 1 1047; CHECK-NEXT: i32.and $push6=, $pop5, $pop292 1048; CHECK-NEXT: i32.const $push291=, 17 1049; CHECK-NEXT: i32.shl $push8=, $pop6, $pop291 1050; CHECK-NEXT: i8x16.extract_lane_u $push0=, $1, 0 1051; CHECK-NEXT: i32.const $push290=, 1 1052; CHECK-NEXT: i32.and $push2=, $pop0, $pop290 1053; CHECK-NEXT: i32.const $push289=, 16 1054; CHECK-NEXT: i32.shl $push4=, $pop2, $pop289 1055; CHECK-NEXT: i32.or $push9=, $pop8, $pop4 1056; CHECK-NEXT: i32.or $push14=, $pop13, $pop9 1057; CHECK-NEXT: i32.or $push19=, $pop18, $pop14 1058; CHECK-NEXT: i32.or $push24=, $pop23, $pop19 1059; CHECK-NEXT: i32.or $push29=, $pop28, $pop24 1060; CHECK-NEXT: i32.or $push34=, $pop33, $pop29 1061; CHECK-NEXT: i32.or $push39=, $pop38, $pop34 1062; CHECK-NEXT: i32.or $push44=, $pop43, $pop39 1063; CHECK-NEXT: i32.or $push49=, $pop48, $pop44 1064; CHECK-NEXT: i32.or $push54=, $pop53, $pop49 1065; CHECK-NEXT: i32.or $push59=, $pop58, $pop54 1066; CHECK-NEXT: i32.or $push64=, $pop63, $pop59 1067; CHECK-NEXT: i32.or $push69=, $pop68, $pop64 1068; CHECK-NEXT: i32.or $push74=, $pop73, $pop69 1069; CHECK-NEXT: i32.or $push78=, $pop77, $pop74 1070; CHECK-NEXT: i32.or $push156=, $pop155, $pop78 1071; CHECK-NEXT: i64.extend_i32_u $push157=, $pop156 1072; CHECK-NEXT: i64.and $push284=, $pop283, $pop157 1073; CHECK-NEXT: i64.const $push285=, 4294967295 1074; CHECK-NEXT: i64.eq $push286=, $pop284, $pop285 1075; CHECK-NEXT: return $pop286 1076 %bits = trunc <64 x i8> %x to <64 x i1> 1077 %ret = call i1 @llvm.vector.reduce.and.v64i1(<64 x i1> %bits) 1078 ret i1 %ret 1079} 1080 1081;; ===================== 1082;; Test reduce after cmp 1083;; ===================== 1084 1085define i1 @test_cmp_v16i8(<16 x i8> %x) { 1086; CHECK-LABEL: test_cmp_v16i8: 1087; CHECK: .functype test_cmp_v16i8 (v128) -> (i32) 1088; CHECK-NEXT: # %bb.0: 1089; CHECK-NEXT: v128.const $push0=, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 1090; CHECK-NEXT: i8x16.eq $push1=, $0, $pop0 1091; CHECK-NEXT: v128.any_true $push2=, $pop1 1092; CHECK-NEXT: return $pop2 1093 %zero = icmp eq <16 x i8> %x, zeroinitializer 1094 %ret = call i1 @llvm.vector.reduce.or.v16i1(<16 x i1> %zero) 1095 ret i1 %ret 1096} 1097