[Git][ghc/ghc][wip/rip-out-fast-llvm] llvmGen: Remove -fast-llvm flag

Ben Gamari gitlab at gitlab.haskell.org
Mon Apr 20 17:27:47 UTC 2020



Ben Gamari pushed to branch wip/rip-out-fast-llvm at Glasgow Haskell Compiler / GHC


Commits:
0b57db5f by Ben Gamari at 2020-04-20T13:27:37-04:00
llvmGen: Remove -fast-llvm flag

Issue #18076 drew my attention to the undocumented `-fast-llvm` flag for
the LLVM code generator introduced in
22733532171330136d87533d523f565f2a4f102f. Speaking to Moritz about this,
the motivation for this flag was to avoid potential incompatibilities
between LLVM and the assembler/linker toolchain by making LLVM
responsible for machine-code generation.

Unfortunately, this cannot possibly work: the LLVM backend's mangler
performs a number of transforms on the assembler generated by LLVM that
are necessary for correctness. These are currently:

 * mangling Haskell functions' symbol types to be `object` instead of
   `function` on ELF platforms (necessary for tables-next-to-code)
 * mangling AVX instructions to ensure that we don't assume alignment
   (which LLVM otherwise does)
 * mangling Darwin's  subsections-via-symbols directives

Given that these are all necessary I don't believe that we can support
`-fast-llvm`. Let's rather remove it.

- - - - -


3 changed files:

- compiler/GHC/Driver/Pipeline.hs
- compiler/GHC/Driver/Session.hs
- docs/users_guide/expected-undocumented-flags.txt


Changes:

=====================================
compiler/GHC/Driver/Pipeline.hs
=====================================
@@ -866,20 +866,6 @@ getOutputFilename stop_phase output basename dflags next_phase maybe_location
              | otherwise      = persistent
 
 
--- | The fast LLVM Pipeline skips the mangler and assembler,
--- emitting object code directly from llc.
---
--- slow: opt -> llc -> .s -> mangler -> as -> .o
--- fast: opt -> llc -> .o
---
--- hidden flag: -ffast-llvm
---
--- if keep-s-files is specified, we need to go through
--- the slow pipeline (Kavon Farvardin requested this).
-fastLlvmPipeline :: DynFlags -> Bool
-fastLlvmPipeline dflags
-  = not (gopt Opt_KeepSFiles dflags) && gopt Opt_FastLlvm dflags
-
 -- | LLVM Options. These are flags to be passed to opt and llc, to ensure
 -- consistency we list them in pairs, so that they form groups.
 llvmOptions :: DynFlags
@@ -890,7 +876,6 @@ llvmOptions dflags =
         ,"-relocation-model=" ++ rmodel) | not (null rmodel)]
     ++ [("-stack-alignment=" ++ (show align)
         ,"-stack-alignment=" ++ (show align)) | align > 0 ]
-    ++ [("", "-filetype=obj") | fastLlvmPipeline dflags ]
 
     -- Additional llc flags
     ++ [("", "-mcpu=" ++ mcpu)   | not (null mcpu)
@@ -1472,8 +1457,7 @@ runPhase (RealPhase LlvmOpt) input_fn dflags
 
 runPhase (RealPhase LlvmLlc) input_fn dflags
   = do
-    next_phase <- if | fastLlvmPipeline dflags -> maybeMergeForeign
-                     -- hidden debugging flag '-dno-llvm-mangler' to skip mangling
+    next_phase <- if -- hidden debugging flag '-dno-llvm-mangler' to skip mangling
                      | gopt Opt_NoLlvmMangler dflags -> return (As False)
                      | otherwise -> return LlvmMangle
 


=====================================
compiler/GHC/Driver/Session.hs
=====================================
@@ -2815,8 +2815,6 @@ dynamic_flags_deps = [
         (NoArg (setGeneralFlag Opt_D_faststring_stats))
   , make_ord_flag defGhcFlag "dno-llvm-mangler"
         (NoArg (setGeneralFlag Opt_NoLlvmMangler)) -- hidden flag
-  , make_ord_flag defGhcFlag "fast-llvm"
-        (NoArg (setGeneralFlag Opt_FastLlvm)) -- hidden flag
   , make_ord_flag defGhcFlag "dno-typeable-binds"
         (NoArg (setGeneralFlag Opt_NoTypeableBinds))
   , make_ord_flag defGhcFlag "ddump-debug"


=====================================
docs/users_guide/expected-undocumented-flags.txt
=====================================
@@ -78,7 +78,6 @@
 -fallow-overlapping-instances
 -fallow-undecidable-instances
 -farrows
--fast-llvm
 -fbang-patterns
 -fbuilding-cabal-package
 -fconstraint-solver-iterations



View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/0b57db5f9a6ff27bb4a29464c3bfdaf5f3e7857b

-- 
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/0b57db5f9a6ff27bb4a29464c3bfdaf5f3e7857b
You're receiving this email because of your account on gitlab.haskell.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20200420/c6b98856/attachment-0001.html>


More information about the ghc-commits mailing list