[clang] Implement lifetime analysis for lifetime_capture_by(X) (#115921)
[llvm-project.git] / clang / test / CodeGen / SystemZ / align-systemz-02.c
blob07b50dfe9b443fa2bd2e39815e3b0a0b49388208
1 // RUN: %clang_cc1 -triple s390x-linux-gnu %s -o - -target-feature +vector -emit-llvm \
2 // RUN: | FileCheck %s -check-prefix=VECIR
3 // RUN: %clang_cc1 -triple s390x-linux-gnu %s -o - -target-feature +vector -S \
4 // RUN: | FileCheck %s -check-prefix=VECASM
5 // RUN: %clang_cc1 -triple s390x-linux-gnu %s -o - -target-feature -vector -emit-llvm \
6 // RUN: | FileCheck %s -check-prefix=SCALIR
7 // RUN: %clang_cc1 -triple s390x-linux-gnu %s -o - -target-feature -vector -S \
8 // RUN: | FileCheck %s -check-prefix=SCALASM
9 // REQUIRES: systemz-registered-target
11 typedef __attribute__((vector_size(16))) signed int vec_sint;
13 volatile vec_sint GlobVsi;
15 struct S {
16 int A;
17 vec_sint Vsi;
18 } GlobS;
20 void fun() {
21 GlobS.Vsi = GlobVsi;
24 // VECIR: %struct.S = type { i32, <4 x i32> }
25 // VECIR: @GlobVsi = global <4 x i32> zeroinitializer, align 8
26 // VECIR: @GlobS = global %struct.S zeroinitializer, align 8
27 // VECIR: %0 = load volatile <4 x i32>, ptr @GlobVsi, align 8
28 // VECIR: store <4 x i32> %0, ptr getelementptr inbounds nuw (%struct.S, ptr @GlobS, i32 0, i32 1), align 8
30 // VECASM: lgrl %r1, GlobVsi@GOT
31 // VECASM-NEXT: vl %v0, 0(%r1), 3
32 // VECASM-NEXT: lgrl %r1, GlobS@GOT
33 // VECASM-NEXT: vst %v0, 8(%r1), 3
35 // VECASM: .globl GlobVsi
36 // VECASM: .p2align 3
37 // VECASM: GlobVsi:
38 // VECASM: .space 16
39 // VECASM: .globl GlobS
40 // VECASM: .p2align 3
41 // VECASM: GlobS:
42 // VECASM: .space 24
44 // SCALIR: %struct.S = type { i32, [12 x i8], <4 x i32> }
45 // SCALIR: @GlobVsi = global <4 x i32> zeroinitializer, align 16
46 // SCALIR: @GlobS = global %struct.S zeroinitializer, align 16
47 // SCALIR: %0 = load volatile <4 x i32>, ptr @GlobVsi, align 16
48 // SCALIR: store <4 x i32> %0, ptr getelementptr inbounds nuw (%struct.S, ptr @GlobS, i32 0, i32 2), align 16
50 // SCALASM: lgrl %r1, GlobVsi@GOT
51 // SCALASM-NEXT: l %r0, 0(%r1)
52 // SCALASM-NEXT: l %r2, 4(%r1)
53 // SCALASM-NEXT: l %r3, 8(%r1)
54 // SCALASM-NEXT: l %r4, 12(%r1)
55 // SCALASM-NEXT: lgrl %r1, GlobS@GOT
56 // SCALASM-NEXT: st %r4, 28(%r1)
57 // SCALASM-NEXT: st %r3, 24(%r1)
58 // SCALASM-NEXT: st %r2, 20(%r1)
59 // SCALASM-NEXT: st %r0, 16(%r1)
61 // SCALASM: .globl GlobVsi
62 // SCALASM: .p2align 4
63 // SCALASM: GlobVsi:
64 // SCALASM: .space 16
65 // SCALASM: .globl GlobS
66 // SCALASM: .p2align 4
67 // SCALASM: GlobS:
68 // SCALASM: .space 32