[Git][ghc/ghc][wip/T21972] nativeGen: Disable asm-shortcutting on Darwin
Ben Gamari (@bgamari)
gitlab at gitlab.haskell.org
Sun Jan 22 13:29:14 UTC 2023
Ben Gamari pushed to branch wip/T21972 at Glasgow Haskell Compiler / GHC
Commits:
62eaa982 by Ben Gamari at 2023-01-22T08:29:08-05:00
nativeGen: Disable asm-shortcutting on Darwin
Asm-shortcutting may produce relative references to symbols defined in
other compilation units. This is not something that MachO relocations
support (see #21972). For this reason we disable the optimisation on
Darwin. We do so without a warning since this flag is enabled by `-O2`.
Another way to address this issue would be to rather implement a
PLT-relocatable jump-table strategy. However, this would only benefit
Darwin and does not seem worth the effort.
Closes #21972.
- - - - -
2 changed files:
- compiler/GHC/CmmToAsm.hs
- docs/users_guide/using-optimisation.rst
Changes:
=====================================
compiler/GHC/CmmToAsm.hs
=====================================
@@ -812,6 +812,19 @@ generateJumpTables ncgImpl xs = concatMap f xs
-- -----------------------------------------------------------------------------
-- Shortcut branches
+-- Note [No asm-shortcutting on Darwin]
+-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-- Asm-shortcutting may produce relative references to symbols defined in
+-- other compilation units. This is not something that MachO relocations
+-- support (see #21972). For this reason we disable the optimisation on Darwin.
+-- We do so in the backend without a warning since this flag is enabled by
+-- `-O2`.
+--
+-- Another way to address this issue would be to rather implement a
+-- PLT-relocatable jump-table strategy. However, this would only benefit Darwin
+-- and does not seem worth the effort as this optimisation generally doesn't
+-- offer terribly great benefits.
+
shortcutBranches
:: forall statics instr jumpDest. (Outputable jumpDest)
=> NCGConfig
@@ -822,6 +835,8 @@ shortcutBranches
shortcutBranches config ncgImpl tops weights
| ncgEnableShortcutting config
+ -- See Note [No asm-shortcutting on Darwin]
+ , not $ osMachOTarget $ platformOS $ ncgPlatform config
= ( map (apply_mapping ncgImpl mapping) tops'
, shortcutWeightMap mappingBid <$!> weights )
| otherwise
=====================================
docs/users_guide/using-optimisation.rst
=====================================
@@ -262,8 +262,10 @@ by saying ``-fno-wombat``.
of a unconditionally jump, we replace all jumps to A by jumps to the successor
of A.
- This is mostly done during Cmm passes. However this can miss corner cases. So at -O2
- we run the pass again at the asm stage to catch these.
+ This is mostly done during Cmm passes. However this can miss corner cases.
+ So at ``-O2`` this flag runs the pass again at the assembly stage to catch
+ these. Note that due to platform limitations (:ghc-ticket:`21972`) this flag
+ does nothing on macOS.
.. ghc-flag:: -fblock-layout-cfg
:shortdesc: Use the new cfg based block layout algorithm.
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/62eaa9824e655ade942f0f8152bd715ae433898a
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/62eaa9824e655ade942f0f8152bd715ae433898a
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/20230122/7610338b/attachment-0001.html>
More information about the ghc-commits
mailing list