AsmCodeGen

ghc-8.6.3: The GHC API

Safe Haskell | None
Language | Haskell2010

AsmCodeGen

Contents

- Module entry point
- Test-only exports: see trac #12744

Synopsis

- nativeCodeGen :: DynFlags -> Module -> ModLocation -> Handle -> UniqSupply -> Stream IO RawCmmGroup () -> IO UniqSupply
- cmmNativeGen :: (Outputable statics, Outputable instr, Instruction instr) => DynFlags -> Module -> ModLocation -> NcgImpl statics instr jumpDest -> UniqSupply -> DwarfFiles -> LabelMap DebugBlock -> RawCmmDecl -> Int -> IO (UniqSupply, DwarfFiles, [NatCmmDecl statics instr], [CLabel], Maybe [RegAllocStats statics instr], Maybe [RegAllocStats], LabelMap [UnwindPoint])
- data NcgImpl statics instr jumpDest = NcgImpl {
  - cmmTopCodeGen :: RawCmmDecl -> NatM [NatCmmDecl statics instr]
  - generateJumpTableForInstr :: instr -> Maybe (NatCmmDecl statics instr)
  - getJumpDestBlockId :: jumpDest -> Maybe BlockId
  - canShortcut :: instr -> Maybe jumpDest
  - shortcutStatics :: (BlockId -> Maybe jumpDest) -> statics -> statics
  - shortcutJump :: (BlockId -> Maybe jumpDest) -> instr -> instr
  - pprNatCmmDecl :: NatCmmDecl statics instr -> SDoc
  - maxSpillSlots :: Int
  - allocatableRegs :: [RealReg]
  - ncg_x86fp_kludge :: [NatCmmDecl statics instr] -> [NatCmmDecl statics instr]
  - ncgExpandTop :: [NatCmmDecl statics instr] -> [NatCmmDecl statics instr]
  - ncgAllocMoreStack :: Int -> NatCmmDecl statics instr -> UniqSM (NatCmmDecl statics instr)
  - ncgMakeFarBranches :: LabelMap CmmStatics -> [NatBasicBlock instr] -> [NatBasicBlock instr]
  - extractUnwindPoints :: [instr] -> [UnwindPoint]
  }
- x86NcgImpl :: DynFlags -> NcgImpl (Alignment, CmmStatics) Instr JumpDest

# Module entry point

nativeCodeGen :: DynFlags -> Module -> ModLocation -> Handle -> UniqSupply -> Stream IO RawCmmGroup () -> IO UniqSupply #

# Test-only exports: see trac #12744

cmmNativeGen #

Arguments

:: (Outputable statics, Outputable instr, Instruction instr) |
=> DynFlags |
-> Module |
-> ModLocation |
-> NcgImpl statics instr jumpDest |
-> UniqSupply |
-> DwarfFiles |
-> LabelMap DebugBlock |
-> RawCmmDecl | the cmm to generate code for
-> Int | sequence number of this top thing
-> IO (UniqSupply, DwarfFiles, [NatCmmDecl statics instr], [CLabel], Maybe [RegAllocStats statics instr], Maybe [RegAllocStats], LabelMap [UnwindPoint]) |

Complete native code generation phase for a single top-level chunk of Cmm. Dumping the output of each stage along the way. Global conflict graph and NGC stats

data NcgImpl statics instr jumpDest #

Constructors

NcgImpl |
Fields cmmTopCodeGen :: RawCmmDecl -> NatM [NatCmmDecl statics instr] generateJumpTableForInstr :: instr -> Maybe (NatCmmDecl statics instr) getJumpDestBlockId :: jumpDest -> Maybe BlockId canShortcut :: instr -> Maybe jumpDest shortcutStatics :: (BlockId -> Maybe jumpDest) -> statics -> statics shortcutJump :: (BlockId -> Maybe jumpDest) -> instr -> instr pprNatCmmDecl :: NatCmmDecl statics instr -> SDoc maxSpillSlots :: Int allocatableRegs :: [RealReg] ncg_x86fp_kludge :: [NatCmmDecl statics instr] -> [NatCmmDecl statics instr] ncgExpandTop :: [NatCmmDecl statics instr] -> [NatCmmDecl statics instr] ncgAllocMoreStack :: Int -> NatCmmDecl statics instr -> UniqSM (NatCmmDecl statics instr) ncgMakeFarBranches :: LabelMap CmmStatics -> [NatBasicBlock instr] -> [NatBasicBlock instr] extractUnwindPoints :: [instr] -> [UnwindPoint] given the instruction sequence of a block, produce a list of the block's `UnwindPoint`s See Note [What is this unwinding business?] in Debug and Note [Unwinding information in the NCG] in this module.

x86NcgImpl :: DynFlags -> NcgImpl (Alignment, CmmStatics) Instr JumpDest #