Revision tags: llvmorg-3.8.1, llvmorg-3.8.1-rc1 |
|
#
f9acacaa |
| 31-May-2016 |
Matthias Braun <matze@braunis.de> |
CodeGen: Refactor renameDisconnectedComponents() as a pass
Refactor LiveIntervals::renameDisconnectedComponents() to be a pass. Also change the name to "RenameIndependentSubregs":
- renameDisconnec
CodeGen: Refactor renameDisconnectedComponents() as a pass
Refactor LiveIntervals::renameDisconnectedComponents() to be a pass. Also change the name to "RenameIndependentSubregs":
- renameDisconnectedComponents() worked on a MachineFunction at a time so it is a natural candidate for a machine function pass.
- The algorithm is testable with a .mir test now.
- This also fixes a problem where the lazy renaming as part of the MachineScheduler introduced IMPLICIT_DEF instructions after the number of a nodes in a region were counted leading to a mismatch.
Differential Revision: http://reviews.llvm.org/D20507
llvm-svn: 271345
show more ...
|
#
49cb6e90 |
| 27-May-2016 |
Matthias Braun <matze@braunis.de> |
MachineScheduler: Introduce ONLY1 reason to improve debug output
llvm-svn: 271058
|
#
858d1df2 |
| 20-May-2016 |
Matthias Braun <matze@braunis.de> |
LiveIntervalAnalysis: Fix missing defs in renameDisconnectedComponents().
Fix renameDisconnectedComponents() creating vreg uses that can be reached from function begin withouthaving a definition (or
LiveIntervalAnalysis: Fix missing defs in renameDisconnectedComponents().
Fix renameDisconnectedComponents() creating vreg uses that can be reached from function begin withouthaving a definition (or explicit live-in). Fix this by inserting IMPLICIT_DEF instruction before control-flow joins as necessary.
Removes an assert from MachineScheduler because we may now get additional IMPLICIT_DEF when preparing the scheduling policy.
This fixes the underlying problem of http://llvm.org/PR27705
llvm-svn: 270259
show more ...
|
#
31d19d43 |
| 10-May-2016 |
Matthias Braun <matze@braunis.de> |
CodeGen: Move TargetPassConfig from Passes.h to an own header; NFC
Many files include Passes.h but only a fraction needs to know about the TargetPassConfig class. Move it into an own header. Also re
CodeGen: Move TargetPassConfig from Passes.h to an own header; NFC
Many files include Passes.h but only a fraction needs to know about the TargetPassConfig class. Move it into an own header. Also rename Passes.cpp to TargetPassConfig.cpp while we are at it.
llvm-svn: 269011
show more ...
|
#
7ea9a529 |
| 28-Apr-2016 |
Krzysztof Parzyszek <kparzysz@codeaurora.org> |
Reset the TopRPTracker's position in ScheduleDAGMILive::initQueues
ScheduleDAGMI::initQueues changes the RegionBegin to the first non-debug instruction. Since it does not track register pressure, it
Reset the TopRPTracker's position in ScheduleDAGMILive::initQueues
ScheduleDAGMI::initQueues changes the RegionBegin to the first non-debug instruction. Since it does not track register pressure, it does not affect any RP trackers. ScheduleDAGMILive inherits initQueues from ScheduleDAGMI, and it does reset the TopTPTracker in its schedule method. Any derived, target-specific scheduler will need to do it as well, but the TopRPTracker is only exposed as a "const" object to derived classes. Without the ability to modify the tracker directly, this leaves a derived scheduler with a potential of having the TopRPTracker out-of-sync with the CurrentTop.
The symptom of the problem: void llvm::ScheduleDAGMILive::scheduleMI(llvm::SUnit *, bool): Assertion `TopRPTracker.getPos() == CurrentTop && "out of sync"' failed.
Differential Revision: http://reviews.llvm.org/D19438
llvm-svn: 267918
show more ...
|
#
aa641a51 |
| 22-Apr-2016 |
Andrew Kaylor <andrew.kaylor@intel.com> |
Re-commit optimization bisect support (r267022) without new pass manager support.
The original commit was reverted because of a buildbot problem with LazyCallGraph::SCC handling (not related to the
Re-commit optimization bisect support (r267022) without new pass manager support.
The original commit was reverted because of a buildbot problem with LazyCallGraph::SCC handling (not related to the OptBisect handling).
Differential Revision: http://reviews.llvm.org/D19172
llvm-svn: 267231
show more ...
|
#
4f57377c |
| 22-Apr-2016 |
Matthias Braun <matze@braunis.de> |
MachineScheduler: Move code to initialize a Candidate out of tryCandidate(); NFC
llvm-svn: 267191
|
#
6493bc2b |
| 22-Apr-2016 |
Matthias Braun <matze@braunis.de> |
MachineScheduler: Limit the size of the ready list.
Avoid quadratic complexity in unusually large basic blocks by limiting the size of the ready lists.
Differential Revision: http://reviews.llvm.or
MachineScheduler: Limit the size of the ready list.
Avoid quadratic complexity in unusually large basic blocks by limiting the size of the ready lists.
Differential Revision: http://reviews.llvm.org/D19349
llvm-svn: 267189
show more ...
|
#
6013f45f |
| 22-Apr-2016 |
Vedant Kumar <vsk@apple.com> |
Revert "Initial implementation of optimization bisect support."
This reverts commit r267022, due to an ASan failure:
http://lab.llvm.org:8080/green/job/clang-stage2-cmake-RgSan_check/1549
llvm-s
Revert "Initial implementation of optimization bisect support."
This reverts commit r267022, due to an ASan failure:
http://lab.llvm.org:8080/green/job/clang-stage2-cmake-RgSan_check/1549
llvm-svn: 267115
show more ...
|
#
f0f27929 |
| 21-Apr-2016 |
Andrew Kaylor <andrew.kaylor@intel.com> |
Initial implementation of optimization bisect support.
This patch implements a optimization bisect feature, which will allow optimizations to be selectively disabled at compile time in order to trac
Initial implementation of optimization bisect support.
This patch implements a optimization bisect feature, which will allow optimizations to be selectively disabled at compile time in order to track down test failures that are caused by incorrect optimizations.
The bisection is enabled using a new command line option (-opt-bisect-limit). Individual passes that may be skipped call the OptBisect object (via an LLVMContext) to see if they should be skipped based on the bisect limit. A finer level of control (disabling individual transformations) can be managed through an addition OptBisect method, but this is not yet used.
The skip checking in this implementation is based on (and replaces) the skipOptnoneFunction check. Where that check was being called, a new call has been inserted in its place which checks the bisect limit and the optnone attribute. A new function call has been added for module and SCC passes that behaves in a similar way.
Differential Revision: http://reviews.llvm.org/D19172
llvm-svn: 267022
show more ...
|
#
b550b765 |
| 21-Apr-2016 |
Matthias Braun <matze@braunis.de> |
MachineSched: Cleanup; NFC
llvm-svn: 266946
|
#
b550cb17 |
| 18-Apr-2016 |
Mehdi Amini <mehdi.amini@apple.com> |
[NFC] Header cleanup
Removed some unused headers, replaced some headers with forward class declarations.
Found using simple scripts like this one: clear && ack --cpp -l '#include "llvm/ADT/IndexedM
[NFC] Header cleanup
Removed some unused headers, replaced some headers with forward class declarations.
Found using simple scripts like this one: clear && ack --cpp -l '#include "llvm/ADT/IndexedMap.h"' | xargs grep -L 'IndexedMap[<]' | xargs grep -n --color=auto 'IndexedMap'
Patch by Eugene Kosov <claprix@yandex.ru>
Differential Revision: http://reviews.llvm.org/D19219
From: Mehdi Amini <mehdi.amini@apple.com> llvm-svn: 266595
show more ...
|
#
4c5bd58e |
| 15-Apr-2016 |
Jun Bum Lim <junbuml@codeaurora.org> |
[MachineScheduler]Add support for store clustering
Perform store clustering just like load clustering. This change add StoreClusterMutation in machine-scheduler. To control StoreClusterMutation, add
[MachineScheduler]Add support for store clustering
Perform store clustering just like load clustering. This change add StoreClusterMutation in machine-scheduler. To control StoreClusterMutation, added enableClusterStores() in TargetInstrInfo.h. This is enabled only on AArch64 for now.
This change also add support for unscaled stores which were not handled in getMemOpBaseRegImmOfs().
llvm-svn: 266437
show more ...
|
#
7511abd5 |
| 04-Apr-2016 |
Matthias Braun <matze@braunis.de> |
MachineScheduler: Ignore COPYs with undef/dead op in CopyConstrain mutation.
There is no problem with the code today, but the fix will avoid a crash in test/CodeGen/AMDGPU/subreg-coalescer-undef-use
MachineScheduler: Ignore COPYs with undef/dead op in CopyConstrain mutation.
There is no problem with the code today, but the fix will avoid a crash in test/CodeGen/AMDGPU/subreg-coalescer-undef-use.ll once the DetectDeadLanes pass is added.
llvm-svn: 265351
show more ...
|
#
ac216fd9 |
| 11-Mar-2016 |
Chad Rosier <mcrosier@codeaurora.org> |
[misched] Fix a truncation issue from r263021.
The truncation was causing the sorting algorithm to behave oddly when comparing positive and negative offsets. Fortunately, this doesn't currently hap
[misched] Fix a truncation issue from r263021.
The truncation was causing the sorting algorithm to behave oddly when comparing positive and negative offsets. Fortunately, this doesn't currently happen in practice and was exposed by a WIP. Thus, I can't test this change now, but the follow on patch will.
llvm-svn: 263255
show more ...
|
#
c27a18f3 |
| 09-Mar-2016 |
Chad Rosier <mcrosier@codeaurora.org> |
[TII] Allow getMemOpBaseRegImmOfs() to accept negative offsets. NFC.
http://reviews.llvm.org/D17967
llvm-svn: 263021
|
#
5c61d11a |
| 05-Mar-2016 |
Krzysztof Parzyszek <kparzysz@codeaurora.org> |
Add DAG mutation interface to the post-RA scheduler
Differential Revision: http://reviews.llvm.org/D17868
llvm-svn: 262774
|
Revision tags: llvmorg-3.8.0 |
|
#
be8f8c44 |
| 27-Feb-2016 |
Duncan P. N. Exon Smith <dexonsmith@apple.com> |
CodeGen: Update LiveIntervalAnalysis API to use MachineInstr&, NFC
These parameters aren't expected to be null, so take them by reference.
llvm-svn: 262151
|
#
3ac9cc61 |
| 27-Feb-2016 |
Duncan P. N. Exon Smith <dexonsmith@apple.com> |
CodeGen: Take MachineInstr& in SlotIndexes and LiveIntervals, NFC
Take MachineInstr by reference instead of by pointer in SlotIndexes and the SlotIndex wrappers in LiveIntervals. The MachineInstrs
CodeGen: Take MachineInstr& in SlotIndexes and LiveIntervals, NFC
Take MachineInstr by reference instead of by pointer in SlotIndexes and the SlotIndex wrappers in LiveIntervals. The MachineInstrs here are never null, so this cleans up the API a bit. It also incidentally removes a few implicit conversions from MachineInstrBundleIterator to MachineInstr* (see PR26753).
At a couple of call sites it was convenient to convert to a range-based for loop over MachineBasicBlock::instr_begin/instr_end, so I added MachineBasicBlock::instrs.
llvm-svn: 262115
show more ...
|
Revision tags: llvmorg-3.8.0-rc3, llvmorg-3.8.0-rc2 |
|
#
816a1ab9 |
| 20-Jan-2016 |
Chad Rosier <mcrosier@codeaurora.org> |
MachineScheduler: Add a command line option to disable post scheduler.
llvm-svn: 258364
|
#
6338d7c3 |
| 20-Jan-2016 |
Chad Rosier <mcrosier@codeaurora.org> |
MachineScheduler: Honor optnone functions in the pre-ra scheduler.
llvm-svn: 258363
|
#
d4f6409d |
| 20-Jan-2016 |
Matthias Braun <matze@braunis.de> |
MachineScheduler: Allow independent scheduling of sub register defs
Note that this is disabled by default and still requires a patch to handleMove() which is not upstreamed yet.
If the TrackLaneMas
MachineScheduler: Allow independent scheduling of sub register defs
Note that this is disabled by default and still requires a patch to handleMove() which is not upstreamed yet.
If the TrackLaneMasks policy/strategy is enabled the MachineScheduler will build a schedule graph where definitions of independent subregisters are no longer serialised.
Implementation comments: - Without lane mask tracking a sub register def also counts as a use (except for the first one with the read-undef flag set), with lane mask tracking enabled this is no longer the case. - Pressure Diffs where previously maintained per definition of a vreg with the help of the SSA information contained in the LiveIntervals. With lanemask tracking enabled we cannot do this anymore and instead change the pressure diffs for all uses of the vreg as it becomes live/dead. For this changed style to work correctly we ignore uses of instructions that define the same register again: They won't affect register pressure. - With lanemask tracking we remove all read-undef flags from sub register defs when building the graph and re-add them later when all vreg lanes have become dead.
Differential Revision: http://reviews.llvm.org/D14969
llvm-svn: 258259
show more ...
|
#
5d458617 |
| 20-Jan-2016 |
Matthias Braun <matze@braunis.de> |
RegisterPressure: Make liveness tracking subregister aware
Differential Revision: http://reviews.llvm.org/D14968
llvm-svn: 258258
|
Revision tags: llvmorg-3.8.0-rc1 |
|
#
5ce53060 |
| 16-Dec-2015 |
Tom Stellard <thomas.stellard@amd.com> |
MachineScheduler: Add a target hook for deciding which RegPressure sets to increase
Summary: This patch adds a function called getRegPressureSetScore() to TargetRegisterInfo. The MachineScheduler u
MachineScheduler: Add a target hook for deciding which RegPressure sets to increase
Summary: This patch adds a function called getRegPressureSetScore() to TargetRegisterInfo. The MachineScheduler uses this when comparing instruction that increase the register pressure of different sets to determine which set is safer to increase.
This hook is useful for GPU targets where the number of registers in the class is not the best metric for determing which presser set is safer to increase.
Future work may include adding more parameters to this function, like for example, the current pressure level of the set or the amount that the pressure will be increased/decreased.
Reviewers: qcolombet, escha, arsenm, atrick, MatzeB
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D14806
llvm-svn: 255795
show more ...
|
Revision tags: llvmorg-3.7.1, llvmorg-3.7.1-rc2, llvmorg-3.7.1-rc1 |
|
#
e6edd48d |
| 13-Nov-2015 |
Matthias Braun <matze@braunis.de> |
MachineScheduler: Print initial pressure in debug dump
llvm-svn: 253097
|