forked from OSchip/llvm-project
81c81b6426
https://reviews.llvm.org/D41373 The various components are GICombinerHelper contains transformations that are common to all targets. Targets can pick and choose which transformations (at function/opcode granularity) each pass uses via configuring a GICombinerInfo. GICombiner contains some common code and it does the traversal, driving of combines, worklist management and iterating until convergence. GICombinerInfo is an interface with a virtual method called combine. The combiner info will allow targets to pick and choose (or implement their own specific combines). CombineInfos can make use of available combines in GICombineHelper to configure the transformations for a particular pass. Currently this approach allows cherry picking transformations from helpers (at function/opcode granularity) and also allows early returning on specific transformations. Targets also get to prioritize whether target specific combines run before/after the opt-in generic combines. Ideally we would like this part to be configured by both C++ and Tablegen. The CombinerInfo also has a field which indicates how to deal with IllegalOps (ie - should we allow to create them/or legalize them?). A CombinerPass would configure a CombinerInfo, create the GICombiner with the Info, and call GICombiner::combineMachineInstrs(MachineFunction&). This organization is very similar to the GISelLegalizer. llvm-svn: 323392 |
||
---|---|---|
.. | ||
CMakeLists.txt | ||
CallLowering.cpp | ||
Combiner.cpp | ||
CombinerHelper.cpp | ||
GlobalISel.cpp | ||
IRTranslator.cpp | ||
InstructionSelect.cpp | ||
InstructionSelector.cpp | ||
LLVMBuild.txt | ||
Legalizer.cpp | ||
LegalizerHelper.cpp | ||
LegalizerInfo.cpp | ||
Localizer.cpp | ||
MachineIRBuilder.cpp | ||
RegBankSelect.cpp | ||
RegisterBank.cpp | ||
RegisterBankInfo.cpp | ||
Utils.cpp |