@@ -113,44 +113,65 @@ void func3(void) {
113
113
// CL12-LABEL: define dso_local void @wrong_store_type_private_pointer_alloca(
114
114
// CL12-SAME: ) #[[ATTR0]] {
115
115
// CL12-NEXT: [[ENTRY:.*:]]
116
- // CL12-NEXT: [[PLONG:%.*]] = alloca i64, align 8, addrspace(5)
117
- // CL12-NEXT: [[PLONGP:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)
118
- // CL12-NEXT: [[GLONGP:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)
119
- // CL12-NEXT: store i64 5, ptr addrspace(5) [[PLONG]], align 8
120
- // CL12-NEXT: store ptr addrspace(5) [[PLONG]], ptr addrspace(5) [[PLONGP]], align 4
121
- // CL12-NEXT: [[TMP0:%.*]] = load ptr addrspace(5), ptr addrspace(5) [[PLONGP]], align 4
116
+ // CL12-NEXT: [[VAR:%.*]] = alloca i64, align 8, addrspace(5)
117
+ // CL12-NEXT: [[ALLOCA_ADDR:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)
118
+ // CL12-NEXT: store i64 5, ptr addrspace(5) [[VAR]], align 8
119
+ // CL12-NEXT: store ptr addrspace(5) [[VAR]], ptr addrspace(5) [[ALLOCA_ADDR]], align 4
120
+ // CL12-NEXT: [[TMP0:%.*]] = load ptr addrspace(5), ptr addrspace(5) [[ALLOCA_ADDR]], align 4
122
121
// CL12-NEXT: store i64 8, ptr addrspace(5) [[TMP0]], align 8
123
- // CL12-NEXT: store ptr addrspace(5) [[PLONG]], ptr addrspace(5) [[GLONGP]], align 4
124
- // CL12-NEXT: [[TMP1:%.*]] = load ptr addrspace(5), ptr addrspace(5) [[GLONGP]], align 4
125
- // CL12-NEXT: store i64 9, ptr addrspace(5) [[TMP1]], align 8
126
122
// CL12-NEXT: ret void
127
123
//
128
124
// CL20-LABEL: define dso_local void @wrong_store_type_private_pointer_alloca(
129
125
// CL20-SAME: ) #[[ATTR0]] {
130
126
// CL20-NEXT: [[ENTRY:.*:]]
131
- // CL20-NEXT: [[PLONG:%.*]] = alloca i64, align 8, addrspace(5)
132
- // CL20-NEXT: [[PLONGP:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)
133
- // CL20-NEXT: [[GLONGP:%.*]] = alloca ptr, align 8, addrspace(5)
134
- // CL20-NEXT: [[PLONG_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[PLONG]] to ptr
135
- // CL20-NEXT: [[PLONGP_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[PLONGP]] to ptr
136
- // CL20-NEXT: [[GLONGP_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[GLONGP]] to ptr
137
- // CL20-NEXT: store i64 5, ptr [[PLONG_ASCAST]], align 8
138
- // CL20-NEXT: store ptr [[PLONG_ASCAST]], ptr [[PLONGP_ASCAST]], align 4
139
- // CL20-NEXT: [[TMP0:%.*]] = load ptr addrspace(5), ptr [[PLONGP_ASCAST]], align 4
127
+ // CL20-NEXT: [[VAR:%.*]] = alloca i64, align 8, addrspace(5)
128
+ // CL20-NEXT: [[ALLOCA_ADDR:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)
129
+ // CL20-NEXT: [[VAR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[VAR]] to ptr
130
+ // CL20-NEXT: [[ALLOCA_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[ALLOCA_ADDR]] to ptr
131
+ // CL20-NEXT: store i64 5, ptr [[VAR_ASCAST]], align 8
132
+ // CL20-NEXT: store ptr [[VAR_ASCAST]], ptr [[ALLOCA_ADDR_ASCAST]], align 4
133
+ // CL20-NEXT: [[TMP0:%.*]] = load ptr addrspace(5), ptr [[ALLOCA_ADDR_ASCAST]], align 4
140
134
// CL20-NEXT: store i64 8, ptr addrspace(5) [[TMP0]], align 8
141
- // CL20-NEXT: store ptr [[PLONG_ASCAST]], ptr [[GLONGP_ASCAST]], align 8
142
- // CL20-NEXT: [[TMP1:%.*]] = load ptr, ptr [[GLONGP_ASCAST]], align 8
143
- // CL20-NEXT: store i64 9, ptr [[TMP1]], align 8
144
135
// CL20-NEXT: ret void
145
136
//
146
137
void wrong_store_type_private_pointer_alloca () {
147
- long plong = 5 ;
138
+ long var = 5 ;
148
139
149
- // This needs to write an addrspace(5) pointer to the temporary alloca
150
- __private long * plongp = & plong ;
151
- * plongp = 8 ;
140
+ // This needs to write an addrspace(5) pointer to the temporary alloca,
141
+ // which should be allocated with the correct size.
142
+ __private long * alloca_addr = & var ;
143
+ * alloca_addr = 8 ;
144
+ }
145
+
146
+ // CL12-LABEL: define dso_local void @wrong_store_type_private_pointer_as_generic_alloca(
147
+ // CL12-SAME: ) #[[ATTR0]] {
148
+ // CL12-NEXT: [[ENTRY:.*:]]
149
+ // CL12-NEXT: [[VAR:%.*]] = alloca i64, align 8, addrspace(5)
150
+ // CL12-NEXT: [[ALLOCA_ADDR_AS_GENERIC:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)
151
+ // CL12-NEXT: store i64 5, ptr addrspace(5) [[VAR]], align 8
152
+ // CL12-NEXT: store ptr addrspace(5) [[VAR]], ptr addrspace(5) [[ALLOCA_ADDR_AS_GENERIC]], align 4
153
+ // CL12-NEXT: [[TMP0:%.*]] = load ptr addrspace(5), ptr addrspace(5) [[ALLOCA_ADDR_AS_GENERIC]], align 4
154
+ // CL12-NEXT: store i64 9, ptr addrspace(5) [[TMP0]], align 8
155
+ // CL12-NEXT: ret void
156
+ //
157
+ // CL20-LABEL: define dso_local void @wrong_store_type_private_pointer_as_generic_alloca(
158
+ // CL20-SAME: ) #[[ATTR0]] {
159
+ // CL20-NEXT: [[ENTRY:.*:]]
160
+ // CL20-NEXT: [[VAR:%.*]] = alloca i64, align 8, addrspace(5)
161
+ // CL20-NEXT: [[ALLOCA_ADDR_AS_GENERIC:%.*]] = alloca ptr, align 8, addrspace(5)
162
+ // CL20-NEXT: [[VAR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[VAR]] to ptr
163
+ // CL20-NEXT: [[ALLOCA_ADDR_AS_GENERIC_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[ALLOCA_ADDR_AS_GENERIC]] to ptr
164
+ // CL20-NEXT: store i64 5, ptr [[VAR_ASCAST]], align 8
165
+ // CL20-NEXT: store ptr [[VAR_ASCAST]], ptr [[ALLOCA_ADDR_AS_GENERIC_ASCAST]], align 8
166
+ // CL20-NEXT: [[TMP0:%.*]] = load ptr, ptr [[ALLOCA_ADDR_AS_GENERIC_ASCAST]], align 8
167
+ // CL20-NEXT: store i64 9, ptr [[TMP0]], align 8
168
+ // CL20-NEXT: ret void
169
+ //
170
+ void wrong_store_type_private_pointer_as_generic_alloca () {
171
+ long var = 5 ;
152
172
153
- // This needs to write an addrspace(0) pointer to the temporary alloca in CL2.0
154
- long * glongp = & plong ;
155
- * glongp = 9 ;
173
+ // This needs to write an addrspace(0) pointer to the temporary alloca in
174
+ // CL2.0, which should be allocated with the correct size.
175
+ long * alloca_addr_as_generic = & var ;
176
+ * alloca_addr_as_generic = 9 ;
156
177
}
0 commit comments