llvm-project/llvm/lib/CodeGen/GlobalISel
Aditya Nandakumar 81c81b6426 [GISel]: Implement GlobalISel combiner API.
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
2018-01-25 00:41:58 +00:00
..
CMakeLists.txt [GISel]: Implement GlobalISel combiner API. 2018-01-25 00:41:58 +00:00
CallLowering.cpp MachineFunction: Return reference from getFunction(); NFC 2017-12-15 22:22:58 +00:00
Combiner.cpp [GISel]: Implement GlobalISel combiner API. 2018-01-25 00:41:58 +00:00
CombinerHelper.cpp [GISel]: Implement GlobalISel combiner API. 2018-01-25 00:41:58 +00:00
GlobalISel.cpp [GlobalISel] Make GlobalISel a non-optional library. 2017-08-03 21:52:25 +00:00
IRTranslator.cpp [GISel]: Don't create G_MUL with 1 during translation of GEP 2018-01-05 02:56:28 +00:00
InstructionSelect.cpp [GISel]: Remove redundant copies at the end of ISel 2018-01-24 01:35:26 +00:00
InstructionSelector.cpp [GISel] Make constrainSelectedInstRegOperands() available to the legalizer. NFC 2018-01-17 19:31:33 +00:00
LLVMBuild.txt Revert "Get GlobalISel to build on Linux after r286407" 2016-11-16 22:24:59 +00:00
Legalizer.cpp MachineFunction: Return reference from getFunction(); NFC 2017-12-15 22:22:58 +00:00
LegalizerHelper.cpp [globalisel] Introduce LegalityQuery to better encapsulate the legalizer decisions. NFC. 2018-01-24 17:17:46 +00:00
LegalizerInfo.cpp [globalisel] Introduce LegalityQuery to better encapsulate the legalizer decisions. NFC. 2018-01-24 17:17:46 +00:00
Localizer.cpp [CodeGen] Rename functions PrintReg* to printReg* 2017-11-28 12:42:37 +00:00
MachineIRBuilder.cpp MachineFunction: Return reference from getFunction(); NFC 2017-12-15 22:22:58 +00:00
RegBankSelect.cpp MachineFunction: Return reference from getFunction(); NFC 2017-12-15 22:22:58 +00:00
RegisterBank.cpp Fix a bunch more layering of CodeGen headers that are in Target 2017-11-17 01:07:10 +00:00
RegisterBankInfo.cpp Remove redundant includes from lib/CodeGen. 2017-12-13 21:30:47 +00:00
Utils.cpp [GISel] Make constrainSelectedInstRegOperands() available to the legalizer. NFC 2018-01-17 19:31:33 +00:00