[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