xref: /llvm-project/llvm/test/CodeGen/PowerPC/xxperm-swap.ll (revision cf0395f81655ead3ac8e7e6c85778316097f2748)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -verify-machineinstrs -mcpu=pwr9 -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-P9
5; RUN: llc -verify-machineinstrs -mcpu=pwr9 -ppc-asm-full-reg-names \
6; RUN:   -ppc-vsr-nums-as-vr -mtriple=powerpc64-unknown-linux-gnu < %s | \
7; RUN:   FileCheck %s --check-prefix=CHECK-BE-P9
8; RUN: llc -verify-machineinstrs -mcpu=pwr9 -ppc-asm-full-reg-names \
9; RUN:   -ppc-vsr-nums-as-vr -mtriple=powerpc64-ibm-aix < %s | \
10; RUN:   FileCheck %s --check-prefix=CHECK-AIX-64-P9
11; RUN: llc -verify-machineinstrs -mcpu=pwr9 -ppc-asm-full-reg-names \
12; RUN:   -ppc-vsr-nums-as-vr -mtriple=powerpc-ibm-aix < %s | \
13; RUN:   FileCheck %s --check-prefix=CHECK-AIX-32-P9
14
15; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none) uwtable
16define dso_local noundef <16 x i8> @test1(<16 x i8> noundef %burn, <16 x i8> noundef %a, <16 x i8> noundef %b) local_unnamed_addr #0 {
17; CHECK-LE-P9-LABEL: test1:
18; CHECK-LE-P9:       # %bb.0: # %entry
19; CHECK-LE-P9-NEXT:    addis r3, r2, .LCPI0_0@toc@ha
20; CHECK-LE-P9-NEXT:    addi r3, r3, .LCPI0_0@toc@l
21; CHECK-LE-P9-NEXT:    lxv vs0, 0(r3)
22; CHECK-LE-P9-NEXT:    xxperm v4, v3, vs0
23; CHECK-LE-P9-NEXT:    vaddubm v2, v4, v3
24; CHECK-LE-P9-NEXT:    blr
25;
26; CHECK-BE-P9-LABEL: test1:
27; CHECK-BE-P9:       # %bb.0: # %entry
28; CHECK-BE-P9-NEXT:    addis r3, r2, .LCPI0_0@toc@ha
29; CHECK-BE-P9-NEXT:    addi r3, r3, .LCPI0_0@toc@l
30; CHECK-BE-P9-NEXT:    lxv vs0, 0(r3)
31; CHECK-BE-P9-NEXT:    xxperm v4, v3, vs0
32; CHECK-BE-P9-NEXT:    vaddubm v2, v4, v3
33; CHECK-BE-P9-NEXT:    blr
34;
35; CHECK-AIX-64-P9-LABEL: test1:
36; CHECK-AIX-64-P9:       # %bb.0: # %entry
37; CHECK-AIX-64-P9-NEXT:    ld r3, L..C0(r2) # %const.0
38; CHECK-AIX-64-P9-NEXT:    lxv vs0, 0(r3)
39; CHECK-AIX-64-P9-NEXT:    xxperm v4, v3, vs0
40; CHECK-AIX-64-P9-NEXT:    vaddubm v2, v4, v3
41; CHECK-AIX-64-P9-NEXT:    blr
42;
43; CHECK-AIX-32-P9-LABEL: test1:
44; CHECK-AIX-32-P9:       # %bb.0: # %entry
45; CHECK-AIX-32-P9-NEXT:    lwz r3, L..C0(r2) # %const.0
46; CHECK-AIX-32-P9-NEXT:    lxv vs0, 0(r3)
47; CHECK-AIX-32-P9-NEXT:    xxperm v4, v3, vs0
48; CHECK-AIX-32-P9-NEXT:    vaddubm v2, v4, v3
49; CHECK-AIX-32-P9-NEXT:    blr
50entry:
51  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 1, i32 18, i32 23, i32 12, i32 22, i32 22, i32 22, i32 22, i32 0, i32 0, i32 0, i32 0, i32 9, i32 9, i32 9, i32 9>
52  %add = add <16 x i8> %shuffle, %a
53  ret <16 x i8> %add
54}
55
56; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none) uwtable
57define dso_local noundef <16 x i8> @test2(<16 x i8> noundef %burn, <16 x i8> noundef %a, <16 x i8> noundef %b) local_unnamed_addr #0 {
58; CHECK-LE-P9-LABEL: test2:
59; CHECK-LE-P9:       # %bb.0: # %entry
60; CHECK-LE-P9-NEXT:    addis r3, r2, .LCPI1_0@toc@ha
61; CHECK-LE-P9-NEXT:    addi r3, r3, .LCPI1_0@toc@l
62; CHECK-LE-P9-NEXT:    lxv vs0, 0(r3)
63; CHECK-LE-P9-NEXT:    xxperm v3, v4, vs0
64; CHECK-LE-P9-NEXT:    vaddubm v2, v3, v4
65; CHECK-LE-P9-NEXT:    blr
66;
67; CHECK-BE-P9-LABEL: test2:
68; CHECK-BE-P9:       # %bb.0: # %entry
69; CHECK-BE-P9-NEXT:    addis r3, r2, .LCPI1_0@toc@ha
70; CHECK-BE-P9-NEXT:    addi r3, r3, .LCPI1_0@toc@l
71; CHECK-BE-P9-NEXT:    lxv vs0, 0(r3)
72; CHECK-BE-P9-NEXT:    xxperm v3, v4, vs0
73; CHECK-BE-P9-NEXT:    vaddubm v2, v3, v4
74; CHECK-BE-P9-NEXT:    blr
75;
76; CHECK-AIX-64-P9-LABEL: test2:
77; CHECK-AIX-64-P9:       # %bb.0: # %entry
78; CHECK-AIX-64-P9-NEXT:    ld r3, L..C1(r2) # %const.0
79; CHECK-AIX-64-P9-NEXT:    lxv vs0, 0(r3)
80; CHECK-AIX-64-P9-NEXT:    xxperm v3, v4, vs0
81; CHECK-AIX-64-P9-NEXT:    vaddubm v2, v3, v4
82; CHECK-AIX-64-P9-NEXT:    blr
83;
84; CHECK-AIX-32-P9-LABEL: test2:
85; CHECK-AIX-32-P9:       # %bb.0: # %entry
86; CHECK-AIX-32-P9-NEXT:    lwz r3, L..C1(r2) # %const.0
87; CHECK-AIX-32-P9-NEXT:    lxv vs0, 0(r3)
88; CHECK-AIX-32-P9-NEXT:    xxperm v3, v4, vs0
89; CHECK-AIX-32-P9-NEXT:    vaddubm v2, v3, v4
90; CHECK-AIX-32-P9-NEXT:    blr
91entry:
92  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 1, i32 18, i32 23, i32 12, i32 22, i32 22, i32 22, i32 22, i32 0, i32 0, i32 0, i32 0, i32 9, i32 9, i32 9, i32 9>
93  %add = add <16 x i8> %shuffle, %b
94  ret <16 x i8> %add
95}
96
97attributes #0 = {nounwind}
98