- Sep 21, 2012
-
-
Evan Cheng authored
because LiveStackAnalysis was not preserved by VirtRegWriter. This caused big stack usage regression in some cases. rdar://12340383 llvm-svn: 164408
-
Bill Wendling authored
Make the 'get*AlignmentFromAttr' functions into member functions within the Attributes class. Now with fix. llvm-svn: 164370
-
Jakob Stoklund Olesen authored
A PHI can't create interference on its own. If two live ranges interfere at a PHI, they must also interfere when leaving one of the PHI predecessors. llvm-svn: 164330
-
Jakob Stoklund Olesen authored
The old-fashioned many-to-one value mapping doesn't always work when merging vector lanes. A value can map to multiple different values, and it can even be necessary to insert new PHIs. When a value number is defined by a copy from a value number that required SSa update, include the live range of the copied value number in the SSA update as well. It is not necessarily a copy of the original value number any longer. llvm-svn: 164329
-
Eric Christopher authored
llvm-svn: 164326
-
- Sep 20, 2012
-
-
Bill Wendling authored
llvm-svn: 164309
-
Bill Wendling authored
llvm-svn: 164308
-
Nadav Rotem authored
llvm-svn: 164297
-
Bill Wendling authored
llvm-svn: 164268
-
Bill Wendling authored
llvm-svn: 164264
-
- Sep 19, 2012
-
-
Jakob Stoklund Olesen authored
A common coalescing conflict in vector code is lane insertion: %dst = FOO %src = BAR %dst:ssub0 = COPY %src The live range of %src interferes with the ssub0 lane of %dst, but that lane is never read after %src would have clobbered it. That makes it safe to merge the live ranges and eliminate the COPY: %dst = FOO %dst:ssub0 = BAR This patch teaches the new coalescer to resolve conflicts where dead vector lanes would be clobbered, at least as long as the clobbered vector lanes don't escape the basic block. llvm-svn: 164250
-
Andrew Trick authored
llvm-svn: 164180
-
- Sep 18, 2012
-
-
Andrew Trick authored
llvm-svn: 164154
-
Andrew Trick authored
llvm-svn: 164153
-
Roman Divacky authored
store this and use it to not emit long nops when the CPU is geode which doesnt support them. Fixes PR11212. llvm-svn: 164132
-
Andrew Trick authored
llvm-svn: 164098
-
Craig Topper authored
llvm-svn: 164090
-
Evan Cheng authored
llvm-svn: 164087
-
Jakob Stoklund Olesen authored
Add LIS::pruneValue() and extendToIndices(). These two functions are used by the register coalescer when merging two live ranges requires more than a trivial value mapping as supported by LiveInterval::join(). The pruneValue() function can remove the part of a value number that is going to conflict in join(). Afterwards, extendToIndices can restore the live range, using any new dominating value numbers and updating the SSA form. Use this complex value mapping to support merging a register into a vector lane that has a conflicting value, but the clobbered lane is undef. llvm-svn: 164074
-
Jakob Stoklund Olesen authored
These extra operands are not needed by register allocators using VirtRegRewriter, and RAFast don't need them any longer. By omitting the <imp-def> operands, it becomes possible for the new register coalescer to track which lanes are valid and which are undef. llvm-svn: 164073
-
Andrew Trick authored
I have to work out the Target/CodeGen header dependencies before putting this back. llvm-svn: 164072
-
Andrew Trick authored
llvm-svn: 164065
-
- Sep 17, 2012
-
-
Michael Ilseman authored
Increase the static sizes of some SmallSets. finalizeBundle() is very frequently called for some backends, and growing into an std::set is overkill for these numbers. llvm-svn: 164044
-
Michael Ilseman authored
llvm-svn: 164043
-
Michael Liao authored
- Preserve the original NOutVT during casting from vector to integer by extracting vector elements. llvm-svn: 164042
-
Tom Stellard authored
This is used in the AMDIL and R600 backends. llvm-svn: 164029
-
Nadav Rotem authored
Disable the protection from escaped allocas in an attempt to find violating passes. This may break the buildbots. I plan to revert it in a few hours. llvm-svn: 164024
-
- Sep 16, 2012
-
-
Craig Topper authored
llvm-svn: 164000
-
Jakob Stoklund Olesen authored
The live range of an SSA value forms a sub-tree of the dominator tree. That means the live ranges of two values overlap if and only if the def of one value lies within the live range of the other. This can be used to simplify the interference checking a bit: Visit each def in the two registers about to be joined. Check for interference against the value that is live in the other register at the def point only. It is not necessary to scan the set of overlapping live ranges, this interference check can be done while computing the value mapping required for the final live range join. The new algorithm is prepared to handle more complicated conflict resolution - We can allow overlapping live ranges with different values as long as the differing lanes are undef or unused in the other register. The implementation in this patch doesn't do that yet, it creates code that is nearly identical to the old algorithm's, except: - The new stripCopies() function sees through multiple copies while the old RegistersDefinedFromSameValue() only can handle one. - There are a few rare cases where the new algorithm can erase an IMPLICIT_DEF instuction that RegistersDefinedFromSameValue() couldn't handle. llvm-svn: 163991
-
- Sep 15, 2012
-
-
Craig Topper authored
llvm-svn: 163974
-
Jakob Stoklund Olesen authored
Kill flags are removed more and more aggressively during the register allocation passes, it is better to get information from LiveIntervals. llvm-svn: 163972
-
- Sep 14, 2012
-
-
Andrew Trick authored
llvm-svn: 163934
-
Andrew Trick authored
llvm-svn: 163915
-
Duncan Sands authored
llvm-svn: 163882
-
Eric Christopher authored
umulo legalization. Fixes PR13839 llvm-svn: 163856
-
Eric Christopher authored
closer to where they're needed. llvm-svn: 163855
-
- Sep 13, 2012
-
-
Michael Liao authored
- Find a legal vector type before casting and extracting element from it. - As the new vector type may have more than 2 elements, build the final hi/lo pair by BFS pairing them from bottom to top. llvm-svn: 163830
-
Nadav Rotem authored
Rename the flag which protects from escaped allocas, which may come from bugs in user code or in the compiler. Also, dont assert if the protection is not enabled. llvm-svn: 163807
-
Nadav Rotem authored
by xoring the high-bit. This fails if the source operand is a vector because we need to negate each of the elements in the vector. Fix rdar://12281066 PR13813. llvm-svn: 163802
-
Nadav Rotem authored
llvm-svn: 163801
-