- May 29, 2012
-
-
Stepan Dyatkovskiy authored
llvm-svn: 157612
-
- May 28, 2012
-
-
Peter Collingbourne authored
llvm-svn: 157594
-
Stepan Dyatkovskiy authored
Implemented IntItem - the wrapper around APInt. Why not to use APInt item directly right now? 1. It will very difficult to implement case ranges as series of small patches. We got several large and heavy patches. Each patch will about 90-120 kb. If you replace ConstantInt with APInt in SwitchInst you will need to changes at the same time all Readers,Writers and absolutely all passes that uses SwitchInst. 2. We can implement APInt pool inside and save memory space. E.g. we use several switches that works with 256 bit items (switch on signatures, or strings). We can avoid value duplicates in this case. 3. IntItem can be easyly easily replaced with APInt. 4. Currenly we can interpret IntItem both as ConstantInt and as APInt. It allows to provide SwitchInst methods that works with ConstantInt for non-updated passes. Why I need it right now? Currently I need to update SimplifyCFG pass (EqualityComparisons). I need to work with APInts directly a lot, so peaces of code ConstantInt *V = ...; if (V->getValue().ugt(AnotherV->getValue()) { ... } will look awful. Much more better this way: IntItem V = ConstantIntVal->getValue(); if (AnotherV < V) { } Of course any reviews are welcome. P.S.: I'm also going to rename ConstantRangesSet to IntegersSubset, and CRSBuilder to IntegersSubsetMapping (allows to map individual subsets of integers to the BasicBlocks). Since in future these classes will founded on APInt, it will possible to use them in more generic ways. llvm-svn: 157576
-
- May 27, 2012
-
-
Peter Collingbourne authored
definition in the map before calling itself to retrieve the DIE for the declaration. Without this change, if this causes getOrCreateSubprogramDIE to be recursively called on the definition, it will create multiple DIEs for that definition. Fixes PR12831. llvm-svn: 157541
-
Benjamin Kramer authored
llvm-svn: 157527
-
Benjamin Kramer authored
This is obviosly right but I don't see how to do this with proper vector iterators without building a horrible mess of workarounds. llvm-svn: 157526
-
Benjamin Kramer authored
vector.begin()-1 is invalid too. llvm-svn: 157525
-
- May 26, 2012
-
-
Benjamin Kramer authored
Found by libstdc++'s debug mode. llvm-svn: 157522
-
Benjamin Kramer authored
SelectionDAGBuilder: When emitting small compare chains for switches order them by using edge weights. SimplifyCFG tends to form a lot of 2-3 case switches when merging branches. Move the most likely condition to the front so it is checked first and the others can be skipped. This is currently not as effective as it could be because SimplifyCFG destroys profiling metadata when merging branches and switches. Merging branch weight metadata is tricky though. This code touches at most 3 cases so I didn't use a proper sorting algorithm. llvm-svn: 157521
-
Benjamin Kramer authored
Negative cycles are filtered out earlier. llvm-svn: 157514
-
- May 25, 2012
-
-
Justin Holewinski authored
to pass around a struct instead of a large set of individual values. This cleans up the interface and allows more information to be added to the struct for future targets without requiring changes to each and every target. NV_CONTRIB llvm-svn: 157479
-
Andrew Trick authored
llvm-svn: 157455
-
Eli Friedman authored
llvm-svn: 157446
-
Kaelyn Uhrain authored
llvm-svn: 157438
-
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
-