(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.

