1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4 2; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -mattr=+altivec -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefixes=LE 3; RUN: llc -mtriple=powerpc64-unknown-linux-gnu -mattr=+altivec,+direct-move -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefixes=BE 4 5; LE-LABEL: .LCPI0_0: 6; LE-NEXT: .byte 31 7; LE-NEXT: .byte 15 8; LE-NEXT: .byte 30 9; LE-NEXT: .byte 14 10; LE-NEXT: .byte 29 11; LE-NEXT: .byte 13 12; LE-NEXT: .byte 28 13; LE-NEXT: .byte 12 14; LE-NEXT: .byte 31 15; LE-NEXT: .byte 15 16; LE-NEXT: .byte 31 17; LE-NEXT: .byte 15 18; LE-NEXT: .byte 31 19; LE-NEXT: .byte 15 20; LE-NEXT: .byte 31 21; LE-NEXT: .byte 15 22 23; BE-LABEL: .LCPI0_0: 24; BE-NEXT: .byte 0 25; BE-NEXT: .byte 16 26; BE-NEXT: .byte 1 27; BE-NEXT: .byte 16 28; BE-NEXT: .byte 2 29; BE-NEXT: .byte 16 30; BE-NEXT: .byte 3 31; BE-NEXT: .byte 16 32; BE-NEXT: .byte 0 33; BE-NEXT: .byte 16 34; BE-NEXT: .byte 0 35; BE-NEXT: .byte 16 36; BE-NEXT: .byte 0 37; BE-NEXT: .byte 16 38; BE-NEXT: .byte 0 39; BE-NEXT: .byte 16 40 41define <16 x i8> @test1(<16 x i8> %a) { 42; LE-LABEL: test1: 43; LE: # %bb.0: 44; LE-NEXT: addis r3, r2, .LCPI0_0@toc@ha 45; LE-NEXT: xxlxor vs36, vs36, vs36 46; LE-NEXT: addi r3, r3, .LCPI0_0@toc@l 47; LE-NEXT: lxvd2x vs0, 0, r3 48; LE-NEXT: xxswapd vs35, vs0 49; LE-NEXT: vperm v2, v4, v2, v3 50; LE-NEXT: blr 51; 52; BE-LABEL: test1: 53; BE: # %bb.0: 54; BE-NEXT: addis r3, r2, .LCPI0_0@toc@ha 55; BE-NEXT: xxlxor vs36, vs36, vs36 56; BE-NEXT: addi r3, r3, .LCPI0_0@toc@l 57; BE-NEXT: lxvw4x vs35, 0, r3 58; BE-NEXT: vperm v2, v2, v4, v3 59; BE-NEXT: blr 60 %shuffle = shufflevector <16 x i8> %a, <16 x i8> zeroinitializer, <16 x i32> <i32 0, i32 16, i32 1, i32 16, i32 2, i32 16, i32 3, i32 16, i32 poison, i32 16, i32 poison, i32 16, i32 poison, i32 16, i32 poison, i32 16> 61 ret <16 x i8> %shuffle 62} 63 64; LE-LABEL: .LCPI1_0: 65; LE-NEXT: .byte 31 66; LE-NEXT: .byte 15 67; LE-NEXT: .byte 31 68; LE-NEXT: .byte 14 69; LE-NEXT: .byte 31 70; LE-NEXT: .byte 13 71; LE-NEXT: .byte 31 72; LE-NEXT: .byte 12 73; LE-NEXT: .byte 31 74; LE-NEXT: .byte 11 75; LE-NEXT: .byte 31 76; LE-NEXT: .byte 10 77; LE-NEXT: .byte 31 78; LE-NEXT: .byte 9 79; LE-NEXT: .byte 31 80; LE-NEXT: .byte 8 81 82define <16 x i8> @test2(<16 x i8> %a) { 83; LE-LABEL: test2: 84; LE: # %bb.0: 85; LE-NEXT: addis r3, r2, .LCPI1_0@toc@ha 86; LE-NEXT: xxlxor vs36, vs36, vs36 87; LE-NEXT: addi r3, r3, .LCPI1_0@toc@l 88; LE-NEXT: lxvd2x vs0, 0, r3 89; LE-NEXT: xxswapd vs35, vs0 90; LE-NEXT: vperm v2, v2, v4, v3 91; LE-NEXT: blr 92; 93; BE-LABEL: test2: 94; BE: # %bb.0: 95; BE-NEXT: xxlxor vs35, vs35, vs35 96; BE-NEXT: vmrghb v2, v3, v2 97; BE-NEXT: blr 98 %shuffle = shufflevector <16 x i8> %a, <16 x i8> zeroinitializer, <16 x i32> <i32 16, i32 0, i32 16, i32 1, i32 16, i32 2, i32 16, i32 3, i32 16, i32 4, i32 poison, i32 5, i32 poison, i32 6, i32 poison, i32 7> 99 ret <16 x i8> %shuffle 100} 101