[PATCH] D70066: [MacroFusion] Limit the max fused number as 2 to reduce the dependency

qshanz via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sun Nov 24 18:26:48 PST 2019


steven.zhang added a comment.

See the example I gave in https://reviews.llvm.org/D69998,

  int foo(int a, int b, int c, int d) {
    return a + b + c +d;
  }

And this is the Dependency Graph:

  +------+       +------+       +------+       +------+
  |  A   |       |  B   |       |  C   |       |  D   |
  +--+--++       +---+--+       +--+---+       +--+---+
     ^  ^            ^  ^          ^              ^
     |  |            |  |          |              |
     |  |            |  |New1      +--------------+
     |  |            |  |          |
     |  |            |  |       +--+---+
     |  |New2        |  +-------+ ADD1 |
     |  |            |          +--+---+
     |  |            |    Fuse     ^
     |  |            +-------------+
     |  +------------+
     |               |
     |   Fuse     +--+---+
     +----------->+ ADD2 |
     |            +------+
  +--+---+
  | ADD3 |
  +------+

And we need also create an artificial edge from ADD1 to A if https://reviews.llvm.org/D69998 is landed. That will force the Node A scheduled before the ADD1 and ADD2. But in fact, it is ok to schedule the Node A in-between ADD3 and ADD2, as ADD3 and ADD2 are NOT a fusion pair because ADD2 has been matched to ADD1.  We are creating these unnecessary dependency edges that override the heuristics.


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

https://reviews.llvm.org/D70066





More information about the llvm-commits mailing list