1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2 ; RUN: llc -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr -verify-machineinstrs \
3 ; RUN: -mtriple=powerpc64-- -mcpu=pwr7 < %s | FileCheck \
4 ; RUN: --check-prefix=PWR7-BE %s
5 ; RUN: llc -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr -verify-machineinstrs \
6 ; RUN: -mtriple=powerpc64-- -mcpu=pwr8 < %s | FileCheck \
7 ; RUN: --check-prefix=PWR8-BE %s
8 ; RUN: llc -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr -verify-machineinstrs \
9 ; RUN: -mtriple=powerpc64le-- -mcpu=pwr8 < %s | FileCheck \
10 ; RUN: --check-prefix=PWR8-LE %s
12 define <16 x i8> @i8(ptr nocapture noundef readonly %p) {
14 ; PWR7-BE: # %bb.0: # %entry
15 ; PWR7-BE-NEXT: lxvw4x v3, 0, r3
16 ; PWR7-BE-NEXT: addis r3, r2, .LCPI0_0@toc@ha
17 ; PWR7-BE-NEXT: vspltisb v2, 10
18 ; PWR7-BE-NEXT: addi r3, r3, .LCPI0_0@toc@l
19 ; PWR7-BE-NEXT: lxvw4x v4, 0, r3
20 ; PWR7-BE-NEXT: vperm v2, v3, v2, v4
24 ; PWR8-BE: # %bb.0: # %entry
25 ; PWR8-BE-NEXT: lxvw4x v2, 0, r3
26 ; PWR8-BE-NEXT: addis r3, r2, .LCPI0_0@toc@ha
27 ; PWR8-BE-NEXT: addi r3, r3, .LCPI0_0@toc@l
28 ; PWR8-BE-NEXT: lxvw4x v3, 0, r3
29 ; PWR8-BE-NEXT: li r3, 10
30 ; PWR8-BE-NEXT: mtvsrwz v4, r3
31 ; PWR8-BE-NEXT: vperm v2, v2, v4, v3
35 ; PWR8-LE: # %bb.0: # %entry
36 ; PWR8-LE-NEXT: lxvd2x vs0, 0, r3
37 ; PWR8-LE-NEXT: addis r3, r2, .LCPI0_0@toc@ha
38 ; PWR8-LE-NEXT: addi r3, r3, .LCPI0_0@toc@l
39 ; PWR8-LE-NEXT: xxswapd v2, vs0
40 ; PWR8-LE-NEXT: lxvd2x vs0, 0, r3
41 ; PWR8-LE-NEXT: li r3, 10
42 ; PWR8-LE-NEXT: mtvsrd v4, r3
43 ; PWR8-LE-NEXT: xxswapd v3, vs0
44 ; PWR8-LE-NEXT: vperm v2, v4, v2, v3
47 %0 = load <16 x i8>, ptr %p, align 16
48 %vecinit1 = insertelement <16 x i8> %0, i8 10, i64 1
49 ret <16 x i8> %vecinit1
52 define <8 x i16> @i16(ptr nocapture noundef readonly %p) {
54 ; PWR7-BE: # %bb.0: # %entry
55 ; PWR7-BE-NEXT: lxvw4x v3, 0, r3
56 ; PWR7-BE-NEXT: addis r3, r2, .LCPI1_0@toc@ha
57 ; PWR7-BE-NEXT: vspltish v2, 9
58 ; PWR7-BE-NEXT: addi r3, r3, .LCPI1_0@toc@l
59 ; PWR7-BE-NEXT: lxvw4x v4, 0, r3
60 ; PWR7-BE-NEXT: vperm v2, v3, v2, v4
64 ; PWR8-BE: # %bb.0: # %entry
65 ; PWR8-BE-NEXT: lxvw4x v2, 0, r3
66 ; PWR8-BE-NEXT: addis r3, r2, .LCPI1_0@toc@ha
67 ; PWR8-BE-NEXT: addi r3, r3, .LCPI1_0@toc@l
68 ; PWR8-BE-NEXT: lxvw4x v3, 0, r3
69 ; PWR8-BE-NEXT: li r3, 9
70 ; PWR8-BE-NEXT: mtvsrwz v4, r3
71 ; PWR8-BE-NEXT: vperm v2, v2, v4, v3
75 ; PWR8-LE: # %bb.0: # %entry
76 ; PWR8-LE-NEXT: lxvd2x vs0, 0, r3
77 ; PWR8-LE-NEXT: addis r3, r2, .LCPI1_0@toc@ha
78 ; PWR8-LE-NEXT: addi r3, r3, .LCPI1_0@toc@l
79 ; PWR8-LE-NEXT: xxswapd v2, vs0
80 ; PWR8-LE-NEXT: lxvd2x vs0, 0, r3
81 ; PWR8-LE-NEXT: li r3, 9
82 ; PWR8-LE-NEXT: mtvsrd v4, r3
83 ; PWR8-LE-NEXT: xxswapd v3, vs0
84 ; PWR8-LE-NEXT: vperm v2, v4, v2, v3
87 %0 = load <8 x i16>, ptr %p, align 16
88 %vecinit1 = insertelement <8 x i16> %0, i16 9, i64 1
89 ret <8 x i16> %vecinit1
92 define <4 x i32> @i32(ptr nocapture noundef readonly %p) {
94 ; PWR7-BE: # %bb.0: # %entry
95 ; PWR7-BE-NEXT: lxvw4x v3, 0, r3
96 ; PWR7-BE-NEXT: addis r3, r2, .LCPI2_0@toc@ha
97 ; PWR7-BE-NEXT: vspltisw v2, 7
98 ; PWR7-BE-NEXT: addi r3, r3, .LCPI2_0@toc@l
99 ; PWR7-BE-NEXT: lxvw4x v4, 0, r3
100 ; PWR7-BE-NEXT: vperm v2, v3, v2, v4
103 ; PWR8-BE-LABEL: i32:
104 ; PWR8-BE: # %bb.0: # %entry
105 ; PWR8-BE-NEXT: lxvw4x v2, 0, r3
106 ; PWR8-BE-NEXT: addis r3, r2, .LCPI2_0@toc@ha
107 ; PWR8-BE-NEXT: addi r3, r3, .LCPI2_0@toc@l
108 ; PWR8-BE-NEXT: lxvw4x v3, 0, r3
109 ; PWR8-BE-NEXT: li r3, 7
110 ; PWR8-BE-NEXT: mtvsrwz v4, r3
111 ; PWR8-BE-NEXT: vperm v2, v2, v4, v3
114 ; PWR8-LE-LABEL: i32:
115 ; PWR8-LE: # %bb.0: # %entry
116 ; PWR8-LE-NEXT: lxvd2x vs0, 0, r3
117 ; PWR8-LE-NEXT: addis r3, r2, .LCPI2_0@toc@ha
118 ; PWR8-LE-NEXT: addi r3, r3, .LCPI2_0@toc@l
119 ; PWR8-LE-NEXT: xxswapd v2, vs0
120 ; PWR8-LE-NEXT: lxvd2x vs0, 0, r3
121 ; PWR8-LE-NEXT: li r3, 7
122 ; PWR8-LE-NEXT: mtvsrwz v4, r3
123 ; PWR8-LE-NEXT: xxswapd v3, vs0
124 ; PWR8-LE-NEXT: vperm v2, v4, v2, v3
127 %0 = load <4 x i32>, ptr %p, align 16
128 %vecinit1 = insertelement <4 x i32> %0, i32 7, i64 1
129 ret <4 x i32> %vecinit1
132 define <2 x i64> @i64(ptr nocapture noundef readonly %p) {
133 ; PWR7-BE-LABEL: i64:
134 ; PWR7-BE: # %bb.0: # %entry
135 ; PWR7-BE-NEXT: lxvd2x v2, 0, r3
136 ; PWR7-BE-NEXT: li r3, 10
137 ; PWR7-BE-NEXT: std r3, -16(r1)
138 ; PWR7-BE-NEXT: std r3, -8(r1)
139 ; PWR7-BE-NEXT: addi r3, r1, -16
140 ; PWR7-BE-NEXT: lxvd2x v3, 0, r3
141 ; PWR7-BE-NEXT: xxmrghd v2, v2, v3
144 ; PWR8-BE-LABEL: i64:
145 ; PWR8-BE: # %bb.0: # %entry
146 ; PWR8-BE-NEXT: lxvd2x v2, 0, r3
147 ; PWR8-BE-NEXT: li r3, 10
148 ; PWR8-BE-NEXT: mtfprd f0, r3
149 ; PWR8-BE-NEXT: xxmrghd v2, v2, vs0
152 ; PWR8-LE-LABEL: i64:
153 ; PWR8-LE: # %bb.0: # %entry
154 ; PWR8-LE-NEXT: lxvd2x vs0, 0, r3
155 ; PWR8-LE-NEXT: li r3, 10
156 ; PWR8-LE-NEXT: xxswapd v2, vs0
157 ; PWR8-LE-NEXT: mtfprd f0, r3
158 ; PWR8-LE-NEXT: xxpermdi v2, vs0, v2, 1
161 %0 = load <2 x i64>, ptr %p, align 16
162 %vecinit1 = insertelement <2 x i64> %0, i64 10, i64 1
163 ret <2 x i64> %vecinit1