[all-commits] [llvm/llvm-project] d84b32: [MacroFusion] Limit the max fused number as 2 to r...
QingShan Zhang via All-commits
all-commits at lists.llvm.org
Tue Dec 3 21:09:34 PST 2019
Branch: refs/heads/master
Home: https://github.com/llvm/llvm-project
Commit: d84b320dfd0a7dbedacc287ede5e5bc4c0f113ba
https://github.com/llvm/llvm-project/commit/d84b320dfd0a7dbedacc287ede5e5bc4c0f113ba
Author: QingShan Zhang <qshanz at cn.ibm.com>
Date: 2019-12-04 (Wed, 04 Dec 2019)
Changed paths:
M llvm/lib/CodeGen/MacroFusion.cpp
M llvm/test/CodeGen/AArch64/macro-fusion.ll
Log Message:
-----------
[MacroFusion] Limit the max fused number as 2 to reduce the dependency
This is the example:
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 |
+------+
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.
Differential Revision: https://reviews.llvm.org/D70066
More information about the All-commits
mailing list