Skip to content

Commit a38cf85

Browse files
authored
[MachineLICM] Let targets decide if copy instructions are cheap (#146599)
When checking whether it is profitable to hoist an instruction, the pass may override a target's ruling because it assumes that all COPY instructions are cheap, and that may not be the case for all micro-architectures (especially for when copying between different register classes). On AArch64 there's 0% difference in performance in LLVM's test-suite with this change. Additionally, very few tests were affected which shows how it is not so useful to keep it. x86 performance is slightly better (but maybe that's just noise) for an A/B comparison consisting of five iterations on LLVM's test suite (Ryzen 5950X on Ubuntu): ``` $ ./utils/compare.py build-a/results* vs build-b/results* --lhs-name base --rhs-name patch --absolute-diff Tests: 3341 Metric: exec_time Program exec_time base patch diff LoopVector...meChecks4PointersDBeforeA/1000 824613.68 825394.06 780.38 LoopVector...timeChecks4PointersDBeforeA/32 18763.60 19486.02 722.42 LCALS/Subs...test:BM_MAT_X_MAT_LAMBDA/44217 37109.92 37572.52 462.60 LoopVector...ntimeChecks4PointersDAfterA/32 14211.35 14562.14 350.79 LoopVector...timeChecks4PointersDEqualsA/32 14221.44 14562.85 341.40 LoopVector...intersAllDisjointIncreasing/32 14222.73 14562.20 339.47 LoopVector...intersAllDisjointDecreasing/32 14223.85 14563.17 339.32 LoopVector...nLoopFrom_uint32_t_To_uint8_t_ 739.60 807.45 67.86 harris/har...est:BENCHMARK_HARRIS/2048/2048 15953.77 15998.94 45.17 LoopVector...nLoopFrom_uint8_t_To_uint16_t_ 301.94 331.21 29.27 LCALS/Subs...Raw.test:BM_DISC_ORD_RAW/44217 616.35 637.13 20.78 LCALS/Subs...Raw.test:BM_MAT_X_MAT_RAW/5001 3814.95 3833.70 18.75 LCALS/Subs...Raw.test:BM_HYDRO_2D_RAW/44217 812.98 830.64 17.66 LCALS/Subs...test:BM_IMP_HYDRO_2D_RAW/44217 811.26 828.13 16.87 ImageProce...ENCHMARK_BILATERAL_FILTER/64/4 714.77 726.23 11.46 exec_time l/r base patch diff count 3341.000000 3341.000000 3341.000000 mean 903.866450 899.732349 -4.134101 std 20635.900959 20565.289417 115.346928 min 0.000000 0.000000 -3380.455787 25% 0.000000 0.000000 0.000000 50% 0.000000 0.000000 0.000000 75% 1.806500 1.836397 0.000100 max 824613.680801 825394.062500 780.381699 ```
1 parent fb13be0 commit a38cf85

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

llvm/lib/CodeGen/MachineLICM.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1219,7 +1219,7 @@ bool MachineLICMImpl::HasHighOperandLatency(MachineInstr &MI, unsigned DefIdx,
12191219
/// Return true if the instruction is marked "cheap" or the operand latency
12201220
/// between its def and a use is one or less.
12211221
bool MachineLICMImpl::IsCheapInstruction(MachineInstr &MI) const {
1222-
if (TII->isAsCheapAsAMove(MI) || MI.isCopyLike())
1222+
if (TII->isAsCheapAsAMove(MI) || MI.isSubregToReg())
12231223
return true;
12241224

12251225
bool isCheap = false;

0 commit comments

Comments
 (0)