Mercurial > hg > CbC > CbC_llvm
comparison clang/test/CodeGen/packed-arrays.c @ 207:2e18cbf3894f
LLVM12
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 08 Jun 2021 06:07:14 +0900 |
parents | 1d019706d866 |
children | c4bab56944e8 |
comparison
equal
deleted
inserted
replaced
173:0572611fdcc8 | 207:2e18cbf3894f |
---|---|
21 unsigned int x[2]; | 21 unsigned int x[2]; |
22 unsigned int y; | 22 unsigned int y; |
23 unsigned int z; | 23 unsigned int z; |
24 }; | 24 }; |
25 | 25 |
26 // CHECK: @align0 = local_unnamed_addr global i32 1 | 26 // CHECK: @align0 ={{.*}} local_unnamed_addr global i32 1 |
27 int align0 = __alignof(struct s0); | 27 int align0 = __alignof(struct s0); |
28 // CHECK: @align1 = local_unnamed_addr global i32 4 | 28 // CHECK: @align1 ={{.*}} local_unnamed_addr global i32 4 |
29 int align1 = __alignof(struct s1); | 29 int align1 = __alignof(struct s1); |
30 // CHECK: @align2 = local_unnamed_addr global i32 1 | 30 // CHECK: @align2 ={{.*}} local_unnamed_addr global i32 1 |
31 int align2 = __alignof(struct s2); | 31 int align2 = __alignof(struct s2); |
32 // CHECK: @align3 = local_unnamed_addr global i32 1 | 32 // CHECK: @align3 ={{.*}} local_unnamed_addr global i32 1 |
33 int align3 = __alignof(struct s3); | 33 int align3 = __alignof(struct s3); |
34 | 34 |
35 // CHECK: @align0_x = local_unnamed_addr global i32 1 | 35 // CHECK: @align0_x ={{.*}} local_unnamed_addr global i32 1 |
36 int align0_x = __alignof(((struct s0*) 0)->x); | 36 int align0_x = __alignof(((struct s0*) 0)->x); |
37 // | 37 // |
38 // CHECK: @align1_x = local_unnamed_addr global i32 1 | 38 // CHECK: @align1_x ={{.*}} local_unnamed_addr global i32 1 |
39 int align1_x = __alignof(((struct s1*) 0)->x); | 39 int align1_x = __alignof(((struct s1*) 0)->x); |
40 // CHECK: @align2_x = local_unnamed_addr global i32 1 | 40 // CHECK: @align2_x ={{.*}} local_unnamed_addr global i32 1 |
41 int align2_x = __alignof(((struct s2*) 0)->x); | 41 int align2_x = __alignof(((struct s2*) 0)->x); |
42 // CHECK: @align3_x = local_unnamed_addr global i32 1 | 42 // CHECK: @align3_x ={{.*}} local_unnamed_addr global i32 1 |
43 int align3_x = __alignof(((struct s3*) 0)->x); | 43 int align3_x = __alignof(((struct s3*) 0)->x); |
44 | 44 |
45 // CHECK: @align0_x0 = local_unnamed_addr global i32 4 | 45 // CHECK: @align0_x0 ={{.*}} local_unnamed_addr global i32 4 |
46 int align0_x0 = __alignof(((struct s0*) 0)->x[0]); | 46 int align0_x0 = __alignof(((struct s0*) 0)->x[0]); |
47 // CHECK: @align1_x0 = local_unnamed_addr global i32 4 | 47 // CHECK: @align1_x0 ={{.*}} local_unnamed_addr global i32 4 |
48 int align1_x0 = __alignof(((struct s1*) 0)->x[0]); | 48 int align1_x0 = __alignof(((struct s1*) 0)->x[0]); |
49 // CHECK: @align2_x0 = local_unnamed_addr global i32 4 | 49 // CHECK: @align2_x0 ={{.*}} local_unnamed_addr global i32 4 |
50 int align2_x0 = __alignof(((struct s2*) 0)->x[0]); | 50 int align2_x0 = __alignof(((struct s2*) 0)->x[0]); |
51 // CHECK: @align3_x0 = local_unnamed_addr global i32 4 | 51 // CHECK: @align3_x0 ={{.*}} local_unnamed_addr global i32 4 |
52 int align3_x0 = __alignof(((struct s3*) 0)->x[0]); | 52 int align3_x0 = __alignof(((struct s3*) 0)->x[0]); |
53 | 53 |
54 // CHECK-LABEL: define i32 @f0_a | 54 // CHECK-LABEL: define{{.*}} i32 @f0_a |
55 // CHECK: load i32, i32* %{{.*}}, align 1 | 55 // CHECK: load i32, i32* %{{.*}}, align 1 |
56 // CHECK: } | 56 // CHECK: } |
57 // CHECK-LABEL: define i32 @f0_b | 57 // CHECK-LABEL: define{{.*}} i32 @f0_b |
58 // CHECK: load i32, i32* %{{.*}}, align 4 | 58 // CHECK: load i32, i32* %{{.*}}, align 4 |
59 // CHECK: } | 59 // CHECK: } |
60 int f0_a(struct s0 *a) { | 60 int f0_a(struct s0 *a) { |
61 return a->x[1]; | 61 return a->x[1]; |
62 } | 62 } |
66 | 66 |
67 // Note that 'y' still causes struct s1 to be four-byte aligned. | 67 // Note that 'y' still causes struct s1 to be four-byte aligned. |
68 | 68 |
69 // Note that we are incompatible with GCC on this example. | 69 // Note that we are incompatible with GCC on this example. |
70 // | 70 // |
71 // CHECK-LABEL: define i32 @f1_a | 71 // CHECK-LABEL: define{{.*}} i32 @f1_a |
72 // CHECK: load i32, i32* %{{.*}}, align 4 | 72 // CHECK: load i32, i32* %{{.*}}, align 4 |
73 // CHECK: } | 73 // CHECK: } |
74 // CHECK-LABEL: define i32 @f1_b | 74 // CHECK-LABEL: define{{.*}} i32 @f1_b |
75 // CHECK: load i32, i32* %{{.*}}, align 4 | 75 // CHECK: load i32, i32* %{{.*}}, align 4 |
76 // CHECK: } | 76 // CHECK: } |
77 | 77 |
78 // Note that we are incompatible with GCC on this example. | 78 // Note that we are incompatible with GCC on this example. |
79 // | 79 // |
80 // CHECK-LABEL: define i32 @f1_c | 80 // CHECK-LABEL: define{{.*}} i32 @f1_c |
81 // CHECK: load i32, i32* %{{.*}}, align 4 | 81 // CHECK: load i32, i32* %{{.*}}, align 4 |
82 // CHECK: } | 82 // CHECK: } |
83 // CHECK-LABEL: define i32 @f1_d | 83 // CHECK-LABEL: define{{.*}} i32 @f1_d |
84 // CHECK: load i32, i32* %{{.*}}, align 4 | 84 // CHECK: load i32, i32* %{{.*}}, align 4 |
85 // CHECK: } | 85 // CHECK: } |
86 int f1_a(struct s1 *a) { | 86 int f1_a(struct s1 *a) { |
87 return a->x[1]; | 87 return a->x[1]; |
88 } | 88 } |
94 } | 94 } |
95 int f1_d(struct s1 *a) { | 95 int f1_d(struct s1 *a) { |
96 return a->z; | 96 return a->z; |
97 } | 97 } |
98 | 98 |
99 // CHECK-LABEL: define i32 @f2_a | 99 // CHECK-LABEL: define{{.*}} i32 @f2_a |
100 // CHECK: load i32, i32* %{{.*}}, align 1 | 100 // CHECK: load i32, i32* %{{.*}}, align 1 |
101 // CHECK: } | 101 // CHECK: } |
102 // CHECK-LABEL: define i32 @f2_b | 102 // CHECK-LABEL: define{{.*}} i32 @f2_b |
103 // CHECK: load i32, i32* %{{.*}}, align 4 | 103 // CHECK: load i32, i32* %{{.*}}, align 4 |
104 // CHECK: } | 104 // CHECK: } |
105 // CHECK-LABEL: define i32 @f2_c | 105 // CHECK-LABEL: define{{.*}} i32 @f2_c |
106 // CHECK: load i32, i32* %{{.*}}, align 1 | 106 // CHECK: load i32, i32* %{{.*}}, align 1 |
107 // CHECK: } | 107 // CHECK: } |
108 // CHECK-LABEL: define i32 @f2_d | 108 // CHECK-LABEL: define{{.*}} i32 @f2_d |
109 // CHECK: load i32, i32* %{{.*}}, align 1 | 109 // CHECK: load i32, i32* %{{.*}}, align 1 |
110 // CHECK: } | 110 // CHECK: } |
111 int f2_a(struct s2 *a) { | 111 int f2_a(struct s2 *a) { |
112 return a->x[1]; | 112 return a->x[1]; |
113 } | 113 } |
119 } | 119 } |
120 int f2_d(struct s2 *a) { | 120 int f2_d(struct s2 *a) { |
121 return a->z; | 121 return a->z; |
122 } | 122 } |
123 | 123 |
124 // CHECK-LABEL: define i32 @f3_a | 124 // CHECK-LABEL: define{{.*}} i32 @f3_a |
125 // CHECK: load i32, i32* %{{.*}}, align 1 | 125 // CHECK: load i32, i32* %{{.*}}, align 1 |
126 // CHECK: } | 126 // CHECK: } |
127 // CHECK-LABEL: define i32 @f3_b | 127 // CHECK-LABEL: define{{.*}} i32 @f3_b |
128 // CHECK: load i32, i32* %{{.*}}, align 4 | 128 // CHECK: load i32, i32* %{{.*}}, align 4 |
129 // CHECK: } | 129 // CHECK: } |
130 // CHECK-LABEL: define i32 @f3_c | 130 // CHECK-LABEL: define{{.*}} i32 @f3_c |
131 // CHECK: load i32, i32* %{{.*}}, align 1 | 131 // CHECK: load i32, i32* %{{.*}}, align 1 |
132 // CHECK: } | 132 // CHECK: } |
133 // CHECK-LABEL: define i32 @f3_d | 133 // CHECK-LABEL: define{{.*}} i32 @f3_d |
134 // CHECK: load i32, i32* %{{.*}}, align 1 | 134 // CHECK: load i32, i32* %{{.*}}, align 1 |
135 // CHECK: } | 135 // CHECK: } |
136 int f3_a(struct s3 *a) { | 136 int f3_a(struct s3 *a) { |
137 return a->x[1]; | 137 return a->x[1]; |
138 } | 138 } |
146 return a->z; | 146 return a->z; |
147 } | 147 } |
148 | 148 |
149 // Verify we don't claim things are overaligned. | 149 // Verify we don't claim things are overaligned. |
150 // | 150 // |
151 // CHECK-LABEL: define double @f4 | 151 // CHECK-LABEL: define{{.*}} double @f4 |
152 // CHECK: load double, double* {{.*}}, align 8 | 152 // CHECK: load double, double* {{.*}}, align 8 |
153 // CHECK: } | 153 // CHECK: } |
154 extern double g4[5] __attribute__((aligned(16))); | 154 extern double g4[5] __attribute__((aligned(16))); |
155 double f4() { | 155 double f4() { |
156 return g4[1]; | 156 return g4[1]; |