[PATCH] D126533: [LAA] Relax pointer dependency with runtime pointer checks

Igor Kirillov via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 7 08:18:30 PDT 2022


igor.kirillov added a comment.

This patch actually also enables support for the cases where we have potentially conflicting accesses that have different strides (well invariant read is technically stride equal to zero). Here's one more real-live example:

   __attribute__((aligned(ALIGNMENT))) TYPE * const a = global_data.a;
   __attribute__((aligned(ALIGNMENT))) TYPE * const b = global_data.b;
   __attribute__((aligned(ALIGNMENT))) TYPE * const c = global_data.c;
   __attribute__((aligned(ALIGNMENT))) TYPE * const d = global_data.d;
  
  ...
  
  for (int i = 0; i < LEN/2; i++) {
    a[2*i] = c[i] * b[i] + d[i] * b[i] + c[i] * c[i] + d[i] * b[i] + d[i] * c[i];
  }

But we have to keep in mind that if we enable this feature then function `RuntimePointerChecking::groupChecks` will be running second time with `UseDependencies` equal to `false` and it will be emitting a lot of runtime check. There is a way to decrease that number by doing more accurate grouping and it can be implemented as follow-up patch.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D126533/new/

https://reviews.llvm.org/D126533



More information about the llvm-commits mailing list