1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
3; RUN:   -mcpu=pwr10 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
4; RUN:   < %s | FileCheck %s --check-prefixes=CHECK,CHECK-P10
5; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \
6; RUN:   -mcpu=pwr10 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
7; RUN:   < %s | FileCheck %s --check-prefixes=CHECK,CHECK-P10
8; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
9; RUN:   -mcpu=pwr9 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
10; RUN:   < %s | FileCheck %s --check-prefixes=CHECK,CHECK-P9
11; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \
12; RUN:   -mcpu=pwr9 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
13; RUN:   < %s | FileCheck %s --check-prefixes=CHECK,CHECK-P9
14; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
15; RUN:   -mcpu=pwr8 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
16; RUN:   < %s | FileCheck %s --check-prefixes=CHECK-P8-LE
17; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \
18; RUN:   -mcpu=pwr8 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
19; RUN:   < %s | FileCheck %s --check-prefixes=CHECK-P8-BE
20
21; Function Attrs: norecurse nounwind readonly uwtable willreturn
22define dso_local <16 x i8> @ld_0_vector(i64 %ptr) {
23; CHECK-LABEL: ld_0_vector:
24; CHECK:       # %bb.0: # %entry
25; CHECK-NEXT:    lxv v2, 0(r3)
26; CHECK-NEXT:    blr
27;
28; CHECK-P8-LE-LABEL: ld_0_vector:
29; CHECK-P8-LE:       # %bb.0: # %entry
30; CHECK-P8-LE-NEXT:    lvx v2, 0, r3
31; CHECK-P8-LE-NEXT:    blr
32;
33; CHECK-P8-BE-LABEL: ld_0_vector:
34; CHECK-P8-BE:       # %bb.0: # %entry
35; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
36; CHECK-P8-BE-NEXT:    blr
37entry:
38  %0 = inttoptr i64 %ptr to <16 x i8>*
39  %1 = load <16 x i8>, <16 x i8>* %0, align 16
40  ret <16 x i8> %1
41}
42
43; Function Attrs: norecurse nounwind readonly uwtable willreturn
44define dso_local <16 x i8> @ld_unalign16_vector(i8* nocapture readonly %ptr) {
45; CHECK-P10-LABEL: ld_unalign16_vector:
46; CHECK-P10:       # %bb.0: # %entry
47; CHECK-P10-NEXT:    plxv v2, 1(r3), 0
48; CHECK-P10-NEXT:    blr
49;
50; CHECK-P9-LABEL: ld_unalign16_vector:
51; CHECK-P9:       # %bb.0: # %entry
52; CHECK-P9-NEXT:    li r4, 1
53; CHECK-P9-NEXT:    lxvx v2, r3, r4
54; CHECK-P9-NEXT:    blr
55;
56; CHECK-P8-LE-LABEL: ld_unalign16_vector:
57; CHECK-P8-LE:       # %bb.0: # %entry
58; CHECK-P8-LE-NEXT:    addi r3, r3, 1
59; CHECK-P8-LE-NEXT:    lvx v2, 0, r3
60; CHECK-P8-LE-NEXT:    blr
61;
62; CHECK-P8-BE-LABEL: ld_unalign16_vector:
63; CHECK-P8-BE:       # %bb.0: # %entry
64; CHECK-P8-BE-NEXT:    addi r3, r3, 1
65; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
66; CHECK-P8-BE-NEXT:    blr
67entry:
68  %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1
69  %0 = bitcast i8* %add.ptr to <16 x i8>*
70  %1 = load <16 x i8>, <16 x i8>* %0, align 16
71  ret <16 x i8> %1
72}
73
74; Function Attrs: norecurse nounwind readonly uwtable willreturn
75define dso_local <16 x i8> @ld_align16_vector(i8* nocapture readonly %ptr) {
76; CHECK-P10-LABEL: ld_align16_vector:
77; CHECK-P10:       # %bb.0: # %entry
78; CHECK-P10-NEXT:    plxv v2, 8(r3), 0
79; CHECK-P10-NEXT:    blr
80;
81; CHECK-P9-LABEL: ld_align16_vector:
82; CHECK-P9:       # %bb.0: # %entry
83; CHECK-P9-NEXT:    li r4, 8
84; CHECK-P9-NEXT:    lxvx v2, r3, r4
85; CHECK-P9-NEXT:    blr
86;
87; CHECK-P8-LE-LABEL: ld_align16_vector:
88; CHECK-P8-LE:       # %bb.0: # %entry
89; CHECK-P8-LE-NEXT:    addi r3, r3, 8
90; CHECK-P8-LE-NEXT:    lvx v2, 0, r3
91; CHECK-P8-LE-NEXT:    blr
92;
93; CHECK-P8-BE-LABEL: ld_align16_vector:
94; CHECK-P8-BE:       # %bb.0: # %entry
95; CHECK-P8-BE-NEXT:    addi r3, r3, 8
96; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
97; CHECK-P8-BE-NEXT:    blr
98entry:
99  %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 8
100  %0 = bitcast i8* %add.ptr to <16 x i8>*
101  %1 = load <16 x i8>, <16 x i8>* %0, align 16
102  ret <16 x i8> %1
103}
104
105; Function Attrs: norecurse nounwind readonly uwtable willreturn
106define dso_local <16 x i8> @ld_unalign32_vector(i8* nocapture readonly %ptr) {
107; CHECK-P10-LABEL: ld_unalign32_vector:
108; CHECK-P10:       # %bb.0: # %entry
109; CHECK-P10-NEXT:    plxv v2, 99999(r3), 0
110; CHECK-P10-NEXT:    blr
111;
112; CHECK-P9-LABEL: ld_unalign32_vector:
113; CHECK-P9:       # %bb.0: # %entry
114; CHECK-P9-NEXT:    lis r4, 1
115; CHECK-P9-NEXT:    ori r4, r4, 34463
116; CHECK-P9-NEXT:    lxvx v2, r3, r4
117; CHECK-P9-NEXT:    blr
118;
119; CHECK-P8-LE-LABEL: ld_unalign32_vector:
120; CHECK-P8-LE:       # %bb.0: # %entry
121; CHECK-P8-LE-NEXT:    lis r4, 1
122; CHECK-P8-LE-NEXT:    ori r4, r4, 34463
123; CHECK-P8-LE-NEXT:    lvx v2, r3, r4
124; CHECK-P8-LE-NEXT:    blr
125;
126; CHECK-P8-BE-LABEL: ld_unalign32_vector:
127; CHECK-P8-BE:       # %bb.0: # %entry
128; CHECK-P8-BE-NEXT:    lis r4, 1
129; CHECK-P8-BE-NEXT:    ori r4, r4, 34463
130; CHECK-P8-BE-NEXT:    lxvw4x v2, r3, r4
131; CHECK-P8-BE-NEXT:    blr
132entry:
133  %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 99999
134  %0 = bitcast i8* %add.ptr to <16 x i8>*
135  %1 = load <16 x i8>, <16 x i8>* %0, align 16
136  ret <16 x i8> %1
137}
138
139; Function Attrs: norecurse nounwind readonly uwtable willreturn
140define dso_local <16 x i8> @ld_align32_vector(i8* nocapture readonly %ptr) {
141; CHECK-P10-LABEL: ld_align32_vector:
142; CHECK-P10:       # %bb.0: # %entry
143; CHECK-P10-NEXT:    plxv v2, 99999000(r3), 0
144; CHECK-P10-NEXT:    blr
145;
146; CHECK-P9-LABEL: ld_align32_vector:
147; CHECK-P9:       # %bb.0: # %entry
148; CHECK-P9-NEXT:    lis r4, 1525
149; CHECK-P9-NEXT:    ori r4, r4, 56600
150; CHECK-P9-NEXT:    lxvx v2, r3, r4
151; CHECK-P9-NEXT:    blr
152;
153; CHECK-P8-LE-LABEL: ld_align32_vector:
154; CHECK-P8-LE:       # %bb.0: # %entry
155; CHECK-P8-LE-NEXT:    lis r4, 1525
156; CHECK-P8-LE-NEXT:    ori r4, r4, 56600
157; CHECK-P8-LE-NEXT:    lvx v2, r3, r4
158; CHECK-P8-LE-NEXT:    blr
159;
160; CHECK-P8-BE-LABEL: ld_align32_vector:
161; CHECK-P8-BE:       # %bb.0: # %entry
162; CHECK-P8-BE-NEXT:    lis r4, 1525
163; CHECK-P8-BE-NEXT:    ori r4, r4, 56600
164; CHECK-P8-BE-NEXT:    lxvw4x v2, r3, r4
165; CHECK-P8-BE-NEXT:    blr
166entry:
167  %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 99999000
168  %0 = bitcast i8* %add.ptr to <16 x i8>*
169  %1 = load <16 x i8>, <16 x i8>* %0, align 16
170  ret <16 x i8> %1
171}
172
173; Function Attrs: norecurse nounwind readonly uwtable willreturn
174define dso_local <16 x i8> @ld_unalign64_vector(i8* nocapture readonly %ptr) {
175; CHECK-P10-LABEL: ld_unalign64_vector:
176; CHECK-P10:       # %bb.0: # %entry
177; CHECK-P10-NEXT:    pli r4, 232
178; CHECK-P10-NEXT:    pli r5, 3567587329
179; CHECK-P10-NEXT:    rldimi r5, r4, 32, 0
180; CHECK-P10-NEXT:    lxvx v2, r3, r5
181; CHECK-P10-NEXT:    blr
182;
183; CHECK-P9-LABEL: ld_unalign64_vector:
184; CHECK-P9:       # %bb.0: # %entry
185; CHECK-P9-NEXT:    li r4, 29
186; CHECK-P9-NEXT:    rldic r4, r4, 35, 24
187; CHECK-P9-NEXT:    oris r4, r4, 54437
188; CHECK-P9-NEXT:    ori r4, r4, 4097
189; CHECK-P9-NEXT:    lxvx v2, r3, r4
190; CHECK-P9-NEXT:    blr
191;
192; CHECK-P8-LE-LABEL: ld_unalign64_vector:
193; CHECK-P8-LE:       # %bb.0: # %entry
194; CHECK-P8-LE-NEXT:    li r4, 29
195; CHECK-P8-LE-NEXT:    rldic r4, r4, 35, 24
196; CHECK-P8-LE-NEXT:    oris r4, r4, 54437
197; CHECK-P8-LE-NEXT:    ori r4, r4, 4097
198; CHECK-P8-LE-NEXT:    lvx v2, r3, r4
199; CHECK-P8-LE-NEXT:    blr
200;
201; CHECK-P8-BE-LABEL: ld_unalign64_vector:
202; CHECK-P8-BE:       # %bb.0: # %entry
203; CHECK-P8-BE-NEXT:    li r4, 29
204; CHECK-P8-BE-NEXT:    rldic r4, r4, 35, 24
205; CHECK-P8-BE-NEXT:    oris r4, r4, 54437
206; CHECK-P8-BE-NEXT:    ori r4, r4, 4097
207; CHECK-P8-BE-NEXT:    lxvw4x v2, r3, r4
208; CHECK-P8-BE-NEXT:    blr
209entry:
210  %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1000000000001
211  %0 = bitcast i8* %add.ptr to <16 x i8>*
212  %1 = load <16 x i8>, <16 x i8>* %0, align 16
213  ret <16 x i8> %1
214}
215
216; Function Attrs: norecurse nounwind readonly uwtable willreturn
217define dso_local <16 x i8> @ld_align64_vector(i8* nocapture readonly %ptr) {
218; CHECK-P10-LABEL: ld_align64_vector:
219; CHECK-P10:       # %bb.0: # %entry
220; CHECK-P10-NEXT:    pli r4, 244140625
221; CHECK-P10-NEXT:    rldic r4, r4, 12, 24
222; CHECK-P10-NEXT:    lxvx v2, r3, r4
223; CHECK-P10-NEXT:    blr
224;
225; CHECK-P9-LABEL: ld_align64_vector:
226; CHECK-P9:       # %bb.0: # %entry
227; CHECK-P9-NEXT:    lis r4, 3725
228; CHECK-P9-NEXT:    ori r4, r4, 19025
229; CHECK-P9-NEXT:    rldic r4, r4, 12, 24
230; CHECK-P9-NEXT:    lxvx v2, r3, r4
231; CHECK-P9-NEXT:    blr
232;
233; CHECK-P8-LE-LABEL: ld_align64_vector:
234; CHECK-P8-LE:       # %bb.0: # %entry
235; CHECK-P8-LE-NEXT:    lis r4, 3725
236; CHECK-P8-LE-NEXT:    ori r4, r4, 19025
237; CHECK-P8-LE-NEXT:    rldic r4, r4, 12, 24
238; CHECK-P8-LE-NEXT:    lvx v2, r3, r4
239; CHECK-P8-LE-NEXT:    blr
240;
241; CHECK-P8-BE-LABEL: ld_align64_vector:
242; CHECK-P8-BE:       # %bb.0: # %entry
243; CHECK-P8-BE-NEXT:    lis r4, 3725
244; CHECK-P8-BE-NEXT:    ori r4, r4, 19025
245; CHECK-P8-BE-NEXT:    rldic r4, r4, 12, 24
246; CHECK-P8-BE-NEXT:    lxvw4x v2, r3, r4
247; CHECK-P8-BE-NEXT:    blr
248entry:
249  %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1000000000000
250  %0 = bitcast i8* %add.ptr to <16 x i8>*
251  %1 = load <16 x i8>, <16 x i8>* %0, align 16
252  ret <16 x i8> %1
253}
254
255; Function Attrs: norecurse nounwind readonly uwtable willreturn
256define dso_local <16 x i8> @ld_reg_vector(i8* nocapture readonly %ptr, i64 %off) {
257; CHECK-LABEL: ld_reg_vector:
258; CHECK:       # %bb.0: # %entry
259; CHECK-NEXT:    lxvx v2, r3, r4
260; CHECK-NEXT:    blr
261;
262; CHECK-P8-LE-LABEL: ld_reg_vector:
263; CHECK-P8-LE:       # %bb.0: # %entry
264; CHECK-P8-LE-NEXT:    lvx v2, r3, r4
265; CHECK-P8-LE-NEXT:    blr
266;
267; CHECK-P8-BE-LABEL: ld_reg_vector:
268; CHECK-P8-BE:       # %bb.0: # %entry
269; CHECK-P8-BE-NEXT:    lxvw4x v2, r3, r4
270; CHECK-P8-BE-NEXT:    blr
271entry:
272  %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 %off
273  %0 = bitcast i8* %add.ptr to <16 x i8>*
274  %1 = load <16 x i8>, <16 x i8>* %0, align 16
275  ret <16 x i8> %1
276}
277
278; Function Attrs: norecurse nounwind readonly uwtable willreturn
279define dso_local <16 x i8> @ld_or_vector(i64 %ptr, i8 zeroext %off) {
280; CHECK-LABEL: ld_or_vector:
281; CHECK:       # %bb.0: # %entry
282; CHECK-NEXT:    or r3, r4, r3
283; CHECK-NEXT:    lxv v2, 0(r3)
284; CHECK-NEXT:    blr
285;
286; CHECK-P8-LE-LABEL: ld_or_vector:
287; CHECK-P8-LE:       # %bb.0: # %entry
288; CHECK-P8-LE-NEXT:    or r3, r4, r3
289; CHECK-P8-LE-NEXT:    lvx v2, 0, r3
290; CHECK-P8-LE-NEXT:    blr
291;
292; CHECK-P8-BE-LABEL: ld_or_vector:
293; CHECK-P8-BE:       # %bb.0: # %entry
294; CHECK-P8-BE-NEXT:    or r3, r4, r3
295; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
296; CHECK-P8-BE-NEXT:    blr
297entry:
298  %conv = zext i8 %off to i64
299  %or = or i64 %conv, %ptr
300  %0 = inttoptr i64 %or to <16 x i8>*
301  %1 = load <16 x i8>, <16 x i8>* %0, align 16
302  ret <16 x i8> %1
303}
304
305; Function Attrs: norecurse nounwind readonly uwtable willreturn
306define dso_local <16 x i8> @ld_or2_vector(i64 %ptr, i8 zeroext %off) {
307; CHECK-LABEL: ld_or2_vector:
308; CHECK:       # %bb.0: # %entry
309; CHECK-NEXT:    rldicr r3, r3, 0, 51
310; CHECK-NEXT:    lxvx v2, r3, r4
311; CHECK-NEXT:    blr
312;
313; CHECK-P8-LE-LABEL: ld_or2_vector:
314; CHECK-P8-LE:       # %bb.0: # %entry
315; CHECK-P8-LE-NEXT:    rldicr r3, r3, 0, 51
316; CHECK-P8-LE-NEXT:    lvx v2, r3, r4
317; CHECK-P8-LE-NEXT:    blr
318;
319; CHECK-P8-BE-LABEL: ld_or2_vector:
320; CHECK-P8-BE:       # %bb.0: # %entry
321; CHECK-P8-BE-NEXT:    rldicr r3, r3, 0, 51
322; CHECK-P8-BE-NEXT:    lxvw4x v2, r3, r4
323; CHECK-P8-BE-NEXT:    blr
324entry:
325  %and = and i64 %ptr, -4096
326  %conv = zext i8 %off to i64
327  %or = or i64 %and, %conv
328  %0 = inttoptr i64 %or to <16 x i8>*
329  %1 = load <16 x i8>, <16 x i8>* %0, align 16
330  ret <16 x i8> %1
331}
332
333; Function Attrs: norecurse nounwind readonly uwtable willreturn
334define dso_local <16 x i8> @ld_not_disjoint16_vector(i64 %ptr) {
335; CHECK-LABEL: ld_not_disjoint16_vector:
336; CHECK:       # %bb.0: # %entry
337; CHECK-NEXT:    ori r3, r3, 6
338; CHECK-NEXT:    lxv v2, 0(r3)
339; CHECK-NEXT:    blr
340;
341; CHECK-P8-LE-LABEL: ld_not_disjoint16_vector:
342; CHECK-P8-LE:       # %bb.0: # %entry
343; CHECK-P8-LE-NEXT:    ori r3, r3, 6
344; CHECK-P8-LE-NEXT:    lvx v2, 0, r3
345; CHECK-P8-LE-NEXT:    blr
346;
347; CHECK-P8-BE-LABEL: ld_not_disjoint16_vector:
348; CHECK-P8-BE:       # %bb.0: # %entry
349; CHECK-P8-BE-NEXT:    ori r3, r3, 6
350; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
351; CHECK-P8-BE-NEXT:    blr
352entry:
353  %or = or i64 %ptr, 6
354  %0 = inttoptr i64 %or to <16 x i8>*
355  %1 = load <16 x i8>, <16 x i8>* %0, align 16
356  ret <16 x i8> %1
357}
358
359; Function Attrs: norecurse nounwind readonly uwtable willreturn
360define dso_local <16 x i8> @ld_disjoint_unalign16_vector(i64 %ptr) {
361; CHECK-P10-LABEL: ld_disjoint_unalign16_vector:
362; CHECK-P10:       # %bb.0: # %entry
363; CHECK-P10-NEXT:    rldicr r3, r3, 0, 51
364; CHECK-P10-NEXT:    plxv v2, 6(r3), 0
365; CHECK-P10-NEXT:    blr
366;
367; CHECK-P9-LABEL: ld_disjoint_unalign16_vector:
368; CHECK-P9:       # %bb.0: # %entry
369; CHECK-P9-NEXT:    rldicr r3, r3, 0, 51
370; CHECK-P9-NEXT:    li r4, 6
371; CHECK-P9-NEXT:    lxvx v2, r3, r4
372; CHECK-P9-NEXT:    blr
373;
374; CHECK-P8-LE-LABEL: ld_disjoint_unalign16_vector:
375; CHECK-P8-LE:       # %bb.0: # %entry
376; CHECK-P8-LE-NEXT:    rldicr r3, r3, 0, 51
377; CHECK-P8-LE-NEXT:    ori r3, r3, 6
378; CHECK-P8-LE-NEXT:    lvx v2, 0, r3
379; CHECK-P8-LE-NEXT:    blr
380;
381; CHECK-P8-BE-LABEL: ld_disjoint_unalign16_vector:
382; CHECK-P8-BE:       # %bb.0: # %entry
383; CHECK-P8-BE-NEXT:    rldicr r3, r3, 0, 51
384; CHECK-P8-BE-NEXT:    ori r3, r3, 6
385; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
386; CHECK-P8-BE-NEXT:    blr
387entry:
388  %and = and i64 %ptr, -4096
389  %or = or i64 %and, 6
390  %0 = inttoptr i64 %or to <16 x i8>*
391  %1 = load <16 x i8>, <16 x i8>* %0, align 16
392  ret <16 x i8> %1
393}
394
395; Function Attrs: norecurse nounwind readonly uwtable willreturn
396define dso_local <16 x i8> @ld_disjoint_align16_vector(i64 %ptr) {
397; CHECK-P10-LABEL: ld_disjoint_align16_vector:
398; CHECK-P10:       # %bb.0: # %entry
399; CHECK-P10-NEXT:    rldicr r3, r3, 0, 51
400; CHECK-P10-NEXT:    plxv v2, 24(r3), 0
401; CHECK-P10-NEXT:    blr
402;
403; CHECK-P9-LABEL: ld_disjoint_align16_vector:
404; CHECK-P9:       # %bb.0: # %entry
405; CHECK-P9-NEXT:    rldicr r3, r3, 0, 51
406; CHECK-P9-NEXT:    li r4, 24
407; CHECK-P9-NEXT:    lxvx v2, r3, r4
408; CHECK-P9-NEXT:    blr
409;
410; CHECK-P8-LE-LABEL: ld_disjoint_align16_vector:
411; CHECK-P8-LE:       # %bb.0: # %entry
412; CHECK-P8-LE-NEXT:    rldicr r3, r3, 0, 51
413; CHECK-P8-LE-NEXT:    ori r3, r3, 24
414; CHECK-P8-LE-NEXT:    lvx v2, 0, r3
415; CHECK-P8-LE-NEXT:    blr
416;
417; CHECK-P8-BE-LABEL: ld_disjoint_align16_vector:
418; CHECK-P8-BE:       # %bb.0: # %entry
419; CHECK-P8-BE-NEXT:    rldicr r3, r3, 0, 51
420; CHECK-P8-BE-NEXT:    ori r3, r3, 24
421; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
422; CHECK-P8-BE-NEXT:    blr
423entry:
424  %and = and i64 %ptr, -4096
425  %or = or i64 %and, 24
426  %0 = inttoptr i64 %or to <16 x i8>*
427  %1 = load <16 x i8>, <16 x i8>* %0, align 16
428  ret <16 x i8> %1
429}
430
431; Function Attrs: norecurse nounwind readonly uwtable willreturn
432define dso_local <16 x i8> @ld_not_disjoint32_vector(i64 %ptr) {
433; CHECK-LABEL: ld_not_disjoint32_vector:
434; CHECK:       # %bb.0: # %entry
435; CHECK-NEXT:    ori r3, r3, 34463
436; CHECK-NEXT:    oris r3, r3, 1
437; CHECK-NEXT:    lxv v2, 0(r3)
438; CHECK-NEXT:    blr
439;
440; CHECK-P8-LE-LABEL: ld_not_disjoint32_vector:
441; CHECK-P8-LE:       # %bb.0: # %entry
442; CHECK-P8-LE-NEXT:    ori r3, r3, 34463
443; CHECK-P8-LE-NEXT:    oris r3, r3, 1
444; CHECK-P8-LE-NEXT:    lvx v2, 0, r3
445; CHECK-P8-LE-NEXT:    blr
446;
447; CHECK-P8-BE-LABEL: ld_not_disjoint32_vector:
448; CHECK-P8-BE:       # %bb.0: # %entry
449; CHECK-P8-BE-NEXT:    ori r3, r3, 34463
450; CHECK-P8-BE-NEXT:    oris r3, r3, 1
451; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
452; CHECK-P8-BE-NEXT:    blr
453entry:
454  %or = or i64 %ptr, 99999
455  %0 = inttoptr i64 %or to <16 x i8>*
456  %1 = load <16 x i8>, <16 x i8>* %0, align 16
457  ret <16 x i8> %1
458}
459
460; Function Attrs: norecurse nounwind readonly uwtable willreturn
461define dso_local <16 x i8> @ld_disjoint_unalign32_vector(i64 %ptr) {
462; CHECK-P10-LABEL: ld_disjoint_unalign32_vector:
463; CHECK-P10:       # %bb.0: # %entry
464; CHECK-P10-NEXT:    rldicr r3, r3, 0, 43
465; CHECK-P10-NEXT:    plxv v2, 99999(r3), 0
466; CHECK-P10-NEXT:    blr
467;
468; CHECK-P9-LABEL: ld_disjoint_unalign32_vector:
469; CHECK-P9:       # %bb.0: # %entry
470; CHECK-P9-NEXT:    lis r4, 1
471; CHECK-P9-NEXT:    rldicr r3, r3, 0, 43
472; CHECK-P9-NEXT:    ori r4, r4, 34463
473; CHECK-P9-NEXT:    lxvx v2, r3, r4
474; CHECK-P9-NEXT:    blr
475;
476; CHECK-P8-LE-LABEL: ld_disjoint_unalign32_vector:
477; CHECK-P8-LE:       # %bb.0: # %entry
478; CHECK-P8-LE-NEXT:    lis r4, 1
479; CHECK-P8-LE-NEXT:    rldicr r3, r3, 0, 43
480; CHECK-P8-LE-NEXT:    ori r4, r4, 34463
481; CHECK-P8-LE-NEXT:    lvx v2, r3, r4
482; CHECK-P8-LE-NEXT:    blr
483;
484; CHECK-P8-BE-LABEL: ld_disjoint_unalign32_vector:
485; CHECK-P8-BE:       # %bb.0: # %entry
486; CHECK-P8-BE-NEXT:    lis r4, 1
487; CHECK-P8-BE-NEXT:    rldicr r3, r3, 0, 43
488; CHECK-P8-BE-NEXT:    ori r4, r4, 34463
489; CHECK-P8-BE-NEXT:    lxvw4x v2, r3, r4
490; CHECK-P8-BE-NEXT:    blr
491entry:
492  %and = and i64 %ptr, -1048576
493  %or = or i64 %and, 99999
494  %0 = inttoptr i64 %or to <16 x i8>*
495  %1 = load <16 x i8>, <16 x i8>* %0, align 16
496  ret <16 x i8> %1
497}
498
499; Function Attrs: norecurse nounwind readonly uwtable willreturn
500define dso_local <16 x i8> @ld_disjoint_align32_vector(i64 %ptr) {
501; CHECK-P10-LABEL: ld_disjoint_align32_vector:
502; CHECK-P10:       # %bb.0: # %entry
503; CHECK-P10-NEXT:    lis r4, -15264
504; CHECK-P10-NEXT:    and r3, r3, r4
505; CHECK-P10-NEXT:    plxv v2, 999990000(r3), 0
506; CHECK-P10-NEXT:    blr
507;
508; CHECK-P9-LABEL: ld_disjoint_align32_vector:
509; CHECK-P9:       # %bb.0: # %entry
510; CHECK-P9-NEXT:    lis r4, -15264
511; CHECK-P9-NEXT:    and r3, r3, r4
512; CHECK-P9-NEXT:    lis r4, 15258
513; CHECK-P9-NEXT:    ori r4, r4, 41712
514; CHECK-P9-NEXT:    lxvx v2, r3, r4
515; CHECK-P9-NEXT:    blr
516;
517; CHECK-P8-LE-LABEL: ld_disjoint_align32_vector:
518; CHECK-P8-LE:       # %bb.0: # %entry
519; CHECK-P8-LE-NEXT:    lis r4, -15264
520; CHECK-P8-LE-NEXT:    lis r5, 15258
521; CHECK-P8-LE-NEXT:    and r3, r3, r4
522; CHECK-P8-LE-NEXT:    ori r4, r5, 41712
523; CHECK-P8-LE-NEXT:    lvx v2, r3, r4
524; CHECK-P8-LE-NEXT:    blr
525;
526; CHECK-P8-BE-LABEL: ld_disjoint_align32_vector:
527; CHECK-P8-BE:       # %bb.0: # %entry
528; CHECK-P8-BE-NEXT:    lis r4, -15264
529; CHECK-P8-BE-NEXT:    lis r5, 15258
530; CHECK-P8-BE-NEXT:    and r3, r3, r4
531; CHECK-P8-BE-NEXT:    ori r4, r5, 41712
532; CHECK-P8-BE-NEXT:    lxvw4x v2, r3, r4
533; CHECK-P8-BE-NEXT:    blr
534entry:
535  %and = and i64 %ptr, -1000341504
536  %or = or i64 %and, 999990000
537  %0 = inttoptr i64 %or to <16 x i8>*
538  %1 = load <16 x i8>, <16 x i8>* %0, align 16
539  ret <16 x i8> %1
540}
541
542; Function Attrs: norecurse nounwind readonly uwtable willreturn
543define dso_local <16 x i8> @ld_not_disjoint64_vector(i64 %ptr) {
544; CHECK-P10-LABEL: ld_not_disjoint64_vector:
545; CHECK-P10:       # %bb.0: # %entry
546; CHECK-P10-NEXT:    pli r4, 232
547; CHECK-P10-NEXT:    pli r5, 3567587329
548; CHECK-P10-NEXT:    rldimi r5, r4, 32, 0
549; CHECK-P10-NEXT:    or r3, r3, r5
550; CHECK-P10-NEXT:    lxv v2, 0(r3)
551; CHECK-P10-NEXT:    blr
552;
553; CHECK-P9-LABEL: ld_not_disjoint64_vector:
554; CHECK-P9:       # %bb.0: # %entry
555; CHECK-P9-NEXT:    li r4, 29
556; CHECK-P9-NEXT:    rldic r4, r4, 35, 24
557; CHECK-P9-NEXT:    oris r4, r4, 54437
558; CHECK-P9-NEXT:    ori r4, r4, 4097
559; CHECK-P9-NEXT:    or r3, r3, r4
560; CHECK-P9-NEXT:    lxv v2, 0(r3)
561; CHECK-P9-NEXT:    blr
562;
563; CHECK-P8-LE-LABEL: ld_not_disjoint64_vector:
564; CHECK-P8-LE:       # %bb.0: # %entry
565; CHECK-P8-LE-NEXT:    li r4, 29
566; CHECK-P8-LE-NEXT:    rldic r4, r4, 35, 24
567; CHECK-P8-LE-NEXT:    oris r4, r4, 54437
568; CHECK-P8-LE-NEXT:    ori r4, r4, 4097
569; CHECK-P8-LE-NEXT:    or r3, r3, r4
570; CHECK-P8-LE-NEXT:    lvx v2, 0, r3
571; CHECK-P8-LE-NEXT:    blr
572;
573; CHECK-P8-BE-LABEL: ld_not_disjoint64_vector:
574; CHECK-P8-BE:       # %bb.0: # %entry
575; CHECK-P8-BE-NEXT:    li r4, 29
576; CHECK-P8-BE-NEXT:    rldic r4, r4, 35, 24
577; CHECK-P8-BE-NEXT:    oris r4, r4, 54437
578; CHECK-P8-BE-NEXT:    ori r4, r4, 4097
579; CHECK-P8-BE-NEXT:    or r3, r3, r4
580; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
581; CHECK-P8-BE-NEXT:    blr
582entry:
583  %or = or i64 %ptr, 1000000000001
584  %0 = inttoptr i64 %or to <16 x i8>*
585  %1 = load <16 x i8>, <16 x i8>* %0, align 16
586  ret <16 x i8> %1
587}
588
589; Function Attrs: norecurse nounwind readonly uwtable willreturn
590define dso_local <16 x i8> @ld_disjoint_unalign64_vector(i64 %ptr) {
591; CHECK-P10-LABEL: ld_disjoint_unalign64_vector:
592; CHECK-P10:       # %bb.0: # %entry
593; CHECK-P10-NEXT:    pli r4, 232
594; CHECK-P10-NEXT:    pli r5, 3567587329
595; CHECK-P10-NEXT:    rldicr r3, r3, 0, 23
596; CHECK-P10-NEXT:    rldimi r5, r4, 32, 0
597; CHECK-P10-NEXT:    lxvx v2, r3, r5
598; CHECK-P10-NEXT:    blr
599;
600; CHECK-P9-LABEL: ld_disjoint_unalign64_vector:
601; CHECK-P9:       # %bb.0: # %entry
602; CHECK-P9-NEXT:    li r4, 29
603; CHECK-P9-NEXT:    rldicr r3, r3, 0, 23
604; CHECK-P9-NEXT:    rldic r4, r4, 35, 24
605; CHECK-P9-NEXT:    oris r4, r4, 54437
606; CHECK-P9-NEXT:    ori r4, r4, 4097
607; CHECK-P9-NEXT:    lxvx v2, r3, r4
608; CHECK-P9-NEXT:    blr
609;
610; CHECK-P8-LE-LABEL: ld_disjoint_unalign64_vector:
611; CHECK-P8-LE:       # %bb.0: # %entry
612; CHECK-P8-LE-NEXT:    li r4, 29
613; CHECK-P8-LE-NEXT:    rldicr r3, r3, 0, 23
614; CHECK-P8-LE-NEXT:    rldic r4, r4, 35, 24
615; CHECK-P8-LE-NEXT:    oris r4, r4, 54437
616; CHECK-P8-LE-NEXT:    ori r4, r4, 4097
617; CHECK-P8-LE-NEXT:    lvx v2, r3, r4
618; CHECK-P8-LE-NEXT:    blr
619;
620; CHECK-P8-BE-LABEL: ld_disjoint_unalign64_vector:
621; CHECK-P8-BE:       # %bb.0: # %entry
622; CHECK-P8-BE-NEXT:    li r4, 29
623; CHECK-P8-BE-NEXT:    rldicr r3, r3, 0, 23
624; CHECK-P8-BE-NEXT:    rldic r4, r4, 35, 24
625; CHECK-P8-BE-NEXT:    oris r4, r4, 54437
626; CHECK-P8-BE-NEXT:    ori r4, r4, 4097
627; CHECK-P8-BE-NEXT:    lxvw4x v2, r3, r4
628; CHECK-P8-BE-NEXT:    blr
629entry:
630  %and = and i64 %ptr, -1099511627776
631  %or = or i64 %and, 1000000000001
632  %0 = inttoptr i64 %or to <16 x i8>*
633  %1 = load <16 x i8>, <16 x i8>* %0, align 16
634  ret <16 x i8> %1
635}
636
637; Function Attrs: norecurse nounwind readonly uwtable willreturn
638define dso_local <16 x i8> @ld_disjoint_align64_vector(i64 %ptr) {
639; CHECK-P10-LABEL: ld_disjoint_align64_vector:
640; CHECK-P10:       # %bb.0: # %entry
641; CHECK-P10-NEXT:    pli r4, 244140625
642; CHECK-P10-NEXT:    rldicr r3, r3, 0, 23
643; CHECK-P10-NEXT:    rldic r4, r4, 12, 24
644; CHECK-P10-NEXT:    lxvx v2, r3, r4
645; CHECK-P10-NEXT:    blr
646;
647; CHECK-P9-LABEL: ld_disjoint_align64_vector:
648; CHECK-P9:       # %bb.0: # %entry
649; CHECK-P9-NEXT:    lis r4, 3725
650; CHECK-P9-NEXT:    rldicr r3, r3, 0, 23
651; CHECK-P9-NEXT:    ori r4, r4, 19025
652; CHECK-P9-NEXT:    rldic r4, r4, 12, 24
653; CHECK-P9-NEXT:    lxvx v2, r3, r4
654; CHECK-P9-NEXT:    blr
655;
656; CHECK-P8-LE-LABEL: ld_disjoint_align64_vector:
657; CHECK-P8-LE:       # %bb.0: # %entry
658; CHECK-P8-LE-NEXT:    lis r4, 3725
659; CHECK-P8-LE-NEXT:    rldicr r3, r3, 0, 23
660; CHECK-P8-LE-NEXT:    ori r4, r4, 19025
661; CHECK-P8-LE-NEXT:    rldic r4, r4, 12, 24
662; CHECK-P8-LE-NEXT:    lvx v2, r3, r4
663; CHECK-P8-LE-NEXT:    blr
664;
665; CHECK-P8-BE-LABEL: ld_disjoint_align64_vector:
666; CHECK-P8-BE:       # %bb.0: # %entry
667; CHECK-P8-BE-NEXT:    lis r4, 3725
668; CHECK-P8-BE-NEXT:    rldicr r3, r3, 0, 23
669; CHECK-P8-BE-NEXT:    ori r4, r4, 19025
670; CHECK-P8-BE-NEXT:    rldic r4, r4, 12, 24
671; CHECK-P8-BE-NEXT:    lxvw4x v2, r3, r4
672; CHECK-P8-BE-NEXT:    blr
673entry:
674  %and = and i64 %ptr, -1099511627776
675  %or = or i64 %and, 1000000000000
676  %0 = inttoptr i64 %or to <16 x i8>*
677  %1 = load <16 x i8>, <16 x i8>* %0, align 4096
678  ret <16 x i8> %1
679}
680
681; Function Attrs: norecurse nounwind readonly uwtable willreturn
682define dso_local <16 x i8> @ld_cst_unalign16_vector() {
683; CHECK-LABEL: ld_cst_unalign16_vector:
684; CHECK:       # %bb.0: # %entry
685; CHECK-NEXT:    li r3, 255
686; CHECK-NEXT:    lxv v2, 0(r3)
687; CHECK-NEXT:    blr
688;
689; CHECK-P8-LE-LABEL: ld_cst_unalign16_vector:
690; CHECK-P8-LE:       # %bb.0: # %entry
691; CHECK-P8-LE-NEXT:    li r3, 255
692; CHECK-P8-LE-NEXT:    lvx v2, 0, r3
693; CHECK-P8-LE-NEXT:    blr
694;
695; CHECK-P8-BE-LABEL: ld_cst_unalign16_vector:
696; CHECK-P8-BE:       # %bb.0: # %entry
697; CHECK-P8-BE-NEXT:    li r3, 255
698; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
699; CHECK-P8-BE-NEXT:    blr
700entry:
701  %0 = load <16 x i8>, <16 x i8>* inttoptr (i64 255 to <16 x i8>*), align 16
702  ret <16 x i8> %0
703}
704
705; Function Attrs: norecurse nounwind readonly uwtable willreturn
706define dso_local <16 x i8> @ld_cst_align16_vector() {
707; CHECK-LABEL: ld_cst_align16_vector:
708; CHECK:       # %bb.0: # %entry
709; CHECK-NEXT:    lxv v2, 4080(0)
710; CHECK-NEXT:    blr
711;
712; CHECK-P8-LE-LABEL: ld_cst_align16_vector:
713; CHECK-P8-LE:       # %bb.0: # %entry
714; CHECK-P8-LE-NEXT:    li r3, 4080
715; CHECK-P8-LE-NEXT:    lvx v2, 0, r3
716; CHECK-P8-LE-NEXT:    blr
717;
718; CHECK-P8-BE-LABEL: ld_cst_align16_vector:
719; CHECK-P8-BE:       # %bb.0: # %entry
720; CHECK-P8-BE-NEXT:    li r3, 4080
721; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
722; CHECK-P8-BE-NEXT:    blr
723entry:
724  %0 = load <16 x i8>, <16 x i8>* inttoptr (i64 4080 to <16 x i8>*), align 16
725  ret <16 x i8> %0
726}
727
728; Function Attrs: norecurse nounwind readonly uwtable willreturn
729define dso_local <16 x i8> @ld_cst_unalign32_vector() {
730; CHECK-P10-LABEL: ld_cst_unalign32_vector:
731; CHECK-P10:       # %bb.0: # %entry
732; CHECK-P10-NEXT:    pli r3, 99999
733; CHECK-P10-NEXT:    lxv v2, 0(r3)
734; CHECK-P10-NEXT:    blr
735;
736; CHECK-P9-LABEL: ld_cst_unalign32_vector:
737; CHECK-P9:       # %bb.0: # %entry
738; CHECK-P9-NEXT:    lis r3, 1
739; CHECK-P9-NEXT:    ori r3, r3, 34463
740; CHECK-P9-NEXT:    lxv v2, 0(r3)
741; CHECK-P9-NEXT:    blr
742;
743; CHECK-P8-LE-LABEL: ld_cst_unalign32_vector:
744; CHECK-P8-LE:       # %bb.0: # %entry
745; CHECK-P8-LE-NEXT:    lis r3, 1
746; CHECK-P8-LE-NEXT:    ori r3, r3, 34463
747; CHECK-P8-LE-NEXT:    lvx v2, 0, r3
748; CHECK-P8-LE-NEXT:    blr
749;
750; CHECK-P8-BE-LABEL: ld_cst_unalign32_vector:
751; CHECK-P8-BE:       # %bb.0: # %entry
752; CHECK-P8-BE-NEXT:    lis r3, 1
753; CHECK-P8-BE-NEXT:    ori r3, r3, 34463
754; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
755; CHECK-P8-BE-NEXT:    blr
756entry:
757  %0 = load <16 x i8>, <16 x i8>* inttoptr (i64 99999 to <16 x i8>*), align 16
758  ret <16 x i8> %0
759}
760
761; Function Attrs: norecurse nounwind readonly uwtable willreturn
762define dso_local <16 x i8> @ld_cst_align32_vector() {
763; CHECK-P10-LABEL: ld_cst_align32_vector:
764; CHECK-P10:       # %bb.0: # %entry
765; CHECK-P10-NEXT:    pli r3, 9999900
766; CHECK-P10-NEXT:    lxv v2, 0(r3)
767; CHECK-P10-NEXT:    blr
768;
769; CHECK-P9-LABEL: ld_cst_align32_vector:
770; CHECK-P9:       # %bb.0: # %entry
771; CHECK-P9-NEXT:    lis r3, 152
772; CHECK-P9-NEXT:    ori r3, r3, 38428
773; CHECK-P9-NEXT:    lxv v2, 0(r3)
774; CHECK-P9-NEXT:    blr
775;
776; CHECK-P8-LE-LABEL: ld_cst_align32_vector:
777; CHECK-P8-LE:       # %bb.0: # %entry
778; CHECK-P8-LE-NEXT:    lis r3, 152
779; CHECK-P8-LE-NEXT:    ori r3, r3, 38428
780; CHECK-P8-LE-NEXT:    lvx v2, 0, r3
781; CHECK-P8-LE-NEXT:    blr
782;
783; CHECK-P8-BE-LABEL: ld_cst_align32_vector:
784; CHECK-P8-BE:       # %bb.0: # %entry
785; CHECK-P8-BE-NEXT:    lis r3, 152
786; CHECK-P8-BE-NEXT:    ori r3, r3, 38428
787; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
788; CHECK-P8-BE-NEXT:    blr
789entry:
790  %0 = load <16 x i8>, <16 x i8>* inttoptr (i64 9999900 to <16 x i8>*), align 16
791  ret <16 x i8> %0
792}
793
794; Function Attrs: norecurse nounwind readonly uwtable willreturn
795define dso_local <16 x i8> @ld_cst_unalign64_vector() {
796; CHECK-P10-LABEL: ld_cst_unalign64_vector:
797; CHECK-P10:       # %bb.0: # %entry
798; CHECK-P10-NEXT:    pli r3, 232
799; CHECK-P10-NEXT:    pli r4, 3567587329
800; CHECK-P10-NEXT:    rldimi r4, r3, 32, 0
801; CHECK-P10-NEXT:    lxv v2, 0(r4)
802; CHECK-P10-NEXT:    blr
803;
804; CHECK-P9-LABEL: ld_cst_unalign64_vector:
805; CHECK-P9:       # %bb.0: # %entry
806; CHECK-P9-NEXT:    li r3, 29
807; CHECK-P9-NEXT:    rldic r3, r3, 35, 24
808; CHECK-P9-NEXT:    oris r3, r3, 54437
809; CHECK-P9-NEXT:    ori r3, r3, 4097
810; CHECK-P9-NEXT:    lxv v2, 0(r3)
811; CHECK-P9-NEXT:    blr
812;
813; CHECK-P8-LE-LABEL: ld_cst_unalign64_vector:
814; CHECK-P8-LE:       # %bb.0: # %entry
815; CHECK-P8-LE-NEXT:    li r3, 29
816; CHECK-P8-LE-NEXT:    rldic r3, r3, 35, 24
817; CHECK-P8-LE-NEXT:    oris r3, r3, 54437
818; CHECK-P8-LE-NEXT:    ori r3, r3, 4097
819; CHECK-P8-LE-NEXT:    lvx v2, 0, r3
820; CHECK-P8-LE-NEXT:    blr
821;
822; CHECK-P8-BE-LABEL: ld_cst_unalign64_vector:
823; CHECK-P8-BE:       # %bb.0: # %entry
824; CHECK-P8-BE-NEXT:    li r3, 29
825; CHECK-P8-BE-NEXT:    rldic r3, r3, 35, 24
826; CHECK-P8-BE-NEXT:    oris r3, r3, 54437
827; CHECK-P8-BE-NEXT:    ori r3, r3, 4097
828; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
829; CHECK-P8-BE-NEXT:    blr
830entry:
831  %0 = load <16 x i8>, <16 x i8>* inttoptr (i64 1000000000001 to <16 x i8>*), align 16
832  ret <16 x i8> %0
833}
834
835; Function Attrs: norecurse nounwind readonly uwtable willreturn
836define dso_local <16 x i8> @ld_cst_align64_vector() {
837; CHECK-P10-LABEL: ld_cst_align64_vector:
838; CHECK-P10:       # %bb.0: # %entry
839; CHECK-P10-NEXT:    pli r3, 244140625
840; CHECK-P10-NEXT:    rldic r3, r3, 12, 24
841; CHECK-P10-NEXT:    lxv v2, 0(r3)
842; CHECK-P10-NEXT:    blr
843;
844; CHECK-P9-LABEL: ld_cst_align64_vector:
845; CHECK-P9:       # %bb.0: # %entry
846; CHECK-P9-NEXT:    lis r3, 3725
847; CHECK-P9-NEXT:    ori r3, r3, 19025
848; CHECK-P9-NEXT:    rldic r3, r3, 12, 24
849; CHECK-P9-NEXT:    lxv v2, 0(r3)
850; CHECK-P9-NEXT:    blr
851;
852; CHECK-P8-LE-LABEL: ld_cst_align64_vector:
853; CHECK-P8-LE:       # %bb.0: # %entry
854; CHECK-P8-LE-NEXT:    lis r3, 3725
855; CHECK-P8-LE-NEXT:    ori r3, r3, 19025
856; CHECK-P8-LE-NEXT:    rldic r3, r3, 12, 24
857; CHECK-P8-LE-NEXT:    lvx v2, 0, r3
858; CHECK-P8-LE-NEXT:    blr
859;
860; CHECK-P8-BE-LABEL: ld_cst_align64_vector:
861; CHECK-P8-BE:       # %bb.0: # %entry
862; CHECK-P8-BE-NEXT:    lis r3, 3725
863; CHECK-P8-BE-NEXT:    ori r3, r3, 19025
864; CHECK-P8-BE-NEXT:    rldic r3, r3, 12, 24
865; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
866; CHECK-P8-BE-NEXT:    blr
867entry:
868  %0 = load <16 x i8>, <16 x i8>* inttoptr (i64 1000000000000 to <16 x i8>*), align 4096
869  ret <16 x i8> %0
870}
871
872; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
873define dso_local void @st_0_vector(i64 %ptr, <16 x i8> %str) {
874; CHECK-LABEL: st_0_vector:
875; CHECK:       # %bb.0: # %entry
876; CHECK-NEXT:    stxv v2, 0(r3)
877; CHECK-NEXT:    blr
878;
879; CHECK-P8-LE-LABEL: st_0_vector:
880; CHECK-P8-LE:       # %bb.0: # %entry
881; CHECK-P8-LE-NEXT:    stvx v2, 0, r3
882; CHECK-P8-LE-NEXT:    blr
883;
884; CHECK-P8-BE-LABEL: st_0_vector:
885; CHECK-P8-BE:       # %bb.0: # %entry
886; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r3
887; CHECK-P8-BE-NEXT:    blr
888entry:
889  %0 = inttoptr i64 %ptr to <16 x i8>*
890  store <16 x i8> %str, <16 x i8>* %0, align 16
891  ret void
892}
893
894; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
895define dso_local void @st_unalign16_vector(i8* nocapture %ptr, <16 x i8> %str) {
896; CHECK-P10-LABEL: st_unalign16_vector:
897; CHECK-P10:       # %bb.0: # %entry
898; CHECK-P10-NEXT:    pstxv v2, 1(r3), 0
899; CHECK-P10-NEXT:    blr
900;
901; CHECK-P9-LABEL: st_unalign16_vector:
902; CHECK-P9:       # %bb.0: # %entry
903; CHECK-P9-NEXT:    li r4, 1
904; CHECK-P9-NEXT:    stxvx v2, r3, r4
905; CHECK-P9-NEXT:    blr
906;
907; CHECK-P8-LE-LABEL: st_unalign16_vector:
908; CHECK-P8-LE:       # %bb.0: # %entry
909; CHECK-P8-LE-NEXT:    addi r3, r3, 1
910; CHECK-P8-LE-NEXT:    stvx v2, 0, r3
911; CHECK-P8-LE-NEXT:    blr
912;
913; CHECK-P8-BE-LABEL: st_unalign16_vector:
914; CHECK-P8-BE:       # %bb.0: # %entry
915; CHECK-P8-BE-NEXT:    addi r3, r3, 1
916; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r3
917; CHECK-P8-BE-NEXT:    blr
918entry:
919  %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1
920  %0 = bitcast i8* %add.ptr to <16 x i8>*
921  store <16 x i8> %str, <16 x i8>* %0, align 16
922  ret void
923}
924
925; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
926define dso_local void @st_align16_vector(i8* nocapture %ptr, <16 x i8> %str) {
927; CHECK-P10-LABEL: st_align16_vector:
928; CHECK-P10:       # %bb.0: # %entry
929; CHECK-P10-NEXT:    pstxv v2, 8(r3), 0
930; CHECK-P10-NEXT:    blr
931;
932; CHECK-P9-LABEL: st_align16_vector:
933; CHECK-P9:       # %bb.0: # %entry
934; CHECK-P9-NEXT:    li r4, 8
935; CHECK-P9-NEXT:    stxvx v2, r3, r4
936; CHECK-P9-NEXT:    blr
937;
938; CHECK-P8-LE-LABEL: st_align16_vector:
939; CHECK-P8-LE:       # %bb.0: # %entry
940; CHECK-P8-LE-NEXT:    addi r3, r3, 8
941; CHECK-P8-LE-NEXT:    stvx v2, 0, r3
942; CHECK-P8-LE-NEXT:    blr
943;
944; CHECK-P8-BE-LABEL: st_align16_vector:
945; CHECK-P8-BE:       # %bb.0: # %entry
946; CHECK-P8-BE-NEXT:    addi r3, r3, 8
947; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r3
948; CHECK-P8-BE-NEXT:    blr
949entry:
950  %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 8
951  %0 = bitcast i8* %add.ptr to <16 x i8>*
952  store <16 x i8> %str, <16 x i8>* %0, align 16
953  ret void
954}
955
956; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
957define dso_local void @st_unalign32_vector(i8* nocapture %ptr, <16 x i8> %str) {
958; CHECK-P10-LABEL: st_unalign32_vector:
959; CHECK-P10:       # %bb.0: # %entry
960; CHECK-P10-NEXT:    pstxv v2, 99999(r3), 0
961; CHECK-P10-NEXT:    blr
962;
963; CHECK-P9-LABEL: st_unalign32_vector:
964; CHECK-P9:       # %bb.0: # %entry
965; CHECK-P9-NEXT:    lis r4, 1
966; CHECK-P9-NEXT:    ori r4, r4, 34463
967; CHECK-P9-NEXT:    stxvx v2, r3, r4
968; CHECK-P9-NEXT:    blr
969;
970; CHECK-P8-LE-LABEL: st_unalign32_vector:
971; CHECK-P8-LE:       # %bb.0: # %entry
972; CHECK-P8-LE-NEXT:    lis r4, 1
973; CHECK-P8-LE-NEXT:    ori r4, r4, 34463
974; CHECK-P8-LE-NEXT:    stvx v2, r3, r4
975; CHECK-P8-LE-NEXT:    blr
976;
977; CHECK-P8-BE-LABEL: st_unalign32_vector:
978; CHECK-P8-BE:       # %bb.0: # %entry
979; CHECK-P8-BE-NEXT:    lis r4, 1
980; CHECK-P8-BE-NEXT:    ori r4, r4, 34463
981; CHECK-P8-BE-NEXT:    stxvw4x v2, r3, r4
982; CHECK-P8-BE-NEXT:    blr
983entry:
984  %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 99999
985  %0 = bitcast i8* %add.ptr to <16 x i8>*
986  store <16 x i8> %str, <16 x i8>* %0, align 16
987  ret void
988}
989
990; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
991define dso_local void @st_align32_vector(i8* nocapture %ptr, <16 x i8> %str) {
992; CHECK-P10-LABEL: st_align32_vector:
993; CHECK-P10:       # %bb.0: # %entry
994; CHECK-P10-NEXT:    pstxv v2, 99999000(r3), 0
995; CHECK-P10-NEXT:    blr
996;
997; CHECK-P9-LABEL: st_align32_vector:
998; CHECK-P9:       # %bb.0: # %entry
999; CHECK-P9-NEXT:    lis r4, 1525
1000; CHECK-P9-NEXT:    ori r4, r4, 56600
1001; CHECK-P9-NEXT:    stxvx v2, r3, r4
1002; CHECK-P9-NEXT:    blr
1003;
1004; CHECK-P8-LE-LABEL: st_align32_vector:
1005; CHECK-P8-LE:       # %bb.0: # %entry
1006; CHECK-P8-LE-NEXT:    lis r4, 1525
1007; CHECK-P8-LE-NEXT:    ori r4, r4, 56600
1008; CHECK-P8-LE-NEXT:    stvx v2, r3, r4
1009; CHECK-P8-LE-NEXT:    blr
1010;
1011; CHECK-P8-BE-LABEL: st_align32_vector:
1012; CHECK-P8-BE:       # %bb.0: # %entry
1013; CHECK-P8-BE-NEXT:    lis r4, 1525
1014; CHECK-P8-BE-NEXT:    ori r4, r4, 56600
1015; CHECK-P8-BE-NEXT:    stxvw4x v2, r3, r4
1016; CHECK-P8-BE-NEXT:    blr
1017entry:
1018  %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 99999000
1019  %0 = bitcast i8* %add.ptr to <16 x i8>*
1020  store <16 x i8> %str, <16 x i8>* %0, align 16
1021  ret void
1022}
1023
1024; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1025define dso_local void @st_unalign64_vector(i8* nocapture %ptr, <16 x i8> %str) {
1026; CHECK-P10-LABEL: st_unalign64_vector:
1027; CHECK-P10:       # %bb.0: # %entry
1028; CHECK-P10-NEXT:    pli r4, 232
1029; CHECK-P10-NEXT:    pli r5, 3567587329
1030; CHECK-P10-NEXT:    rldimi r5, r4, 32, 0
1031; CHECK-P10-NEXT:    stxvx v2, r3, r5
1032; CHECK-P10-NEXT:    blr
1033;
1034; CHECK-P9-LABEL: st_unalign64_vector:
1035; CHECK-P9:       # %bb.0: # %entry
1036; CHECK-P9-NEXT:    li r4, 29
1037; CHECK-P9-NEXT:    rldic r4, r4, 35, 24
1038; CHECK-P9-NEXT:    oris r4, r4, 54437
1039; CHECK-P9-NEXT:    ori r4, r4, 4097
1040; CHECK-P9-NEXT:    stxvx v2, r3, r4
1041; CHECK-P9-NEXT:    blr
1042;
1043; CHECK-P8-LE-LABEL: st_unalign64_vector:
1044; CHECK-P8-LE:       # %bb.0: # %entry
1045; CHECK-P8-LE-NEXT:    li r4, 29
1046; CHECK-P8-LE-NEXT:    rldic r4, r4, 35, 24
1047; CHECK-P8-LE-NEXT:    oris r4, r4, 54437
1048; CHECK-P8-LE-NEXT:    ori r4, r4, 4097
1049; CHECK-P8-LE-NEXT:    stvx v2, r3, r4
1050; CHECK-P8-LE-NEXT:    blr
1051;
1052; CHECK-P8-BE-LABEL: st_unalign64_vector:
1053; CHECK-P8-BE:       # %bb.0: # %entry
1054; CHECK-P8-BE-NEXT:    li r4, 29
1055; CHECK-P8-BE-NEXT:    rldic r4, r4, 35, 24
1056; CHECK-P8-BE-NEXT:    oris r4, r4, 54437
1057; CHECK-P8-BE-NEXT:    ori r4, r4, 4097
1058; CHECK-P8-BE-NEXT:    stxvw4x v2, r3, r4
1059; CHECK-P8-BE-NEXT:    blr
1060entry:
1061  %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1000000000001
1062  %0 = bitcast i8* %add.ptr to <16 x i8>*
1063  store <16 x i8> %str, <16 x i8>* %0, align 16
1064  ret void
1065}
1066
1067; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1068define dso_local void @st_align64_vector(i8* nocapture %ptr, <16 x i8> %str) {
1069; CHECK-P10-LABEL: st_align64_vector:
1070; CHECK-P10:       # %bb.0: # %entry
1071; CHECK-P10-NEXT:    pli r4, 244140625
1072; CHECK-P10-NEXT:    rldic r4, r4, 12, 24
1073; CHECK-P10-NEXT:    stxvx v2, r3, r4
1074; CHECK-P10-NEXT:    blr
1075;
1076; CHECK-P9-LABEL: st_align64_vector:
1077; CHECK-P9:       # %bb.0: # %entry
1078; CHECK-P9-NEXT:    lis r4, 3725
1079; CHECK-P9-NEXT:    ori r4, r4, 19025
1080; CHECK-P9-NEXT:    rldic r4, r4, 12, 24
1081; CHECK-P9-NEXT:    stxvx v2, r3, r4
1082; CHECK-P9-NEXT:    blr
1083;
1084; CHECK-P8-LE-LABEL: st_align64_vector:
1085; CHECK-P8-LE:       # %bb.0: # %entry
1086; CHECK-P8-LE-NEXT:    lis r4, 3725
1087; CHECK-P8-LE-NEXT:    ori r4, r4, 19025
1088; CHECK-P8-LE-NEXT:    rldic r4, r4, 12, 24
1089; CHECK-P8-LE-NEXT:    stvx v2, r3, r4
1090; CHECK-P8-LE-NEXT:    blr
1091;
1092; CHECK-P8-BE-LABEL: st_align64_vector:
1093; CHECK-P8-BE:       # %bb.0: # %entry
1094; CHECK-P8-BE-NEXT:    lis r4, 3725
1095; CHECK-P8-BE-NEXT:    ori r4, r4, 19025
1096; CHECK-P8-BE-NEXT:    rldic r4, r4, 12, 24
1097; CHECK-P8-BE-NEXT:    stxvw4x v2, r3, r4
1098; CHECK-P8-BE-NEXT:    blr
1099entry:
1100  %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1000000000000
1101  %0 = bitcast i8* %add.ptr to <16 x i8>*
1102  store <16 x i8> %str, <16 x i8>* %0, align 16
1103  ret void
1104}
1105
1106; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1107define dso_local void @st_reg_vector(i8* nocapture %ptr, i64 %off, <16 x i8> %str) {
1108; CHECK-LABEL: st_reg_vector:
1109; CHECK:       # %bb.0: # %entry
1110; CHECK-NEXT:    stxvx v2, r3, r4
1111; CHECK-NEXT:    blr
1112;
1113; CHECK-P8-LE-LABEL: st_reg_vector:
1114; CHECK-P8-LE:       # %bb.0: # %entry
1115; CHECK-P8-LE-NEXT:    stvx v2, r3, r4
1116; CHECK-P8-LE-NEXT:    blr
1117;
1118; CHECK-P8-BE-LABEL: st_reg_vector:
1119; CHECK-P8-BE:       # %bb.0: # %entry
1120; CHECK-P8-BE-NEXT:    stxvw4x v2, r3, r4
1121; CHECK-P8-BE-NEXT:    blr
1122entry:
1123  %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 %off
1124  %0 = bitcast i8* %add.ptr to <16 x i8>*
1125  store <16 x i8> %str, <16 x i8>* %0, align 16
1126  ret void
1127}
1128
1129; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1130define dso_local void @st_or1_vector(i64 %ptr, i8 zeroext %off, <16 x i8> %str) {
1131; CHECK-LABEL: st_or1_vector:
1132; CHECK:       # %bb.0: # %entry
1133; CHECK-NEXT:    or r3, r4, r3
1134; CHECK-NEXT:    stxv v2, 0(r3)
1135; CHECK-NEXT:    blr
1136;
1137; CHECK-P8-LE-LABEL: st_or1_vector:
1138; CHECK-P8-LE:       # %bb.0: # %entry
1139; CHECK-P8-LE-NEXT:    or r3, r4, r3
1140; CHECK-P8-LE-NEXT:    stvx v2, 0, r3
1141; CHECK-P8-LE-NEXT:    blr
1142;
1143; CHECK-P8-BE-LABEL: st_or1_vector:
1144; CHECK-P8-BE:       # %bb.0: # %entry
1145; CHECK-P8-BE-NEXT:    or r3, r4, r3
1146; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r3
1147; CHECK-P8-BE-NEXT:    blr
1148entry:
1149  %conv = zext i8 %off to i64
1150  %or = or i64 %conv, %ptr
1151  %0 = inttoptr i64 %or to <16 x i8>*
1152  store <16 x i8> %str, <16 x i8>* %0, align 16
1153  ret void
1154}
1155
1156; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1157define dso_local void @st_or2_vector(i64 %ptr, i8 zeroext %off, <16 x i8> %str) {
1158; CHECK-LABEL: st_or2_vector:
1159; CHECK:       # %bb.0: # %entry
1160; CHECK-NEXT:    rldicr r3, r3, 0, 51
1161; CHECK-NEXT:    stxvx v2, r3, r4
1162; CHECK-NEXT:    blr
1163;
1164; CHECK-P8-LE-LABEL: st_or2_vector:
1165; CHECK-P8-LE:       # %bb.0: # %entry
1166; CHECK-P8-LE-NEXT:    rldicr r3, r3, 0, 51
1167; CHECK-P8-LE-NEXT:    stvx v2, r3, r4
1168; CHECK-P8-LE-NEXT:    blr
1169;
1170; CHECK-P8-BE-LABEL: st_or2_vector:
1171; CHECK-P8-BE:       # %bb.0: # %entry
1172; CHECK-P8-BE-NEXT:    rldicr r3, r3, 0, 51
1173; CHECK-P8-BE-NEXT:    stxvw4x v2, r3, r4
1174; CHECK-P8-BE-NEXT:    blr
1175entry:
1176  %and = and i64 %ptr, -4096
1177  %conv = zext i8 %off to i64
1178  %or = or i64 %and, %conv
1179  %0 = inttoptr i64 %or to <16 x i8>*
1180  store <16 x i8> %str, <16 x i8>* %0, align 16
1181  ret void
1182}
1183
1184; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1185define dso_local void @st_not_disjoint16_vector(i64 %ptr, <16 x i8> %str) {
1186; CHECK-LABEL: st_not_disjoint16_vector:
1187; CHECK:       # %bb.0: # %entry
1188; CHECK-NEXT:    ori r3, r3, 6
1189; CHECK-NEXT:    stxv v2, 0(r3)
1190; CHECK-NEXT:    blr
1191;
1192; CHECK-P8-LE-LABEL: st_not_disjoint16_vector:
1193; CHECK-P8-LE:       # %bb.0: # %entry
1194; CHECK-P8-LE-NEXT:    ori r3, r3, 6
1195; CHECK-P8-LE-NEXT:    stvx v2, 0, r3
1196; CHECK-P8-LE-NEXT:    blr
1197;
1198; CHECK-P8-BE-LABEL: st_not_disjoint16_vector:
1199; CHECK-P8-BE:       # %bb.0: # %entry
1200; CHECK-P8-BE-NEXT:    ori r3, r3, 6
1201; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r3
1202; CHECK-P8-BE-NEXT:    blr
1203entry:
1204  %or = or i64 %ptr, 6
1205  %0 = inttoptr i64 %or to <16 x i8>*
1206  store <16 x i8> %str, <16 x i8>* %0, align 16
1207  ret void
1208}
1209
1210; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1211define dso_local void @st_disjoint_unalign16_vector(i64 %ptr, <16 x i8> %str) {
1212; CHECK-P10-LABEL: st_disjoint_unalign16_vector:
1213; CHECK-P10:       # %bb.0: # %entry
1214; CHECK-P10-NEXT:    rldicr r3, r3, 0, 51
1215; CHECK-P10-NEXT:    pstxv v2, 6(r3), 0
1216; CHECK-P10-NEXT:    blr
1217;
1218; CHECK-P9-LABEL: st_disjoint_unalign16_vector:
1219; CHECK-P9:       # %bb.0: # %entry
1220; CHECK-P9-NEXT:    rldicr r3, r3, 0, 51
1221; CHECK-P9-NEXT:    li r4, 6
1222; CHECK-P9-NEXT:    stxvx v2, r3, r4
1223; CHECK-P9-NEXT:    blr
1224;
1225; CHECK-P8-LE-LABEL: st_disjoint_unalign16_vector:
1226; CHECK-P8-LE:       # %bb.0: # %entry
1227; CHECK-P8-LE-NEXT:    rldicr r3, r3, 0, 51
1228; CHECK-P8-LE-NEXT:    ori r3, r3, 6
1229; CHECK-P8-LE-NEXT:    stvx v2, 0, r3
1230; CHECK-P8-LE-NEXT:    blr
1231;
1232; CHECK-P8-BE-LABEL: st_disjoint_unalign16_vector:
1233; CHECK-P8-BE:       # %bb.0: # %entry
1234; CHECK-P8-BE-NEXT:    rldicr r3, r3, 0, 51
1235; CHECK-P8-BE-NEXT:    ori r3, r3, 6
1236; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r3
1237; CHECK-P8-BE-NEXT:    blr
1238entry:
1239  %and = and i64 %ptr, -4096
1240  %or = or i64 %and, 6
1241  %0 = inttoptr i64 %or to <16 x i8>*
1242  store <16 x i8> %str, <16 x i8>* %0, align 16
1243  ret void
1244}
1245
1246; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1247define dso_local void @st_disjoint_align16_vector(i64 %ptr, <16 x i8> %str) {
1248; CHECK-P10-LABEL: st_disjoint_align16_vector:
1249; CHECK-P10:       # %bb.0: # %entry
1250; CHECK-P10-NEXT:    rldicr r3, r3, 0, 51
1251; CHECK-P10-NEXT:    pstxv v2, 24(r3), 0
1252; CHECK-P10-NEXT:    blr
1253;
1254; CHECK-P9-LABEL: st_disjoint_align16_vector:
1255; CHECK-P9:       # %bb.0: # %entry
1256; CHECK-P9-NEXT:    rldicr r3, r3, 0, 51
1257; CHECK-P9-NEXT:    li r4, 24
1258; CHECK-P9-NEXT:    stxvx v2, r3, r4
1259; CHECK-P9-NEXT:    blr
1260;
1261; CHECK-P8-LE-LABEL: st_disjoint_align16_vector:
1262; CHECK-P8-LE:       # %bb.0: # %entry
1263; CHECK-P8-LE-NEXT:    rldicr r3, r3, 0, 51
1264; CHECK-P8-LE-NEXT:    ori r3, r3, 24
1265; CHECK-P8-LE-NEXT:    stvx v2, 0, r3
1266; CHECK-P8-LE-NEXT:    blr
1267;
1268; CHECK-P8-BE-LABEL: st_disjoint_align16_vector:
1269; CHECK-P8-BE:       # %bb.0: # %entry
1270; CHECK-P8-BE-NEXT:    rldicr r3, r3, 0, 51
1271; CHECK-P8-BE-NEXT:    ori r3, r3, 24
1272; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r3
1273; CHECK-P8-BE-NEXT:    blr
1274entry:
1275  %and = and i64 %ptr, -4096
1276  %or = or i64 %and, 24
1277  %0 = inttoptr i64 %or to <16 x i8>*
1278  store <16 x i8> %str, <16 x i8>* %0, align 16
1279  ret void
1280}
1281
1282; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1283define dso_local void @st_not_disjoint32_vector(i64 %ptr, <16 x i8> %str) {
1284; CHECK-LABEL: st_not_disjoint32_vector:
1285; CHECK:       # %bb.0: # %entry
1286; CHECK-NEXT:    ori r3, r3, 34463
1287; CHECK-NEXT:    oris r3, r3, 1
1288; CHECK-NEXT:    stxv v2, 0(r3)
1289; CHECK-NEXT:    blr
1290;
1291; CHECK-P8-LE-LABEL: st_not_disjoint32_vector:
1292; CHECK-P8-LE:       # %bb.0: # %entry
1293; CHECK-P8-LE-NEXT:    ori r3, r3, 34463
1294; CHECK-P8-LE-NEXT:    oris r3, r3, 1
1295; CHECK-P8-LE-NEXT:    stvx v2, 0, r3
1296; CHECK-P8-LE-NEXT:    blr
1297;
1298; CHECK-P8-BE-LABEL: st_not_disjoint32_vector:
1299; CHECK-P8-BE:       # %bb.0: # %entry
1300; CHECK-P8-BE-NEXT:    ori r3, r3, 34463
1301; CHECK-P8-BE-NEXT:    oris r3, r3, 1
1302; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r3
1303; CHECK-P8-BE-NEXT:    blr
1304entry:
1305  %or = or i64 %ptr, 99999
1306  %0 = inttoptr i64 %or to <16 x i8>*
1307  store <16 x i8> %str, <16 x i8>* %0, align 16
1308  ret void
1309}
1310
1311; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1312define dso_local void @st_disjoint_unalign32_vector(i64 %ptr, <16 x i8> %str) {
1313; CHECK-P10-LABEL: st_disjoint_unalign32_vector:
1314; CHECK-P10:       # %bb.0: # %entry
1315; CHECK-P10-NEXT:    rldicr r3, r3, 0, 43
1316; CHECK-P10-NEXT:    pstxv v2, 99999(r3), 0
1317; CHECK-P10-NEXT:    blr
1318;
1319; CHECK-P9-LABEL: st_disjoint_unalign32_vector:
1320; CHECK-P9:       # %bb.0: # %entry
1321; CHECK-P9-NEXT:    lis r4, 1
1322; CHECK-P9-NEXT:    rldicr r3, r3, 0, 43
1323; CHECK-P9-NEXT:    ori r4, r4, 34463
1324; CHECK-P9-NEXT:    stxvx v2, r3, r4
1325; CHECK-P9-NEXT:    blr
1326;
1327; CHECK-P8-LE-LABEL: st_disjoint_unalign32_vector:
1328; CHECK-P8-LE:       # %bb.0: # %entry
1329; CHECK-P8-LE-NEXT:    lis r4, 1
1330; CHECK-P8-LE-NEXT:    rldicr r3, r3, 0, 43
1331; CHECK-P8-LE-NEXT:    ori r4, r4, 34463
1332; CHECK-P8-LE-NEXT:    stvx v2, r3, r4
1333; CHECK-P8-LE-NEXT:    blr
1334;
1335; CHECK-P8-BE-LABEL: st_disjoint_unalign32_vector:
1336; CHECK-P8-BE:       # %bb.0: # %entry
1337; CHECK-P8-BE-NEXT:    lis r4, 1
1338; CHECK-P8-BE-NEXT:    rldicr r3, r3, 0, 43
1339; CHECK-P8-BE-NEXT:    ori r4, r4, 34463
1340; CHECK-P8-BE-NEXT:    stxvw4x v2, r3, r4
1341; CHECK-P8-BE-NEXT:    blr
1342entry:
1343  %and = and i64 %ptr, -1048576
1344  %or = or i64 %and, 99999
1345  %0 = inttoptr i64 %or to <16 x i8>*
1346  store <16 x i8> %str, <16 x i8>* %0, align 16
1347  ret void
1348}
1349
1350; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1351define dso_local void @st_disjoint_align32_vector(i64 %ptr, <16 x i8> %str) {
1352; CHECK-P10-LABEL: st_disjoint_align32_vector:
1353; CHECK-P10:       # %bb.0: # %entry
1354; CHECK-P10-NEXT:    lis r4, -15264
1355; CHECK-P10-NEXT:    and r3, r3, r4
1356; CHECK-P10-NEXT:    pstxv v2, 999990000(r3), 0
1357; CHECK-P10-NEXT:    blr
1358;
1359; CHECK-P9-LABEL: st_disjoint_align32_vector:
1360; CHECK-P9:       # %bb.0: # %entry
1361; CHECK-P9-NEXT:    lis r4, -15264
1362; CHECK-P9-NEXT:    and r3, r3, r4
1363; CHECK-P9-NEXT:    lis r4, 15258
1364; CHECK-P9-NEXT:    ori r4, r4, 41712
1365; CHECK-P9-NEXT:    stxvx v2, r3, r4
1366; CHECK-P9-NEXT:    blr
1367;
1368; CHECK-P8-LE-LABEL: st_disjoint_align32_vector:
1369; CHECK-P8-LE:       # %bb.0: # %entry
1370; CHECK-P8-LE-NEXT:    lis r4, -15264
1371; CHECK-P8-LE-NEXT:    lis r5, 15258
1372; CHECK-P8-LE-NEXT:    and r3, r3, r4
1373; CHECK-P8-LE-NEXT:    ori r4, r5, 41712
1374; CHECK-P8-LE-NEXT:    stvx v2, r3, r4
1375; CHECK-P8-LE-NEXT:    blr
1376;
1377; CHECK-P8-BE-LABEL: st_disjoint_align32_vector:
1378; CHECK-P8-BE:       # %bb.0: # %entry
1379; CHECK-P8-BE-NEXT:    lis r4, -15264
1380; CHECK-P8-BE-NEXT:    lis r5, 15258
1381; CHECK-P8-BE-NEXT:    and r3, r3, r4
1382; CHECK-P8-BE-NEXT:    ori r4, r5, 41712
1383; CHECK-P8-BE-NEXT:    stxvw4x v2, r3, r4
1384; CHECK-P8-BE-NEXT:    blr
1385entry:
1386  %and = and i64 %ptr, -1000341504
1387  %or = or i64 %and, 999990000
1388  %0 = inttoptr i64 %or to <16 x i8>*
1389  store <16 x i8> %str, <16 x i8>* %0, align 16
1390  ret void
1391}
1392
1393; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1394define dso_local void @st_not_disjoint64_vector(i64 %ptr, <16 x i8> %str) {
1395; CHECK-P10-LABEL: st_not_disjoint64_vector:
1396; CHECK-P10:       # %bb.0: # %entry
1397; CHECK-P10-NEXT:    pli r4, 232
1398; CHECK-P10-NEXT:    pli r5, 3567587329
1399; CHECK-P10-NEXT:    rldimi r5, r4, 32, 0
1400; CHECK-P10-NEXT:    or r3, r3, r5
1401; CHECK-P10-NEXT:    stxv v2, 0(r3)
1402; CHECK-P10-NEXT:    blr
1403;
1404; CHECK-P9-LABEL: st_not_disjoint64_vector:
1405; CHECK-P9:       # %bb.0: # %entry
1406; CHECK-P9-NEXT:    li r4, 29
1407; CHECK-P9-NEXT:    rldic r4, r4, 35, 24
1408; CHECK-P9-NEXT:    oris r4, r4, 54437
1409; CHECK-P9-NEXT:    ori r4, r4, 4097
1410; CHECK-P9-NEXT:    or r3, r3, r4
1411; CHECK-P9-NEXT:    stxv v2, 0(r3)
1412; CHECK-P9-NEXT:    blr
1413;
1414; CHECK-P8-LE-LABEL: st_not_disjoint64_vector:
1415; CHECK-P8-LE:       # %bb.0: # %entry
1416; CHECK-P8-LE-NEXT:    li r4, 29
1417; CHECK-P8-LE-NEXT:    rldic r4, r4, 35, 24
1418; CHECK-P8-LE-NEXT:    oris r4, r4, 54437
1419; CHECK-P8-LE-NEXT:    ori r4, r4, 4097
1420; CHECK-P8-LE-NEXT:    or r3, r3, r4
1421; CHECK-P8-LE-NEXT:    stvx v2, 0, r3
1422; CHECK-P8-LE-NEXT:    blr
1423;
1424; CHECK-P8-BE-LABEL: st_not_disjoint64_vector:
1425; CHECK-P8-BE:       # %bb.0: # %entry
1426; CHECK-P8-BE-NEXT:    li r4, 29
1427; CHECK-P8-BE-NEXT:    rldic r4, r4, 35, 24
1428; CHECK-P8-BE-NEXT:    oris r4, r4, 54437
1429; CHECK-P8-BE-NEXT:    ori r4, r4, 4097
1430; CHECK-P8-BE-NEXT:    or r3, r3, r4
1431; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r3
1432; CHECK-P8-BE-NEXT:    blr
1433entry:
1434  %or = or i64 %ptr, 1000000000001
1435  %0 = inttoptr i64 %or to <16 x i8>*
1436  store <16 x i8> %str, <16 x i8>* %0, align 16
1437  ret void
1438}
1439
1440; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1441define dso_local void @st_disjoint_unalign64_vector(i64 %ptr, <16 x i8> %str) {
1442; CHECK-P10-LABEL: st_disjoint_unalign64_vector:
1443; CHECK-P10:       # %bb.0: # %entry
1444; CHECK-P10-NEXT:    pli r4, 232
1445; CHECK-P10-NEXT:    pli r5, 3567587329
1446; CHECK-P10-NEXT:    rldicr r3, r3, 0, 23
1447; CHECK-P10-NEXT:    rldimi r5, r4, 32, 0
1448; CHECK-P10-NEXT:    stxvx v2, r3, r5
1449; CHECK-P10-NEXT:    blr
1450;
1451; CHECK-P9-LABEL: st_disjoint_unalign64_vector:
1452; CHECK-P9:       # %bb.0: # %entry
1453; CHECK-P9-NEXT:    li r4, 29
1454; CHECK-P9-NEXT:    rldicr r3, r3, 0, 23
1455; CHECK-P9-NEXT:    rldic r4, r4, 35, 24
1456; CHECK-P9-NEXT:    oris r4, r4, 54437
1457; CHECK-P9-NEXT:    ori r4, r4, 4097
1458; CHECK-P9-NEXT:    stxvx v2, r3, r4
1459; CHECK-P9-NEXT:    blr
1460;
1461; CHECK-P8-LE-LABEL: st_disjoint_unalign64_vector:
1462; CHECK-P8-LE:       # %bb.0: # %entry
1463; CHECK-P8-LE-NEXT:    li r4, 29
1464; CHECK-P8-LE-NEXT:    rldicr r3, r3, 0, 23
1465; CHECK-P8-LE-NEXT:    rldic r4, r4, 35, 24
1466; CHECK-P8-LE-NEXT:    oris r4, r4, 54437
1467; CHECK-P8-LE-NEXT:    ori r4, r4, 4097
1468; CHECK-P8-LE-NEXT:    stvx v2, r3, r4
1469; CHECK-P8-LE-NEXT:    blr
1470;
1471; CHECK-P8-BE-LABEL: st_disjoint_unalign64_vector:
1472; CHECK-P8-BE:       # %bb.0: # %entry
1473; CHECK-P8-BE-NEXT:    li r4, 29
1474; CHECK-P8-BE-NEXT:    rldicr r3, r3, 0, 23
1475; CHECK-P8-BE-NEXT:    rldic r4, r4, 35, 24
1476; CHECK-P8-BE-NEXT:    oris r4, r4, 54437
1477; CHECK-P8-BE-NEXT:    ori r4, r4, 4097
1478; CHECK-P8-BE-NEXT:    stxvw4x v2, r3, r4
1479; CHECK-P8-BE-NEXT:    blr
1480entry:
1481  %and = and i64 %ptr, -1099511627776
1482  %or = or i64 %and, 1000000000001
1483  %0 = inttoptr i64 %or to <16 x i8>*
1484  store <16 x i8> %str, <16 x i8>* %0, align 16
1485  ret void
1486}
1487
1488; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1489define dso_local void @st_disjoint_align64_vector(i64 %ptr, <16 x i8> %str) {
1490; CHECK-P10-LABEL: st_disjoint_align64_vector:
1491; CHECK-P10:       # %bb.0: # %entry
1492; CHECK-P10-NEXT:    pli r4, 244140625
1493; CHECK-P10-NEXT:    rldicr r3, r3, 0, 23
1494; CHECK-P10-NEXT:    rldic r4, r4, 12, 24
1495; CHECK-P10-NEXT:    stxvx v2, r3, r4
1496; CHECK-P10-NEXT:    blr
1497;
1498; CHECK-P9-LABEL: st_disjoint_align64_vector:
1499; CHECK-P9:       # %bb.0: # %entry
1500; CHECK-P9-NEXT:    lis r4, 3725
1501; CHECK-P9-NEXT:    rldicr r3, r3, 0, 23
1502; CHECK-P9-NEXT:    ori r4, r4, 19025
1503; CHECK-P9-NEXT:    rldic r4, r4, 12, 24
1504; CHECK-P9-NEXT:    stxvx v2, r3, r4
1505; CHECK-P9-NEXT:    blr
1506;
1507; CHECK-P8-LE-LABEL: st_disjoint_align64_vector:
1508; CHECK-P8-LE:       # %bb.0: # %entry
1509; CHECK-P8-LE-NEXT:    lis r4, 3725
1510; CHECK-P8-LE-NEXT:    rldicr r3, r3, 0, 23
1511; CHECK-P8-LE-NEXT:    ori r4, r4, 19025
1512; CHECK-P8-LE-NEXT:    rldic r4, r4, 12, 24
1513; CHECK-P8-LE-NEXT:    stvx v2, r3, r4
1514; CHECK-P8-LE-NEXT:    blr
1515;
1516; CHECK-P8-BE-LABEL: st_disjoint_align64_vector:
1517; CHECK-P8-BE:       # %bb.0: # %entry
1518; CHECK-P8-BE-NEXT:    lis r4, 3725
1519; CHECK-P8-BE-NEXT:    rldicr r3, r3, 0, 23
1520; CHECK-P8-BE-NEXT:    ori r4, r4, 19025
1521; CHECK-P8-BE-NEXT:    rldic r4, r4, 12, 24
1522; CHECK-P8-BE-NEXT:    stxvw4x v2, r3, r4
1523; CHECK-P8-BE-NEXT:    blr
1524entry:
1525  %and = and i64 %ptr, -1099511627776
1526  %or = or i64 %and, 1000000000000
1527  %0 = inttoptr i64 %or to <16 x i8>*
1528  store <16 x i8> %str, <16 x i8>* %0, align 4096
1529  ret void
1530}
1531
1532; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1533define dso_local void @st_cst_unalign16_vector(<16 x i8> %str) {
1534; CHECK-LABEL: st_cst_unalign16_vector:
1535; CHECK:       # %bb.0: # %entry
1536; CHECK-NEXT:    li r3, 255
1537; CHECK-NEXT:    stxv v2, 0(r3)
1538; CHECK-NEXT:    blr
1539;
1540; CHECK-P8-LE-LABEL: st_cst_unalign16_vector:
1541; CHECK-P8-LE:       # %bb.0: # %entry
1542; CHECK-P8-LE-NEXT:    li r3, 255
1543; CHECK-P8-LE-NEXT:    stvx v2, 0, r3
1544; CHECK-P8-LE-NEXT:    blr
1545;
1546; CHECK-P8-BE-LABEL: st_cst_unalign16_vector:
1547; CHECK-P8-BE:       # %bb.0: # %entry
1548; CHECK-P8-BE-NEXT:    li r3, 255
1549; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r3
1550; CHECK-P8-BE-NEXT:    blr
1551entry:
1552  store <16 x i8> %str, <16 x i8>* inttoptr (i64 255 to <16 x i8>*), align 16
1553  ret void
1554}
1555
1556; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1557define dso_local void @st_cst_align16_vector(<16 x i8> %str) {
1558; CHECK-LABEL: st_cst_align16_vector:
1559; CHECK:       # %bb.0: # %entry
1560; CHECK-NEXT:    stxv v2, 4080(0)
1561; CHECK-NEXT:    blr
1562;
1563; CHECK-P8-LE-LABEL: st_cst_align16_vector:
1564; CHECK-P8-LE:       # %bb.0: # %entry
1565; CHECK-P8-LE-NEXT:    li r3, 4080
1566; CHECK-P8-LE-NEXT:    stvx v2, 0, r3
1567; CHECK-P8-LE-NEXT:    blr
1568;
1569; CHECK-P8-BE-LABEL: st_cst_align16_vector:
1570; CHECK-P8-BE:       # %bb.0: # %entry
1571; CHECK-P8-BE-NEXT:    li r3, 4080
1572; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r3
1573; CHECK-P8-BE-NEXT:    blr
1574entry:
1575  store <16 x i8> %str, <16 x i8>* inttoptr (i64 4080 to <16 x i8>*), align 16
1576  ret void
1577}
1578
1579; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1580define dso_local void @st_cst_unalign32_vector(<16 x i8> %str) {
1581; CHECK-P10-LABEL: st_cst_unalign32_vector:
1582; CHECK-P10:       # %bb.0: # %entry
1583; CHECK-P10-NEXT:    pli r3, 99999
1584; CHECK-P10-NEXT:    stxv v2, 0(r3)
1585; CHECK-P10-NEXT:    blr
1586;
1587; CHECK-P9-LABEL: st_cst_unalign32_vector:
1588; CHECK-P9:       # %bb.0: # %entry
1589; CHECK-P9-NEXT:    lis r3, 1
1590; CHECK-P9-NEXT:    ori r3, r3, 34463
1591; CHECK-P9-NEXT:    stxv v2, 0(r3)
1592; CHECK-P9-NEXT:    blr
1593;
1594; CHECK-P8-LE-LABEL: st_cst_unalign32_vector:
1595; CHECK-P8-LE:       # %bb.0: # %entry
1596; CHECK-P8-LE-NEXT:    lis r3, 1
1597; CHECK-P8-LE-NEXT:    ori r3, r3, 34463
1598; CHECK-P8-LE-NEXT:    stvx v2, 0, r3
1599; CHECK-P8-LE-NEXT:    blr
1600;
1601; CHECK-P8-BE-LABEL: st_cst_unalign32_vector:
1602; CHECK-P8-BE:       # %bb.0: # %entry
1603; CHECK-P8-BE-NEXT:    lis r3, 1
1604; CHECK-P8-BE-NEXT:    ori r3, r3, 34463
1605; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r3
1606; CHECK-P8-BE-NEXT:    blr
1607entry:
1608  store <16 x i8> %str, <16 x i8>* inttoptr (i64 99999 to <16 x i8>*), align 16
1609  ret void
1610}
1611
1612; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1613define dso_local void @st_cst_align32_vector(<16 x i8> %str) {
1614; CHECK-P10-LABEL: st_cst_align32_vector:
1615; CHECK-P10:       # %bb.0: # %entry
1616; CHECK-P10-NEXT:    pli r3, 9999900
1617; CHECK-P10-NEXT:    stxv v2, 0(r3)
1618; CHECK-P10-NEXT:    blr
1619;
1620; CHECK-P9-LABEL: st_cst_align32_vector:
1621; CHECK-P9:       # %bb.0: # %entry
1622; CHECK-P9-NEXT:    lis r3, 152
1623; CHECK-P9-NEXT:    ori r3, r3, 38428
1624; CHECK-P9-NEXT:    stxv v2, 0(r3)
1625; CHECK-P9-NEXT:    blr
1626;
1627; CHECK-P8-LE-LABEL: st_cst_align32_vector:
1628; CHECK-P8-LE:       # %bb.0: # %entry
1629; CHECK-P8-LE-NEXT:    lis r3, 152
1630; CHECK-P8-LE-NEXT:    ori r3, r3, 38428
1631; CHECK-P8-LE-NEXT:    stvx v2, 0, r3
1632; CHECK-P8-LE-NEXT:    blr
1633;
1634; CHECK-P8-BE-LABEL: st_cst_align32_vector:
1635; CHECK-P8-BE:       # %bb.0: # %entry
1636; CHECK-P8-BE-NEXT:    lis r3, 152
1637; CHECK-P8-BE-NEXT:    ori r3, r3, 38428
1638; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r3
1639; CHECK-P8-BE-NEXT:    blr
1640entry:
1641  store <16 x i8> %str, <16 x i8>* inttoptr (i64 9999900 to <16 x i8>*), align 16
1642  ret void
1643}
1644
1645; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1646define dso_local void @st_cst_unalign64_vector(<16 x i8> %str) {
1647; CHECK-P10-LABEL: st_cst_unalign64_vector:
1648; CHECK-P10:       # %bb.0: # %entry
1649; CHECK-P10-NEXT:    pli r3, 232
1650; CHECK-P10-NEXT:    pli r4, 3567587329
1651; CHECK-P10-NEXT:    rldimi r4, r3, 32, 0
1652; CHECK-P10-NEXT:    stxv v2, 0(r4)
1653; CHECK-P10-NEXT:    blr
1654;
1655; CHECK-P9-LABEL: st_cst_unalign64_vector:
1656; CHECK-P9:       # %bb.0: # %entry
1657; CHECK-P9-NEXT:    li r3, 29
1658; CHECK-P9-NEXT:    rldic r3, r3, 35, 24
1659; CHECK-P9-NEXT:    oris r3, r3, 54437
1660; CHECK-P9-NEXT:    ori r3, r3, 4097
1661; CHECK-P9-NEXT:    stxv v2, 0(r3)
1662; CHECK-P9-NEXT:    blr
1663;
1664; CHECK-P8-LE-LABEL: st_cst_unalign64_vector:
1665; CHECK-P8-LE:       # %bb.0: # %entry
1666; CHECK-P8-LE-NEXT:    li r3, 29
1667; CHECK-P8-LE-NEXT:    rldic r3, r3, 35, 24
1668; CHECK-P8-LE-NEXT:    oris r3, r3, 54437
1669; CHECK-P8-LE-NEXT:    ori r3, r3, 4097
1670; CHECK-P8-LE-NEXT:    stvx v2, 0, r3
1671; CHECK-P8-LE-NEXT:    blr
1672;
1673; CHECK-P8-BE-LABEL: st_cst_unalign64_vector:
1674; CHECK-P8-BE:       # %bb.0: # %entry
1675; CHECK-P8-BE-NEXT:    li r3, 29
1676; CHECK-P8-BE-NEXT:    rldic r3, r3, 35, 24
1677; CHECK-P8-BE-NEXT:    oris r3, r3, 54437
1678; CHECK-P8-BE-NEXT:    ori r3, r3, 4097
1679; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r3
1680; CHECK-P8-BE-NEXT:    blr
1681entry:
1682  store <16 x i8> %str, <16 x i8>* inttoptr (i64 1000000000001 to <16 x i8>*), align 16
1683  ret void
1684}
1685
1686; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1687define dso_local void @st_cst_align64_vector(<16 x i8> %str) {
1688; CHECK-P10-LABEL: st_cst_align64_vector:
1689; CHECK-P10:       # %bb.0: # %entry
1690; CHECK-P10-NEXT:    pli r3, 244140625
1691; CHECK-P10-NEXT:    rldic r3, r3, 12, 24
1692; CHECK-P10-NEXT:    stxv v2, 0(r3)
1693; CHECK-P10-NEXT:    blr
1694;
1695; CHECK-P9-LABEL: st_cst_align64_vector:
1696; CHECK-P9:       # %bb.0: # %entry
1697; CHECK-P9-NEXT:    lis r3, 3725
1698; CHECK-P9-NEXT:    ori r3, r3, 19025
1699; CHECK-P9-NEXT:    rldic r3, r3, 12, 24
1700; CHECK-P9-NEXT:    stxv v2, 0(r3)
1701; CHECK-P9-NEXT:    blr
1702;
1703; CHECK-P8-LE-LABEL: st_cst_align64_vector:
1704; CHECK-P8-LE:       # %bb.0: # %entry
1705; CHECK-P8-LE-NEXT:    lis r3, 3725
1706; CHECK-P8-LE-NEXT:    ori r3, r3, 19025
1707; CHECK-P8-LE-NEXT:    rldic r3, r3, 12, 24
1708; CHECK-P8-LE-NEXT:    stvx v2, 0, r3
1709; CHECK-P8-LE-NEXT:    blr
1710;
1711; CHECK-P8-BE-LABEL: st_cst_align64_vector:
1712; CHECK-P8-BE:       # %bb.0: # %entry
1713; CHECK-P8-BE-NEXT:    lis r3, 3725
1714; CHECK-P8-BE-NEXT:    ori r3, r3, 19025
1715; CHECK-P8-BE-NEXT:    rldic r3, r3, 12, 24
1716; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r3
1717; CHECK-P8-BE-NEXT:    blr
1718entry:
1719  store <16 x i8> %str, <16 x i8>* inttoptr (i64 1000000000000 to <16 x i8>*), align 4096
1720  ret void
1721}
1722