- Jun 02, 2012
-
-
Jakob Stoklund Olesen authored
No functional change intended. Sorry for the churn. The iterator classes are supposed to help avoid giant commits like this one in the future. The TableGen-produced register lists are getting quite large, and it may be necessary to change the table representation. This makes it possible to do so without changing all clients (again). llvm-svn: 157854
-
Jakob Stoklund Olesen authored
After physreg coalescing was disabled, these functions can't do anything useful with physregs anyway. llvm-svn: 157849
-
Jakob Stoklund Olesen authored
MCRegAliasIterator can include Reg itself in the list. llvm-svn: 157848
-
- Jun 01, 2012
-
-
Jakob Stoklund Olesen authored
MCRegAliasIterator can optionally visit the register itself, allowing for simpler code. llvm-svn: 157837
-
Manman Ren authored
Factor out the expansion code into a function. This change is to be enabled in clang. rdar://9877866 llvm-svn: 157830
-
Stepan Dyatkovskiy authored
IntegersSubset devided into IntegersSubsetGeneric and into IntegersSubset itself. The first has no references to ConstantInt and works with IntItem only. IntegersSubsetMapping also made generic. Here added second template parameter "IntegersSubsetTy" that allows to use on of two IntegersSubset types described below. llvm-svn: 157815
-
Chris Lattner authored
llvm-svn: 157813
-
Chris Lattner authored
in multiple-return value scenarios, like what happens on X86-64 when returning small structs. llvm-svn: 157800
-
Chris Lattner authored
types, as well as int<->ptr casts. This allows us to tailcall functions with some trivial casts between the call and return (i.e. because the return types disagree). llvm-svn: 157798
-
Chris Lattner authored
llvm-svn: 157796
-
Eric Christopher authored
Part of rdar://11570854 llvm-svn: 157786
-
- May 31, 2012
-
-
Manman Ren authored
This patch will optimize the following movq %rdi, %rax subq %rsi, %rax cmovsq %rsi, %rdi movq %rdi, %rax to cmpq %rsi, %rdi cmovsq %rsi, %rdi movq %rdi, %rax Perform this optimization if the actual result of SUB is not used. rdar: 11540023 llvm-svn: 157755
-
- May 30, 2012
-
-
Jakob Stoklund Olesen authored
It helps compile exotic inline asm. In the test case, normal GR32 virtual registers use up eax-edx so the final GR32_ABCD live range has no registers left. Since all the live ranges were tiny, we had no way of prioritizing the smaller register class. This patch allows tiny unspillable live ranges to be evicted by tiny unspillable live ranges from a smaller register class. <rdar://problem/11542429> llvm-svn: 157715
-
Owen Anderson authored
Switch the canonical FMA term operand order to match both the comment I wrote and the usual LLVM convention. llvm-svn: 157708
-
Owen Anderson authored
llvm-svn: 157707
-
Chad Rosier authored
llvm-svn: 157706
-
Jakob Stoklund Olesen authored
An empty list is not represented as a null pointer. Let TRI do its own shortcuts. llvm-svn: 157702
-
-
Evan Cheng authored
If-converter models predicated defs as read + write. The read should be marked as 'undef' since it may not already be live. This appeases -verify-machineinstrs. llvm-svn: 157662
-
rdar://problem/11498613Bob Wilson authored
Besides adding the new insertPass function, this patch uses it to enhance the existing -print-machineinstrs so that the MachineInstrs after a specific pass can be printed. Patch by Bin Zeng! llvm-svn: 157655
-
- May 29, 2012
-
-
Evan Cheng authored
llvm-svn: 157640
-
Lang Hames authored
ranges for the instruction about to be bundled. This fixes a bug in an external project where an assertion was triggered due to spurious 'multiple defs' within the bundle. Patch by Ivan Llopard. Thanks Ivan! llvm-svn: 157632
-
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
-