[all-commits] [llvm/llvm-project] 491dd2: [LazyCallGraph] Build SCCs of the reference graph ...

Fangrui Song via All-commits all-commits at lists.llvm.org
Mon Nov 2 13:23:01 PST 2020


  Branch: refs/heads/master
  Home:   https://github.com/llvm/llvm-project
  Commit: 491dd2711f7234e21983da355c32107ee1f6a750
      https://github.com/llvm/llvm-project/commit/491dd2711f7234e21983da355c32107ee1f6a750
  Author: Fangrui Song <i at maskray.me>
  Date:   2020-11-02 (Mon, 02 Nov 2020)

  Changed paths:
    M llvm/lib/Analysis/LazyCallGraph.cpp
    M llvm/test/Analysis/LazyCallGraph/alias.ll
    M llvm/test/Analysis/LazyCallGraph/basic.ll
    M llvm/test/Other/scc-pass-printer.ll
    M llvm/test/Transforms/Attributor/IPConstantProp/PR26044.ll
    M llvm/test/Transforms/Inline/cgscc-cycle-debug.ll
    M llvm/test/Transforms/Inline/cgscc-cycle.ll
    M llvm/test/Transforms/Inline/cgscc-incremental-invalidate.ll
    M llvm/test/Transforms/Inline/cgscc-invalidate.ll
    M llvm/test/Transforms/OpenMP/globalization_remarks.ll
    M llvm/test/Transforms/OpenMP/parallel_region_merging.ll
    M llvm/unittests/Analysis/CGSCCPassManagerTest.cpp
    M llvm/unittests/Analysis/LazyCallGraphTest.cpp

  Log Message:
  -----------
  [LazyCallGraph] Build SCCs of the reference graph in order

```
// The legacy PM CGPassManager discovers SCCs this way:
for function in the source order
  tarjanSCC(function)

// While the new PM CGSCCPassManager does:
for function in the reversed source order [1]
  discover a reference graph SCC
  build call graph SCCs inside the reference graph SCC
```

In the common cases, reference graph ~= call graph, the new PM order is
undesired because for `a | b | c` (3 independent functions), the new PM will
process them in the reversed order: c, b, a. If `a <-> b <-> c`, we can see
that `-print-after-all` will report the sole SCC as `scc: (c, b, a)`.

This patch corrects the iteration order. The discovered SCC order will match
the legacy PM in the common cases.

For some tests (`Transforms/Inline/cgscc-*.ll` and
`unittests/Analysis/CGSCCPassManagerTest.cpp`), the behaviors are dependent on
the SCC discovery order and there are too many check lines for the particular
order.  This patch simply reverses the function order to avoid changing too many
check lines.

Differential Revision: https://reviews.llvm.org/D90566




More information about the All-commits mailing list