Vitis HLS loop pipeline optimization is failing due to a data dependency. The HLS log includes multiple messages similar to the message shown below. The HLS pipeline optimization initially attempts to optimize with II = 1, and then increases the II in an attempt to successfully pipeline the loop. However, the pipeline optimization ultimately fails with II = 256.
The failure message includes source code line numbers and references to variable names. However, these variables names do not correspond to the OpenCL C source variable names. The variable names appear to be those for an intermediate or assembly representation of the original OpenCL C source code.
It would be very helpful to inspect the exact intermediate source code that contains the variable names referenced in the pipeline failure message. Is it possible to generate the intermediate code that contains the exact variable names referenced by the pipeline failure message? Is there an option for v++ that enables output of the intermediate representation of the OpenCL C source code that is being processed by the HLS pipeline optimizer?
WARNING: [HLS 200-880] The II Violation in module 'run_pass_1' (loop 'access_loop'): Unable to enforce a carried dependence constraint (II = 256, distance = 1, offset = 0) between 'store' operation ('mix_sroa_74_0119_i7_0_write_ln667', krnl.cl:667) of variable 'xor_ln651_200', krnl.cl:651 on local variable 'mix_sroa_74_0119_i7_0' and 'load' operation ('mix_sroa_74_0119_i7_0_load') on local variable 'mix_sroa_74_0119_i7_0'