[llvm-dev] New Aggressive Dead Code Elimination (updated)
David Callahan via llvm-dev
llvm-dev at lists.llvm.org
Thu Jun 30 08:31:47 PDT 2016
I request additional review of diff: http://reviews.llvm.org/D18762
We noticed that a source of performance difference between llvm and
gcc was in dead code elimination. This diff replaces ADCE with a new
implementation which will remove control flow and, under option, also
remove may-be-infinite loops which are dead. The patch current has
"ADCE_new.h" and "ADCE_new.cpp" to clarify that this is essentially a
full rewrite of the deleted "ADCE.h" and "ADCE.cpp", When ready to
land, I plan to change these names back to the originals.
The new algorithm uses the iterated dominance frontier to
incrementally identify control dependence sources for live operations
to determine when branch operations are live. It adds a new fix-up
phase to correct update phi-nodeswhen control flow changes.
Below are compile time and performance impacts based on Facebook
internal code sets.
Baseline ADCE compared to new ADCE compile time, -O3 removing loops
Comparing compile times for ~400 source files from folly code base
"baseline" is total time in seconds for all files
"net_difference" is increase due to changes
"percent" is increase expressed aa persent of baseline
"samples" is number of distinct tests, these vary in some cases
as runs with high variance in timing are excluded from summary
baseline net_difference percent samples .
28,591.41 165.91 0.58 413 .
Baseline ADCE compared with new ADCE, also removing loops
baseline net_difference percent samples .
28,591.02 215.35 0.75 411 .
Here are the impacts on runtimes for three different internal sets of
benchmarks, again compiled -O3
baseline, percent, samples as above
Without removing loops:
baseline total samples .
105,846,951,721,178.10 1.000 85 .
28,317,122,801,690.20 0.998 288 .
364,771,688,928.16 0.997 64 .
With removing loops: (adding -mllvm -adce-remove-loops)
baseline total samples .
105,845,678,704,074.98 1.000 78 .
29,901,291,181,631.10 0.988 280 .
332,140,718,056.76 0.982 61 .
More information about the llvm-dev
mailing list