History log of /llvm-project/llvm/lib/CodeGen/SplitKit.cpp (Results 251 – 275 of 293)
Revision (<<< Hide revision tags) (Show revision tags >>>) Date Author Comments
# 7c317300 07-Oct-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Print out MBB number when rewriting.

llvm-svn: 115950


# 49715fd4 07-Oct-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Cache interval iterators in SplitEditor::addTruncSimpleRange so we only have to
do one find().

llvm-svn: 115929


# 9575af4b 07-Oct-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Clean up debug printing.

llvm-svn: 115928


Revision tags: llvmorg-2.8.0
# 4d5156c7 05-Oct-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Count uses in all nested loops, not just the deepest.

llvm-svn: 115710


# 56e2925e 05-Oct-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Remove SplitAnalysis::removeUse. It was only used to make SplitAnalysis
reusable, but that is no longer relevant since a split will always replace the
original.

llvm-svn: 115709


# 0445e2a0 05-Oct-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

dupli always has an interval now.

llvm-svn: 115708


# 2dfa8be2 05-Oct-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

We can split around loops with multiple exits now.

llvm-svn: 115696


# 89d276aa 05-Oct-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Update SplitEditor API to reflect the fact that the original live interval is
never kept after splitting.

Keeping the original interval made sense when the split region doesn't modify
the register,

Update SplitEditor API to reflect the fact that the original live interval is
never kept after splitting.

Keeping the original interval made sense when the split region doesn't modify
the register, and the original is spilled. We can get the same effect by
detecting reloaded values when spilling around copies.

llvm-svn: 115695

show more ...


# b46d3236 05-Oct-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Intervals are half-open.

llvm-svn: 115694


# 671bab1c 05-Oct-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

When we find a reaching definition, make sure it is visited from all paths by
erasing it from the visited set. That ensures we create the right phi defs.

llvm-svn: 115666


# b0cedd5f 05-Oct-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Don't use nextIndex to check for live out of instruction.
Insert copy after defining instruction.

Fix LiveIntervalMap::extendTo to properly handle live segments starting before
the current basic blo

Don't use nextIndex to check for live out of instruction.
Insert copy after defining instruction.

Fix LiveIntervalMap::extendTo to properly handle live segments starting before
the current basic block.

Make sure the open live range is extended to the inserted copy's use slot.

llvm-svn: 115665

show more ...


Revision tags: llvmorg-2.8.0-rc3
# 56495686 25-Sep-2010 Lang Hames <lhames@gmail.com>

Removed VNInfo::isDefAccurate(). Def "accuracy" can be checked by testing whether LiveIntervals::getInstructionFromIndex(def) returns NULL.

llvm-svn: 114791


# 6f8bd42e 21-Sep-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Build the complement interval dupli after the split intervals instead of
creating it before and subtracting split ranges.

This way, the SSA update code in LiveIntervalMap can properly create and use

Build the complement interval dupli after the split intervals instead of
creating it before and subtracting split ranges.

This way, the SSA update code in LiveIntervalMap can properly create and use new
phi values in dupli. Now it is possible to create split regions where a value
escapes along two different CFG edges, creating phi values outside the split
region.

This is a work in progress and probably quite broken.

llvm-svn: 114492

show more ...


Revision tags: llvmorg-2.8.0-rc2
# 9855109b 16-Sep-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Use the value mapping provided by LiveIntervalMap. This simplifies the code a
great deal because we don't have to worry about maintaining SSA form.

Unconditionally copy back to dupli when the regist

Use the value mapping provided by LiveIntervalMap. This simplifies the code a
great deal because we don't have to worry about maintaining SSA form.

Unconditionally copy back to dupli when the register is live out of the split
range, even if the live-out value was defined outside the range. Skipping the
back-copy only makes sense when the live range is going to spill outside the
split range, and we don't know that it will. Besides, this was a hack to avoid
SSA update issues.

Clear up some confusion about the end point of a half-open LiveRange. Methinks
LiveRanges need to be closed so both start and end are included in the range.
The low bits of a SlotIndex are symbolic, so a half-open range doesn't really
make sense. This would be a pervasive change, though.

llvm-svn: 114043

show more ...


