Burst Inference Failure 9 - 2021.2 English

Vitis HLS Messaging (UG1448)

Document ID
UG1448
Release Date
2021-10-27
Version
2021.2 English

Description

Warning: [214-231] Access is clobbered by other on name (DebugLoc).
Other
LLVM instruction
Name
Name of array

Explanation

Burst inferencing will fail if it detects any overlapping array element access. Consider rewriting the code to eliminate any overlapping accesses in the same region.

Examples

  • Loop-carried dependency with read after write (RAW) dependence:
    //////////// ORIGINAL ////////////
    void foo(int *a) {
      for (long i = 2; i < 256; ++i)
        a[i] = a[i-2];
    }
     
    //////////// UPDATED ////////////
    // Remove overlapping accesses in the same region
    void foo(int *a, int *b, int n) {
      int t0 = a[0];
      int t1 = a[1];
      for (int i = 2; i < n; ++i) {
        int t2 = t0;
        a[i] = t2;
        t2 = t1;
        t1 = t0;
        t0 = t2;
      }
    }
  • Anti-dependency / write after read (WAR):
    //////////// ORIGINAL ////////////
    void foo(int *a, int n) {
      int buff[50];
      for (long i = 0; i < n; ++i) {
        buff[i] = a[i] + 100;
        ...
        a[i] = buff[i];
      }
    }
     
    //////////// UPDATED ////////////
    // Remove overlapping accesses in the same region
    void foo(int *a, int n) {
      int buff[50];
      for (long i = 0; i < n; ++i) {
        buff[i] = a[i] + 100;
        ...
      }
      for (long i = 0; i < n; ++i)
        a[i] = buff[i];
    }