#
90e4c3f3 |
| 17-Jun-2017 |
Galina Kistanova <gkistanova@gmail.com> |
Fixed the warning introduced by r305625 to make ubuntu-gcc7.1-werror bot green.
llvm-svn: 305640
|
#
537d0391 |
| 17-Jun-2017 |
Matthias Braun <matze@braunis.de> |
RegScavenging: Add scavengeRegisterBackwards()
Re-apply r276044/r279124/r305516. Fixed a problem where we would refuse to place spills as the very first instruciton of a basic block and thus artific
RegScavenging: Add scavengeRegisterBackwards()
Re-apply r276044/r279124/r305516. Fixed a problem where we would refuse to place spills as the very first instruciton of a basic block and thus artifically increase pressure (test in test/CodeGen/PowerPC/scavenging.mir:spill_at_begin)
This is a variant of scavengeRegister() that works for enterBasicBlockEnd()/backward(). The benefit of the backward mode is that it is not affected by incomplete kill flags.
This patch also changes PrologEpilogInserter::doScavengeFrameVirtualRegs() to use the register scavenger in backwards mode.
Differential Revision: http://reviews.llvm.org/D21885
llvm-svn: 305625
show more ...
|
#
35530d71 |
| 16-Jun-2017 |
Matthias Braun <matze@braunis.de> |
Revert "RegScavenging: Add scavengeRegisterBackwards()"
Revert because of reports of some PPC input starting to spill when it was predicted that it wouldn't and no spillslot was reserved.
This reve
Revert "RegScavenging: Add scavengeRegisterBackwards()"
Revert because of reports of some PPC input starting to spill when it was predicted that it wouldn't and no spillslot was reserved.
This reverts commit r305516.
llvm-svn: 305566
show more ...
|
#
a42c5379 |
| 15-Jun-2017 |
Matthias Braun <matze@braunis.de> |
RegScavenging: Add scavengeRegisterBackwards()
Re-apply r276044/r279124. Trying to reproduce or disprove the ppc64 problems reported in the stage2 build last time, which I cannot reproduce right now
RegScavenging: Add scavengeRegisterBackwards()
Re-apply r276044/r279124. Trying to reproduce or disprove the ppc64 problems reported in the stage2 build last time, which I cannot reproduce right now.
This is a variant of scavengeRegister() that works for enterBasicBlockEnd()/backward(). The benefit of the backward mode is that it is not affected by incomplete kill flags.
This patch also changes PrologEpilogInserter::doScavengeFrameVirtualRegs() to use the register scavenger in backwards mode.
Differential Revision: http://reviews.llvm.org/D21885
llvm-svn: 305516
show more ...
|
Revision tags: llvmorg-4.0.1, llvmorg-4.0.1-rc3 |
|
#
0021d46a |
| 02-Jun-2017 |
Matthias Braun <matze@braunis.de> |
RegisterScavenging: Add ScavengerTest pass
This pass allows to run the register scavenging independently of PrologEpilogInserter to allow targeted testing.
Also adds some basic register scavenging
RegisterScavenging: Add ScavengerTest pass
This pass allows to run the register scavenging independently of PrologEpilogInserter to allow targeted testing.
Also adds some basic register scavenging tests.
llvm-svn: 304606
show more ...
|
#
dfa89213 |
| 02-Jun-2017 |
Matthias Braun <matze@braunis.de> |
RegisterScavenging: Move scavenging logic from PEI to RegisterScavenging; NFC
These parts do not depend on any PrologEpilogInserter logic and therefore better fits RegisterScaveging.cpp.
llvm-svn:
RegisterScavenging: Move scavenging logic from PEI to RegisterScavenging; NFC
These parts do not depend on any PrologEpilogInserter logic and therefore better fits RegisterScaveging.cpp.
llvm-svn: 304596
show more ...
|
Revision tags: llvmorg-4.0.1-rc2 |
|
#
fd5a8159 |
| 09-May-2017 |
Krzysztof Parzyszek <kparzysz@codeaurora.org> |
[RegScavenger] Rangify a loop, NFC
llvm-svn: 302554
|
Revision tags: llvmorg-4.0.1-rc1 |
|
#
44e25f37 |
| 24-Apr-2017 |
Krzysztof Parzyszek <kparzysz@codeaurora.org> |
Move size and alignment information of regclass to TargetRegisterInfo
1. RegisterClass::getSize() is split into two functions: - TargetRegisterInfo::getRegSizeInBits(const TargetRegisterClass &RC
Move size and alignment information of regclass to TargetRegisterInfo
1. RegisterClass::getSize() is split into two functions: - TargetRegisterInfo::getRegSizeInBits(const TargetRegisterClass &RC) const; - TargetRegisterInfo::getSpillSize(const TargetRegisterClass &RC) const; 2. RegisterClass::getAlignment() is replaced by: - TargetRegisterInfo::getSpillAlignment(const TargetRegisterClass &RC) const;
This will allow making those values depend on subtarget features in the future.
Differential Revision: https://reviews.llvm.org/D31783
llvm-svn: 301221
show more ...
|
Revision tags: llvmorg-4.0.0, llvmorg-4.0.0-rc4, llvmorg-4.0.0-rc3 |
|
#
49e2fc4f |
| 21-Feb-2017 |
Eugene Zelenko <eugene.zelenko@gmail.com> |
[CodeGen] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC).
llvm-svn: 295773
|
Revision tags: llvmorg-4.0.0-rc2 |
|
#
710a4c1f |
| 20-Jan-2017 |
Matthias Braun <matze@braunis.de> |
CodeGen: Add/Factor out LiveRegUnits class; NFCI
This is a set of register units intended to track register liveness, it is similar in spirit to LivePhysRegs. You can also think of this as the liven
CodeGen: Add/Factor out LiveRegUnits class; NFCI
This is a set of register units intended to track register liveness, it is similar in spirit to LivePhysRegs. You can also think of this as the liveness tracking parts of the RegisterScavenger factored out into an own class.
This was proposed in http://llvm.org/PR27609
Differential Revision: http://reviews.llvm.org/D21916
llvm-svn: 292542
show more ...
|
Revision tags: llvmorg-4.0.0-rc1 |
|
#
11723322 |
| 05-Jan-2017 |
Matthias Braun <matze@braunis.de> |
CodeGen: Assert that liveness is up to date when reading block live-ins.
Add an assert that checks whether liveins are up to date before they are used.
- Do not print liveins into .mir files anymor
CodeGen: Assert that liveness is up to date when reading block live-ins.
Add an assert that checks whether liveins are up to date before they are used.
- Do not print liveins into .mir files anymore in situations where they are out of date anyway. - The assert in the RegisterScavenger is superseded by the new one in livein_begin(). - Skip parts of the liveness updating logic in IfConversion.cpp when liveness isn't tracked anymore (just enough to avoid hitting the new assert()).
Differential Revision: https://reviews.llvm.org/D27562
llvm-svn: 291169
show more ...
|
#
ea9f8ce0 |
| 16-Dec-2016 |
Krzysztof Parzyszek <kparzysz@codeaurora.org> |
Implement LaneBitmask::any(), use it to replace !none(), NFCI
llvm-svn: 289974
|
#
91b5cf84 |
| 15-Dec-2016 |
Krzysztof Parzyszek <kparzysz@codeaurora.org> |
Extract LaneBitmask into a separate type
Specifically avoid implicit conversions from/to integral types to avoid potential errors when changing the underlying type. For example, a typical initializa
Extract LaneBitmask into a separate type
Specifically avoid implicit conversions from/to integral types to avoid potential errors when changing the underlying type. For example, a typical initialization of a "full" mask was "LaneMask = ~0u", which would result in a value of 0x00000000FFFFFFFF if the type was extended to uint64_t.
Differential Revision: https://reviews.llvm.org/D27454
llvm-svn: 289820
show more ...
|
Revision tags: llvmorg-3.9.1, llvmorg-3.9.1-rc3, llvmorg-3.9.1-rc2, llvmorg-3.9.1-rc1 |
|
#
0b7c4af3 |
| 06-Sep-2016 |
Silviu Baranga <silviu.baranga@arm.com> |
[RegisterScavenger] Remove aliasing registers of operands from the candidate set
Summary: In addition to not including the register operand of the current instruction also don't include any aliasing
[RegisterScavenger] Remove aliasing registers of operands from the candidate set
Summary: In addition to not including the register operand of the current instruction also don't include any aliasing registers. We can't consider these as candidates because using them will clobber the corresponding register operand of the current instruction.
This change doesn't include a test case and it would probably be difficult to produce a stable one since the bug depends on the results of register allocation.
Reviewers: MatzeB, qcolombet, hfinkel
Subscribers: hfinkel, llvm-commits
Differential Revision: https://reviews.llvm.org/D24130
llvm-svn: 280698
show more ...
|
Revision tags: llvmorg-3.9.0, llvmorg-3.9.0-rc3 |
|
#
fdc4c6b4 |
| 19-Aug-2016 |
Matthias Braun <matze@braunis.de> |
Revert "RegScavenging: Add scavengeRegisterBackwards()"
The ppc64 multistage bot fails on this.
This reverts commit r279124.
Also Revert "CodeGen: Add/Factor out LiveRegUnits class; NFCI" because
Revert "RegScavenging: Add scavengeRegisterBackwards()"
The ppc64 multistage bot fails on this.
This reverts commit r279124.
Also Revert "CodeGen: Add/Factor out LiveRegUnits class; NFCI" because it depends on the previous change This reverts commit r279171.
llvm-svn: 279199
show more ...
|
Revision tags: llvmorg-3.9.0-rc2 |
|
#
91f95f02 |
| 18-Aug-2016 |
Matthias Braun <matze@braunis.de> |
CodeGen: Add/Factor out LiveRegUnits class; NFCI
This is a set of register units intended to track register liveness, it is similar in spirit to LivePhysRegs. You can also think of this as the liven
CodeGen: Add/Factor out LiveRegUnits class; NFCI
This is a set of register units intended to track register liveness, it is similar in spirit to LivePhysRegs. You can also think of this as the liveness tracking parts of the RegisterScavenger factored out into an own class.
This was proposed in http://llvm.org/PR27609
Differential Revision: http://reviews.llvm.org/D21916
llvm-svn: 279171
show more ...
|
#
075d0c23 |
| 18-Aug-2016 |
Matthias Braun <matze@braunis.de> |
RegScavenging: Add scavengeRegisterBackwards()
Re-apply r276044 with off-by-1 instruction fix for the reload placement.
This is a variant of scavengeRegister() that works for enterBasicBlockEnd()/b
RegScavenging: Add scavengeRegisterBackwards()
Re-apply r276044 with off-by-1 instruction fix for the reload placement.
This is a variant of scavengeRegister() that works for enterBasicBlockEnd()/backward(). The benefit of the backward mode is that it is not affected by incomplete kill flags.
This patch also changes PrologEpilogInserter::doScavengeFrameVirtualRegs() to use the register scavenger in backwards mode.
Differential Revision: http://reviews.llvm.org/D21885
llvm-svn: 279124
show more ...
|
Revision tags: llvmorg-3.9.0-rc1 |
|
#
941a705b |
| 28-Jul-2016 |
Matthias Braun <matze@braunis.de> |
MachineFunction: Return reference for getFrameInfo(); NFC
getFrameInfo() never returns nullptr so we should use a reference instead of a pointer.
llvm-svn: 277017
|
#
5b9722d6 |
| 20-Jul-2016 |
Matthias Braun <matze@braunis.de> |
Revert "RegScavenging: Add scavengeRegisterBackwards()"
Reverting this commit for now as it seems to be causing failures on test-suite tests on the clang-ppc64le-linux-lnt bot.
This reverts commit
Revert "RegScavenging: Add scavengeRegisterBackwards()"
Reverting this commit for now as it seems to be causing failures on test-suite tests on the clang-ppc64le-linux-lnt bot.
This reverts commit r276044.
llvm-svn: 276068
show more ...
|
#
84fd4bee |
| 19-Jul-2016 |
Matthias Braun <matze@braunis.de> |
RegScavenging: Add scavengeRegisterBackwards()
This is a variant of scavengeRegister() that works for enterBasicBlockEnd()/backward(). The benefit of the backward mode is that it is not affected by
RegScavenging: Add scavengeRegisterBackwards()
This is a variant of scavengeRegister() that works for enterBasicBlockEnd()/backward(). The benefit of the backward mode is that it is not affected by incomplete kill flags.
This patch also changes PrologEpilogInserter::doScavengeFrameVirtualRegs() to use the register scavenger in backwards mode.
Differential Revision: http://reviews.llvm.org/D21885
llvm-svn: 276044
show more ...
|
#
4cb68e10 |
| 19-Jul-2016 |
Matthias Braun <matze@braunis.de> |
RegisterScavenger: Introduce backward() mode.
This adds two pieces: - RegisterScavenger:::enterBasicBlockEnd() which behaves similar to enterBasicBlock() but starts tracking at the end of the basi
RegisterScavenger: Introduce backward() mode.
This adds two pieces: - RegisterScavenger:::enterBasicBlockEnd() which behaves similar to enterBasicBlock() but starts tracking at the end of the basic block. - A RegisterScavenger::backward() method. It is subtly different from the existing unprocess() method which only considers uses with the kill flag set: If a value is dead at the end of a basic block with a last use inside the basic block, unprocess() will fail to mark it as live. However we cannot change/fix this behaviour because unprocess() needs to perform the exact reverse operation of forward().
Differential Revision: http://reviews.llvm.org/D21873
llvm-svn: 276043
show more ...
|
#
9ce56919 |
| 08-Jul-2016 |
Duncan P. N. Exon Smith <dexonsmith@apple.com> |
CodeGen: Use MachineInstr& in RegisterScavenging, NFC
Prefer MachineInstr& in order to avoid implicit conversions from MachineInstrBundleIterator to MachineInstr*.
llvm-svn: 274888
|
#
f7493393 |
| 30-Jun-2016 |
Matthias Braun <matze@braunis.de> |
RegisterScavenging: Code cleanup; NFC
- Use range based for loops - No need for some !Reg checks: isPhysicalRegister() reports false for NoRegister anyway - Do not repeat function name in document
RegisterScavenging: Code cleanup; NFC
- Use range based for loops - No need for some !Reg checks: isPhysicalRegister() reports false for NoRegister anyway - Do not repeat function name in documentation comment. - Do not repeat documentation comment in implementation when we already have one at the declaration. - Factor some common subexpressions out. - Change file comments to use doxygen syntax.
llvm-svn: 274194
show more ...
|
Revision tags: llvmorg-3.8.1, llvmorg-3.8.1-rc1 |
|
#
ccf5ee0b |
| 20-May-2016 |
Krzysztof Parzyszek <kparzysz@codeaurora.org> |
Use report_fatal_error after all
Depending on the compiler used to build LLVM, llvm_unreachable can either expand to a call to abort(), or to a __builtin_unreachable. The latter does not have a pred
Use report_fatal_error after all
Depending on the compiler used to build LLVM, llvm_unreachable can either expand to a call to abort(), or to a __builtin_unreachable. The latter does not have a predictable behavior at runtime.
llvm-svn: 270260
show more ...
|
#
64439ac7 |
| 20-May-2016 |
Krzysztof Parzyszek <kparzysz@codeaurora.org> |
Fix error reporting in register scavenger (lack of emergency spill slot)
- Do not store Twine objects. - Remove report_fatal_error, since llvm_unreachable does terminate the program in release mod
Fix error reporting in register scavenger (lack of emergency spill slot)
- Do not store Twine objects. - Remove report_fatal_error, since llvm_unreachable does terminate the program in release mode.
llvm-svn: 270233
show more ...
|