|
Revision tags: llvmorg-3.4.1-rc1 |
|
| #
a349084a |
| 22-Feb-2014 |
Quentin Colombet <[email protected]> |
[CodeGenPrepare] Move CodeGenPrepare into lib/CodeGen.
CodeGenPrepare uses extensively TargetLowering which is part of libLLVMCodeGen. This is a layer violation which would introduce eventually a de
[CodeGenPrepare] Move CodeGenPrepare into lib/CodeGen.
CodeGenPrepare uses extensively TargetLowering which is part of libLLVMCodeGen. This is a layer violation which would introduce eventually a dependence on CodeGen in ScalarOpts.
Move CodeGenPrepare into libLLVMCodeGen to avoid that.
Follow-up of <rdar://problem/15519855>
llvm-svn: 201912
show more ...
|
| #
8a8cd2ba |
| 07-Jan-2014 |
Chandler Carruth <[email protected]> |
Re-sort all of the includes with ./utils/sort_includes.py so that subsequent changes are easier to review. About to fix some layering issues, and wanted to separate out the necessary churn.
Also com
Re-sort all of the includes with ./utils/sort_includes.py so that subsequent changes are easier to review. About to fix some layering issues, and wanted to separate out the necessary churn.
Also comment and sink the include of "Windows.h" in three .inc files to match the usage in Memory.inc.
llvm-svn: 198685
show more ...
|
| #
17080b9b |
| 28-Dec-2013 |
Andrew Trick <[email protected]> |
Stub out a PostMachineScheduler pass.
Placeholder and boilerplate for a PostRA MachineScheduler pass.
llvm-svn: 198120
|
|
Revision tags: llvmorg-3.4.0, llvmorg-3.4.0-rc3 |
|
| #
e8294753 |
| 14-Dec-2013 |
Juergen Ributzka <[email protected]> |
[Stackmap] Liveness Analysis Pass
This optional register liveness analysis pass can be enabled with either -enable-stackmap-liveness, -enable-patchpoint-liveness, or both. The pass traverses each ba
[Stackmap] Liveness Analysis Pass
This optional register liveness analysis pass can be enabled with either -enable-stackmap-liveness, -enable-patchpoint-liveness, or both. The pass traverses each basic block in a machine function. For each basic block the instructions are processed in reversed order and if a patchpoint or stackmap instruction is encountered the current live-out register set is encoded as a register mask and attached to the instruction.
Later on during stackmap generation the live-out register mask is processed and also emitted as part of the stackmap.
This information is optional and intended for optimization purposes only. This will enable a client of the stackmap to reason about the registers it can use and which registers need to be preserved.
Reviewed by Andy
llvm-svn: 197317
show more ...
|
| #
7bcb0100 |
| 13-Dec-2013 |
Andrew Trick <[email protected]> |
Revert "Liveness Analysis Pass"
This reverts commit r197254.
This was an accidental merge of Juergen's patch. It will be checked in shortly, but wasn't meant to go in quite yet.
Conflicts: includ
Revert "Liveness Analysis Pass"
This reverts commit r197254.
This was an accidental merge of Juergen's patch. It will be checked in shortly, but wasn't meant to go in quite yet.
Conflicts: include/llvm/CodeGen/StackMaps.h lib/CodeGen/StackMaps.cpp test/CodeGen/X86/stackmap-liveness.ll
llvm-svn: 197260
show more ...
|
| #
8d6a6584 |
| 13-Dec-2013 |
Andrew Trick <[email protected]> |
Liveness Analysis Pass
llvm-svn: 197254
|
|
Revision tags: llvmorg-3.4.0-rc2, llvmorg-3.4.0-rc1 |
|
| #
760c1e0b |
| 10-Nov-2013 |
Arnaud A. de Grandmaison <[email protected]> |
CalculateSpillWeights does not need to be a pass
Based on discussions with Lang Hames and Jakob Stoklund Olesen at the hacker's lab, and in the light of upcoming work on the PBQP register allocator,
CalculateSpillWeights does not need to be a pass
Based on discussions with Lang Hames and Jakob Stoklund Olesen at the hacker's lab, and in the light of upcoming work on the PBQP register allocator, it was though that CalcSpillWeights does not need to be a pass. This change will enable to customize / tune the spill weight computation depending on the allocator.
Update the documentation style while there.
No functionnal change.
llvm-svn: 194356
show more ...
|
| #
f7a60a8e |
| 08-Nov-2013 |
Arnaud A. de Grandmaison <[email protected]> |
Revert "CalculateSpillWeights does not need to be a pass"
Temporarily revert my previous commit until I understand why it breaks 3 target tests.
llvm-svn: 194272
|
| #
ed812f65 |
| 08-Nov-2013 |
Arnaud A. de Grandmaison <[email protected]> |
CalculateSpillWeights does not need to be a pass
Based on discussions with Lang Hames and Jakob Stoklund Olesen at the hacker's lab, and in the light of upcoming work on the PBQP register allocator,
CalculateSpillWeights does not need to be a pass
Based on discussions with Lang Hames and Jakob Stoklund Olesen at the hacker's lab, and in the light of upcoming work on the PBQP register allocator, it was though that CalcSpillWeights does not need to be a pass. This change will enable to customize / tune the spill weight computation depending on the allocator.
Update the documentation style while there.
No functionnal change.
llvm-svn: 194269
show more ...
|
| #
9770bde5 |
| 14-Oct-2013 |
Rafael Espindola <[email protected]> |
Remove the now unused strong phi elimination pass.
llvm-svn: 192604
|
|
Revision tags: llvmorg-3.3.1-rc1, llvmorg-3.3.0, llvmorg-3.3.0-rc3, llvmorg-3.3.0-rc2, llvmorg-3.3.0-rc1 |
|
| #
dec20e43 |
| 01-May-2013 |
Filip Pizlo <[email protected]> |
This patch breaks up Wrap.h so that it does not have to include all of the things, and renames it to CBindingWrapping.h. I also moved CBindingWrapping.h into Support/.
This new file just contains
This patch breaks up Wrap.h so that it does not have to include all of the things, and renames it to CBindingWrapping.h. I also moved CBindingWrapping.h into Support/.
This new file just contains the macros for defining different wrap/unwrap methods.
The calls to those macros, as well as any custom wrap/unwrap definitions (like for array of Values for example), are put into corresponding C++ headers.
Doing this required some #include surgery, since some .cpp files relied on the fact that including Wrap.h implicitly caused the inclusion of a bunch of other things.
This also now means that the C++ headers will include their corresponding C API headers; for example Value.h must include llvm-c/Core.h. I think this is harmless, since the C API headers contain just external function declarations and some C types, so I don't believe there should be any nasty dependency issues here.
llvm-svn: 180881
show more ...
|
| #
04d4e931 |
| 22-Apr-2013 |
Eric Christopher <[email protected]> |
Move C++ code out of the C headers and into either C++ headers or the C++ files themselves. This enables people to use just a C compiler to interoperate with LLVM.
llvm-svn: 180063
|
| #
70671b99 |
| 29-Mar-2013 |
Benjamin Kramer <[email protected]> |
Remove the old CodePlacementOpt pass.
It was superseded by MachineBlockPlacement and disabled by default since LLVM 3.1.
llvm-svn: 178349
|
| #
664e354d |
| 07-Jan-2013 |
Chandler Carruth <[email protected]> |
Switch TargetTransformInfo from an immutable analysis pass that requires a TargetMachine to construct (and thus isn't always available), to an analysis group that supports layered implementations muc
Switch TargetTransformInfo from an immutable analysis pass that requires a TargetMachine to construct (and thus isn't always available), to an analysis group that supports layered implementations much like AliasAnalysis does. This is a pretty massive change, with a few parts that I was unable to easily separate (sorry), so I'll walk through it.
The first step of this conversion was to make TargetTransformInfo an analysis group, and to sink the nonce implementations in ScalarTargetTransformInfo and VectorTargetTranformInfo into a NoTargetTransformInfo pass. This allows other passes to add a hard requirement on TTI, and assume they will always get at least on implementation.
The TargetTransformInfo analysis group leverages the delegation chaining trick that AliasAnalysis uses, where the base class for the analysis group delegates to the previous analysis *pass*, allowing all but tho NoFoo analysis passes to only implement the parts of the interfaces they support. It also introduces a new trick where each pass in the group retains a pointer to the top-most pass that has been initialized. This allows passes to implement one API in terms of another API and benefit when some other pass above them in the stack has more precise results for the second API.
The second step of this conversion is to create a pass that implements the TargetTransformInfo analysis using the target-independent abstractions in the code generator. This replaces the ScalarTargetTransformImpl and VectorTargetTransformImpl classes in lib/Target with a single pass in lib/CodeGen called BasicTargetTransformInfo. This class actually provides most of the TTI functionality, basing it upon the TargetLowering abstraction and other information in the target independent code generator.
The third step of the conversion adds support to all TargetMachines to register custom analysis passes. This allows building those passes with access to TargetLowering or other target-specific classes, and it also allows each target to customize the set of analysis passes desired in the pass manager. The baseline LLVMTargetMachine implements this interface to add the BasicTTI pass to the pass manager, and all of the tools that want to support target-aware TTI passes call this routine on whatever target machine they end up with to add the appropriate passes.
The fourth step of the conversion created target-specific TTI analysis passes for the X86 and ARM backends. These passes contain the custom logic that was previously in their extensions of the ScalarTargetTransformInfo and VectorTargetTransformInfo interfaces. I separated them into their own file, as now all of the interface bits are private and they just expose a function to create the pass itself. Then I extended these target machines to set up a custom set of analysis passes, first adding BasicTTI as a fallback, and then adding their customized TTI implementations.
The fourth step required logic that was shared between the target independent layer and the specific targets to move to a different interface, as they no longer derive from each other. As a consequence, a helper functions were added to TargetLowering representing the common logic needed both in the target implementation and the codegen implementation of the TTI pass. While technically this is the only change that could have been committed separately, it would have been a nightmare to extract.
The final step of the conversion was just to delete all the old boilerplate. This got rid of the ScalarTargetTransformInfo and VectorTargetTransformInfo classes, all of the support in all of the targets for producing instances of them, and all of the support in the tools for manually constructing a pass based around them.
Now that TTI is a relatively normal analysis group, two things become straightforward. First, we can sink it into lib/Analysis which is a more natural layer for it to live. Second, clients of this interface can depend on it *always* being available which will simplify their code and behavior. These (and other) simplifications will follow in subsequent commits, this one is clearly big enough.
Finally, I'm very aware that much of the comments and documentation needs to be updated. As soon as I had this working, and plausibly well commented, I wanted to get it committed and in front of the build bots. I'll be doing a few passes over documentation later if it sticks.
Commits to update DragonEgg and Clang will be made presently.
llvm-svn: 171681
show more ...
|
|
Revision tags: llvmorg-3.2.0, llvmorg-3.2.0-rc3, llvmorg-3.2.0-rc2, llvmorg-3.2.0-rc1 |
|
| #
86af62c1 |
| 17-Sep-2012 |
Tom Stellard <[email protected]> |
Add a MachinePostDominator pass
This is used in the AMDIL and R600 backends.
llvm-svn: 164029
|
| #
7c277da3 |
| 06-Sep-2012 |
Nadav Rotem <[email protected]> |
Add a new optimization pass: Stack Coloring, that merges disjoint static allocations (allocas). Allocas are known to be disjoint if they are marked by disjoint lifetime markers (@llvm.lifetime.XXX in
Add a new optimization pass: Stack Coloring, that merges disjoint static allocations (allocas). Allocas are known to be disjoint if they are marked by disjoint lifetime markers (@llvm.lifetime.XXX intrinsics).
llvm-svn: 163299
show more ...
|
| #
f8a63a15 |
| 04-Jul-2012 |
Jakob Stoklund Olesen <[email protected]> |
Add an experimental early if-conversion pass, off by default.
This pass performs if-conversion on SSA form machine code by speculatively executing both sides of the branch and using a cmov instructi
Add an experimental early if-conversion pass, off by default.
This pass performs if-conversion on SSA form machine code by speculatively executing both sides of the branch and using a cmov instruction to select the result. This can help lower the number of branch mispredictions on architectures like x86 that don't have predicable instructions.
The current implementation is very aggressive, and causes regressions on mosts tests. It needs good heuristics that have yet to be implemented.
llvm-svn: 159694
show more ...
|
| #
1911a020 |
| 20-Jun-2012 |
Jakob Stoklund Olesen <[email protected]> |
Remove the RenderMachineFunction HTML output pass.
I don't think anyone has been using this functionality for a while, and it is getting in the way of refactoring now.
llvm-svn: 158876
|
| #
1224312f |
| 08-Jun-2012 |
Jakob Stoklund Olesen <[email protected]> |
Reintroduce VirtRegRewriter.
OK, not really. We don't want to reintroduce the old rewriter hacks.
This patch extracts virtual register rewriting as a separate pass that runs after the register allo
Reintroduce VirtRegRewriter.
OK, not really. We don't want to reintroduce the old rewriter hacks.
This patch extracts virtual register rewriting as a separate pass that runs after the register allocator. This is possible now that CodeGen/Passes.cpp can configure the full optimizing register allocator pipeline.
The rewriter pass uses register assignments in VirtRegMap to rewrite virtual registers to physical registers, and it inserts kill flags based on live intervals.
These finalization steps are the same for the optimizing register allocators: RABasic, RAGreedy, and PBQP.
llvm-svn: 158244
show more ...
|
| #
33e5188c |
| 30-May-2012 |
Bob Wilson <[email protected]> |
Add an insertPass API to TargetPassConfig. <rdar://problem/11498613>
Besides adding the new insertPass function, this patch uses it to enhance the existing -print-machineinstrs so that the MachineI
Add an insertPass API to TargetPassConfig. <rdar://problem/11498613>
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
show more ...
|
|
Revision tags: llvmorg-3.1.0, llvmorg-3.1.0-rc3, llvmorg-3.1.0-rc2, llvmorg-3.1.0-rc1 |
|
| #
1fa5bcbe |
| 08-Feb-2012 |
Andrew Trick <[email protected]> |
Codegen pass definition cleanup. No functionality.
Moving toward a uniform style of pass definition to allow easier target configuration. Globally declare Pass ID. Globally declare pass initializer.
Codegen pass definition cleanup. No functionality.
Moving toward a uniform style of pass definition to allow easier target configuration. Globally declare Pass ID. Globally declare pass initializer. Use INITIALIZE_PASS consistently. Add a call to the initializer from CodeGen.cpp. Remove redundant "createPass" functions and "getPassName" methods.
While cleaning up declarations, cleaned up comments (sorry for large diff).
llvm-svn: 150100
show more ...
|
| #
58648e4e |
| 08-Feb-2012 |
Andrew Trick <[email protected]> |
Move pass configuration out of pass constructors: BranchFolderPass
llvm-svn: 150095
|
| #
b7551336 |
| 04-Feb-2012 |
Andrew Trick <[email protected]> |
Make TargetPassConfig an ImmutablePass so CodeGenPasses can query options
llvm-svn: 149752
|
| #
e1c034fe |
| 17-Jan-2012 |
Andrew Trick <[email protected]> |
Renamed MachineScheduler to ScheduleTopDownLive.
Responding to code review.
llvm-svn: 148290
|
| #
e77e84e4 |
| 13-Jan-2012 |
Andrew Trick <[email protected]> |
Added the MachineSchedulerPass skeleton.
llvm-svn: 148105
|