# 614e1393 13-Sep-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Mechanically replace LiveInterval* with LiveIntervalMap for intervals being
edited without actually using LiveIntervalMap functionality.

llvm-svn: 113816


# 36dad6db 13-Sep-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Allow LiveIntervalMap to be reused by resetting the current live interval.

llvm-svn: 113815


# 535e8e5f 13-Sep-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Let's just declare that it is impossible to construct a std::pair from a null
pointer and work around that.

llvm-svn: 113788


Revision tags: llvmorg-2.8.0-rc1, llvmorg-2.8.0-rc0
# abca1734 19-Aug-2010 Michael J. Spencer <bigcheesegs@gmail.com>

Fix the msvc 2010 build.

The Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01
implements parts of C++0x based on the draft standard. An old version of
the draft had a bug that m

Fix the msvc 2010 build.

The Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01
implements parts of C++0x based on the draft standard. An old version of
the draft had a bug that makes std::pair<T1*, T2*>(something, 0) fail to
compile. This is because the template<class U, class V> pair(U&& x, V&& y)
constructor is selected, even though it later fails to implicitly convert
U and V to frist_type and second_type.

This has been fixed in n3090, but it seems that Microsoft is not going to
update msvc.

llvm-svn: 111535

show more ...


# e98030ad 18-Aug-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Thinking about it, we don't need MachineDominatorTree after all. The DomValue
map discovers the iterated dominance frontier for free.

llvm-svn: 111400


# f4088b02 18-Aug-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Revert r111394. It was too aggressive.

We must complete the DFS, otherwise we might miss needed phi-defs, and
prematurely color live ranges with a non-dominating value.

This is not a big deal since

Revert r111394. It was too aggressive.

We must complete the DFS, otherwise we might miss needed phi-defs, and
prematurely color live ranges with a non-dominating value.

This is not a big deal since we get to color more of the CFG and the next
mapValue call will be faster.

llvm-svn: 111397

show more ...


# 5b4cb084 18-Aug-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Aggressively prune the DFS when inserting phi-defs.

llvm-svn: 111394


# ce6f055b 18-Aug-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Add the LiveIntervalMap class. Don't hook it up yet.

LiveIntervalMap maps values from a parent LiveInterval to a child interval that
is a strict subset. It will create phi-def values as needed to pr

Add the LiveIntervalMap class. Don't hook it up yet.

LiveIntervalMap maps values from a parent LiveInterval to a child interval that
is a strict subset. It will create phi-def values as needed to preserve the
VNInfo SSA form in the child interval.

This leads to an algorithm very similar to the one in SSAUpdaterImpl.h, but with
enough differences that the code can't be reused:

- We don't need to manipulate PHI instructions.
- LiveIntervals have kills.
- We have MachineDominatorTree.
- We can use df_iterator.

llvm-svn: 111393

show more ...


# 27e1f265 13-Aug-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Clean up the Spiller.h interface.

The earliestStart argument is entirely specific to linear scan allocation, and
can be easily calculated by RegAllocLinearScan.

Replace std::vector with SmallVector

Clean up the Spiller.h interface.

The earliestStart argument is entirely specific to linear scan allocation, and
can be easily calculated by RegAllocLinearScan.

Replace std::vector with SmallVector.

llvm-svn: 111055

show more ...


# d1191ee4 13-Aug-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Implement splitting inside a single block.

When a live range is contained a single block, we can split it around
instruction clusters. The current approach is very primitive, splitting before
and af

Implement splitting inside a single block.

When a live range is contained a single block, we can split it around
instruction clusters. The current approach is very primitive, splitting before
and after the largest gap between uses.

llvm-svn: 111043

show more ...


# 3d1027e7 13-Aug-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Let LiveInterval::addRange extend existing ranges, it will verify that value
numbers match. The old check could accidentally leave holes in openli.

Also let useIntv add all ranges for the phi-def va

Let LiveInterval::addRange extend existing ranges, it will verify that value
numbers match. The old check could accidentally leave holes in openli.

Also let useIntv add all ranges for the phi-def value inserted by
enterIntvAtEnd. This works as long at the value mapping is established in
enterIntvAtEnd.

llvm-svn: 110995

show more ...


1...<<1112