1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -verify-machineinstrs -mcpu=pwr8 -ppc-asm-full-reg-names \ 3; RUN: -ppc-vsr-nums-as-vr -mtriple=powerpc64le-unknown-linux-gnu < %s | \ 4; RUN: FileCheck %s --check-prefix=CHECK-LE-P8 5; RUN: llc -verify-machineinstrs -mcpu=pwr9 -ppc-asm-full-reg-names \ 6; RUN: -ppc-vsr-nums-as-vr -mtriple=powerpc64le-unknown-linux-gnu < %s | \ 7; RUN: FileCheck %s --check-prefix=CHECK-LE-P9 8; RUN: llc -verify-machineinstrs -mcpu=pwr8 -ppc-asm-full-reg-names \ 9; RUN: -ppc-vsr-nums-as-vr -mtriple=powerpc64-unknown-linux-gnu < %s | \ 10; RUN: FileCheck %s --check-prefix=CHECK-BE-P8 11; RUN: llc -verify-machineinstrs -mcpu=pwr9 -ppc-asm-full-reg-names \ 12; RUN: -ppc-vsr-nums-as-vr -mtriple=powerpc64-unknown-linux-gnu < %s | \ 13; RUN: FileCheck %s --check-prefix=CHECK-BE-P9 14 15; RUN: llc -verify-machineinstrs -mcpu=pwr8 -ppc-asm-full-reg-names \ 16; RUN: -ppc-vsr-nums-as-vr -mtriple=powerpc64-ibm-aix < %s | \ 17; RUN: FileCheck %s --check-prefix=CHECK-AIX-64-P8 18; RUN: llc -verify-machineinstrs -mcpu=pwr9 -ppc-asm-full-reg-names \ 19; RUN: -ppc-vsr-nums-as-vr -mtriple=powerpc64-ibm-aix < %s | \ 20; RUN: FileCheck %s --check-prefix=CHECK-AIX-64-P9 21; RUN: llc -verify-machineinstrs -mcpu=pwr8 -ppc-asm-full-reg-names \ 22; RUN: -ppc-vsr-nums-as-vr -mtriple=powerpc-ibm-aix < %s | \ 23; RUN: FileCheck %s --check-prefix=CHECK-AIX-32-P8 24; RUN: llc -verify-machineinstrs -mcpu=pwr9 -ppc-asm-full-reg-names \ 25; RUN: -ppc-vsr-nums-as-vr -mtriple=powerpc-ibm-aix < %s | \ 26; RUN: FileCheck %s --check-prefix=CHECK-AIX-32-P9 27 28define void @test_none_v8i16(ptr %a) { 29; CHECK-LE-P8-LABEL: test_none_v8i16: 30; CHECK-LE-P8: # %bb.0: # %entry 31; CHECK-LE-P8-NEXT: lhz r4, 0(r3) 32; CHECK-LE-P8-NEXT: lfdx f1, 0, r3 33; CHECK-LE-P8-NEXT: mtfprd f0, r4 34; CHECK-LE-P8-NEXT: xxmrghw vs0, vs0, vs1 35; CHECK-LE-P8-NEXT: xxswapd vs0, vs0 36; CHECK-LE-P8-NEXT: stfdx f0, 0, r3 37; CHECK-LE-P8-NEXT: blr 38; 39; CHECK-LE-P9-LABEL: test_none_v8i16: 40; CHECK-LE-P9: # %bb.0: # %entry 41; CHECK-LE-P9-NEXT: lxsihzx f0, 0, r3 42; CHECK-LE-P9-NEXT: lfd f1, 0(r3) 43; CHECK-LE-P9-NEXT: xxmrghw vs0, vs0, vs1 44; CHECK-LE-P9-NEXT: xxswapd vs0, vs0 45; CHECK-LE-P9-NEXT: stfd f0, 0(r3) 46; CHECK-LE-P9-NEXT: blr 47; 48; CHECK-BE-P8-LABEL: test_none_v8i16: 49; CHECK-BE-P8: # %bb.0: # %entry 50; CHECK-BE-P8-NEXT: lhz r4, 0(r3) 51; CHECK-BE-P8-NEXT: lfdx f1, 0, r3 52; CHECK-BE-P8-NEXT: sldi r4, r4, 48 53; CHECK-BE-P8-NEXT: mtfprd f0, r4 54; CHECK-BE-P8-NEXT: xxmrghw vs0, vs1, vs0 55; CHECK-BE-P8-NEXT: stfdx f0, 0, r3 56; CHECK-BE-P8-NEXT: blr 57; 58; CHECK-BE-P9-LABEL: test_none_v8i16: 59; CHECK-BE-P9: # %bb.0: # %entry 60; CHECK-BE-P9-NEXT: lxsihzx v2, 0, r3 61; CHECK-BE-P9-NEXT: lfd f0, 0(r3) 62; CHECK-BE-P9-NEXT: vsplth v2, v2, 3 63; CHECK-BE-P9-NEXT: xxmrghw vs0, vs0, v2 64; CHECK-BE-P9-NEXT: stfd f0, 0(r3) 65; CHECK-BE-P9-NEXT: blr 66; 67; CHECK-AIX-64-P8-LABEL: test_none_v8i16: 68; CHECK-AIX-64-P8: # %bb.0: # %entry 69; CHECK-AIX-64-P8-NEXT: lhz r4, 0(r3) 70; CHECK-AIX-64-P8-NEXT: lfdx f1, 0, r3 71; CHECK-AIX-64-P8-NEXT: sldi r4, r4, 48 72; CHECK-AIX-64-P8-NEXT: mtfprd f0, r4 73; CHECK-AIX-64-P8-NEXT: xxmrghw vs0, vs1, vs0 74; CHECK-AIX-64-P8-NEXT: stfdx f0, 0, r3 75; CHECK-AIX-64-P8-NEXT: blr 76; 77; CHECK-AIX-64-P9-LABEL: test_none_v8i16: 78; CHECK-AIX-64-P9: # %bb.0: # %entry 79; CHECK-AIX-64-P9-NEXT: lxsihzx v2, 0, r3 80; CHECK-AIX-64-P9-NEXT: lfd f0, 0(r3) 81; CHECK-AIX-64-P9-NEXT: vsplth v2, v2, 3 82; CHECK-AIX-64-P9-NEXT: xxmrghw vs0, vs0, v2 83; CHECK-AIX-64-P9-NEXT: stfd f0, 0(r3) 84; CHECK-AIX-64-P9-NEXT: blr 85; 86; CHECK-AIX-32-P8-LABEL: test_none_v8i16: 87; CHECK-AIX-32-P8: # %bb.0: # %entry 88; CHECK-AIX-32-P8-NEXT: lhz r4, 0(r3) 89; CHECK-AIX-32-P8-NEXT: sth r4, -32(r1) 90; CHECK-AIX-32-P8-NEXT: addi r4, r1, -32 91; CHECK-AIX-32-P8-NEXT: lwz r3, 0(r3) 92; CHECK-AIX-32-P8-NEXT: lxvw4x vs0, 0, r4 93; CHECK-AIX-32-P8-NEXT: addi r4, r1, -16 94; CHECK-AIX-32-P8-NEXT: stxvw4x vs0, 0, r4 95; CHECK-AIX-32-P8-NEXT: stw r3, 0(r3) 96; CHECK-AIX-32-P8-NEXT: lwz r3, -16(r1) 97; CHECK-AIX-32-P8-NEXT: stw r3, 0(r3) 98; CHECK-AIX-32-P8-NEXT: blr 99; 100; CHECK-AIX-32-P9-LABEL: test_none_v8i16: 101; CHECK-AIX-32-P9: # %bb.0: # %entry 102; CHECK-AIX-32-P9-NEXT: lhz r4, 0(r3) 103; CHECK-AIX-32-P9-NEXT: sth r4, -32(r1) 104; CHECK-AIX-32-P9-NEXT: lxv vs0, -32(r1) 105; CHECK-AIX-32-P9-NEXT: lwz r3, 0(r3) 106; CHECK-AIX-32-P9-NEXT: stw r3, 0(r3) 107; CHECK-AIX-32-P9-NEXT: stxv vs0, -16(r1) 108; CHECK-AIX-32-P9-NEXT: lwz r3, -16(r1) 109; CHECK-AIX-32-P9-NEXT: stw r3, 0(r3) 110; CHECK-AIX-32-P9-NEXT: blr 111entry: 112 %0 = load <2 x i8>, ptr undef, align 1 113 %tmp0_1 = bitcast <2 x i8> %0 to i16 114 %tmp0_2 = insertelement <8 x i16> undef, i16 %tmp0_1, i32 0 115 %tmp0_3 = bitcast <8 x i16> %tmp0_2 to <4 x i32> 116 %1 = load <2 x i32>, ptr %a 117 %tmp1_1 = shufflevector <2 x i32> %1, <2 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1> 118 %2 = shufflevector <4 x i32> %tmp0_3, <4 x i32> %tmp1_1, <2 x i32> <i32 4, i32 0> 119 store <2 x i32> %2, ptr undef, align 4 120 ret void 121} 122 123define void @test_v8i16_none(ptr %a) { 124; CHECK-LE-P8-LABEL: test_v8i16_none: 125; CHECK-LE-P8: # %bb.0: # %entry 126; CHECK-LE-P8-NEXT: lxvd2x vs0, 0, r3 127; CHECK-LE-P8-NEXT: addis r3, r2, .LCPI1_0@toc@ha 128; CHECK-LE-P8-NEXT: addi r3, r3, .LCPI1_0@toc@l 129; CHECK-LE-P8-NEXT: xxswapd v2, vs0 130; CHECK-LE-P8-NEXT: lxvd2x vs0, 0, r3 131; CHECK-LE-P8-NEXT: lhz r3, 0(r3) 132; CHECK-LE-P8-NEXT: mtvsrd v4, r3 133; CHECK-LE-P8-NEXT: xxswapd v3, vs0 134; CHECK-LE-P8-NEXT: vperm v2, v2, v4, v3 135; CHECK-LE-P8-NEXT: xxswapd vs0, v2 136; CHECK-LE-P8-NEXT: stxvd2x vs0, 0, r3 137; CHECK-LE-P8-NEXT: blr 138; 139; CHECK-LE-P9-LABEL: test_v8i16_none: 140; CHECK-LE-P9: # %bb.0: # %entry 141; CHECK-LE-P9-NEXT: lxsihzx f0, 0, r3 142; CHECK-LE-P9-NEXT: lxv vs1, 0(r3) 143; CHECK-LE-P9-NEXT: addis r3, r2, .LCPI1_0@toc@ha 144; CHECK-LE-P9-NEXT: addi r3, r3, .LCPI1_0@toc@l 145; CHECK-LE-P9-NEXT: lxv vs2, 0(r3) 146; CHECK-LE-P9-NEXT: xxperm vs0, vs1, vs2 147; CHECK-LE-P9-NEXT: stxv vs0, 0(r3) 148; CHECK-LE-P9-NEXT: blr 149; 150; CHECK-BE-P8-LABEL: test_v8i16_none: 151; CHECK-BE-P8: # %bb.0: # %entry 152; CHECK-BE-P8-NEXT: lhz r4, 0(r3) 153; CHECK-BE-P8-NEXT: lxvw4x v3, 0, r3 154; CHECK-BE-P8-NEXT: addis r3, r2, .LCPI1_0@toc@ha 155; CHECK-BE-P8-NEXT: addi r3, r3, .LCPI1_0@toc@l 156; CHECK-BE-P8-NEXT: mtvsrwz v2, r4 157; CHECK-BE-P8-NEXT: lxvw4x v4, 0, r3 158; CHECK-BE-P8-NEXT: vperm v2, v2, v3, v4 159; CHECK-BE-P8-NEXT: stxvw4x v2, 0, r3 160; CHECK-BE-P8-NEXT: blr 161; 162; CHECK-BE-P9-LABEL: test_v8i16_none: 163; CHECK-BE-P9: # %bb.0: # %entry 164; CHECK-BE-P9-NEXT: lxsihzx f0, 0, r3 165; CHECK-BE-P9-NEXT: lxv vs1, 0(r3) 166; CHECK-BE-P9-NEXT: addis r3, r2, .LCPI1_0@toc@ha 167; CHECK-BE-P9-NEXT: addi r3, r3, .LCPI1_0@toc@l 168; CHECK-BE-P9-NEXT: lxv vs2, 0(r3) 169; CHECK-BE-P9-NEXT: xxperm vs1, vs0, vs2 170; CHECK-BE-P9-NEXT: stxv vs1, 0(r3) 171; CHECK-BE-P9-NEXT: blr 172; 173; CHECK-AIX-64-P8-LABEL: test_v8i16_none: 174; CHECK-AIX-64-P8: # %bb.0: # %entry 175; CHECK-AIX-64-P8-NEXT: lhz r4, 0(r3) 176; CHECK-AIX-64-P8-NEXT: lxvw4x v3, 0, r3 177; CHECK-AIX-64-P8-NEXT: ld r3, L..C0(r2) # %const.0 178; CHECK-AIX-64-P8-NEXT: mtvsrwz v2, r4 179; CHECK-AIX-64-P8-NEXT: lxvw4x v4, 0, r3 180; CHECK-AIX-64-P8-NEXT: vperm v2, v2, v3, v4 181; CHECK-AIX-64-P8-NEXT: stxvw4x v2, 0, r3 182; CHECK-AIX-64-P8-NEXT: blr 183; 184; CHECK-AIX-64-P9-LABEL: test_v8i16_none: 185; CHECK-AIX-64-P9: # %bb.0: # %entry 186; CHECK-AIX-64-P9-NEXT: lxsihzx f0, 0, r3 187; CHECK-AIX-64-P9-NEXT: lxv vs1, 0(r3) 188; CHECK-AIX-64-P9-NEXT: ld r3, L..C0(r2) # %const.0 189; CHECK-AIX-64-P9-NEXT: lxv vs2, 0(r3) 190; CHECK-AIX-64-P9-NEXT: xxperm vs1, vs0, vs2 191; CHECK-AIX-64-P9-NEXT: stxv vs1, 0(r3) 192; CHECK-AIX-64-P9-NEXT: blr 193; 194; CHECK-AIX-32-P8-LABEL: test_v8i16_none: 195; CHECK-AIX-32-P8: # %bb.0: # %entry 196; CHECK-AIX-32-P8-NEXT: lhz r4, 0(r3) 197; CHECK-AIX-32-P8-NEXT: lxvw4x v3, 0, r3 198; CHECK-AIX-32-P8-NEXT: lwz r3, L..C0(r2) # %const.0 199; CHECK-AIX-32-P8-NEXT: mtvsrwz v2, r4 200; CHECK-AIX-32-P8-NEXT: lxvw4x v4, 0, r3 201; CHECK-AIX-32-P8-NEXT: vperm v2, v2, v3, v4 202; CHECK-AIX-32-P8-NEXT: stxvw4x v2, 0, r3 203; CHECK-AIX-32-P8-NEXT: blr 204; 205; CHECK-AIX-32-P9-LABEL: test_v8i16_none: 206; CHECK-AIX-32-P9: # %bb.0: # %entry 207; CHECK-AIX-32-P9-NEXT: lxsihzx f0, 0, r3 208; CHECK-AIX-32-P9-NEXT: lxv vs1, 0(r3) 209; CHECK-AIX-32-P9-NEXT: lwz r3, L..C0(r2) # %const.0 210; CHECK-AIX-32-P9-NEXT: lxv vs2, 0(r3) 211; CHECK-AIX-32-P9-NEXT: xxperm vs1, vs0, vs2 212; CHECK-AIX-32-P9-NEXT: stxv vs1, 0(r3) 213; CHECK-AIX-32-P9-NEXT: blr 214entry: 215 %0 = load <2 x i8>, ptr undef, align 1 216 %tmp0_1 = bitcast <2 x i8> %0 to i16 217 %tmp0_2 = insertelement <8 x i16> undef, i16 %tmp0_1, i32 0 218 %tmp0_3 = bitcast <8 x i16> %tmp0_2 to <4 x i32> 219 %1 = load <4 x i32>, ptr %a, align 1 220 %2 = shufflevector <4 x i32> %tmp0_3, <4 x i32> %1, <4 x i32> <i32 0, i32 4, i32 1, i32 5> 221 store <4 x i32> %2, ptr undef, align 4 222 ret void 223} 224 225define void @test_none_v4i32(<2 x i32> %vec, ptr %ptr1) { 226; CHECK-LE-P8-LABEL: test_none_v4i32: 227; CHECK-LE-P8: # %bb.0: # %entry 228; CHECK-LE-P8-NEXT: addis r3, r2, .LCPI2_0@toc@ha 229; CHECK-LE-P8-NEXT: xxswapd vs0, v2 230; CHECK-LE-P8-NEXT: addi r3, r3, .LCPI2_0@toc@l 231; CHECK-LE-P8-NEXT: lxvd2x vs1, 0, r3 232; CHECK-LE-P8-NEXT: mffprwz r3, f0 233; CHECK-LE-P8-NEXT: mtvsrwz v4, r3 234; CHECK-LE-P8-NEXT: xxswapd v3, vs1 235; CHECK-LE-P8-NEXT: vperm v2, v4, v2, v3 236; CHECK-LE-P8-NEXT: xxswapd vs0, v2 237; CHECK-LE-P8-NEXT: stxvd2x vs0, 0, r5 238; CHECK-LE-P8-NEXT: blr 239; 240; CHECK-LE-P9-LABEL: test_none_v4i32: 241; CHECK-LE-P9: # %bb.0: # %entry 242; CHECK-LE-P9-NEXT: li r3, 0 243; CHECK-LE-P9-NEXT: vextuwrx r3, r3, v2 244; CHECK-LE-P9-NEXT: mtfprwz f0, r3 245; CHECK-LE-P9-NEXT: addis r3, r2, .LCPI2_0@toc@ha 246; CHECK-LE-P9-NEXT: addi r3, r3, .LCPI2_0@toc@l 247; CHECK-LE-P9-NEXT: lxv vs1, 0(r3) 248; CHECK-LE-P9-NEXT: xxperm v2, vs0, vs1 249; CHECK-LE-P9-NEXT: stxv v2, 0(r5) 250; CHECK-LE-P9-NEXT: blr 251; 252; CHECK-BE-P8-LABEL: test_none_v4i32: 253; CHECK-BE-P8: # %bb.0: # %entry 254; CHECK-BE-P8-NEXT: xxsldwi vs0, v2, v2, 3 255; CHECK-BE-P8-NEXT: mffprwz r3, f0 256; CHECK-BE-P8-NEXT: mtvsrwz v3, r3 257; CHECK-BE-P8-NEXT: addis r3, r2, .LCPI2_0@toc@ha 258; CHECK-BE-P8-NEXT: addi r3, r3, .LCPI2_0@toc@l 259; CHECK-BE-P8-NEXT: lxvw4x v4, 0, r3 260; CHECK-BE-P8-NEXT: vperm v2, v2, v3, v4 261; CHECK-BE-P8-NEXT: stxvw4x v2, 0, r5 262; CHECK-BE-P8-NEXT: blr 263; 264; CHECK-BE-P9-LABEL: test_none_v4i32: 265; CHECK-BE-P9: # %bb.0: # %entry 266; CHECK-BE-P9-NEXT: li r3, 0 267; CHECK-BE-P9-NEXT: vextuwlx r3, r3, v2 268; CHECK-BE-P9-NEXT: mtfprwz f0, r3 269; CHECK-BE-P9-NEXT: addis r3, r2, .LCPI2_0@toc@ha 270; CHECK-BE-P9-NEXT: addi r3, r3, .LCPI2_0@toc@l 271; CHECK-BE-P9-NEXT: lxv vs1, 0(r3) 272; CHECK-BE-P9-NEXT: xxperm vs0, v2, vs1 273; CHECK-BE-P9-NEXT: stxv vs0, 0(r5) 274; CHECK-BE-P9-NEXT: blr 275; 276; CHECK-AIX-64-P8-LABEL: test_none_v4i32: 277; CHECK-AIX-64-P8: # %bb.0: # %entry 278; CHECK-AIX-64-P8-NEXT: xxsldwi vs0, v2, v2, 3 279; CHECK-AIX-64-P8-NEXT: mffprwz r4, f0 280; CHECK-AIX-64-P8-NEXT: mtvsrwz v3, r4 281; CHECK-AIX-64-P8-NEXT: ld r4, L..C1(r2) # %const.0 282; CHECK-AIX-64-P8-NEXT: lxvw4x v4, 0, r4 283; CHECK-AIX-64-P8-NEXT: vperm v2, v2, v3, v4 284; CHECK-AIX-64-P8-NEXT: stxvw4x v2, 0, r3 285; CHECK-AIX-64-P8-NEXT: blr 286; 287; CHECK-AIX-64-P9-LABEL: test_none_v4i32: 288; CHECK-AIX-64-P9: # %bb.0: # %entry 289; CHECK-AIX-64-P9-NEXT: li r4, 0 290; CHECK-AIX-64-P9-NEXT: vextuwlx r4, r4, v2 291; CHECK-AIX-64-P9-NEXT: mtfprwz f0, r4 292; CHECK-AIX-64-P9-NEXT: ld r4, L..C1(r2) # %const.0 293; CHECK-AIX-64-P9-NEXT: lxv vs1, 0(r4) 294; CHECK-AIX-64-P9-NEXT: xxperm vs0, v2, vs1 295; CHECK-AIX-64-P9-NEXT: stxv vs0, 0(r3) 296; CHECK-AIX-64-P9-NEXT: blr 297; 298; CHECK-AIX-32-P8-LABEL: test_none_v4i32: 299; CHECK-AIX-32-P8: # %bb.0: # %entry 300; CHECK-AIX-32-P8-NEXT: addi r4, r1, -16 301; CHECK-AIX-32-P8-NEXT: stxvw4x v2, 0, r4 302; CHECK-AIX-32-P8-NEXT: lxsiwzx v3, 0, r4 303; CHECK-AIX-32-P8-NEXT: lwz r4, L..C1(r2) # %const.0 304; CHECK-AIX-32-P8-NEXT: lxvw4x v4, 0, r4 305; CHECK-AIX-32-P8-NEXT: vperm v2, v2, v3, v4 306; CHECK-AIX-32-P8-NEXT: stxvw4x v2, 0, r3 307; CHECK-AIX-32-P8-NEXT: blr 308; 309; CHECK-AIX-32-P9-LABEL: test_none_v4i32: 310; CHECK-AIX-32-P9: # %bb.0: # %entry 311; CHECK-AIX-32-P9-NEXT: addi r4, r1, -16 312; CHECK-AIX-32-P9-NEXT: stxv v2, -16(r1) 313; CHECK-AIX-32-P9-NEXT: lfiwzx f0, 0, r4 314; CHECK-AIX-32-P9-NEXT: lwz r4, L..C1(r2) # %const.0 315; CHECK-AIX-32-P9-NEXT: lxv vs1, 0(r4) 316; CHECK-AIX-32-P9-NEXT: xxperm vs0, v2, vs1 317; CHECK-AIX-32-P9-NEXT: stxv vs0, 0(r3) 318; CHECK-AIX-32-P9-NEXT: blr 319entry: 320 %0 = extractelement <2 x i32> %vec, i64 0 321 %1 = bitcast i32 %0 to <2 x i16> 322 %2 = shufflevector <2 x i16> %1, <2 x i16> %1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3> 323 %3 = shufflevector <2 x i32> %vec, <2 x i32> %vec, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 324 %4 = bitcast <4 x i32> %3 to <8 x i16> 325 %5 = shufflevector <8 x i16> %4, <8 x i16> %2, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 8, i32 9> 326 store <8 x i16> %5, ptr %ptr1, align 16 327 ret void 328} 329 330define void @test_v4i32_none(<2 x i32> %vec, ptr %ptr1) { 331; CHECK-LE-P8-LABEL: test_v4i32_none: 332; CHECK-LE-P8: # %bb.0: # %entry 333; CHECK-LE-P8-NEXT: addis r3, r2, .LCPI3_0@toc@ha 334; CHECK-LE-P8-NEXT: xxswapd vs0, v2 335; CHECK-LE-P8-NEXT: addi r3, r3, .LCPI3_0@toc@l 336; CHECK-LE-P8-NEXT: lxvd2x vs1, 0, r3 337; CHECK-LE-P8-NEXT: mffprwz r3, f0 338; CHECK-LE-P8-NEXT: mtvsrwz v4, r3 339; CHECK-LE-P8-NEXT: xxswapd v3, vs1 340; CHECK-LE-P8-NEXT: vperm v2, v2, v4, v3 341; CHECK-LE-P8-NEXT: xxswapd vs0, v2 342; CHECK-LE-P8-NEXT: stxvd2x vs0, 0, r5 343; CHECK-LE-P8-NEXT: blr 344; 345; CHECK-LE-P9-LABEL: test_v4i32_none: 346; CHECK-LE-P9: # %bb.0: # %entry 347; CHECK-LE-P9-NEXT: li r3, 0 348; CHECK-LE-P9-NEXT: vextuwrx r3, r3, v2 349; CHECK-LE-P9-NEXT: mtfprwz f0, r3 350; CHECK-LE-P9-NEXT: addis r3, r2, .LCPI3_0@toc@ha 351; CHECK-LE-P9-NEXT: addi r3, r3, .LCPI3_0@toc@l 352; CHECK-LE-P9-NEXT: lxv vs1, 0(r3) 353; CHECK-LE-P9-NEXT: xxperm vs0, v2, vs1 354; CHECK-LE-P9-NEXT: stxv vs0, 0(r5) 355; CHECK-LE-P9-NEXT: blr 356; 357; CHECK-BE-P8-LABEL: test_v4i32_none: 358; CHECK-BE-P8: # %bb.0: # %entry 359; CHECK-BE-P8-NEXT: xxsldwi vs0, v2, v2, 3 360; CHECK-BE-P8-NEXT: mffprwz r3, f0 361; CHECK-BE-P8-NEXT: mtvsrwz v3, r3 362; CHECK-BE-P8-NEXT: addis r3, r2, .LCPI3_0@toc@ha 363; CHECK-BE-P8-NEXT: addi r3, r3, .LCPI3_0@toc@l 364; CHECK-BE-P8-NEXT: lxvw4x v4, 0, r3 365; CHECK-BE-P8-NEXT: vperm v2, v3, v2, v4 366; CHECK-BE-P8-NEXT: stxvw4x v2, 0, r5 367; CHECK-BE-P8-NEXT: blr 368; 369; CHECK-BE-P9-LABEL: test_v4i32_none: 370; CHECK-BE-P9: # %bb.0: # %entry 371; CHECK-BE-P9-NEXT: li r3, 0 372; CHECK-BE-P9-NEXT: vextuwlx r3, r3, v2 373; CHECK-BE-P9-NEXT: mtfprwz f0, r3 374; CHECK-BE-P9-NEXT: addis r3, r2, .LCPI3_0@toc@ha 375; CHECK-BE-P9-NEXT: addi r3, r3, .LCPI3_0@toc@l 376; CHECK-BE-P9-NEXT: lxv vs1, 0(r3) 377; CHECK-BE-P9-NEXT: xxperm v2, vs0, vs1 378; CHECK-BE-P9-NEXT: stxv v2, 0(r5) 379; CHECK-BE-P9-NEXT: blr 380; 381; CHECK-AIX-64-P8-LABEL: test_v4i32_none: 382; CHECK-AIX-64-P8: # %bb.0: # %entry 383; CHECK-AIX-64-P8-NEXT: xxsldwi vs0, v2, v2, 3 384; CHECK-AIX-64-P8-NEXT: mffprwz r4, f0 385; CHECK-AIX-64-P8-NEXT: mtvsrwz v3, r4 386; CHECK-AIX-64-P8-NEXT: ld r4, L..C2(r2) # %const.0 387; CHECK-AIX-64-P8-NEXT: lxvw4x v4, 0, r4 388; CHECK-AIX-64-P8-NEXT: vperm v2, v3, v2, v4 389; CHECK-AIX-64-P8-NEXT: stxvw4x v2, 0, r3 390; CHECK-AIX-64-P8-NEXT: blr 391; 392; CHECK-AIX-64-P9-LABEL: test_v4i32_none: 393; CHECK-AIX-64-P9: # %bb.0: # %entry 394; CHECK-AIX-64-P9-NEXT: li r4, 0 395; CHECK-AIX-64-P9-NEXT: vextuwlx r4, r4, v2 396; CHECK-AIX-64-P9-NEXT: mtfprwz f0, r4 397; CHECK-AIX-64-P9-NEXT: ld r4, L..C2(r2) # %const.0 398; CHECK-AIX-64-P9-NEXT: lxv vs1, 0(r4) 399; CHECK-AIX-64-P9-NEXT: xxperm v2, vs0, vs1 400; CHECK-AIX-64-P9-NEXT: stxv v2, 0(r3) 401; CHECK-AIX-64-P9-NEXT: blr 402; 403; CHECK-AIX-32-P8-LABEL: test_v4i32_none: 404; CHECK-AIX-32-P8: # %bb.0: # %entry 405; CHECK-AIX-32-P8-NEXT: addi r4, r1, -16 406; CHECK-AIX-32-P8-NEXT: stxvw4x v2, 0, r4 407; CHECK-AIX-32-P8-NEXT: lxsiwzx v3, 0, r4 408; CHECK-AIX-32-P8-NEXT: lwz r4, L..C2(r2) # %const.0 409; CHECK-AIX-32-P8-NEXT: lxvw4x v4, 0, r4 410; CHECK-AIX-32-P8-NEXT: vperm v2, v3, v2, v4 411; CHECK-AIX-32-P8-NEXT: stxvw4x v2, 0, r3 412; CHECK-AIX-32-P8-NEXT: blr 413; 414; CHECK-AIX-32-P9-LABEL: test_v4i32_none: 415; CHECK-AIX-32-P9: # %bb.0: # %entry 416; CHECK-AIX-32-P9-NEXT: addi r4, r1, -16 417; CHECK-AIX-32-P9-NEXT: stxv v2, -16(r1) 418; CHECK-AIX-32-P9-NEXT: lfiwzx f0, 0, r4 419; CHECK-AIX-32-P9-NEXT: lwz r4, L..C2(r2) # %const.0 420; CHECK-AIX-32-P9-NEXT: lxv vs1, 0(r4) 421; CHECK-AIX-32-P9-NEXT: xxperm v2, vs0, vs1 422; CHECK-AIX-32-P9-NEXT: stxv v2, 0(r3) 423; CHECK-AIX-32-P9-NEXT: blr 424entry: 425 %0 = extractelement <2 x i32> %vec, i64 0 426 %1 = bitcast i32 %0 to <2 x i16> 427 %2 = shufflevector <2 x i16> %1, <2 x i16> %1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3> 428 %3 = shufflevector <2 x i32> %vec, <2 x i32> %vec, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 429 %4 = bitcast <4 x i32> %3 to <8 x i16> 430 %5 = shufflevector <8 x i16> %2, <8 x i16> %4, <8 x i32> <i32 0, i32 1, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13> 431 store <8 x i16> %5, ptr %ptr1, align 16 432 ret void 433} 434 435define void @test_none_v2i64(ptr %ptr, i32 %v1, <2 x i32> %vec) local_unnamed_addr #0 { 436; CHECK-LE-P8-LABEL: test_none_v2i64: 437; CHECK-LE-P8: # %bb.0: # %entry 438; CHECK-LE-P8-NEXT: addis r5, r2, .LCPI4_0@toc@ha 439; CHECK-LE-P8-NEXT: mtvsrwz v4, r4 440; CHECK-LE-P8-NEXT: addis r4, r2, .LCPI4_1@toc@ha 441; CHECK-LE-P8-NEXT: addi r5, r5, .LCPI4_0@toc@l 442; CHECK-LE-P8-NEXT: addi r4, r4, .LCPI4_1@toc@l 443; CHECK-LE-P8-NEXT: lxvd2x vs0, 0, r5 444; CHECK-LE-P8-NEXT: xxswapd v3, vs0 445; CHECK-LE-P8-NEXT: lxvd2x vs0, 0, r4 446; CHECK-LE-P8-NEXT: vperm v2, v2, v4, v3 447; CHECK-LE-P8-NEXT: lxsdx v4, 0, r3 448; CHECK-LE-P8-NEXT: xxswapd v3, vs0 449; CHECK-LE-P8-NEXT: vperm v2, v4, v2, v3 450; CHECK-LE-P8-NEXT: xxswapd vs0, v2 451; CHECK-LE-P8-NEXT: stxvd2x vs0, 0, r3 452; 453; CHECK-LE-P9-LABEL: test_none_v2i64: 454; CHECK-LE-P9: # %bb.0: # %entry 455; CHECK-LE-P9-NEXT: lfd f0, 0(r3) 456; CHECK-LE-P9-NEXT: addis r3, r2, .LCPI4_0@toc@ha 457; CHECK-LE-P9-NEXT: mtfprwz f1, r4 458; CHECK-LE-P9-NEXT: addi r3, r3, .LCPI4_0@toc@l 459; CHECK-LE-P9-NEXT: xxinsertw v2, vs1, 12 460; CHECK-LE-P9-NEXT: lxv vs1, 0(r3) 461; CHECK-LE-P9-NEXT: xxperm v2, vs0, vs1 462; CHECK-LE-P9-NEXT: stxv v2, 0(r3) 463; 464; CHECK-BE-P8-LABEL: test_none_v2i64: 465; CHECK-BE-P8: # %bb.0: # %entry 466; CHECK-BE-P8-NEXT: addis r5, r2, .LCPI4_0@toc@ha 467; CHECK-BE-P8-NEXT: mtvsrwz v4, r4 468; CHECK-BE-P8-NEXT: addi r5, r5, .LCPI4_0@toc@l 469; CHECK-BE-P8-NEXT: lxvw4x v3, 0, r5 470; CHECK-BE-P8-NEXT: vperm v2, v4, v2, v3 471; CHECK-BE-P8-NEXT: lxsdx v3, 0, r3 472; CHECK-BE-P8-NEXT: addis r3, r2, .LCPI4_1@toc@ha 473; CHECK-BE-P8-NEXT: addi r3, r3, .LCPI4_1@toc@l 474; CHECK-BE-P8-NEXT: lxvw4x v4, 0, r3 475; CHECK-BE-P8-NEXT: vperm v2, v2, v3, v4 476; CHECK-BE-P8-NEXT: stxvw4x v2, 0, r3 477; 478; CHECK-BE-P9-LABEL: test_none_v2i64: 479; CHECK-BE-P9: # %bb.0: # %entry 480; CHECK-BE-P9-NEXT: lfd f0, 0(r3) 481; CHECK-BE-P9-NEXT: addis r3, r2, .LCPI4_0@toc@ha 482; CHECK-BE-P9-NEXT: mtfprwz f1, r4 483; CHECK-BE-P9-NEXT: addi r3, r3, .LCPI4_0@toc@l 484; CHECK-BE-P9-NEXT: xxinsertw v2, vs1, 0 485; CHECK-BE-P9-NEXT: lxv vs1, 0(r3) 486; CHECK-BE-P9-NEXT: xxperm vs0, v2, vs1 487; CHECK-BE-P9-NEXT: stxv vs0, 0(r3) 488; 489; CHECK-AIX-64-P8-LABEL: test_none_v2i64: 490; CHECK-AIX-64-P8: # %bb.0: # %entry 491; CHECK-AIX-64-P8-NEXT: ld r5, L..C3(r2) # %const.0 492; CHECK-AIX-64-P8-NEXT: mtvsrwz v4, r4 493; CHECK-AIX-64-P8-NEXT: lxvw4x v3, 0, r5 494; CHECK-AIX-64-P8-NEXT: vperm v2, v4, v2, v3 495; CHECK-AIX-64-P8-NEXT: lxsdx v3, 0, r3 496; CHECK-AIX-64-P8-NEXT: ld r3, L..C4(r2) # %const.1 497; CHECK-AIX-64-P8-NEXT: lxvw4x v4, 0, r3 498; CHECK-AIX-64-P8-NEXT: vperm v2, v2, v3, v4 499; CHECK-AIX-64-P8-NEXT: stxvw4x v2, 0, r3 500; 501; CHECK-AIX-64-P9-LABEL: test_none_v2i64: 502; CHECK-AIX-64-P9: # %bb.0: # %entry 503; CHECK-AIX-64-P9-NEXT: lfd f0, 0(r3) 504; CHECK-AIX-64-P9-NEXT: ld r3, L..C3(r2) # %const.0 505; CHECK-AIX-64-P9-NEXT: mtfprwz f1, r4 506; CHECK-AIX-64-P9-NEXT: xxinsertw v2, vs1, 0 507; CHECK-AIX-64-P9-NEXT: lxv vs1, 0(r3) 508; CHECK-AIX-64-P9-NEXT: xxperm vs0, v2, vs1 509; CHECK-AIX-64-P9-NEXT: stxv vs0, 0(r3) 510; 511; CHECK-AIX-32-P8-LABEL: test_none_v2i64: 512; CHECK-AIX-32-P8: # %bb.0: # %entry 513; CHECK-AIX-32-P8-NEXT: lxsiwzx v3, 0, r3 514; CHECK-AIX-32-P8-NEXT: lwz r3, L..C3(r2) # %const.0 515; CHECK-AIX-32-P8-NEXT: stw r4, -16(r1) 516; CHECK-AIX-32-P8-NEXT: lxvw4x v4, 0, r3 517; CHECK-AIX-32-P8-NEXT: addi r3, r1, -16 518; CHECK-AIX-32-P8-NEXT: lxvw4x v5, 0, r3 519; CHECK-AIX-32-P8-NEXT: lwz r3, L..C4(r2) # %const.1 520; CHECK-AIX-32-P8-NEXT: vperm v2, v5, v2, v4 521; CHECK-AIX-32-P8-NEXT: lxvw4x v4, 0, r3 522; CHECK-AIX-32-P8-NEXT: vperm v2, v2, v3, v4 523; CHECK-AIX-32-P8-NEXT: stxvw4x v2, 0, r3 524; 525; CHECK-AIX-32-P9-LABEL: test_none_v2i64: 526; CHECK-AIX-32-P9: # %bb.0: # %entry 527; CHECK-AIX-32-P9-NEXT: lfiwzx f0, 0, r3 528; CHECK-AIX-32-P9-NEXT: lwz r3, L..C3(r2) # %const.0 529; CHECK-AIX-32-P9-NEXT: mtfprwz f1, r4 530; CHECK-AIX-32-P9-NEXT: xxinsertw v2, vs1, 0 531; CHECK-AIX-32-P9-NEXT: lxv vs1, 0(r3) 532; CHECK-AIX-32-P9-NEXT: xxperm vs0, v2, vs1 533; CHECK-AIX-32-P9-NEXT: stxv vs0, 0(r3) 534entry: 535 %0 = load <2 x i32>, ptr %ptr, align 4 536 %tmp = insertelement <2 x i32> %vec, i32 %v1, i32 0 537 %1 = shufflevector <2 x i32> %0, <2 x i32> %tmp, <4 x i32> <i32 3, i32 2, i32 2, i32 0> 538 store <4 x i32> %1, ptr undef, align 4 539 unreachable 540} 541 542define void @test_v2i64_none() { 543; CHECK-LE-P8-LABEL: test_v2i64_none: 544; CHECK-LE-P8: # %bb.0: # %entry 545; CHECK-LE-P8-NEXT: lfdx f0, 0, r3 546; CHECK-LE-P8-NEXT: xxmrghw vs0, vs0, vs0 547; CHECK-LE-P8-NEXT: xxswapd vs0, vs0 548; CHECK-LE-P8-NEXT: stxvd2x vs0, 0, r3 549; CHECK-LE-P8-NEXT: blr 550; 551; CHECK-LE-P9-LABEL: test_v2i64_none: 552; CHECK-LE-P9: # %bb.0: # %entry 553; CHECK-LE-P9-NEXT: lfd f0, 0(r3) 554; CHECK-LE-P9-NEXT: xxmrghw vs0, vs0, vs0 555; CHECK-LE-P9-NEXT: stxv vs0, 0(r3) 556; CHECK-LE-P9-NEXT: blr 557; 558; CHECK-BE-P8-LABEL: test_v2i64_none: 559; CHECK-BE-P8: # %bb.0: # %entry 560; CHECK-BE-P8-NEXT: lfdx f0, 0, r3 561; CHECK-BE-P8-NEXT: xxmrghw vs0, vs0, vs0 562; CHECK-BE-P8-NEXT: stxvw4x vs0, 0, r3 563; CHECK-BE-P8-NEXT: blr 564; 565; CHECK-BE-P9-LABEL: test_v2i64_none: 566; CHECK-BE-P9: # %bb.0: # %entry 567; CHECK-BE-P9-NEXT: lfd f0, 0(r3) 568; CHECK-BE-P9-NEXT: xxmrghw vs0, vs0, vs0 569; CHECK-BE-P9-NEXT: stxv vs0, 0(r3) 570; CHECK-BE-P9-NEXT: blr 571; 572; CHECK-AIX-64-P8-LABEL: test_v2i64_none: 573; CHECK-AIX-64-P8: # %bb.0: # %entry 574; CHECK-AIX-64-P8-NEXT: lfdx f0, 0, r3 575; CHECK-AIX-64-P8-NEXT: xxmrghw vs0, vs0, vs0 576; CHECK-AIX-64-P8-NEXT: stxvw4x vs0, 0, r3 577; CHECK-AIX-64-P8-NEXT: blr 578; 579; CHECK-AIX-64-P9-LABEL: test_v2i64_none: 580; CHECK-AIX-64-P9: # %bb.0: # %entry 581; CHECK-AIX-64-P9-NEXT: lfd f0, 0(r3) 582; CHECK-AIX-64-P9-NEXT: xxmrghw vs0, vs0, vs0 583; CHECK-AIX-64-P9-NEXT: stxv vs0, 0(r3) 584; CHECK-AIX-64-P9-NEXT: blr 585; 586; CHECK-AIX-32-P8-LABEL: test_v2i64_none: 587; CHECK-AIX-32-P8: # %bb.0: # %entry 588; CHECK-AIX-32-P8-NEXT: lfiwzx f0, 0, r3 589; CHECK-AIX-32-P8-NEXT: xxspltw vs0, vs0, 1 590; CHECK-AIX-32-P8-NEXT: stxvw4x vs0, 0, r3 591; CHECK-AIX-32-P8-NEXT: blr 592; 593; CHECK-AIX-32-P9-LABEL: test_v2i64_none: 594; CHECK-AIX-32-P9: # %bb.0: # %entry 595; CHECK-AIX-32-P9-NEXT: lxvwsx vs0, 0, r3 596; CHECK-AIX-32-P9-NEXT: stxv vs0, 0(r3) 597; CHECK-AIX-32-P9-NEXT: blr 598entry: 599 %0 = load <2 x i32>, ptr undef, align 4 600 %1 = shufflevector <2 x i32> %0, <2 x i32> undef, <4 x i32> <i32 0, i32 2, i32 1, i32 3> 601 store <4 x i32> %1, ptr undef, align 4 602 ret void 603} 604 605define void @test_v8i16_v8i16(ptr %a) { 606; CHECK-LE-P8-LABEL: test_v8i16_v8i16: 607; CHECK-LE-P8: # %bb.0: # %entry 608; CHECK-LE-P8-NEXT: lhz r4, 0(r3) 609; CHECK-LE-P8-NEXT: lhz r3, 0(r3) 610; CHECK-LE-P8-NEXT: mtfprd f0, r4 611; CHECK-LE-P8-NEXT: mtfprd f1, r3 612; CHECK-LE-P8-NEXT: xxmrghw vs0, vs1, vs0 613; CHECK-LE-P8-NEXT: xxswapd vs0, vs0 614; CHECK-LE-P8-NEXT: stxvd2x vs0, 0, r3 615; CHECK-LE-P8-NEXT: blr 616; 617; CHECK-LE-P9-LABEL: test_v8i16_v8i16: 618; CHECK-LE-P9: # %bb.0: # %entry 619; CHECK-LE-P9-NEXT: lxsihzx f0, 0, r3 620; CHECK-LE-P9-NEXT: lxsihzx f1, 0, r3 621; CHECK-LE-P9-NEXT: xxmrghw vs0, vs1, vs0 622; CHECK-LE-P9-NEXT: stxv vs0, 0(r3) 623; CHECK-LE-P9-NEXT: blr 624; 625; CHECK-BE-P8-LABEL: test_v8i16_v8i16: 626; CHECK-BE-P8: # %bb.0: # %entry 627; CHECK-BE-P8-NEXT: lhz r4, 0(r3) 628; CHECK-BE-P8-NEXT: lhz r3, 0(r3) 629; CHECK-BE-P8-NEXT: mtfprwz f0, r4 630; CHECK-BE-P8-NEXT: mtfprwz f1, r3 631; CHECK-BE-P8-NEXT: xxmrglw vs0, vs0, vs1 632; CHECK-BE-P8-NEXT: stxvw4x vs0, 0, r3 633; CHECK-BE-P8-NEXT: blr 634; 635; CHECK-BE-P9-LABEL: test_v8i16_v8i16: 636; CHECK-BE-P9: # %bb.0: # %entry 637; CHECK-BE-P9-NEXT: lxsihzx f0, 0, r3 638; CHECK-BE-P9-NEXT: lxsihzx f1, 0, r3 639; CHECK-BE-P9-NEXT: xxmrglw vs0, vs0, vs1 640; CHECK-BE-P9-NEXT: stxv vs0, 0(r3) 641; CHECK-BE-P9-NEXT: blr 642; 643; CHECK-AIX-64-P8-LABEL: test_v8i16_v8i16: 644; CHECK-AIX-64-P8: # %bb.0: # %entry 645; CHECK-AIX-64-P8-NEXT: lhz r4, 0(r3) 646; CHECK-AIX-64-P8-NEXT: lhz r3, 0(r3) 647; CHECK-AIX-64-P8-NEXT: mtfprwz f0, r4 648; CHECK-AIX-64-P8-NEXT: mtfprwz f1, r3 649; CHECK-AIX-64-P8-NEXT: xxmrglw vs0, vs0, vs1 650; CHECK-AIX-64-P8-NEXT: stxvw4x vs0, 0, r3 651; CHECK-AIX-64-P8-NEXT: blr 652; 653; CHECK-AIX-64-P9-LABEL: test_v8i16_v8i16: 654; CHECK-AIX-64-P9: # %bb.0: # %entry 655; CHECK-AIX-64-P9-NEXT: lxsihzx f0, 0, r3 656; CHECK-AIX-64-P9-NEXT: lxsihzx f1, 0, r3 657; CHECK-AIX-64-P9-NEXT: xxmrglw vs0, vs0, vs1 658; CHECK-AIX-64-P9-NEXT: stxv vs0, 0(r3) 659; CHECK-AIX-64-P9-NEXT: blr 660; 661; CHECK-AIX-32-P8-LABEL: test_v8i16_v8i16: 662; CHECK-AIX-32-P8: # %bb.0: # %entry 663; CHECK-AIX-32-P8-NEXT: lhz r4, 0(r3) 664; CHECK-AIX-32-P8-NEXT: lhz r3, 0(r3) 665; CHECK-AIX-32-P8-NEXT: mtfprwz f0, r4 666; CHECK-AIX-32-P8-NEXT: mtfprwz f1, r3 667; CHECK-AIX-32-P8-NEXT: xxmrglw vs0, vs0, vs1 668; CHECK-AIX-32-P8-NEXT: stxvw4x vs0, 0, r3 669; CHECK-AIX-32-P8-NEXT: blr 670; 671; CHECK-AIX-32-P9-LABEL: test_v8i16_v8i16: 672; CHECK-AIX-32-P9: # %bb.0: # %entry 673; CHECK-AIX-32-P9-NEXT: lxsihzx f0, 0, r3 674; CHECK-AIX-32-P9-NEXT: lxsihzx f1, 0, r3 675; CHECK-AIX-32-P9-NEXT: xxmrglw vs0, vs0, vs1 676; CHECK-AIX-32-P9-NEXT: stxv vs0, 0(r3) 677; CHECK-AIX-32-P9-NEXT: blr 678entry: 679 %0 = load <2 x i8>, ptr undef, align 1 680 %tmp0_1 = bitcast <2 x i8> %0 to i16 681 %tmp0_2 = insertelement <8 x i16> undef, i16 %tmp0_1, i32 0 682 %tmp0_3 = bitcast <8 x i16> %tmp0_2 to <4 x i32> 683 %1 = load <2 x i8>, ptr %a, align 1 684 %tmp1_1 = bitcast <2 x i8> %1 to i16 685 %tmp1_2 = insertelement <8 x i16> undef, i16 %tmp1_1, i32 0 686 %tmp1_3 = bitcast <8 x i16> %tmp1_2 to <4 x i32> 687 %2 = shufflevector <4 x i32> %tmp0_3, <4 x i32> %tmp1_3, <4 x i32> <i32 0, i32 4, i32 1, i32 5> 688 store <4 x i32> %2, ptr undef, align 4 689 ret void 690} 691 692define void @test_v8i16_v4i32(ptr %a) { 693; CHECK-LE-P8-LABEL: test_v8i16_v4i32: 694; CHECK-LE-P8: # %bb.0: # %entry 695; CHECK-LE-P8-NEXT: lhz r4, 0(r3) 696; CHECK-LE-P8-NEXT: lfiwzx f1, 0, r3 697; CHECK-LE-P8-NEXT: mtfprd f0, r4 698; CHECK-LE-P8-NEXT: xxmrghw vs0, vs1, vs0 699; CHECK-LE-P8-NEXT: xxswapd vs0, vs0 700; CHECK-LE-P8-NEXT: stxvd2x vs0, 0, r3 701; CHECK-LE-P8-NEXT: blr 702; 703; CHECK-LE-P9-LABEL: test_v8i16_v4i32: 704; CHECK-LE-P9: # %bb.0: # %entry 705; CHECK-LE-P9-NEXT: lxsihzx f0, 0, r3 706; CHECK-LE-P9-NEXT: lfiwzx f1, 0, r3 707; CHECK-LE-P9-NEXT: xxmrghw vs0, vs1, vs0 708; CHECK-LE-P9-NEXT: stxv vs0, 0(r3) 709; CHECK-LE-P9-NEXT: blr 710; 711; CHECK-BE-P8-LABEL: test_v8i16_v4i32: 712; CHECK-BE-P8: # %bb.0: # %entry 713; CHECK-BE-P8-NEXT: lhz r4, 0(r3) 714; CHECK-BE-P8-NEXT: lxsiwzx v3, 0, r3 715; CHECK-BE-P8-NEXT: addis r3, r2, .LCPI7_0@toc@ha 716; CHECK-BE-P8-NEXT: addi r3, r3, .LCPI7_0@toc@l 717; CHECK-BE-P8-NEXT: mtvsrwz v2, r4 718; CHECK-BE-P8-NEXT: lxvw4x v4, 0, r3 719; CHECK-BE-P8-NEXT: vperm v2, v2, v3, v4 720; CHECK-BE-P8-NEXT: stxvw4x v2, 0, r3 721; CHECK-BE-P8-NEXT: blr 722; 723; CHECK-BE-P9-LABEL: test_v8i16_v4i32: 724; CHECK-BE-P9: # %bb.0: # %entry 725; CHECK-BE-P9-NEXT: lxsihzx f0, 0, r3 726; CHECK-BE-P9-NEXT: lfiwzx f1, 0, r3 727; CHECK-BE-P9-NEXT: addis r3, r2, .LCPI7_0@toc@ha 728; CHECK-BE-P9-NEXT: addi r3, r3, .LCPI7_0@toc@l 729; CHECK-BE-P9-NEXT: lxv vs2, 0(r3) 730; CHECK-BE-P9-NEXT: xxperm vs1, vs0, vs2 731; CHECK-BE-P9-NEXT: stxv vs1, 0(r3) 732; CHECK-BE-P9-NEXT: blr 733; 734; CHECK-AIX-64-P8-LABEL: test_v8i16_v4i32: 735; CHECK-AIX-64-P8: # %bb.0: # %entry 736; CHECK-AIX-64-P8-NEXT: lhz r4, 0(r3) 737; CHECK-AIX-64-P8-NEXT: lxsiwzx v3, 0, r3 738; CHECK-AIX-64-P8-NEXT: ld r3, L..C5(r2) # %const.0 739; CHECK-AIX-64-P8-NEXT: mtvsrwz v2, r4 740; CHECK-AIX-64-P8-NEXT: lxvw4x v4, 0, r3 741; CHECK-AIX-64-P8-NEXT: vperm v2, v2, v3, v4 742; CHECK-AIX-64-P8-NEXT: stxvw4x v2, 0, r3 743; CHECK-AIX-64-P8-NEXT: blr 744; 745; CHECK-AIX-64-P9-LABEL: test_v8i16_v4i32: 746; CHECK-AIX-64-P9: # %bb.0: # %entry 747; CHECK-AIX-64-P9-NEXT: lxsihzx f0, 0, r3 748; CHECK-AIX-64-P9-NEXT: lfiwzx f1, 0, r3 749; CHECK-AIX-64-P9-NEXT: ld r3, L..C4(r2) # %const.0 750; CHECK-AIX-64-P9-NEXT: lxv vs2, 0(r3) 751; CHECK-AIX-64-P9-NEXT: xxperm vs1, vs0, vs2 752; CHECK-AIX-64-P9-NEXT: stxv vs1, 0(r3) 753; CHECK-AIX-64-P9-NEXT: blr 754; 755; CHECK-AIX-32-P8-LABEL: test_v8i16_v4i32: 756; CHECK-AIX-32-P8: # %bb.0: # %entry 757; CHECK-AIX-32-P8-NEXT: lhz r4, 0(r3) 758; CHECK-AIX-32-P8-NEXT: lxsiwzx v3, 0, r3 759; CHECK-AIX-32-P8-NEXT: lwz r3, L..C5(r2) # %const.0 760; CHECK-AIX-32-P8-NEXT: mtvsrwz v2, r4 761; CHECK-AIX-32-P8-NEXT: lxvw4x v4, 0, r3 762; CHECK-AIX-32-P8-NEXT: vperm v2, v2, v3, v4 763; CHECK-AIX-32-P8-NEXT: stxvw4x v2, 0, r3 764; CHECK-AIX-32-P8-NEXT: blr 765; 766; CHECK-AIX-32-P9-LABEL: test_v8i16_v4i32: 767; CHECK-AIX-32-P9: # %bb.0: # %entry 768; CHECK-AIX-32-P9-NEXT: lxsihzx f0, 0, r3 769; CHECK-AIX-32-P9-NEXT: lfiwzx f1, 0, r3 770; CHECK-AIX-32-P9-NEXT: lwz r3, L..C4(r2) # %const.0 771; CHECK-AIX-32-P9-NEXT: lxv vs2, 0(r3) 772; CHECK-AIX-32-P9-NEXT: xxperm vs1, vs0, vs2 773; CHECK-AIX-32-P9-NEXT: stxv vs1, 0(r3) 774; CHECK-AIX-32-P9-NEXT: blr 775entry: 776 %0 = load <2 x i8>, ptr undef, align 1 777 %tmp0_1 = bitcast <2 x i8> %0 to i16 778 %tmp0_2 = insertelement <8 x i16> undef, i16 %tmp0_1, i32 0 779 %tmp0_3 = bitcast <8 x i16> %tmp0_2 to <4 x i32> 780 %1 = load <2 x i16>, ptr %a, align 4 781 %tmp1_1 = bitcast <2 x i16> %1 to i32 782 %tmp1_2 = insertelement <4 x i32> undef, i32 %tmp1_1, i32 0 783 %2 = shufflevector <4 x i32> %tmp0_3, <4 x i32> %tmp1_2, <4 x i32> <i32 0, i32 4, i32 1, i32 5> 784 store <4 x i32> %2, ptr undef, align 4 785 ret void 786} 787 788define void @test_v8i16_v2i64(ptr %a) { 789; CHECK-LE-P8-LABEL: test_v8i16_v2i64: 790; CHECK-LE-P8: # %bb.0: # %entry 791; CHECK-LE-P8-NEXT: lhz r4, 0(r3) 792; CHECK-LE-P8-NEXT: lfdx f1, 0, r3 793; CHECK-LE-P8-NEXT: mtfprd f0, r4 794; CHECK-LE-P8-NEXT: xxmrghw vs0, vs1, vs0 795; CHECK-LE-P8-NEXT: xxswapd vs0, vs0 796; CHECK-LE-P8-NEXT: stxvd2x vs0, 0, r3 797; CHECK-LE-P8-NEXT: blr 798; 799; CHECK-LE-P9-LABEL: test_v8i16_v2i64: 800; CHECK-LE-P9: # %bb.0: # %entry 801; CHECK-LE-P9-NEXT: lxsihzx f0, 0, r3 802; CHECK-LE-P9-NEXT: lfd f1, 0(r3) 803; CHECK-LE-P9-NEXT: xxmrghw vs0, vs1, vs0 804; CHECK-LE-P9-NEXT: stxv vs0, 0(r3) 805; CHECK-LE-P9-NEXT: blr 806; 807; CHECK-BE-P8-LABEL: test_v8i16_v2i64: 808; CHECK-BE-P8: # %bb.0: # %entry 809; CHECK-BE-P8-NEXT: lhz r4, 0(r3) 810; CHECK-BE-P8-NEXT: lfdx f1, 0, r3 811; CHECK-BE-P8-NEXT: sldi r4, r4, 48 812; CHECK-BE-P8-NEXT: mtfprd f0, r4 813; CHECK-BE-P8-NEXT: xxmrghw vs0, vs0, vs1 814; CHECK-BE-P8-NEXT: stxvw4x vs0, 0, r3 815; CHECK-BE-P8-NEXT: blr 816; 817; CHECK-BE-P9-LABEL: test_v8i16_v2i64: 818; CHECK-BE-P9: # %bb.0: # %entry 819; CHECK-BE-P9-NEXT: lxsihzx v2, 0, r3 820; CHECK-BE-P9-NEXT: lfd f0, 0(r3) 821; CHECK-BE-P9-NEXT: vsplth v2, v2, 3 822; CHECK-BE-P9-NEXT: xxmrghw vs0, v2, vs0 823; CHECK-BE-P9-NEXT: stxv vs0, 0(r3) 824; CHECK-BE-P9-NEXT: blr 825; 826; CHECK-AIX-64-P8-LABEL: test_v8i16_v2i64: 827; CHECK-AIX-64-P8: # %bb.0: # %entry 828; CHECK-AIX-64-P8-NEXT: lhz r4, 0(r3) 829; CHECK-AIX-64-P8-NEXT: lfdx f1, 0, r3 830; CHECK-AIX-64-P8-NEXT: sldi r4, r4, 48 831; CHECK-AIX-64-P8-NEXT: mtfprd f0, r4 832; CHECK-AIX-64-P8-NEXT: xxmrghw vs0, vs0, vs1 833; CHECK-AIX-64-P8-NEXT: stxvw4x vs0, 0, r3 834; CHECK-AIX-64-P8-NEXT: blr 835; 836; CHECK-AIX-64-P9-LABEL: test_v8i16_v2i64: 837; CHECK-AIX-64-P9: # %bb.0: # %entry 838; CHECK-AIX-64-P9-NEXT: lxsihzx v2, 0, r3 839; CHECK-AIX-64-P9-NEXT: lfd f0, 0(r3) 840; CHECK-AIX-64-P9-NEXT: vsplth v2, v2, 3 841; CHECK-AIX-64-P9-NEXT: xxmrghw vs0, v2, vs0 842; CHECK-AIX-64-P9-NEXT: stxv vs0, 0(r3) 843; CHECK-AIX-64-P9-NEXT: blr 844; 845; CHECK-AIX-32-P8-LABEL: test_v8i16_v2i64: 846; CHECK-AIX-32-P8: # %bb.0: # %entry 847; CHECK-AIX-32-P8-NEXT: lhz r4, 0(r3) 848; CHECK-AIX-32-P8-NEXT: lxsiwzx v3, 0, r3 849; CHECK-AIX-32-P8-NEXT: lwz r3, L..C6(r2) # %const.0 850; CHECK-AIX-32-P8-NEXT: mtvsrwz v2, r4 851; CHECK-AIX-32-P8-NEXT: lxvw4x v4, 0, r3 852; CHECK-AIX-32-P8-NEXT: vperm v2, v2, v3, v4 853; CHECK-AIX-32-P8-NEXT: stxvw4x v2, 0, r3 854; CHECK-AIX-32-P8-NEXT: blr 855; 856; CHECK-AIX-32-P9-LABEL: test_v8i16_v2i64: 857; CHECK-AIX-32-P9: # %bb.0: # %entry 858; CHECK-AIX-32-P9-NEXT: lxsihzx f0, 0, r3 859; CHECK-AIX-32-P9-NEXT: lfiwzx f1, 0, r3 860; CHECK-AIX-32-P9-NEXT: lwz r3, L..C5(r2) # %const.0 861; CHECK-AIX-32-P9-NEXT: lxv vs2, 0(r3) 862; CHECK-AIX-32-P9-NEXT: xxperm vs1, vs0, vs2 863; CHECK-AIX-32-P9-NEXT: stxv vs1, 0(r3) 864; CHECK-AIX-32-P9-NEXT: blr 865entry: 866 %0 = load <2 x i8>, ptr undef, align 1 867 %tmp0_1 = bitcast <2 x i8> %0 to i16 868 %tmp0_2 = insertelement <8 x i16> undef, i16 %tmp0_1, i32 0 869 %tmp0_3 = bitcast <8 x i16> %tmp0_2 to <4 x i32> 870 %1 = load <2 x i16>, ptr %a, align 8 871 %tmp1_1 = bitcast <2 x i16> %1 to i32 872 %tmp1_2 = insertelement <4 x i32> undef, i32 %tmp1_1, i32 0 873 %2 = shufflevector <4 x i32> %tmp0_3, <4 x i32> %tmp1_2, <4 x i32> <i32 0, i32 4, i32 1, i32 5> 874 store <4 x i32> %2, ptr undef, align 4 875 ret void 876} 877 878define <16 x i8> @test_v4i32_v4i32(ptr %a, ptr %b) { 879; CHECK-LE-P8-LABEL: test_v4i32_v4i32: 880; CHECK-LE-P8: # %bb.0: # %entry 881; CHECK-LE-P8-NEXT: addis r5, r2, .LCPI9_0@toc@ha 882; CHECK-LE-P8-NEXT: lxsiwzx v3, 0, r3 883; CHECK-LE-P8-NEXT: lxsiwzx v4, 0, r4 884; CHECK-LE-P8-NEXT: addi r5, r5, .LCPI9_0@toc@l 885; CHECK-LE-P8-NEXT: lxvd2x vs0, 0, r5 886; CHECK-LE-P8-NEXT: xxswapd v2, vs0 887; CHECK-LE-P8-NEXT: vperm v2, v4, v3, v2 888; CHECK-LE-P8-NEXT: blr 889; 890; CHECK-LE-P9-LABEL: test_v4i32_v4i32: 891; CHECK-LE-P9: # %bb.0: # %entry 892; CHECK-LE-P9-NEXT: lxsiwzx v2, 0, r3 893; CHECK-LE-P9-NEXT: addis r3, r2, .LCPI9_0@toc@ha 894; CHECK-LE-P9-NEXT: lfiwzx f0, 0, r4 895; CHECK-LE-P9-NEXT: addi r3, r3, .LCPI9_0@toc@l 896; CHECK-LE-P9-NEXT: lxv vs1, 0(r3) 897; CHECK-LE-P9-NEXT: xxperm v2, vs0, vs1 898; CHECK-LE-P9-NEXT: blr 899; 900; CHECK-BE-P8-LABEL: test_v4i32_v4i32: 901; CHECK-BE-P8: # %bb.0: # %entry 902; CHECK-BE-P8-NEXT: lxsiwzx v2, 0, r3 903; CHECK-BE-P8-NEXT: addis r3, r2, .LCPI9_0@toc@ha 904; CHECK-BE-P8-NEXT: lxsiwzx v3, 0, r4 905; CHECK-BE-P8-NEXT: addi r3, r3, .LCPI9_0@toc@l 906; CHECK-BE-P8-NEXT: lxvw4x v4, 0, r3 907; CHECK-BE-P8-NEXT: vperm v2, v2, v3, v4 908; CHECK-BE-P8-NEXT: blr 909; 910; CHECK-BE-P9-LABEL: test_v4i32_v4i32: 911; CHECK-BE-P9: # %bb.0: # %entry 912; CHECK-BE-P9-NEXT: lfiwzx f0, 0, r3 913; CHECK-BE-P9-NEXT: addis r3, r2, .LCPI9_0@toc@ha 914; CHECK-BE-P9-NEXT: lxsiwzx v2, 0, r4 915; CHECK-BE-P9-NEXT: addi r3, r3, .LCPI9_0@toc@l 916; CHECK-BE-P9-NEXT: lxv vs1, 0(r3) 917; CHECK-BE-P9-NEXT: xxperm v2, vs0, vs1 918; CHECK-BE-P9-NEXT: blr 919; 920; CHECK-AIX-64-P8-LABEL: test_v4i32_v4i32: 921; CHECK-AIX-64-P8: # %bb.0: # %entry 922; CHECK-AIX-64-P8-NEXT: lxsiwzx v2, 0, r3 923; CHECK-AIX-64-P8-NEXT: ld r3, L..C6(r2) # %const.0 924; CHECK-AIX-64-P8-NEXT: lxsiwzx v3, 0, r4 925; CHECK-AIX-64-P8-NEXT: lxvw4x v4, 0, r3 926; CHECK-AIX-64-P8-NEXT: vperm v2, v2, v3, v4 927; CHECK-AIX-64-P8-NEXT: blr 928; 929; CHECK-AIX-64-P9-LABEL: test_v4i32_v4i32: 930; CHECK-AIX-64-P9: # %bb.0: # %entry 931; CHECK-AIX-64-P9-NEXT: lfiwzx f0, 0, r3 932; CHECK-AIX-64-P9-NEXT: ld r3, L..C5(r2) # %const.0 933; CHECK-AIX-64-P9-NEXT: lxsiwzx v2, 0, r4 934; CHECK-AIX-64-P9-NEXT: lxv vs1, 0(r3) 935; CHECK-AIX-64-P9-NEXT: xxperm v2, vs0, vs1 936; CHECK-AIX-64-P9-NEXT: blr 937; 938; CHECK-AIX-32-P8-LABEL: test_v4i32_v4i32: 939; CHECK-AIX-32-P8: # %bb.0: # %entry 940; CHECK-AIX-32-P8-NEXT: lxsiwzx v2, 0, r3 941; CHECK-AIX-32-P8-NEXT: lwz r3, L..C7(r2) # %const.0 942; CHECK-AIX-32-P8-NEXT: lxsiwzx v3, 0, r4 943; CHECK-AIX-32-P8-NEXT: lxvw4x v4, 0, r3 944; CHECK-AIX-32-P8-NEXT: vperm v2, v2, v3, v4 945; CHECK-AIX-32-P8-NEXT: blr 946; 947; CHECK-AIX-32-P9-LABEL: test_v4i32_v4i32: 948; CHECK-AIX-32-P9: # %bb.0: # %entry 949; CHECK-AIX-32-P9-NEXT: lfiwzx f0, 0, r3 950; CHECK-AIX-32-P9-NEXT: lwz r3, L..C6(r2) # %const.0 951; CHECK-AIX-32-P9-NEXT: lxsiwzx v2, 0, r4 952; CHECK-AIX-32-P9-NEXT: lxv vs1, 0(r3) 953; CHECK-AIX-32-P9-NEXT: xxperm v2, vs0, vs1 954; CHECK-AIX-32-P9-NEXT: blr 955entry: 956 %load1 = load <4 x i8>, ptr %a 957 %load2 = load <4 x i8>, ptr %b 958 %shuffle1 = shufflevector <4 x i8> %load1, <4 x i8> %load2, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> 959 %shuffle2 = shufflevector <8 x i8> %shuffle1, <8 x i8> %shuffle1, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15> 960 ret <16 x i8> %shuffle2 961} 962 963define void @test_v4i32_v8i16(ptr %a) { 964; CHECK-LE-P8-LABEL: test_v4i32_v8i16: 965; CHECK-LE-P8: # %bb.0: # %entry 966; CHECK-LE-P8-NEXT: lhz r4, 0(r3) 967; CHECK-LE-P8-NEXT: lfiwzx f1, 0, r3 968; CHECK-LE-P8-NEXT: mtfprd f0, r4 969; CHECK-LE-P8-NEXT: xxmrghw vs0, vs0, vs1 970; CHECK-LE-P8-NEXT: xxswapd vs0, vs0 971; CHECK-LE-P8-NEXT: stxvd2x vs0, 0, r3 972; CHECK-LE-P8-NEXT: blr 973; 974; CHECK-LE-P9-LABEL: test_v4i32_v8i16: 975; CHECK-LE-P9: # %bb.0: # %entry 976; CHECK-LE-P9-NEXT: lxsihzx f0, 0, r3 977; CHECK-LE-P9-NEXT: lfiwzx f1, 0, r3 978; CHECK-LE-P9-NEXT: xxmrghw vs0, vs0, vs1 979; CHECK-LE-P9-NEXT: stxv vs0, 0(r3) 980; CHECK-LE-P9-NEXT: blr 981; 982; CHECK-BE-P8-LABEL: test_v4i32_v8i16: 983; CHECK-BE-P8: # %bb.0: # %entry 984; CHECK-BE-P8-NEXT: lhz r4, 0(r3) 985; CHECK-BE-P8-NEXT: lxsiwzx v3, 0, r3 986; CHECK-BE-P8-NEXT: addis r3, r2, .LCPI10_0@toc@ha 987; CHECK-BE-P8-NEXT: addi r3, r3, .LCPI10_0@toc@l 988; CHECK-BE-P8-NEXT: mtvsrwz v2, r4 989; CHECK-BE-P8-NEXT: lxvw4x v4, 0, r3 990; CHECK-BE-P8-NEXT: vperm v2, v3, v2, v4 991; CHECK-BE-P8-NEXT: stxvw4x v2, 0, r3 992; CHECK-BE-P8-NEXT: blr 993; 994; CHECK-BE-P9-LABEL: test_v4i32_v8i16: 995; CHECK-BE-P9: # %bb.0: # %entry 996; CHECK-BE-P9-NEXT: lxsihzx f0, 0, r3 997; CHECK-BE-P9-NEXT: lfiwzx f1, 0, r3 998; CHECK-BE-P9-NEXT: addis r3, r2, .LCPI10_0@toc@ha 999; CHECK-BE-P9-NEXT: addi r3, r3, .LCPI10_0@toc@l 1000; CHECK-BE-P9-NEXT: lxv vs2, 0(r3) 1001; CHECK-BE-P9-NEXT: xxperm vs0, vs1, vs2 1002; CHECK-BE-P9-NEXT: stxv vs0, 0(r3) 1003; CHECK-BE-P9-NEXT: blr 1004; 1005; CHECK-AIX-64-P8-LABEL: test_v4i32_v8i16: 1006; CHECK-AIX-64-P8: # %bb.0: # %entry 1007; CHECK-AIX-64-P8-NEXT: lhz r4, 0(r3) 1008; CHECK-AIX-64-P8-NEXT: lxsiwzx v3, 0, r3 1009; CHECK-AIX-64-P8-NEXT: ld r3, L..C7(r2) # %const.0 1010; CHECK-AIX-64-P8-NEXT: mtvsrwz v2, r4 1011; CHECK-AIX-64-P8-NEXT: lxvw4x v4, 0, r3 1012; CHECK-AIX-64-P8-NEXT: vperm v2, v3, v2, v4 1013; CHECK-AIX-64-P8-NEXT: stxvw4x v2, 0, r3 1014; CHECK-AIX-64-P8-NEXT: blr 1015; 1016; CHECK-AIX-64-P9-LABEL: test_v4i32_v8i16: 1017; CHECK-AIX-64-P9: # %bb.0: # %entry 1018; CHECK-AIX-64-P9-NEXT: lxsihzx f0, 0, r3 1019; CHECK-AIX-64-P9-NEXT: lfiwzx f1, 0, r3 1020; CHECK-AIX-64-P9-NEXT: ld r3, L..C6(r2) # %const.0 1021; CHECK-AIX-64-P9-NEXT: lxv vs2, 0(r3) 1022; CHECK-AIX-64-P9-NEXT: xxperm vs0, vs1, vs2 1023; CHECK-AIX-64-P9-NEXT: stxv vs0, 0(r3) 1024; CHECK-AIX-64-P9-NEXT: blr 1025; 1026; CHECK-AIX-32-P8-LABEL: test_v4i32_v8i16: 1027; CHECK-AIX-32-P8: # %bb.0: # %entry 1028; CHECK-AIX-32-P8-NEXT: lhz r4, 0(r3) 1029; CHECK-AIX-32-P8-NEXT: lxsiwzx v3, 0, r3 1030; CHECK-AIX-32-P8-NEXT: lwz r3, L..C8(r2) # %const.0 1031; CHECK-AIX-32-P8-NEXT: mtvsrwz v2, r4 1032; CHECK-AIX-32-P8-NEXT: lxvw4x v4, 0, r3 1033; CHECK-AIX-32-P8-NEXT: vperm v2, v3, v2, v4 1034; CHECK-AIX-32-P8-NEXT: stxvw4x v2, 0, r3 1035; CHECK-AIX-32-P8-NEXT: blr 1036; 1037; CHECK-AIX-32-P9-LABEL: test_v4i32_v8i16: 1038; CHECK-AIX-32-P9: # %bb.0: # %entry 1039; CHECK-AIX-32-P9-NEXT: lxsihzx f0, 0, r3 1040; CHECK-AIX-32-P9-NEXT: lfiwzx f1, 0, r3 1041; CHECK-AIX-32-P9-NEXT: lwz r3, L..C7(r2) # %const.0 1042; CHECK-AIX-32-P9-NEXT: lxv vs2, 0(r3) 1043; CHECK-AIX-32-P9-NEXT: xxperm vs0, vs1, vs2 1044; CHECK-AIX-32-P9-NEXT: stxv vs0, 0(r3) 1045; CHECK-AIX-32-P9-NEXT: blr 1046entry: 1047 %0 = load <2 x i8>, ptr undef, align 1 1048 %tmp0_1 = bitcast <2 x i8> %0 to i16 1049 %tmp0_2 = insertelement <8 x i16> undef, i16 %tmp0_1, i32 0 1050 %tmp0_3 = bitcast <8 x i16> %tmp0_2 to <4 x i32> 1051 %1 = load <2 x i16>, ptr %a, align 4 1052 %tmp1_1 = bitcast <2 x i16> %1 to i32 1053 %tmp1_2 = insertelement <4 x i32> undef, i32 %tmp1_1, i32 0 1054 %2 = shufflevector <4 x i32> %tmp1_2, <4 x i32> %tmp0_3, <4 x i32> <i32 0, i32 4, i32 1, i32 5> 1055 store <4 x i32> %2, ptr undef, align 4 1056 ret void 1057} 1058 1059define void @test_v4i32_v2i64(ptr %a) { 1060; CHECK-LE-P8-LABEL: test_v4i32_v2i64: 1061; CHECK-LE-P8: # %bb.0: # %entry 1062; CHECK-LE-P8-NEXT: lfdx f0, 0, r3 1063; CHECK-LE-P8-NEXT: lfiwzx f1, 0, r3 1064; CHECK-LE-P8-NEXT: xxmrghw vs0, vs0, vs1 1065; CHECK-LE-P8-NEXT: xxswapd vs0, vs0 1066; CHECK-LE-P8-NEXT: stxvd2x vs0, 0, r3 1067; CHECK-LE-P8-NEXT: blr 1068; 1069; CHECK-LE-P9-LABEL: test_v4i32_v2i64: 1070; CHECK-LE-P9: # %bb.0: # %entry 1071; CHECK-LE-P9-NEXT: lfd f0, 0(r3) 1072; CHECK-LE-P9-NEXT: lfiwzx f1, 0, r3 1073; CHECK-LE-P9-NEXT: xxmrghw vs0, vs0, vs1 1074; CHECK-LE-P9-NEXT: stxv vs0, 0(r3) 1075; CHECK-LE-P9-NEXT: blr 1076; 1077; CHECK-BE-P8-LABEL: test_v4i32_v2i64: 1078; CHECK-BE-P8: # %bb.0: # %entry 1079; CHECK-BE-P8-NEXT: lfiwzx f0, 0, r3 1080; CHECK-BE-P8-NEXT: lfdx f1, 0, r3 1081; CHECK-BE-P8-NEXT: xxsldwi vs0, f0, f0, 1 1082; CHECK-BE-P8-NEXT: xxmrghw vs0, vs0, vs1 1083; CHECK-BE-P8-NEXT: stxvw4x vs0, 0, r3 1084; CHECK-BE-P8-NEXT: blr 1085; 1086; CHECK-BE-P9-LABEL: test_v4i32_v2i64: 1087; CHECK-BE-P9: # %bb.0: # %entry 1088; CHECK-BE-P9-NEXT: lfiwzx f1, 0, r3 1089; CHECK-BE-P9-NEXT: lfd f0, 0(r3) 1090; CHECK-BE-P9-NEXT: xxsldwi vs1, f1, f1, 1 1091; CHECK-BE-P9-NEXT: xxmrghw vs0, vs1, vs0 1092; CHECK-BE-P9-NEXT: stxv vs0, 0(r3) 1093; CHECK-BE-P9-NEXT: blr 1094; 1095; CHECK-AIX-64-P8-LABEL: test_v4i32_v2i64: 1096; CHECK-AIX-64-P8: # %bb.0: # %entry 1097; CHECK-AIX-64-P8-NEXT: lfiwzx f0, 0, r3 1098; CHECK-AIX-64-P8-NEXT: lfdx f1, 0, r3 1099; CHECK-AIX-64-P8-NEXT: xxsldwi vs0, f0, f0, 1 1100; CHECK-AIX-64-P8-NEXT: xxmrghw vs0, vs0, vs1 1101; CHECK-AIX-64-P8-NEXT: stxvw4x vs0, 0, r3 1102; CHECK-AIX-64-P8-NEXT: blr 1103; 1104; CHECK-AIX-64-P9-LABEL: test_v4i32_v2i64: 1105; CHECK-AIX-64-P9: # %bb.0: # %entry 1106; CHECK-AIX-64-P9-NEXT: lfiwzx f1, 0, r3 1107; CHECK-AIX-64-P9-NEXT: lfd f0, 0(r3) 1108; CHECK-AIX-64-P9-NEXT: xxsldwi vs1, f1, f1, 1 1109; CHECK-AIX-64-P9-NEXT: xxmrghw vs0, vs1, vs0 1110; CHECK-AIX-64-P9-NEXT: stxv vs0, 0(r3) 1111; CHECK-AIX-64-P9-NEXT: blr 1112; 1113; CHECK-AIX-32-P8-LABEL: test_v4i32_v2i64: 1114; CHECK-AIX-32-P8: # %bb.0: # %entry 1115; CHECK-AIX-32-P8-NEXT: lfiwzx f0, 0, r3 1116; CHECK-AIX-32-P8-NEXT: lfiwzx f1, 0, r3 1117; CHECK-AIX-32-P8-NEXT: xxspltw vs0, vs0, 1 1118; CHECK-AIX-32-P8-NEXT: xxspltw vs1, vs1, 1 1119; CHECK-AIX-32-P8-NEXT: xxmrghw vs0, vs1, vs0 1120; CHECK-AIX-32-P8-NEXT: stxvw4x vs0, 0, r3 1121; CHECK-AIX-32-P8-NEXT: blr 1122; 1123; CHECK-AIX-32-P9-LABEL: test_v4i32_v2i64: 1124; CHECK-AIX-32-P9: # %bb.0: # %entry 1125; CHECK-AIX-32-P9-NEXT: lxvwsx vs0, 0, r3 1126; CHECK-AIX-32-P9-NEXT: lxvwsx vs1, 0, r3 1127; CHECK-AIX-32-P9-NEXT: xxmrghw vs0, vs1, vs0 1128; CHECK-AIX-32-P9-NEXT: stxv vs0, 0(r3) 1129; CHECK-AIX-32-P9-NEXT: blr 1130entry: 1131 %0 = load <2 x i16>, ptr undef, align 8 1132 %tmp0_1 = bitcast <2 x i16> %0 to i32 1133 %tmp0_2 = insertelement <4 x i32> undef, i32 %tmp0_1, i32 0 1134 %1 = load <2 x i16>, ptr %a, align 4 1135 %tmp1_1 = bitcast <2 x i16> %1 to i32 1136 %tmp1_2 = insertelement <4 x i32> undef, i32 %tmp1_1, i32 0 1137 %2 = shufflevector <4 x i32> %tmp1_2, <4 x i32> %tmp0_2, <4 x i32> <i32 0, i32 4, i32 1, i32 5> 1138 store <4 x i32> %2, ptr undef, align 4 1139 ret void 1140} 1141 1142define void @test_v2i64_v2i64(ptr %a) { 1143; CHECK-LE-P8-LABEL: test_v2i64_v2i64: 1144; CHECK-LE-P8: # %bb.0: # %entry 1145; CHECK-LE-P8-NEXT: lfdx f0, 0, r3 1146; CHECK-LE-P8-NEXT: lfdx f1, 0, r3 1147; CHECK-LE-P8-NEXT: xxmrghw vs0, vs1, vs0 1148; CHECK-LE-P8-NEXT: xxswapd vs0, vs0 1149; CHECK-LE-P8-NEXT: stxvd2x vs0, 0, r3 1150; CHECK-LE-P8-NEXT: blr 1151; 1152; CHECK-LE-P9-LABEL: test_v2i64_v2i64: 1153; CHECK-LE-P9: # %bb.0: # %entry 1154; CHECK-LE-P9-NEXT: lfd f0, 0(r3) 1155; CHECK-LE-P9-NEXT: lfd f1, 0(r3) 1156; CHECK-LE-P9-NEXT: xxmrghw vs0, vs1, vs0 1157; CHECK-LE-P9-NEXT: stxv vs0, 0(r3) 1158; CHECK-LE-P9-NEXT: blr 1159; 1160; CHECK-BE-P8-LABEL: test_v2i64_v2i64: 1161; CHECK-BE-P8: # %bb.0: # %entry 1162; CHECK-BE-P8-NEXT: lfdx f0, 0, r3 1163; CHECK-BE-P8-NEXT: lfdx f1, 0, r3 1164; CHECK-BE-P8-NEXT: xxmrghw vs0, vs0, vs1 1165; CHECK-BE-P8-NEXT: stxvw4x vs0, 0, r3 1166; CHECK-BE-P8-NEXT: blr 1167; 1168; CHECK-BE-P9-LABEL: test_v2i64_v2i64: 1169; CHECK-BE-P9: # %bb.0: # %entry 1170; CHECK-BE-P9-NEXT: lfd f0, 0(r3) 1171; CHECK-BE-P9-NEXT: lfd f1, 0(r3) 1172; CHECK-BE-P9-NEXT: xxmrghw vs0, vs0, vs1 1173; CHECK-BE-P9-NEXT: stxv vs0, 0(r3) 1174; CHECK-BE-P9-NEXT: blr 1175; 1176; CHECK-AIX-64-P8-LABEL: test_v2i64_v2i64: 1177; CHECK-AIX-64-P8: # %bb.0: # %entry 1178; CHECK-AIX-64-P8-NEXT: lfdx f0, 0, r3 1179; CHECK-AIX-64-P8-NEXT: lfdx f1, 0, r3 1180; CHECK-AIX-64-P8-NEXT: xxmrghw vs0, vs0, vs1 1181; CHECK-AIX-64-P8-NEXT: stxvw4x vs0, 0, r3 1182; CHECK-AIX-64-P8-NEXT: blr 1183; 1184; CHECK-AIX-64-P9-LABEL: test_v2i64_v2i64: 1185; CHECK-AIX-64-P9: # %bb.0: # %entry 1186; CHECK-AIX-64-P9-NEXT: lfd f0, 0(r3) 1187; CHECK-AIX-64-P9-NEXT: lfd f1, 0(r3) 1188; CHECK-AIX-64-P9-NEXT: xxmrghw vs0, vs0, vs1 1189; CHECK-AIX-64-P9-NEXT: stxv vs0, 0(r3) 1190; CHECK-AIX-64-P9-NEXT: blr 1191; 1192; CHECK-AIX-32-P8-LABEL: test_v2i64_v2i64: 1193; CHECK-AIX-32-P8: # %bb.0: # %entry 1194; CHECK-AIX-32-P8-NEXT: li r4, 4 1195; CHECK-AIX-32-P8-NEXT: lfiwzx f1, 0, r3 1196; CHECK-AIX-32-P8-NEXT: lfiwzx f0, r3, r4 1197; CHECK-AIX-32-P8-NEXT: xxspltw vs1, vs1, 1 1198; CHECK-AIX-32-P8-NEXT: xxspltw vs0, vs0, 1 1199; CHECK-AIX-32-P8-NEXT: xxmrghw vs0, vs1, vs0 1200; CHECK-AIX-32-P8-NEXT: lfiwzx f1, 0, r3 1201; CHECK-AIX-32-P8-NEXT: xxspltw vs1, vs1, 1 1202; CHECK-AIX-32-P8-NEXT: xxmrghw vs0, vs1, vs0 1203; CHECK-AIX-32-P8-NEXT: stxvw4x vs0, 0, r3 1204; CHECK-AIX-32-P8-NEXT: blr 1205; 1206; CHECK-AIX-32-P9-LABEL: test_v2i64_v2i64: 1207; CHECK-AIX-32-P9: # %bb.0: # %entry 1208; CHECK-AIX-32-P9-NEXT: li r4, 4 1209; CHECK-AIX-32-P9-NEXT: lxvwsx vs1, 0, r3 1210; CHECK-AIX-32-P9-NEXT: lxvwsx vs0, r3, r4 1211; CHECK-AIX-32-P9-NEXT: xxmrghw vs0, vs1, vs0 1212; CHECK-AIX-32-P9-NEXT: lxvwsx vs1, 0, r3 1213; CHECK-AIX-32-P9-NEXT: xxmrghw vs0, vs1, vs0 1214; CHECK-AIX-32-P9-NEXT: stxv vs0, 0(r3) 1215; CHECK-AIX-32-P9-NEXT: blr 1216entry: 1217 %0 = load <2 x i32>, ptr undef, align 4 1218 %1 = load <2 x i32>, ptr %a, align 4 1219 %2 = shufflevector <2 x i32> %0, <2 x i32> %1, <4 x i32> <i32 0, i32 2, i32 1, i32 3> 1220 store <4 x i32> %2, ptr undef, align 4 1221 ret void 1222} 1223 1224define void @test_v2i64_v4i32(ptr %a) { 1225; CHECK-LE-P8-LABEL: test_v2i64_v4i32: 1226; CHECK-LE-P8: # %bb.0: # %entry 1227; CHECK-LE-P8-NEXT: lfdx f0, 0, r3 1228; CHECK-LE-P8-NEXT: lfiwzx f1, 0, r3 1229; CHECK-LE-P8-NEXT: xxmrghw vs0, vs1, vs0 1230; CHECK-LE-P8-NEXT: xxswapd vs0, vs0 1231; CHECK-LE-P8-NEXT: stxvd2x vs0, 0, r3 1232; CHECK-LE-P8-NEXT: blr 1233; 1234; CHECK-LE-P9-LABEL: test_v2i64_v4i32: 1235; CHECK-LE-P9: # %bb.0: # %entry 1236; CHECK-LE-P9-NEXT: lfd f0, 0(r3) 1237; CHECK-LE-P9-NEXT: lfiwzx f1, 0, r3 1238; CHECK-LE-P9-NEXT: xxmrghw vs0, vs1, vs0 1239; CHECK-LE-P9-NEXT: stxv vs0, 0(r3) 1240; CHECK-LE-P9-NEXT: blr 1241; 1242; CHECK-BE-P8-LABEL: test_v2i64_v4i32: 1243; CHECK-BE-P8: # %bb.0: # %entry 1244; CHECK-BE-P8-NEXT: lfiwzx f0, 0, r3 1245; CHECK-BE-P8-NEXT: lfdx f1, 0, r3 1246; CHECK-BE-P8-NEXT: xxsldwi vs0, f0, f0, 1 1247; CHECK-BE-P8-NEXT: xxmrghw vs0, vs1, vs0 1248; CHECK-BE-P8-NEXT: stxvw4x vs0, 0, r3 1249; CHECK-BE-P8-NEXT: blr 1250; 1251; CHECK-BE-P9-LABEL: test_v2i64_v4i32: 1252; CHECK-BE-P9: # %bb.0: # %entry 1253; CHECK-BE-P9-NEXT: lfiwzx f1, 0, r3 1254; CHECK-BE-P9-NEXT: lfd f0, 0(r3) 1255; CHECK-BE-P9-NEXT: xxsldwi vs1, f1, f1, 1 1256; CHECK-BE-P9-NEXT: xxmrghw vs0, vs0, vs1 1257; CHECK-BE-P9-NEXT: stxv vs0, 0(r3) 1258; CHECK-BE-P9-NEXT: blr 1259; 1260; CHECK-AIX-64-P8-LABEL: test_v2i64_v4i32: 1261; CHECK-AIX-64-P8: # %bb.0: # %entry 1262; CHECK-AIX-64-P8-NEXT: lfiwzx f0, 0, r3 1263; CHECK-AIX-64-P8-NEXT: lfdx f1, 0, r3 1264; CHECK-AIX-64-P8-NEXT: xxsldwi vs0, f0, f0, 1 1265; CHECK-AIX-64-P8-NEXT: xxmrghw vs0, vs1, vs0 1266; CHECK-AIX-64-P8-NEXT: stxvw4x vs0, 0, r3 1267; CHECK-AIX-64-P8-NEXT: blr 1268; 1269; CHECK-AIX-64-P9-LABEL: test_v2i64_v4i32: 1270; CHECK-AIX-64-P9: # %bb.0: # %entry 1271; CHECK-AIX-64-P9-NEXT: lfiwzx f1, 0, r3 1272; CHECK-AIX-64-P9-NEXT: lfd f0, 0(r3) 1273; CHECK-AIX-64-P9-NEXT: xxsldwi vs1, f1, f1, 1 1274; CHECK-AIX-64-P9-NEXT: xxmrghw vs0, vs0, vs1 1275; CHECK-AIX-64-P9-NEXT: stxv vs0, 0(r3) 1276; CHECK-AIX-64-P9-NEXT: blr 1277; 1278; CHECK-AIX-32-P8-LABEL: test_v2i64_v4i32: 1279; CHECK-AIX-32-P8: # %bb.0: # %entry 1280; CHECK-AIX-32-P8-NEXT: lfiwzx f0, 0, r3 1281; CHECK-AIX-32-P8-NEXT: lfiwzx f1, 0, r3 1282; CHECK-AIX-32-P8-NEXT: xxspltw vs0, vs0, 1 1283; CHECK-AIX-32-P8-NEXT: xxspltw vs1, vs1, 1 1284; CHECK-AIX-32-P8-NEXT: xxmrghw vs0, vs1, vs0 1285; CHECK-AIX-32-P8-NEXT: stxvw4x vs0, 0, r3 1286; CHECK-AIX-32-P8-NEXT: blr 1287; 1288; CHECK-AIX-32-P9-LABEL: test_v2i64_v4i32: 1289; CHECK-AIX-32-P9: # %bb.0: # %entry 1290; CHECK-AIX-32-P9-NEXT: lxvwsx vs0, 0, r3 1291; CHECK-AIX-32-P9-NEXT: lxvwsx vs1, 0, r3 1292; CHECK-AIX-32-P9-NEXT: xxmrghw vs0, vs1, vs0 1293; CHECK-AIX-32-P9-NEXT: stxv vs0, 0(r3) 1294; CHECK-AIX-32-P9-NEXT: blr 1295entry: 1296 %0 = load <2 x i16>, ptr undef, align 8 1297 %tmp0_1 = bitcast <2 x i16> %0 to i32 1298 %tmp0_2 = insertelement <4 x i32> undef, i32 %tmp0_1, i32 0 1299 %1 = load <2 x i16>, ptr %a, align 4 1300 %tmp1_1 = bitcast <2 x i16> %1 to i32 1301 %tmp1_2 = insertelement <4 x i32> undef, i32 %tmp1_1, i32 0 1302 %2 = shufflevector <4 x i32> %tmp0_2, <4 x i32> %tmp1_2, <4 x i32> <i32 0, i32 4, i32 1, i32 5> 1303 store <4 x i32> %2, ptr undef, align 4 1304 ret void 1305} 1306 1307define void @test_v2i64_v8i16(ptr %a) { 1308; CHECK-LE-P8-LABEL: test_v2i64_v8i16: 1309; CHECK-LE-P8: # %bb.0: # %entry 1310; CHECK-LE-P8-NEXT: lhz r4, 0(r3) 1311; CHECK-LE-P8-NEXT: lfdx f1, 0, r3 1312; CHECK-LE-P8-NEXT: mtfprd f0, r4 1313; CHECK-LE-P8-NEXT: xxmrghw vs0, vs0, vs1 1314; CHECK-LE-P8-NEXT: xxswapd vs0, vs0 1315; CHECK-LE-P8-NEXT: stxvd2x vs0, 0, r3 1316; CHECK-LE-P8-NEXT: blr 1317; 1318; CHECK-LE-P9-LABEL: test_v2i64_v8i16: 1319; CHECK-LE-P9: # %bb.0: # %entry 1320; CHECK-LE-P9-NEXT: lxsihzx f0, 0, r3 1321; CHECK-LE-P9-NEXT: lfd f1, 0(r3) 1322; CHECK-LE-P9-NEXT: xxmrghw vs0, vs0, vs1 1323; CHECK-LE-P9-NEXT: stxv vs0, 0(r3) 1324; CHECK-LE-P9-NEXT: blr 1325; 1326; CHECK-BE-P8-LABEL: test_v2i64_v8i16: 1327; CHECK-BE-P8: # %bb.0: # %entry 1328; CHECK-BE-P8-NEXT: lhz r4, 0(r3) 1329; CHECK-BE-P8-NEXT: lfdx f1, 0, r3 1330; CHECK-BE-P8-NEXT: sldi r4, r4, 48 1331; CHECK-BE-P8-NEXT: mtfprd f0, r4 1332; CHECK-BE-P8-NEXT: xxmrghw vs0, vs1, vs0 1333; CHECK-BE-P8-NEXT: stxvw4x vs0, 0, r3 1334; CHECK-BE-P8-NEXT: blr 1335; 1336; CHECK-BE-P9-LABEL: test_v2i64_v8i16: 1337; CHECK-BE-P9: # %bb.0: # %entry 1338; CHECK-BE-P9-NEXT: lxsihzx v2, 0, r3 1339; CHECK-BE-P9-NEXT: lfd f0, 0(r3) 1340; CHECK-BE-P9-NEXT: vsplth v2, v2, 3 1341; CHECK-BE-P9-NEXT: xxmrghw vs0, vs0, v2 1342; CHECK-BE-P9-NEXT: stxv vs0, 0(r3) 1343; CHECK-BE-P9-NEXT: blr 1344; 1345; CHECK-AIX-64-P8-LABEL: test_v2i64_v8i16: 1346; CHECK-AIX-64-P8: # %bb.0: # %entry 1347; CHECK-AIX-64-P8-NEXT: lhz r4, 0(r3) 1348; CHECK-AIX-64-P8-NEXT: lfdx f1, 0, r3 1349; CHECK-AIX-64-P8-NEXT: sldi r4, r4, 48 1350; CHECK-AIX-64-P8-NEXT: mtfprd f0, r4 1351; CHECK-AIX-64-P8-NEXT: xxmrghw vs0, vs1, vs0 1352; CHECK-AIX-64-P8-NEXT: stxvw4x vs0, 0, r3 1353; CHECK-AIX-64-P8-NEXT: blr 1354; 1355; CHECK-AIX-64-P9-LABEL: test_v2i64_v8i16: 1356; CHECK-AIX-64-P9: # %bb.0: # %entry 1357; CHECK-AIX-64-P9-NEXT: lxsihzx v2, 0, r3 1358; CHECK-AIX-64-P9-NEXT: lfd f0, 0(r3) 1359; CHECK-AIX-64-P9-NEXT: vsplth v2, v2, 3 1360; CHECK-AIX-64-P9-NEXT: xxmrghw vs0, vs0, v2 1361; CHECK-AIX-64-P9-NEXT: stxv vs0, 0(r3) 1362; CHECK-AIX-64-P9-NEXT: blr 1363; 1364; CHECK-AIX-32-P8-LABEL: test_v2i64_v8i16: 1365; CHECK-AIX-32-P8: # %bb.0: # %entry 1366; CHECK-AIX-32-P8-NEXT: lhz r4, 0(r3) 1367; CHECK-AIX-32-P8-NEXT: lxsiwzx v3, 0, r3 1368; CHECK-AIX-32-P8-NEXT: lwz r3, L..C9(r2) # %const.0 1369; CHECK-AIX-32-P8-NEXT: mtvsrwz v2, r4 1370; CHECK-AIX-32-P8-NEXT: lxvw4x v4, 0, r3 1371; CHECK-AIX-32-P8-NEXT: vperm v2, v3, v2, v4 1372; CHECK-AIX-32-P8-NEXT: stxvw4x v2, 0, r3 1373; CHECK-AIX-32-P8-NEXT: blr 1374; 1375; CHECK-AIX-32-P9-LABEL: test_v2i64_v8i16: 1376; CHECK-AIX-32-P9: # %bb.0: # %entry 1377; CHECK-AIX-32-P9-NEXT: lxsihzx f0, 0, r3 1378; CHECK-AIX-32-P9-NEXT: lfiwzx f1, 0, r3 1379; CHECK-AIX-32-P9-NEXT: lwz r3, L..C8(r2) # %const.0 1380; CHECK-AIX-32-P9-NEXT: lxv vs2, 0(r3) 1381; CHECK-AIX-32-P9-NEXT: xxperm vs0, vs1, vs2 1382; CHECK-AIX-32-P9-NEXT: stxv vs0, 0(r3) 1383; CHECK-AIX-32-P9-NEXT: blr 1384entry: 1385 %0 = load <2 x i8>, ptr undef, align 1 1386 %tmp0_1 = bitcast <2 x i8> %0 to i16 1387 %tmp0_2 = insertelement <8 x i16> undef, i16 %tmp0_1, i32 0 1388 %tmp0_3 = bitcast <8 x i16> %tmp0_2 to <4 x i32> 1389 %1 = load <2 x i16>, ptr %a, align 8 1390 %tmp1_1 = bitcast <2 x i16> %1 to i32 1391 %tmp1_2 = insertelement <4 x i32> undef, i32 %tmp1_1, i32 0 1392 %2 = shufflevector <4 x i32> %tmp1_2, <4 x i32> %tmp0_3, <4 x i32> <i32 0, i32 4, i32 1, i32 5> 1393 store <4 x i32> %2, ptr undef, align 4 1394 ret void 1395} 1396