- May 25, 2012
-
-
Andrew Trick authored
(except the part about choosing direction) llvm-svn: 157437
-
Andrew Trick authored
llvm-svn: 157429
-
Andrew Trick authored
llvm-svn: 157428
-
Andrew Trick authored
The Hazard checker implements in-order contraints, or interlocked resources. Ready instructions with hazards do not enter the available queue and are not visible to other heuristics. The major code change is the addition of SchedBoundary to encapsulate the state at the top or bottom of the schedule, including both a pending and available queue. The scheduler now counts cycles in sync with the hazard checker. These are minimum cycle counts based on known hazards. Targets with no itinerary (x86_64) currently remain at cycle 0. To fix this, we need to provide some maximum issue width for all targets. We also need to add the concept of expected latency vs. minimum latency. llvm-svn: 157427
-
Andrew Trick authored
llvm-svn: 157426
-
Andrew Trick authored
llvm-svn: 157425
-
Andrew Trick authored
llvm-svn: 157424
-
Andrew Trick authored
llvm-svn: 157423
-
Andrew Trick authored
llvm-svn: 157422
-
- May 24, 2012
-
-
Craig Topper authored
llvm-svn: 157377
-
Jakob Stoklund Olesen authored
Live ranges with a constrained register class may benefit from splitting around individual uses. It allows the remaining live range to use a larger register class where it may allocate. This is like spilling to a different register class. This is only attempted on constrained register classes. <rdar://problem/11438902> llvm-svn: 157354
-
Bill Wendling authored
llvm-svn: 157349
-
Bill Wendling authored
llvm-svn: 157348
-
- May 23, 2012
-
-
Jakob Stoklund Olesen authored
Now that the coalescer keeps live intervals and machine code in sync at all times, it needs to deal with identity copies differently. When merging two virtual registers, all identity copies are removed right away. This means that other identity copies must come from somewhere else, and they are going to have a value number. Deal with such copies by merging the value numbers before erasing the copy instruction. Otherwise, we leave dangling value numbers in the live interval. This fixes PR12927. llvm-svn: 157340
-
Patrik Hägglund authored
llvm-svn: 157319
-
Eric Christopher authored
Part of rdar://11496790 llvm-svn: 157303
-
- May 22, 2012
-
-
Eric Christopher authored
llvm-svn: 157274
-
Eric Christopher authored
llvm-svn: 157273
-
Jakob Stoklund Olesen authored
Also make sure registers aren't erased twice if the dead def mentions the register twice. This fixes PR12911. llvm-svn: 157254
-
Owen Anderson authored
Fix use of an unitialized value in the LegalizeOps expansion for ISD::SUB. No in-tree targets exercise this path. Patch by Micah Villmow. llvm-svn: 157215
-
- May 21, 2012
-
-
Chad Rosier authored
llvm-svn: 157195
-
Jakob Stoklund Olesen authored
This helps compile time when the greedy register allocator splits live ranges in giant functions. Without the bias, we would try to grow regions through the giant edge bundles, usually to find out that the region became too big and expensive. If a live range has many uses in blocks near the giant bundle, the small negative bias doesn't make a big difference, and we still consider regions including the giant edge bundle. Giant edge bundles are usually connected to landing pads or indirect branches. llvm-svn: 157174
-
- May 20, 2012
-
-
Jakob Stoklund Olesen authored
With physreg joining out of the way, it is easy to recognize the instructions that need their kill flags cleared while testing for interference. This allows us to skip the final scan of all instructions for an 11% speedup of the coalescer pass. llvm-svn: 157169
-
Jakob Stoklund Olesen authored
It can be necessary to restrict to a sub-class before accessing sub-registers. llvm-svn: 157164
-
Jakob Stoklund Olesen authored
When rewriting operands, make sure the new registers have a compatible register class. llvm-svn: 157163
-
Peter Collingbourne authored
may be RAUW'd by the recursive call to LegalizeOps; instead, retrieve the other operands when calling UpdateNodeOperands. Fixes PR12889. llvm-svn: 157162
-
Benjamin Kramer authored
Found by valgrind. llvm-svn: 157160
-
Benjamin Kramer authored
llvm-svn: 157155
-
Jakob Stoklund Olesen authored
Not all GR64 registers have sub_8bit sub-registers. llvm-svn: 157150
-
Jakob Stoklund Olesen authored
X86 has 2-addr instructions with different constraints on the tied def and use operands. One is GR32, one is GR32_NOSP. llvm-svn: 157149
-
Jakob Stoklund Olesen authored
llvm-svn: 157148
-
Jakob Stoklund Olesen authored
This function adds copies to be erased to DupCopies, avoid also adding them to DeadCopies. llvm-svn: 157147
-
Jakob Stoklund Olesen authored
Avoid looking at the operands of a potentially erased instruction. llvm-svn: 157146
-
Jakob Stoklund Olesen authored
llvm-svn: 157145
-
Jakob Stoklund Olesen authored
llvm-svn: 157144
-
Jakob Stoklund Olesen authored
That struct ought to be a LiveInterval implementation detail. llvm-svn: 157143
-
Jakob Stoklund Olesen authored
llvm-svn: 157142
-
Jakob Stoklund Olesen authored
llvm-svn: 157137
-
Jakob Stoklund Olesen authored
Dead code elimination during coalescing could cause a virtual register to be split into connected components. The following rewriting would be confused about the already joined copies present in the code, but without a corresponding value number in the live range. Erase all joined copies instantly when joining intervals such that the MI and LiveInterval representations are always in sync. llvm-svn: 157135
-
- May 19, 2012
-
-
Jakob Stoklund Olesen authored
Dead code and joined copies are now eliminated on the fly, and there is no need for a post pass. This makes the coalescer work like other modern register allocator passes: Code is changed on the fly, there is no pending list of changes to be committed. llvm-svn: 157132
-