[PATCH] D38691: Add anti- and output loop carried dependences in SwingScheduler

Brendon Cahoon via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Oct 12 15:26:21 PDT 2017


bcahoon added a comment.

Hi Ning,

Just a couple of minor comments, but I think the change looks good. I tried your example, provided in an earlier version, but it doesn't have any output or anti dependences by the time it gets to the pipeliner.  The load of a[i-1] gets optimized away.  I used the following to compile it, so perhaps some other command-line options are needed?

  clang -fno-unroll-loops -target hexagon -O2 example.c -o example.s -S

But, I did noticee that a lit test, test/CodeGen/Hexagon/vect/vect-v4i16.ll, fails with the patch due to extra output dependence edges.  It contains a loop that is no longer pipelined. The code generation is different, so the checks in the test fail.  I think it's fine, for this lit test to remove the checks:
; CHECK: memuh(r{{[0-9]+}}+#6)
; CHECK: combine(r{{[0-9]+}},r{{[0-9]+}})

and leave the check for the vaddh, which shows that the test is vectorized.

Thanks,
Brendon



================
Comment at: lib/CodeGen/MachinePipeliner.cpp:1026
 
 /// Add a chain edge between a load and store if the store can be an
 /// alias of the load on a subsequent iteration, i.e., a loop carried
----------------
Update the command to reflect the new functionality. 


================
Comment at: lib/CodeGen/MachinePipeliner.cpp:1050
+        continue;
+      for (auto Load : I->second) {
+        if (isSuccOrder(Load, &SU))
----------------
Change the variable name, Load, since this can be either a load or store.


https://reviews.llvm.org/D38691





More information about the llvm-commits mailing list