55// CHECK-DEVICE: [[ANN_numbanks_4:@.str]] = {{.*}}{memory:DEFAULT}{sizeinfo:4}{numbanks:4}
66// CHECK-BOTH: @_ZZ15attrs_on_staticvE15static_annotate = internal{{.*}}constant i32 30, align 4
77// 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}
810// CHECK-DEVICE: [[ANN_register:@.str.[0-9]*]] = {{.*}}{register:1}
911// CHECK-DEVICE: [[ANN_memory_default:@.str.[0-9]*]] = {{.*}}{memory:DEFAULT}{sizeinfo:4}
1012// CHECK-DEVICE: [[ANN_mlab_sizeinfo_500:@.str.[0-9]*]] = {{.*}}{memory:MLAB}{sizeinfo:4,500}
2224// CHECK-DEVICE: [[ANN_bankbits_bankwidth:@.str.[0-9]*]] = {{.*}}{memory:DEFAULT}{sizeinfo:4,10,2}{bankwidth:16}{numbanks:2}{bank_bits:0}
2325// CHECK-DEVICE: [[ANN_memory_blockram:@.str.[0-9]*]] = {{.*}}{memory:BLOCK_RAM}{sizeinfo:4}
2426// 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}
2528// CHECK-DEVICE: [[ANN_private_copies_4:@.str.[0-9]*]] = {{.*}}{memory:DEFAULT}{sizeinfo:4}{private_copies:4}
2629// CHECK-DEVICE: [[ANN_max_replicates_4:@.str.[0-9]*]] = {{.*}}{max_replicates:4}
2730
2831// CHECK-BOTH: @llvm.global.annotations
2932// 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
3134// CHECK-DEVICE-SAME: { i8* addrspacecast (i8 addrspace(1)* bitcast (i32 addrspace(1)* @_ZZ15attrs_on_staticvE15static_annotate to i8 addrspace(1)*) to i8*)
3235// 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
3539// CHECK-HOST-NOT: llvm.var.annotation
3640// CHECK-HOST-NOT: llvm.ptr.annotation
3741
3842void attrs_on_static () {
3943 const static int static_numbanks [[intelfpga::numbanks (4 )]] = 20 ;
4044 const static int static_annotate [[clang::annotate (" foobar" )]] = 30 ;
45+ const static int static_force_p2d [[intelfpga::force_pow2_depth (0 )]] = 40 ;
4146}
4247
4348void attrs_on_var () {
@@ -105,6 +110,10 @@ void attrs_on_var() {
105110 // CHECK-DEVICE: %[[VAR_BANK_BITS_WIDTH1:bank_bits_width[0-9]+]] = bitcast{{.*}}%bank_bits_width
106111 // CHECK-DEVICE: @llvm.var.annotation{{.*}}%[[VAR_BANK_BITS_WIDTH1]],{{.*}}[[ANN_bankbits_bankwidth]]
107112 [[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 )]];
108117}
109118
110119void attrs_on_struct () {
@@ -123,6 +132,7 @@ void attrs_on_struct() {
123132 int maxreplicates [[intelfpga::max_replicates(2 )]];
124133 int dualport [[intelfpga::simple_dual_port]];
125134 int bankbits [[intelfpga::bank_bits(4 , 5 )]];
135+ int force_p2d [[intelfpga::force_pow2_depth(1 )]];
126136 } s;
127137
128138 // CHECK-DEVICE: %[[FIELD_NUMBANKS:.*]] = getelementptr inbounds %struct.{{.*}}.attrs_on_struct{{.*}}
@@ -167,12 +177,15 @@ void attrs_on_struct() {
167177 // CHECK-DEVICE: %[[FIELD_BANKBITS:.*]] = getelementptr inbounds %struct.{{.*}}.attrs_on_struct{{.*}}
168178 // CHECK-DEVICE: call i32* @llvm.ptr.annotation.p0i32{{.*}}%[[FIELD_BANKBITS]]{{.*}}[[ANN_bankbits_4_5]]
169179 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 ;
170183}
171184
172185// CHECK-HOST-NOT: llvm.var.annotation
173186// CHECK-HOST-NOT: llvm.ptr.annotation
174187
175- template <int A, int B>
188+ template <int A, int B, int C >
176189void attrs_with_template_param () {
177190 // CHECK-DEVICE: %[[TEMPL_NUMBANKS:numbanks[0-9]+]] = bitcast{{.*}}%numbanks
178191 // CHECK-DEVICE: @llvm.var.annotation{{.*}}%[[TEMPL_NUMBANKS]],{{.*}}[[ANN_numbanks_4]]
@@ -189,13 +202,17 @@ void attrs_with_template_param() {
189202 // CHECK-DEVICE: %[[TEMPL_BANKBITS:bankbits[0-9]+]] = bitcast{{.*}}%bankbits
190203 // CHECK-DEVICE: @llvm.var.annotation{{.*}}%[[TEMPL_BANKBITS]],{{.*}}[[ANN_bankbits_4_5]]
191204 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)]];
192208
193209 struct templ_on_struct_fields {
194210 int numbanks [[intelfpga::numbanks(A)]] ;
195211 int bankwidth [[intelfpga::bankwidth(A)]];
196212 int privatecopies [[intelfpga::private_copies(A)]];
197213 int maxreplicates [[intelfpga::max_replicates(A)]];
198214 int bankbits [[intelfpga::bank_bits(A, B)]];
215+ int force_p2d [[intelfpga::force_pow2_depth(C)]];
199216 } s;
200217
201218 // CHECK-DEVICE: %[[FIELD_NUMBANKS:.*]] = getelementptr inbounds %struct.{{.*}}.templ_on_struct_fields{{.*}}
@@ -213,6 +230,9 @@ void attrs_with_template_param() {
213230 // CHECK-DEVICE: %[[FIELD_BANKBITS:.*]] = getelementptr inbounds %struct.{{.*}}.templ_on_struct_fields{{.*}}
214231 // CHECK-DEVICE: call i32* @llvm.ptr.annotation.p0i32{{.*}}%[[FIELD_BANKBITS]]{{.*}}[[ANN_bankbits_4_5]]
215232 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 ;
216236}
217237
218238void field_addrspace_cast () {
@@ -246,7 +266,7 @@ int main() {
246266 attrs_on_var ();
247267 attrs_on_struct ();
248268 field_addrspace_cast ();
249- attrs_with_template_param<4 ,5 >();
269+ attrs_with_template_param<4 , 5 , 1 >();
250270 });
251271 return 0 ;
252272}
0 commit comments