5
5
// CHECK-DEVICE: [[ANN_numbanks_4:@.str]] = {{.*}}{memory:DEFAULT}{sizeinfo:4}{numbanks:4}
6
6
// CHECK-BOTH: @_ZZ15attrs_on_staticvE15static_annotate = internal{{.*}}constant i32 30, align 4
7
7
// CHECK-BOTH: [[ANN_annotate:@.str[.0-9]*]] = {{.*}}foobar
8
+ // CHECK-BOTH: @_ZZ15attrs_on_staticvE16static_force_p2d = internal{{.*}}constant i32 40, align 4
9
+ // CHECK-DEVICE: [[ANN_force_pow2_depth_0:@.str[.0-9]*]] = {{.*}}{memory:DEFAULT}{sizeinfo:4}{force_pow2_depth:0}
8
10
// CHECK-DEVICE: [[ANN_register:@.str.[0-9]*]] = {{.*}}{register:1}
9
11
// CHECK-DEVICE: [[ANN_memory_default:@.str.[0-9]*]] = {{.*}}{memory:DEFAULT}{sizeinfo:4}
10
12
// CHECK-DEVICE: [[ANN_mlab_sizeinfo_500:@.str.[0-9]*]] = {{.*}}{memory:MLAB}{sizeinfo:4,500}
22
24
// CHECK-DEVICE: [[ANN_bankbits_bankwidth:@.str.[0-9]*]] = {{.*}}{memory:DEFAULT}{sizeinfo:4,10,2}{bankwidth:16}{numbanks:2}{bank_bits:0}
23
25
// CHECK-DEVICE: [[ANN_memory_blockram:@.str.[0-9]*]] = {{.*}}{memory:BLOCK_RAM}{sizeinfo:4}
24
26
// CHECK-DEVICE: [[ANN_memory_mlab:@.str.[0-9]*]] = {{.*}}{memory:MLAB}{sizeinfo:4}
27
+ // CHECK-DEVICE: [[ANN_force_pow2_depth_1:@.str.[0-9]*]] = {{.*}}{memory:DEFAULT}{sizeinfo:4}{force_pow2_depth:1}
25
28
// CHECK-DEVICE: [[ANN_private_copies_4:@.str.[0-9]*]] = {{.*}}{memory:DEFAULT}{sizeinfo:4}{private_copies:4}
26
29
// CHECK-DEVICE: [[ANN_max_replicates_4:@.str.[0-9]*]] = {{.*}}{max_replicates:4}
27
30
28
31
// CHECK-BOTH: @llvm.global.annotations
29
32
// CHECK-DEVICE-SAME: { i8* addrspacecast (i8 addrspace(1)* bitcast (i32 addrspace(1)* @_ZZ15attrs_on_staticvE15static_numbanks to i8 addrspace(1)*) to i8*)
30
- // CHECK-DEVICE-SAME: [[ANN_numbanks_4]]{{.*}} i32 39
33
+ // CHECK-DEVICE-SAME: [[ANN_numbanks_4]]{{.*}} i32 43
31
34
// CHECK-DEVICE-SAME: { i8* addrspacecast (i8 addrspace(1)* bitcast (i32 addrspace(1)* @_ZZ15attrs_on_staticvE15static_annotate to i8 addrspace(1)*) to i8*)
32
35
// CHECK-HOST-SAME: { i8* bitcast (i32* @_ZZ15attrs_on_staticvE15static_annotate to i8*)
33
- // CHECK-BOTH-SAME: [[ANN_annotate]]{{.*}} i32 40
34
-
36
+ // CHECK-BOTH-SAME: [[ANN_annotate]]{{.*}} i32 44
37
+ // CHECK-DEVICE-SAME: { i8* addrspacecast (i8 addrspace(1)* bitcast (i32 addrspace(1)* @_ZZ15attrs_on_staticvE16static_force_p2d to i8 addrspace(1)*) to i8*)
38
+ // CHECK-DEVICE-SAME: [[ANN_force_pow2_depth_0]]{{.*}} i32 45
35
39
// CHECK-HOST-NOT: llvm.var.annotation
36
40
// CHECK-HOST-NOT: llvm.ptr.annotation
37
41
38
42
void attrs_on_static () {
39
43
const static int static_numbanks [[intelfpga::numbanks (4 )]] = 20 ;
40
44
const static int static_annotate [[clang::annotate (" foobar" )]] = 30 ;
45
+ const static int static_force_p2d [[intelfpga::force_pow2_depth (0 )]] = 40 ;
41
46
}
42
47
43
48
void attrs_on_var () {
@@ -105,6 +110,10 @@ void attrs_on_var() {
105
110
// CHECK-DEVICE: %[[VAR_BANK_BITS_WIDTH1:bank_bits_width[0-9]+]] = bitcast{{.*}}%bank_bits_width
106
111
// CHECK-DEVICE: @llvm.var.annotation{{.*}}%[[VAR_BANK_BITS_WIDTH1]],{{.*}}[[ANN_bankbits_bankwidth]]
107
112
[[intelfpga::bank_bits (0 ), intelfpga::bankwidth (16 )]] int bank_bits_width[10 ][2 ];
113
+ // CHECK-DEVICE: %[[VAR_FP2D:[0-9]+]] = bitcast{{.*}}%force_p2d
114
+ // CHECK-DEVICE: %[[VAR_FP2D1:force_p2d[0-9]+]] = bitcast{{.*}}%force_p2d
115
+ // CHECK-DEVICE: llvm.var.annotation{{.*}}%[[VAR_FP2D1]],{{.*}}[[ANN_force_pow2_depth_0]]
116
+ int force_p2d [[intelfpga::force_pow2_depth (0 )]];
108
117
}
109
118
110
119
void attrs_on_struct () {
@@ -123,6 +132,7 @@ void attrs_on_struct() {
123
132
int maxreplicates [[intelfpga::max_replicates(2 )]];
124
133
int dualport [[intelfpga::simple_dual_port]];
125
134
int bankbits [[intelfpga::bank_bits(4 , 5 )]];
135
+ int force_p2d [[intelfpga::force_pow2_depth(1 )]];
126
136
} s;
127
137
128
138
// CHECK-DEVICE: %[[FIELD_NUMBANKS:.*]] = getelementptr inbounds %struct.{{.*}}.attrs_on_struct{{.*}}
@@ -167,12 +177,15 @@ void attrs_on_struct() {
167
177
// CHECK-DEVICE: %[[FIELD_BANKBITS:.*]] = getelementptr inbounds %struct.{{.*}}.attrs_on_struct{{.*}}
168
178
// CHECK-DEVICE: call i32* @llvm.ptr.annotation.p0i32{{.*}}%[[FIELD_BANKBITS]]{{.*}}[[ANN_bankbits_4_5]]
169
179
s.bankbits = 0 ;
180
+ // CHECK-DEVICE: %[[FIELD_FP2D:.*]] = getelementptr inbounds %struct.{{.*}}.attrs_on_struct{{.*}}
181
+ // CHECK-DEVICE: call i32* @llvm.ptr.annotation.p0i32{{.*}}%[[FIELD_FP2D]]{{.*}}[[ANN_force_pow2_depth_1]]
182
+ s.force_p2d = 0 ;
170
183
}
171
184
172
185
// CHECK-HOST-NOT: llvm.var.annotation
173
186
// CHECK-HOST-NOT: llvm.ptr.annotation
174
187
175
- template <int A, int B>
188
+ template <int A, int B, int C >
176
189
void attrs_with_template_param () {
177
190
// CHECK-DEVICE: %[[TEMPL_NUMBANKS:numbanks[0-9]+]] = bitcast{{.*}}%numbanks
178
191
// CHECK-DEVICE: @llvm.var.annotation{{.*}}%[[TEMPL_NUMBANKS]],{{.*}}[[ANN_numbanks_4]]
@@ -189,13 +202,17 @@ void attrs_with_template_param() {
189
202
// CHECK-DEVICE: %[[TEMPL_BANKBITS:bankbits[0-9]+]] = bitcast{{.*}}%bankbits
190
203
// CHECK-DEVICE: @llvm.var.annotation{{.*}}%[[TEMPL_BANKBITS]],{{.*}}[[ANN_bankbits_4_5]]
191
204
int bankbits [[intelfpga::bank_bits (A, B)]];
205
+ // CHECK-DEVICE: %[[TEMPL_FP2D:force_p2d[0-9]+]] = bitcast{{.*}}%force_p2d
206
+ // CHECK-DEVICE: @llvm.var.annotation{{.*}}%[[TEMPL_FP2D]]{{.*}}[[ANN_force_pow2_depth_1]]
207
+ int force_p2d [[intelfpga::force_pow2_depth (C)]];
192
208
193
209
struct templ_on_struct_fields {
194
210
int numbanks [[intelfpga::numbanks(A)]] ;
195
211
int bankwidth [[intelfpga::bankwidth(A)]];
196
212
int privatecopies [[intelfpga::private_copies(A)]];
197
213
int maxreplicates [[intelfpga::max_replicates(A)]];
198
214
int bankbits [[intelfpga::bank_bits(A, B)]];
215
+ int force_p2d [[intelfpga::force_pow2_depth(C)]];
199
216
} s;
200
217
201
218
// CHECK-DEVICE: %[[FIELD_NUMBANKS:.*]] = getelementptr inbounds %struct.{{.*}}.templ_on_struct_fields{{.*}}
@@ -213,6 +230,9 @@ void attrs_with_template_param() {
213
230
// CHECK-DEVICE: %[[FIELD_BANKBITS:.*]] = getelementptr inbounds %struct.{{.*}}.templ_on_struct_fields{{.*}}
214
231
// CHECK-DEVICE: call i32* @llvm.ptr.annotation.p0i32{{.*}}%[[FIELD_BANKBITS]]{{.*}}[[ANN_bankbits_4_5]]
215
232
s.bankbits = 0 ;
233
+ // CHECK-DEVICE: %[[FIELD_FP2D:.*]] = getelementptr inbounds %struct.{{.*}}.templ_on_struct_fields{{.*}}
234
+ // CHECK-DEVICE: call i32* @llvm.ptr.annotation.p0i32{{.*}}%[[FIELD_FP2D]]{{.*}}[[ANN_force_pow2_depth_1]]
235
+ s.force_p2d = 0 ;
216
236
}
217
237
218
238
void field_addrspace_cast () {
@@ -246,7 +266,7 @@ int main() {
246
266
attrs_on_var ();
247
267
attrs_on_struct ();
248
268
field_addrspace_cast ();
249
- attrs_with_template_param<4 ,5 >();
269
+ attrs_with_template_param<4 , 5 , 1 >();
250
270
});
251
271
return 0 ;
252
272
}
0 commit comments