[commit: ghc] master: CLabel: A bit of documentation (030d9d4)
git at git.haskell.org
git at git.haskell.org
Tue Nov 28 20:53:10 UTC 2017
Repository : ssh://git@git.haskell.org/ghc
On branch : master
Link : http://ghc.haskell.org/trac/ghc/changeset/030d9d476e5f00b62b20b5d3b58b0083ec247826/ghc
>---------------------------------------------------------------
commit 030d9d476e5f00b62b20b5d3b58b0083ec247826
Author: Ben Gamari <ben at smart-cactus.org>
Date: Tue Nov 28 15:35:32 2017 -0500
CLabel: A bit of documentation
>---------------------------------------------------------------
030d9d476e5f00b62b20b5d3b58b0083ec247826
compiler/cmm/CLabel.hs | 28 +++++++++++++++++++++++++---
1 file changed, 25 insertions(+), 3 deletions(-)
diff --git a/compiler/cmm/CLabel.hs b/compiler/cmm/CLabel.hs
index 0e87a88..9170ee0 100644
--- a/compiler/cmm/CLabel.hs
+++ b/compiler/cmm/CLabel.hs
@@ -130,8 +130,8 @@ import PprCore ( {- instances -} )
-- -----------------------------------------------------------------------------
-- The CLabel type
-{-
- | CLabel is an abstract type that supports the following operations:
+{- |
+ 'CLabel' is an abstract type that supports the following operations:
- Pretty printing
@@ -150,6 +150,25 @@ import PprCore ( {- instances -} )
more than one declaration for any given label).
- Converting an info table label into an entry label.
+
+ CLabel usage is a bit messy in GHC as they are used in a number of different
+ contexts:
+
+ - By the C-- AST to identify labels
+
+ - By the unregisterised C code generator ("PprC") for naming functions (hence
+ the name 'CLabel')
+
+ - By the native and LLVM code generators to identify labels
+
+ For extra fun, each of these uses a slightly different subset of constructors
+ (e.g. 'AsmTempLabel' and 'AsmTempDerivedLabel' are used only in the NCG and
+ LLVM backends).
+
+ In general, we use 'IdLabel' to represent Haskell things early in the
+ pipeline. However, later optimization passes will often represent blocks they
+ create with 'LocalBlockLabel' where there is no obvious 'Name' to hang off the
+ label.
-}
data CLabel
@@ -193,10 +212,13 @@ data CLabel
FunctionOrData
- -- | Local temporary label used for native (or LLVM) code generation
+ -- | Local temporary label used for native (or LLVM) code generation; must not
+ -- appear outside of these contexts. Use primarily for debug information
| AsmTempLabel
{-# UNPACK #-} !Unique
+ -- | A label \"derived\" from another 'CLabel' by the addition of a suffix.
+ -- Must not occur outside of the NCG or LLVM code generators.
| AsmTempDerivedLabel
CLabel
FastString -- suffix
More information about the ghc-commits
mailing list