|  | .. _porting: | 
|  |  | 
|  | Porting GlobalISel to A New Target | 
|  | ================================== | 
|  |  | 
|  | There are four major classes to implement by the target: | 
|  |  | 
|  | * :ref:`CallLowering <translator-call-lower>` --- lower calls, returns, and | 
|  | arguments according to the ABI. | 
|  | * :ref:`RegisterBankInfo <api-registerbankinfo>` --- describe | 
|  | :ref:`gmir-regbank` coverage, cross-bank copy cost, and the mapping of | 
|  | operands onto banks for each instruction. | 
|  | * :ref:`LegalizerInfo <api-legalizerinfo>` --- describe what is legal, and how | 
|  | to legalize what isn't. | 
|  | * :ref:`InstructionSelector <api-instructionselector>` --- select generic MIR | 
|  | to target-specific MIR. | 
|  |  | 
|  | Additionally: | 
|  |  | 
|  | * ``TargetPassConfig`` --- create the passes constituting the pipeline, | 
|  | including additional passes not included in the :ref:`pipeline`. | 
|  |  | 
|  | Tutorials | 
|  | ========= | 
|  |  | 
|  | We'd recommend watching `this tutorial | 
|  | <https://www.llvm.org/devmtg/2017-10/#tutorial2>`_ from the 2017 LLVM DevMeeting | 
|  | which gave an overview of how to bring up a new backend in GlobalISel. |