| #
b47fb384 |
| 11-Feb-2013 |
Cameron Zwarich <[email protected]> |
Add support for updating LiveIntervals to MachineBasicBlock::SplitCriticalEdge(). This is currently a bit hairier than it needs to be, since depending on where the split block resides the end ListEnt
Add support for updating LiveIntervals to MachineBasicBlock::SplitCriticalEdge(). This is currently a bit hairier than it needs to be, since depending on where the split block resides the end ListEntry of the split block may be the end ListEntry of the original block or a new entry. Some changes to the SlotIndexes updating should make it possible to eliminate the two cases here.
This also isn't as optimized as it could be. In the future Liveinterval should probably get a flag that indicates whether the LiveInterval is within a single basic block. We could ignore all such intervals when splitting an edge.
llvm-svn: 174870
show more ...
|
| #
ba378cea |
| 11-Feb-2013 |
Cameron Zwarich <[email protected]> |
Update SlotIndexes after updateTerminator() possibly removes instructions. I am really trying to avoid piping SlotIndexes through to RemoveBranch() and friends.
llvm-svn: 174869
|
| #
21beaf67 |
| 10-Feb-2013 |
Cameron Zwarich <[email protected]> |
Fix the unused but nearly correct method SlotIndexes::insertMBBInMaps() and add support for updating SlotIndexes to MachineBasicBlock::SplitCriticalEdge(). This calls renumberIndexes() every time; it
Fix the unused but nearly correct method SlotIndexes::insertMBBInMaps() and add support for updating SlotIndexes to MachineBasicBlock::SplitCriticalEdge(). This calls renumberIndexes() every time; it should be improved to only renumber locally.
llvm-svn: 174851
show more ...
|
| #
9fb823bb |
| 02-Jan-2013 |
Chandler Carruth <[email protected]> |
Move all of the header files which are involved in modelling the LLVM IR into their new header subdirectory: include/llvm/IR. This matches the directory structure of lib, and begins to correct a long
Move all of the header files which are involved in modelling the LLVM IR into their new header subdirectory: include/llvm/IR. This matches the directory structure of lib, and begins to correct a long standing point of file layout clutter in LLVM.
There are still more header files to move here, but I wanted to handle them in separate commits to make tracking what files make sense at each layer easier.
The only really questionable files here are the target intrinsic tablegen files. But that's a battle I'd rather not fight today.
I've updated both CMake and Makefile build systems (I think, and my tests think, but I may have missed something).
I've also re-sorted the includes throughout the project. I'll be committing updates to Clang, DragonEgg, and Polly momentarily.
llvm-svn: 171366
show more ...
|
|
Revision tags: llvmorg-3.2.0 |
|
| #
78eaf05f |
| 18-Dec-2012 |
Jakob Stoklund Olesen <[email protected]> |
Tighten up the splice() API for bundled instructions.
Remove the instr_iterator versions of the splice() functions. It doesn't seem useful to be able to splice sequences of instructions that don't c
Tighten up the splice() API for bundled instructions.
Remove the instr_iterator versions of the splice() functions. It doesn't seem useful to be able to splice sequences of instructions that don't consist of full bundles.
The normal splice functions that take MBB::iterator arguments are not changed, and they can move whole bundles around without any problems.
llvm-svn: 170456
show more ...
|
| #
422e07b0 |
| 18-Dec-2012 |
Jakob Stoklund Olesen <[email protected]> |
Tighten the insert() API for bundled instructions.
The normal insert() function takes an MBB::iterator position, and inserts a stand-alone MachineInstr as before.
The insert() function that takes a
Tighten the insert() API for bundled instructions.
The normal insert() function takes an MBB::iterator position, and inserts a stand-alone MachineInstr as before.
The insert() function that takes an MBB::instr_iterator position can insert instructions inside a bundle, and will now update the bundle flags correctly when that happens.
When the insert position is between two bundles, it is unclear whether the instruction should be appended to the previous bundle, prepended to the next bundle, or stand on its own. The MBB::insert() function doesn't bundle the instruction in that case, use the MIBundleBuilder class for that.
llvm-svn: 170437
show more ...
|
| #
ccfb5fb4 |
| 17-Dec-2012 |
Jakob Stoklund Olesen <[email protected]> |
Tighten up the erase/remove API for bundled instructions.
Most code is oblivious to bundles and uses the MBB::iterator which only visits whole bundles. MBB::erase() operates on whole bundles at a ti
Tighten up the erase/remove API for bundled instructions.
Most code is oblivious to bundles and uses the MBB::iterator which only visits whole bundles. MBB::erase() operates on whole bundles at a time as before.
MBB::remove() now refuses to remove bundled instructions. It is not safe to remove all instructions in a bundle without deleting them since there is no way of returning pointers to all the removed instructions.
MBB::remove_instr() and MBB::erase_instr() will now update bundle flags correctly, lifting individual instructions out of bundles while leaving the remaining bundle intact.
The MachineInstr convenience functions are updated so
eraseFromParent() erases a whole bundle as before eraseFromBundle() erases a single instruction, leaving the rest of its bundle. removeFromParent() refuses to operate on bundled instructions, and removeFromBundle() lifts a single instruction out of its bundle.
These functions will no longer accidentally split or coalesce bundles - bundle flags are updated to preserve the existing bundling, and explicit bundleWith* / unbundleFrom* functions should be used to change the instruction bundling.
This API update is still a work in progress. I am going to update APIs first so they maintain bundle flags automatically when possible. Then I'll add stricter verification of the bundle flags.
llvm-svn: 170384
show more ...
|
|
Revision tags: llvmorg-3.2.0-rc3 |
|
| #
ed0881b2 |
| 03-Dec-2012 |
Chandler Carruth <[email protected]> |
Use the new script to sort the includes of every file under lib.
Sooooo many of these had incorrect or strange main module includes. I have manually inspected all of these, and fixed the main module
Use the new script to sort the includes of every file under lib.
Sooooo many of these had incorrect or strange main module includes. I have manually inspected all of these, and fixed the main module include to be the nearest plausible thing I could find. If you own or care about any of these source files, I encourage you to take some time and check that these edits were sensible. I can't have broken anything (I strictly added headers, and reordered them, never removed), but they may not be the headers you'd really like to identify as containing the API being implemented.
Many forward declarations and missing includes were added to a header files to allow them to parse cleanly when included first. The main module rule does in fact have its merits. =]
llvm-svn: 169131
show more ...
|
|
Revision tags: llvmorg-3.2.0-rc2 |
|
| #
dd219d06 |
| 20-Nov-2012 |
Tim Northover <[email protected]> |
Fix physical register liveness calculations:
+ Take account of clobbers + Give outputs priority over inputs since they happen later.
llvm-svn: 168360
|
|
Revision tags: llvmorg-3.2.0-rc1 |
|
| #
6fe7acab |
| 26-Oct-2012 |
Akira Hatanaka <[email protected]> |
Make sure I is not the end iterator when isInsideBundle is called.
llvm-svn: 166784
|
| #
cdfe20b9 |
| 08-Oct-2012 |
Micah Villmow <[email protected]> |
Move TargetData to DataLayout.
llvm-svn: 165402
|
| #
c747cdae |
| 12-Sep-2012 |
James Molloy <[email protected]> |
Add a function computeRegisterLiveness() to MachineBasicBlock. This uses analyzePhysReg() from r163694 to heuristically try and determine the liveness state of a physical register upon arrival at a p
Add a function computeRegisterLiveness() to MachineBasicBlock. This uses analyzePhysReg() from r163694 to heuristically try and determine the liveness state of a physical register upon arrival at a particular instruction in a block.
The search for liveness is clipped to a specific number of instructions around the target MachineInstr, in order to avoid degenerating into an O(N^2) algorithm. It tries to use various clues about how instructions around (both before and after) a given MachineInstr use that register, to determine its state at the MachineInstr.
llvm-svn: 163695
show more ...
|
| #
19f49ac6 |
| 11-Sep-2012 |
Manman Ren <[email protected]> |
Release build: guard dump functions with "#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)"
No functional change. Update r163339.
llvm-svn: 163653
|
| #
742534c4 |
| 06-Sep-2012 |
Manman Ren <[email protected]> |
Release build: guard dump functions with "ifndef NDEBUG"
No functional change.
llvm-svn: 163339
|
| #
a538d831 |
| 22-Aug-2012 |
Craig Topper <[email protected]> |
Add a getName function to MachineFunction. Use it in places that previously did getFunction()->getName(). Remove includes of Function.h that are no longer needed.
llvm-svn: 162347
|
| #
6bae2a57 |
| 20-Aug-2012 |
Jakob Stoklund Olesen <[email protected]> |
Fix a quadratic algorithm in MachineBranchProbabilityInfo.
The getSumForBlock function was quadratic in the number of successors because getSuccWeight would perform a linear search for an already kn
Fix a quadratic algorithm in MachineBranchProbabilityInfo.
The getSumForBlock function was quadratic in the number of successors because getSuccWeight would perform a linear search for an already known iterator.
This patch was originally committed as r161460, but reverted again because of assertion failures. Now that duplicate Machine CFG edges have been eliminated, this works properly.
llvm-svn: 162233
show more ...
|
| #
396b595b |
| 13-Aug-2012 |
Jakob Stoklund Olesen <[email protected]> |
Transfer weights in transferSuccessorsAndUpdatePHIs().
llvm-svn: 161805
|
| #
1dc107a8 |
| 13-Aug-2012 |
Jakob Stoklund Olesen <[email protected]> |
Print out MachineBasicBlock successor weights when available.
llvm-svn: 161804
|
| #
8c28ac9e |
| 10-Aug-2012 |
Jakob Stoklund Olesen <[email protected]> |
Update edge weights correctly in replaceSuccessor().
When replacing Old with New, it can happen that New is already a successor. Add the old and new edge weights instead of creating a duplicate edge
Update edge weights correctly in replaceSuccessor().
When replacing Old with New, it can happen that New is already a successor. Add the old and new edge weights instead of creating a duplicate edge.
llvm-svn: 161653
show more ...
|
| #
c4102d49 |
| 09-Aug-2012 |
Jakob Stoklund Olesen <[email protected]> |
Move use list management into MachineRegisterInfo.
Register MachineOperands are kept in linked lists accessible via MRI's reg_iterator interfaces. The linked list management was handled partly by Ma
Move use list management into MachineRegisterInfo.
Register MachineOperands are kept in linked lists accessible via MRI's reg_iterator interfaces. The linked list management was handled partly by MachineOperand methods, partly by MRI methods.
Move all of the list management into MRI, delete MO::AddRegOperandToRegInfo() and MO::RemoveRegOperandFromRegInfo().
Be more explicit about handling the cases where an MRI pointer isn't available.
llvm-svn: 161632
show more ...
|
| #
0556be98 |
| 08-Aug-2012 |
Jakob Stoklund Olesen <[email protected]> |
Revert "Fix a quadratic algorithm in MachineBranchProbabilityInfo."
It caused an assertion failure when compiling consumer-typeset.
llvm-svn: 161463
|
| #
c0b61ff9 |
| 08-Aug-2012 |
Jakob Stoklund Olesen <[email protected]> |
Fix a quadratic algorithm in MachineBranchProbabilityInfo.
The getSumForBlock function was quadratic in the number of successors because getSuccWeight would perform a linear search for an already kn
Fix a quadratic algorithm in MachineBranchProbabilityInfo.
The getSumForBlock function was quadratic in the number of successors because getSuccWeight would perform a linear search for an already known iterator.
llvm-svn: 161460
show more ...
|
| #
fee94ca1 |
| 30-Jul-2012 |
Jakob Stoklund Olesen <[email protected]> |
Add MachineBasicBlock::isPredecessor().
A->isPredecessor(B) is the same as B->isSuccessor(A), but it can tolerate a B that is null or dangling. This shouldn't happen normally, but it it useful for v
Add MachineBasicBlock::isPredecessor().
A->isPredecessor(B) is the same as B->isSuccessor(A), but it can tolerate a B that is null or dangling. This shouldn't happen normally, but it it useful for verification code.
llvm-svn: 160968
show more ...
|
| #
d163405d |
| 19-Jul-2012 |
Bill Wendling <[email protected]> |
Remove tabs.
llvm-svn: 160475
|
| #
4fd96634 |
| 15-Jun-2012 |
Bill Wendling <[email protected]> |
Remove assignments which aren't used afterwards.
llvm-svn: 158535
|