Revision tags: llvmorg-21-init, llvmorg-19.1.7, llvmorg-19.1.6, llvmorg-19.1.5, llvmorg-19.1.4 |
|
#
5f30b1aa |
| 04-Nov-2024 |
Hari Limaye <hari.limaye@arm.com> |
[FuncSpec] Improve handling of BinaryOperator instructions (#114534)
When visiting BinaryOperator instructions during estimation of codesize
savings for a candidate specialization, don't bail when
[FuncSpec] Improve handling of BinaryOperator instructions (#114534)
When visiting BinaryOperator instructions during estimation of codesize
savings for a candidate specialization, don't bail when the other
operand is not found to be constant. This allows us to find more
constants than we otherwise would, for example `and(false, x)`.
show more ...
|
Revision tags: llvmorg-19.1.3 |
|
#
c6931c25 |
| 23-Oct-2024 |
Hari Limaye <hari.limaye@arm.com> |
[FuncSpec] Only compute Latency bonus when necessary (#113159)
Only compute the Latency component of a specialisation's Bonus when
necessary, to avoid unnecessarily computing the Block Frequency
I
[FuncSpec] Only compute Latency bonus when necessary (#113159)
Only compute the Latency component of a specialisation's Bonus when
necessary, to avoid unnecessarily computing the Block Frequency
Information for a Function.
show more ...
|
Revision tags: llvmorg-19.1.2 |
|
#
6472cb1e |
| 09-Oct-2024 |
Alexandros Lamprineas <alexandros.lamprineas@arm.com> |
[FuncSpec] Improve estimation of select instruction. (#111176)
When propagating a constant to a select instruction we only consider the
condition operand as the use. I am extending the logic to con
[FuncSpec] Improve estimation of select instruction. (#111176)
When propagating a constant to a select instruction we only consider the
condition operand as the use. I am extending the logic to consider the
true and false values too, in case the condition had been found to be
constant in a previous propagation but halted.
show more ...
|
Revision tags: llvmorg-19.1.1, llvmorg-19.1.0, llvmorg-19.1.0-rc4, llvmorg-19.1.0-rc3, llvmorg-19.1.0-rc2, llvmorg-19.1.0-rc1, llvmorg-20-init |
|
#
36c6632e |
| 21-Jun-2024 |
Nikita Popov <npopov@redhat.com> |
[IR] Don't include PassInstrumentation.h in PassManager.h (NFC) (#96219)
Move PassInstrumentationAnalysis into PassInstrumentation.h and stop
including it in PassManager.h (effectively inverting th
[IR] Don't include PassInstrumentation.h in PassManager.h (NFC) (#96219)
Move PassInstrumentationAnalysis into PassInstrumentation.h and stop
including it in PassManager.h (effectively inverting the direction of
the dependency).
Most places using PassManager are not interested in PassInstrumentation,
and we no longer have any uses of it in PassManager.h itself (only in
PassManagerImpl.h).
show more ...
|
Revision tags: llvmorg-18.1.8, llvmorg-18.1.7, llvmorg-18.1.6, llvmorg-18.1.5, llvmorg-18.1.4, llvmorg-18.1.3, llvmorg-18.1.2, llvmorg-18.1.1, llvmorg-18.1.0, llvmorg-18.1.0-rc4, llvmorg-18.1.0-rc3, llvmorg-18.1.0-rc2, llvmorg-18.1.0-rc1, llvmorg-19-init, llvmorg-17.0.6, llvmorg-17.0.5, llvmorg-17.0.4, llvmorg-17.0.3 |
|
#
5181156b |
| 05-Oct-2023 |
Matthias Braun <matze@braunis.de> |
Use BlockFrequency type in more places (NFC) (#68266)
The `BlockFrequency` class abstracts `uint64_t` frequency values. Use it
more consistently in various APIs and disable implicit conversion to
Use BlockFrequency type in more places (NFC) (#68266)
The `BlockFrequency` class abstracts `uint64_t` frequency values. Use it
more consistently in various APIs and disable implicit conversion to
make usage more consistent and explicit.
- Use `BlockFrequency Freq` parameter for `setBlockFreq`,
`getProfileCountFromFreq` and `setBlockFreqAndScale` functions.
- Return `BlockFrequency` in `getEntryFreq()` functions.
- While on it change some `const BlockFrequency& Freq` parameters to
plain `BlockFreqency Freq`.
- Mark `BlockFrequency(uint64_t)` constructor as explicit.
- Add missing `BlockFrequency::operator!=`.
- Remove `uint64_t BlockFreqency::getMaxFrequency()`.
- Add `BlockFrequency BlockFrequency::max()` function.
show more ...
|
Revision tags: llvmorg-17.0.2, llvmorg-17.0.1, llvmorg-17.0.0, llvmorg-17.0.0-rc4, llvmorg-17.0.0-rc3, llvmorg-17.0.0-rc2 |
|
#
d1b376fd |
| 07-Aug-2023 |
Alexandros Lamprineas <alexandros.lamprineas@arm.com> |
[FuncSpec] Rework the discardment logic for unprofitable specializations.
Currently we make an arbitrary comparison between codesize and latency in order to decide whether to keep a specialization o
[FuncSpec] Rework the discardment logic for unprofitable specializations.
Currently we make an arbitrary comparison between codesize and latency in order to decide whether to keep a specialization or not. Sometimes the latency savings are biased in favor of loops because of imprecise block frequencies, therefore this metric contains a lot of noise. This patch tries to address the problem as follows:
* Reject specializations whose codesize savings are less than X% of the original function size. * Reject specializations whose latency savings are less than Y% of the original function size. * Reject specializations whose inlining bonus is less than Z% of the original function size.
I am not saying this is super precise, but at least X, Y and Z are configurable, allowing us to tweak the cost model. Moreover, it lets us prioritize codesize over latency, which is a less noisy metric.
I am also increasing the minimum size a function should have to be considered a candidate for specialization. Initially the cost of a function was calculated as
CodeMetrics::NumInsts * InlineConstants::getInstrCost()
which later in D150464 was altered into CodeMetrics::NumInsts since the metric is supposed to model TargetTransformInfo::TCK_CodeSize. However, we omitted adjusting MinFunctionSize in that commit.
Differential Revision: https://reviews.llvm.org/D157123
show more ...
|
#
c2d19002 |
| 07-Aug-2023 |
Alexandros Lamprineas <alexandros.lamprineas@arm.com> |
[FuncSpec] Estimate dead blocks more accurately.
Currently we only consider basic blocks with a unique predecessor when estimating the size of dead code. However, we could expand to this to consider
[FuncSpec] Estimate dead blocks more accurately.
Currently we only consider basic blocks with a unique predecessor when estimating the size of dead code. However, we could expand to this to consider blocks with a back-edge, or blocks preceded by dead blocks.
Differential Revision: https://reviews.llvm.org/D156903
show more ...
|
#
5bfefff1 |
| 31-Jul-2023 |
Alexandros Lamprineas <alexandros.lamprineas@arm.com> |
Reland [FuncSpec] Split the specialization bonus into CodeSize and Latency.
Currently we use a combined metric TargetTransformInfo::TCK_SizeAndLatency when estimating the specialization bonus. This
Reland [FuncSpec] Split the specialization bonus into CodeSize and Latency.
Currently we use a combined metric TargetTransformInfo::TCK_SizeAndLatency when estimating the specialization bonus. This is suboptimal, and in some cases erroneous. For example we shouldn't be weighting the codesize decrease attributed to constant propagation by the block frequency of the dead code. Instead only the latency savings should be weighted by block frequency. The total codesize savings from all the specialization arguments should be deducted from the specialization cost.
Differential Revision: https://reviews.llvm.org/D155103
show more ...
|
Revision tags: llvmorg-17.0.0-rc1 |
|
#
893d3a61 |
| 27-Jul-2023 |
Alexandros Lamprineas <alexandros.lamprineas@arm.com> |
Reland [FuncSpec] Add Phi nodes to the InstCostVisitor.
This patch allows constant folding of PHIs when estimating the user bonus. Phi nodes are a special case since some of their inputs may remain
Reland [FuncSpec] Add Phi nodes to the InstCostVisitor.
This patch allows constant folding of PHIs when estimating the user bonus. Phi nodes are a special case since some of their inputs may remain unresolved until all the specialization arguments have been processed by the InstCostVisitor. Therefore, we keep a list of dead basic blocks and then lazily visit the Phi nodes once the user bonus has been computed for all the specialization arguments.
Differential Revision: https://reviews.llvm.org/D154852
show more ...
|
#
32683b23 |
| 27-Jul-2023 |
Douglas Yung <douglas.yung@sony.com> |
Revert "[FuncSpec] Add Phi nodes to the InstCostVisitor."
This reverts commit 96ff464dd3aac255adc52787a1e28487a9cd4c35.
The test in this change was failing on many buildbots:
https://lab.llvm.org/
Revert "[FuncSpec] Add Phi nodes to the InstCostVisitor."
This reverts commit 96ff464dd3aac255adc52787a1e28487a9cd4c35.
The test in this change was failing on many buildbots:
https://lab.llvm.org/buildbot/#/builders/164/builds/41292 https://lab.llvm.org/buildbot/#/builders/258/builds/4491 https://lab.llvm.org/buildbot/#/builders/192/builds/3566 https://lab.llvm.org/buildbot/#/builders/123/builds/20411 https://lab.llvm.org/buildbot/#/builders/58/builds/42553 https://lab.llvm.org/buildbot/#/builders/247/builds/7037 https://lab.llvm.org/buildbot/#/builders/139/builds/46259 https://lab.llvm.org/buildbot/#/builders/216/builds/24650 https://lab.llvm.org/buildbot/#/builders/234/builds/12571 https://lab.llvm.org/buildbot/#/builders/232/builds/12574 https://lab.llvm.org/buildbot/#/builders/235/builds/975
show more ...
|
#
96ff464d |
| 27-Jul-2023 |
Alexandros Lamprineas <alexandros.lamprineas@arm.com> |
[FuncSpec] Add Phi nodes to the InstCostVisitor.
This patch allows constant folding of PHIs when estimating the user bonus. Phi nodes are a special case since some of their inputs may remain unresol
[FuncSpec] Add Phi nodes to the InstCostVisitor.
This patch allows constant folding of PHIs when estimating the user bonus. Phi nodes are a special case since some of their inputs may remain unresolved until all the specialization arguments have been processed by the InstCostVisitor. Therefore, we keep a list of dead basic blocks and then lazily visit the Phi nodes once the user bonus has been computed for all the specialization arguments.
In addition to the last revision this one fixes the bug reported on Phabricator.
Differential Revision: https://reviews.llvm.org/D154852
show more ...
|
#
2e00eba2 |
| 26-Jul-2023 |
Alexandros Lamprineas <alexandros.lamprineas@arm.com> |
[FuncSpec][NFC] Remove SSA copy intrinsics in the unittests.
Those are added by the SCCP Solver before invoking the Specializer. They need to be removed otherwise the destructor of PredicateInfo com
[FuncSpec][NFC] Remove SSA copy intrinsics in the unittests.
Those are added by the SCCP Solver before invoking the Specializer. They need to be removed otherwise the destructor of PredicateInfo complains.
Differential Revision: https://reviews.llvm.org/D156365
show more ...
|
#
c52ab9ea |
| 26-Jul-2023 |
Alexandros Lamprineas <alexandros.lamprineas@arm.com> |
Revert "[FuncSpec] Add Phi nodes to the InstCostVisitor."
Reverting due to the crash reported in D154852.
Also reverting the subsequent commit as collateral damage:
"[FuncSpec] Split the specializ
Revert "[FuncSpec] Add Phi nodes to the InstCostVisitor."
Reverting due to the crash reported in D154852.
Also reverting the subsequent commit as collateral damage:
"[FuncSpec] Split the specialization bonus into CodeSize and Latency."
show more ...
|
Revision tags: llvmorg-18-init |
|
#
20c8f58c |
| 07-Jul-2023 |
Alexandros Lamprineas <alexandros.lamprineas@arm.com> |
[FuncSpec] Split the specialization bonus into CodeSize and Latency.
Currently we use a combined metric TargetTransformInfo::TCK_SizeAndLatency when estimating the specialization bonus. This is subo
[FuncSpec] Split the specialization bonus into CodeSize and Latency.
Currently we use a combined metric TargetTransformInfo::TCK_SizeAndLatency when estimating the specialization bonus. This is suboptimal, and in some cases erroneous. For example we shouldn't be weighting the codesize decrease attributed to constant propagation by the block frequency of the dead code. Instead only the latency savings should be weighted by block frequency. The total codesize savings from all the specialization arguments should be deducted from the specialization cost.
Differential Revision: https://reviews.llvm.org/D155103
show more ...
|
#
03f1d09f |
| 06-Jul-2023 |
Alexandros Lamprineas <alexandros.lamprineas@arm.com> |
[FuncSpec] Add Phi nodes to the InstCostVisitor.
This patch allows constant folding of PHIs when estimating the user bonus. Phi nodes are a special case since some of their inputs may remain unresol
[FuncSpec] Add Phi nodes to the InstCostVisitor.
This patch allows constant folding of PHIs when estimating the user bonus. Phi nodes are a special case since some of their inputs may remain unresolved until all the specialization arguments have been processed by the InstCostVisitor. Therefore, we keep a list of dead basic blocks and then lazily visit the Phi nodes once the user bonus has been computed for all the specialization arguments.
Differential Revision: https://reviews.llvm.org/D154852
show more ...
|
#
1d0476cb |
| 04-Jul-2023 |
Alexandros Lamprineas <alexandros.lamprineas@arm.com> |
[FuncSpec] Prefer DataLayout-aware constant folding of GEPs.
As shown in D154820, the DataLayout-independent constant folding interface is not good enough for handling GEPs. Instead we should be usi
[FuncSpec] Prefer DataLayout-aware constant folding of GEPs.
As shown in D154820, the DataLayout-independent constant folding interface is not good enough for handling GEPs. Instead we should be using the DataLayout-aware constant folding interface. Since there isn't a method to specifically handle GEPs we can use the one which folds generic instruction operands.
Differential Revision: https://reviews.llvm.org/D154821
show more ...
|
#
cae00b2a |
| 10-Jul-2023 |
Alexandros Lamprineas <alexandros.lamprineas@arm.com> |
[FuncSpec][NFC] Improve the unittest coverage for constant folding of GEPs.
The InstCostVisitor is currently using the DataLayout-independent constant folding interface. This is a workaround since w
[FuncSpec][NFC] Improve the unittest coverage for constant folding of GEPs.
The InstCostVisitor is currently using the DataLayout-independent constant folding interface. This is a workaround since we can't directly call ConstantExpr::getGetElementPtr due to deprecation. This patch shows that the constant folding interface we are using is not good enough.
Differential Revision: https://reviews.llvm.org/D154820
show more ...
|
#
5400257d |
| 19-Jun-2023 |
Alexandros Lamprineas <alexandros.lamprineas@arm.com> |
[FuncSpec] Add Freeze and CallBase to the InstCostVisitor.
Allows constant folding of such instructions when estimating user bonus.
Differential Revision: https://reviews.llvm.org/D153036
|
#
f11d8c88 |
| 18-Jun-2023 |
Alexandros Lamprineas <alexandros.lamprineas@arm.com> |
[FuncSpec][NFC] Improve the unittest coverage.
The specialization bonus is zero in some unittests because the basic blocks containing the users of the constant arguments are executed less frequently
[FuncSpec][NFC] Improve the unittest coverage.
The specialization bonus is zero in some unittests because the basic blocks containing the users of the constant arguments are executed less frequently than the entry block. Sinking them into loops solves that.
Differential Revision: https://reviews.llvm.org/D153230
show more ...
|
Revision tags: llvmorg-16.0.6, llvmorg-16.0.5, llvmorg-16.0.4 |
|
#
4d13896d |
| 11-May-2023 |
Alexandros Lamprineas <alexandros.lamprineas@arm.com> |
Reland "[FuncSpec] Improve the accuracy of the cost model"
Instead of blindly traversing the use-def chain of constant arguments, compute known constants along the way. Stop as soon as a user cannot
Reland "[FuncSpec] Improve the accuracy of the cost model"
Instead of blindly traversing the use-def chain of constant arguments, compute known constants along the way. Stop as soon as a user cannot be replaced by a constant. Keep it light-weight by handling some basic instruction types.
Differential Revision: https://reviews.llvm.org/D150464
show more ...
|
#
0524534d |
| 24-May-2023 |
Alexandros Lamprineas <alexandros.lamprineas@arm.com> |
[FuncSpec] Enable specialization of literal constants.
To do so we have to tweak the cost model such that specialization does not trigger excessively.
Differential Revision: https://reviews.llvm.or
[FuncSpec] Enable specialization of literal constants.
To do so we have to tweak the cost model such that specialization does not trigger excessively.
Differential Revision: https://reviews.llvm.org/D150649
show more ...
|
#
ced90d1f |
| 11-May-2023 |
Alexandros Lamprineas <alexandros.lamprineas@arm.com> |
[FuncSpec] Improve the accuracy of the cost model.
Instead of blindly traversing the use-def chain of constant arguments, compute known constants along the way. Stop as soon as a user cannot be repl
[FuncSpec] Improve the accuracy of the cost model.
Instead of blindly traversing the use-def chain of constant arguments, compute known constants along the way. Stop as soon as a user cannot be replaced by a constant. Keep it light-weight by handling some basic instruction types.
Differential Revision: https://reviews.llvm.org/D150464
show more ...
|