[Git][ghc/ghc][wip/andreask/remove_dict_field_flag] 5 commits: Revert "AArch32 symbols only on aarch32."

Andreas Klebinger gitlab at gitlab.haskell.org
Tue Jul 21 15:37:36 UTC 2020



Andreas Klebinger pushed to branch wip/andreask/remove_dict_field_flag at Glasgow Haskell Compiler / GHC


Commits:
868e4523 by Moritz Angermann at 2020-07-20T04:30:38-04:00
Revert "AArch32 symbols only on aarch32."

This reverts commit cdfeb3f24f76e8fd30452016676e56fbc827789a.

Signed-off-by: Moritz Angermann <moritz.angermann at gmail.com>

- - - - -
c915ba84 by Moritz Angermann at 2020-07-20T04:30:38-04:00
Revert "Fix (1)"

This reverts commit 7abffced01f5680efafe44f6be2733eab321b039.

Signed-off-by: Moritz Angermann <moritz.angermann at gmail.com>

- - - - -
777c452a by Moritz Angermann at 2020-07-20T04:30:38-04:00
Revert "better if guards."

This reverts commit 3f60b94de1f460ca3f689152860b108a19ce193e.

Signed-off-by: Moritz Angermann <moritz.angermann at gmail.com>

- - - - -
0dd40552 by Moritz Angermann at 2020-07-20T04:30:38-04:00
Revert "[linker/rtsSymbols] More linker symbols"

This reverts commit 686e72253aed3880268dd6858eadd8c320f09e97.

Signed-off-by: Moritz Angermann <moritz.angermann at gmail.com>

- - - - -
dc67f215 by Andreas Klebinger at 2020-07-21T17:37:23+02:00
Deprecate -fdmd-tx-dict-sel.

It's behaviour is now unconditionally enabled as
it's slightly beneficial.

There are almost no benchmarks which benefit from
disabling it, so it's not worth the keep this
configurable.

This fixes #18429.

- - - - -


5 changed files:

- compiler/GHC/Core/Opt/DmdAnal.hs
- compiler/GHC/Driver/Flags.hs
- compiler/GHC/Driver/Session.hs
- docs/users_guide/using-optimisation.rst
- rts/RtsSymbols.c


Changes:

=====================================
compiler/GHC/Core/Opt/DmdAnal.hs
=====================================
@@ -486,8 +486,9 @@ dmdTransform env var dmd
   | isDataConWorkId var
   = dmdTransformDataConSig (idArity var) dmd
   -- Dictionary component selectors
-  | gopt Opt_DmdTxDictSel (ae_dflags env),
-    Just _ <- isClassOpId_maybe var
+  -- Used to be controlled by a flag.
+  -- See #18429 for some perf measurements.
+  | Just _ <- isClassOpId_maybe var
   = dmdTransformDictSelSig (idStrictness var) dmd
   -- Imported functions
   | isGlobalId var


=====================================
compiler/GHC/Driver/Flags.hs
=====================================
@@ -188,7 +188,8 @@ data GeneralFlag
    | Opt_OmitYields
    | Opt_FunToThunk               -- allow GHC.Core.Opt.WorkWrap.Utils.mkWorkerArgs to remove all value lambdas
    | Opt_DictsStrict                     -- be strict in argument dictionaries
-   | Opt_DmdTxDictSel              -- use a special demand transformer for dictionary selectors
+   | Opt_DmdTxDictSel              -- ^ deprecated, no effect and behaviour is now default.
+                                   -- Allowed switching of a special demand transformer for dictionary selectors
    | Opt_Loopification                  -- See Note [Self-recursive tail calls]
    | Opt_CfgBlocklayout             -- ^ Use the cfg based block layout algorithm.
    | Opt_WeightlessBlocklayout         -- ^ Layout based on last instruction per block.


=====================================
compiler/GHC/Driver/Session.hs
=====================================
@@ -3513,7 +3513,8 @@ fFlagsDeps = [
   flagSpec "diagnostics-show-caret"           Opt_DiagnosticsShowCaret,
   flagSpec "dicts-cheap"                      Opt_DictsCheap,
   flagSpec "dicts-strict"                     Opt_DictsStrict,
-  flagSpec "dmd-tx-dict-sel"                  Opt_DmdTxDictSel,
+  depFlagSpec "dmd-tx-dict-sel"
+      Opt_DmdTxDictSel "effect is now unconditionally enabled",
   flagSpec "do-eta-reduction"                 Opt_DoEtaReduction,
   flagSpec "do-lambda-eta-expansion"          Opt_DoLambdaEtaExpansion,
   flagSpec "eager-blackholing"                Opt_EagerBlackHoling,
@@ -4045,7 +4046,6 @@ optLevelFlags :: [([Int], GeneralFlag)]
 optLevelFlags -- see Note [Documenting optimisation flags]
   = [ ([0,1,2], Opt_DoLambdaEtaExpansion)
     , ([0,1,2], Opt_DoEtaReduction)       -- See Note [Eta-reduction in -O0]
-    , ([0,1,2], Opt_DmdTxDictSel)
     , ([0,1,2], Opt_LlvmTBAA)
 
     , ([0],     Opt_IgnoreInterfacePragmas)


=====================================
docs/users_guide/using-optimisation.rst
=====================================
@@ -353,8 +353,7 @@ by saying ``-fno-wombat``.
     Make dictionaries strict.
 
 .. ghc-flag:: -fdmd-tx-dict-sel
-    :shortdesc: Use a special demand transformer for dictionary selectors.
-        Always enabled by default.
+    :shortdesc: *(deprecated)* Use a special demand transformer for dictionary selectors.
     :type: dynamic
     :reverse: -fno-dmd-tx-dict-sel
     :category:
@@ -362,6 +361,7 @@ by saying ``-fno-wombat``.
     :default: on
 
     Use a special demand transformer for dictionary selectors.
+    Behaviour is unconditionally enabled starting with 8.14
 
 .. ghc-flag:: -fdo-eta-reduction
     :shortdesc: Enable eta-reduction. Implied by :ghc-flag:`-O`.


=====================================
rts/RtsSymbols.c
=====================================
@@ -59,6 +59,7 @@
       SymI_HasProto(signal_handlers)            \
       SymI_HasProto(stg_sig_install)            \
       SymI_HasProto(rtsTimerSignal)             \
+      SymI_HasProto(atexit)                     \
       SymI_NeedsDataProto(nocldstop)
 #endif
 
@@ -993,213 +994,29 @@
       RTS_USER_SIGNALS_SYMBOLS                                          \
       RTS_INTCHAR_SYMBOLS
 
+
 // 64-bit support functions in libgcc.a
-// See https://gcc.gnu.org/onlinedocs/gccint/Libgcc.html#Libgcc
-#define RTS_LIBGCC_SYMBOLS_32                          \
-      SymI_NeedsProto(__fixunsdfdi)                    \
-      /* 4 The GCC low-level runtime library         */\
-      /* 4.1.1 Arithmetic functions                  */\
-      /* SymI_NeedsProto(__ashlsi3) */\
-      SymI_NeedsProto(__ashldi3) \
-      /* SymI_NeedsProto(__ashlti3) */\
-      /* These functions return the result of shifting a left by b bits. */\
-      /* SymI_NeedsProto(__ashrsi3) */\
-      SymI_NeedsProto(__ashrdi3) \
-      /* SymI_NeedsProto(__ashrti3) */\
-      /* These functions return the result of arithmetically shifting a right by b bits. */\
-      /* SymI_NeedsProto(__divsi3) */\
-      SymI_NeedsProto(__divdi3) \
-      /* SymI_NeedsProto(__divti3) */\
-      /* These functions return the quotient of the signed division of a and b. */\
-      /* SymI_NeedsProto(__lshrsi3) */ \
-      SymI_NeedsProto(__lshrdi3) \
-      /* SymI_NeedsProto(__lshrti3) */ \
-      /* These functions return the result of logically shifting a right by b bits. */\
-      /* SymI_NeedsProto(__modsi3) */ \
-      SymI_NeedsProto(__moddi3) \
-      /* SymI_NeedsProto(__modti3) */ \
-      /* These functions return the remainder of the signed division of a and b. */\
-      /* SymI_NeedsProto(__mulsi3) */ \
-      SymI_NeedsProto(__muldi3) \
-      /* SymI_NeedsProto(__multi3) */ \
-      /* These functions return the product of a and b. */\
-      SymI_NeedsProto(__negdi2) \
-      /* SymI_NeedsProto(__negti2) */ \
-      /* These functions return the negation of a. */\
-      /* SymI_NeedsProto(__udivsi3) */ \
-      SymI_NeedsProto(__udivdi3) \
-      /* SymI_NeedsProto(__udivti3) */ \
-      /* These functions return the quotient of the unsigned division of a and b. */\
-      SymI_NeedsProto(__udivmoddi4) \
-      /* SymI_NeedsProto(__udivmodti4) */ \
-      /* These functions calculate both the quotient and remainder of the unsigned division of a and b. The return value is the quotient, and the remainder is placed in variable pointed to by c. */\
-      /* SymI_NeedsProto(__umodsi3) */ \
-      SymI_NeedsProto(__umoddi3) \
-      /* SymI_NeedsProto(__umodti3) */ \
-      /* These functions return the remainder of the unsigned division of a and b. */\
-      /* 4.1.2 Comparison functions */\
-      /* The following functions implement integral comparisons. These functions implement a low-level compare, upon which the higher level comparison operators (such as less than and greater than or equal to) can be constructed. The returned values lie in the range zero to two, to allow the high-level operators to be implemented by testing the returned result using either signed or unsigned comparison. */\
-      SymI_NeedsProto(__cmpdi2) \
-      /* SymI_NeedsProto(__cmpti2) */ \
-      /* These functions perform a signed comparison of a and b. If a is less than b, they return 0; if a is greater than b, they return 2; and if a and b are equal they return 1. */\
-      SymI_NeedsProto(__ucmpdi2) \
-      /* SymI_NeedsProto(__ucmpti2) */ \
-      /* These functions perform an unsigned comparison of a and b. If a is less than b, they return 0; if a is greater than b, they return 2; and if a and b are equal they return 1. */\
-      /* 4.1.3 Trapping arithmetic functions */\
-      /* The following functions implement trapping arithmetic. These functions call the libc function abort upon signed arithmetic overflow. */\
-      SymI_NeedsProto(__absvsi2) \
-      SymI_NeedsProto(__absvdi2) \
-      /* These functions return the absolute value of a. */\
-      /* SymI_NeedsProto(__addvsi3) */ \
-      SymI_NeedsProto(__addvdi3) \
-      /* These functions return the sum of a and b; that is a + b. */\
-      /* SymI_NeedsProto(__mulvsi3) */ \
-      SymI_NeedsProto(__mulvdi3) \
-      /* The functions return the product of a and b; that is a * b. */\
-      SymI_NeedsProto(__negvsi2) \
-      SymI_NeedsProto(__negvdi2) \
-      /* These functions return the negation of a; that is -a. */\
-      /* SymI_NeedsProto(__subvsi3) */ \
-      SymI_NeedsProto(__subvdi3) \
-      /* These functions return the difference between b and a; that is a - b. */\
-      /* 4.1.4 Bit operations */\
-      SymI_NeedsProto(__clzsi2) \
-      SymI_NeedsProto(__clzdi2) \
-      /* SymI_NeedsProto(__clzti2) */ \
-      /* These functions return the number of leading 0-bits in a, starting at the most significant bit position. If a is zero, the result is undefined. */\
-      SymI_NeedsProto(__ctzsi2) \
-      SymI_NeedsProto(__ctzdi2) \
-      /* SymI_NeedsProto(__ctzti2) */ \
-      /* These functions return the number of trailing 0-bits in a, starting at the least significant bit position. If a is zero, the result is undefined. */\
-      SymI_NeedsProto(__ffsdi2) \
-      /* SymI_NeedsProto(__ffsti2) */ \
-      /* These functions return the index of the least significant 1-bit in a, or the value zero if a is zero. The least significant bit is index one. */\
-      SymI_NeedsProto(__paritysi2) \
-      SymI_NeedsProto(__paritydi2) \
-      /* SymI_NeedsProto(__parityti2) */\
-      /* These functions return the value zero if the number of bits set in a is even, and the value one otherwise. */\
-      SymI_NeedsProto(__popcountsi2) \
-      SymI_NeedsProto(__popcountdi2) \
-      /* SymI_NeedsProto(__popcountti2) */ \
-      /* These functions return the number of bits set in a. */\
-      SymI_NeedsProto(__bswapsi2) \
-      SymI_NeedsProto(__bswapdi2)
-#define RTS_LIBGCC_SYMBOLS_aarch32                     \
-      /* armv6l                                      */\
-      /* TODO: should check for __ARM_EABI__         */\
-      SymI_NeedsProto(__aeabi_d2f) \
-      SymI_NeedsProto(__aeabi_d2iz) \
-      SymI_NeedsProto(__aeabi_d2lz) \
-      SymI_NeedsProto(__aeabi_d2uiz) \
-      SymI_NeedsProto(__aeabi_d2ulz) \
-      SymI_NeedsProto(__aeabi_dadd) \
-      SymI_NeedsProto(__aeabi_dcmpeq) \
-      SymI_NeedsProto(__aeabi_dcmpge) \
-      SymI_NeedsProto(__aeabi_dcmpgt) \
-      SymI_NeedsProto(__aeabi_dcmple) \
-      SymI_NeedsProto(__aeabi_dcmplt) \
-      SymI_NeedsProto(__aeabi_dcmpun) \
-      SymI_NeedsProto(__aeabi_ddiv) \
-      SymI_NeedsProto(__aeabi_dmul) \
-      SymI_NeedsProto(__aeabi_dneg) \
-      SymI_NeedsProto(__aeabi_dsub) \
-      SymI_NeedsProto(__aeabi_f2d) \
-      SymI_NeedsProto(__aeabi_f2iz) \
-      SymI_NeedsProto(__aeabi_f2lz) \
-      SymI_NeedsProto(__aeabi_f2uiz) \
-      SymI_NeedsProto(__aeabi_f2ulz) \
-      SymI_NeedsProto(__aeabi_fadd) \
-      SymI_NeedsProto(__aeabi_fcmpeq) \
-      SymI_NeedsProto(__aeabi_fcmpge) \
-      SymI_NeedsProto(__aeabi_fcmpgt) \
-      SymI_NeedsProto(__aeabi_fcmple) \
-      SymI_NeedsProto(__aeabi_fcmplt) \
-      SymI_NeedsProto(__aeabi_fcmpun) \
-      SymI_NeedsProto(__aeabi_fdiv) \
-      SymI_NeedsProto(__aeabi_fmul) \
-      SymI_NeedsProto(__aeabi_fneg) \
-      SymI_NeedsProto(__aeabi_fsub) \
-      SymI_NeedsProto(__aeabi_i2d) \
-      SymI_NeedsProto(__aeabi_i2f) \
-      SymI_NeedsProto(__aeabi_idiv) \
-      SymI_NeedsProto(__aeabi_idivmod) \
-      SymI_NeedsProto(__aeabi_l2d) \
-      SymI_NeedsProto(__aeabi_l2f) \
-      SymI_NeedsProto(__aeabi_lasr) \
-      SymI_NeedsProto(__aeabi_lcmp) \
-      SymI_NeedsProto(__aeabi_ldivmod) \
-      SymI_NeedsProto(__aeabi_llsl) \
-      SymI_NeedsProto(__aeabi_llsr) \
-      SymI_NeedsProto(__aeabi_lmul) \
-      SymI_NeedsProto(__aeabi_ui2d) \
-      SymI_NeedsProto(__aeabi_ui2f) \
-      SymI_NeedsProto(__aeabi_uidiv) \
-      SymI_NeedsProto(__aeabi_uidivmod) \
-      SymI_NeedsProto(__aeabi_ul2d) \
-      SymI_NeedsProto(__aeabi_ul2f) \
-      SymI_NeedsProto(__aeabi_ulcmp) \
-      SymI_NeedsProto(__aeabi_uldivmod)
-#define RTS_LIBGCC_SYMBOLS_64                          \
+#if defined(__GNUC__) && SIZEOF_VOID_P <= 4 && !defined(_ABIN32)
+#define RTS_LIBGCC_SYMBOLS                             \
+      SymI_NeedsProto(__divdi3)                        \
+      SymI_NeedsProto(__udivdi3)                       \
+      SymI_NeedsProto(__moddi3)                        \
+      SymI_NeedsProto(__umoddi3)                       \
+      SymI_NeedsProto(__muldi3)                        \
+      SymI_NeedsProto(__ashldi3)                       \
+      SymI_NeedsProto(__ashrdi3)                       \
+      SymI_NeedsProto(__lshrdi3)                       \
+      SymI_NeedsProto(__fixunsdfdi)
+#elif defined(__GNUC__) && SIZEOF_VOID_P == 8
+#define RTS_LIBGCC_SYMBOLS                             \
       SymI_NeedsProto(__udivti3)                       \
       SymI_NeedsProto(__umodti3)
-
-/* for aarch64                                        */
-#define RTS_LIBGCC_SYMBOLS_aarch64                     \
-      SymI_NeedsProto(__netf2)                         \
-      SymI_NeedsProto(__addtf3)                        \
-      SymI_NeedsProto(__subtf3)                        \
-      SymI_NeedsProto(__multf3)                        \
-      SymI_NeedsProto(__extenddftf2)                   \
-      SymI_NeedsProto(__fixtfsi)                       \
-      SymI_NeedsProto(__fixunstfsi)                    \
-      SymI_NeedsProto(__floatsitf)                     \
-      SymI_NeedsProto(__floatunsitf)
-
-#if defined(__GNUC__) && SIZEOF_VOID_P <= 4 && defined(arm_HOST_OS)
-#define RTS_LIBGCC_SYMBOLS RTS_LIBGCC_SYMBOLS_32 RTS_LIBGCC_SYMBOLS_aarch32
-#elif defined(__GNUC__) && SIZEOF_VOID_P <= 4 && !defined(_ABIN32)
-#define RTS_LIBGCC_SYMBOLS RTS_LIBGCC_SYMBOLS_32
-#elif defined(__GNUC__) && SIZEOF_VOID_P == 8 && defined(aarch64_HOST_OS)
-#define RTS_LIBGCC_SYMBOLS RTS_LIBGCC_SYMBOLS_64 RTS_LIBGCC_SYMBOLS_aarch64
-#elif defined(__GNUC__) && SIZEOF_VOID_P == 8
-#define RTS_LIBGCC_SYMBOLS RTS_LIBGCC_SYMBOLS_64
 #else
 #define RTS_LIBGCC_SYMBOLS
 #endif
 
-#if !defined(mingw32_HOST_OS) && !defined(DYNAMIC) && (defined(_FORTIFY_SOURCE) || defined(__SSP__))
-#define RTS_SSP_SYMBOLS                                \
-      SymI_NeedsProto(__stack_chk_guard)               \
-      SymI_NeedsProto(__stack_chk_fail)
-#else
-#define RTS_SSP_SYMBOLS
-#endif
-#if !defined(DYNAMIC) && defined(linux_HOST_OS)
-// we need these for static musl builds. However when
-// linking shared objects (DLLs) this will fail, hence
-// we do not include them when building with -DDYNAMIC
-#define RTS_LINKER_SYMBOLS                             \
-      SymI_NeedsProto(__fini_array_start)              \
-      SymI_NeedsProto(__fini_array_end)
-#else
-#define RTS_LINKER_SYMBOLS
-#endif
-
-#if defined(darwin_HOST_OS) && defined(powerpc_HOST_ARCH)
-      // Symbols that don't have a leading underscore
-      // on Mac OS X. They have to receive special treatment,
-      // see machoInitSymbolsWithoutUnderscore()
-#define RTS_MACHO_NOUNDERLINE_SYMBOLS                   \
-      SymI_NeedsProto(saveFP)                           \
-      SymI_NeedsProto(restFP)
-#endif
-
 /* entirely bogus claims about types of these symbols */
-/* to prevent a bit of define expansion, SymI_NeedsProto is a variadic
- * macro.  And we'll concat vvv with the __VA_ARGS__. This prevents
- * vvv from getting macro expanded.
- */
-#define SymI_NeedsProto(vvv,...) extern void vvv ## __VA_ARGS__ (void);
+#define SymI_NeedsProto(vvv)  extern void vvv(void);
 #define SymI_NeedsDataProto(vvv)  extern StgWord vvv[];
 #if defined(COMPILING_WINDOWS_DLL)
 #define SymE_HasProto(vvv)    SymE_HasProto(vvv);
@@ -1226,8 +1043,6 @@ RTS_DARWIN_ONLY_SYMBOLS
 RTS_OPENBSD_ONLY_SYMBOLS
 RTS_LIBGCC_SYMBOLS
 RTS_LIBFFI_SYMBOLS
-RTS_SSP_SYMBOLS
-RTS_LINKER_SYMBOLS
 #undef SymI_NeedsProto
 #undef SymI_NeedsDataProto
 #undef SymI_HasProto
@@ -1247,7 +1062,7 @@ RTS_LINKER_SYMBOLS
 #define SymE_HasDataProto(vvv) \
                     SymE_HasProto(vvv)
 
-#define SymI_NeedsProto(vvv,...) SymI_HasProto(vvv ## __VA_ARGS__)
+#define SymI_NeedsProto(vvv) SymI_HasProto(vvv)
 #define SymI_NeedsDataProto(vvv) SymI_HasDataProto(vvv)
 #define SymE_NeedsProto(vvv) SymE_HasProto(vvv)
 #define SymE_NeedsDataProto(vvv) SymE_HasDataProto(vvv)
@@ -1268,8 +1083,6 @@ RTS_LINKER_SYMBOLS
 #define SymI_HasProto_deprecated(vvv)   \
    { #vvv, (void*)0xBAADF00D, true },
 
-void *RTS_DYNAMIC = NULL;
-
 RtsSymbolVal rtsSyms[] = {
       RTS_SYMBOLS
       RTS_RET_SYMBOLS
@@ -1281,14 +1094,11 @@ RtsSymbolVal rtsSyms[] = {
       RTS_LIBGCC_SYMBOLS
       RTS_LIBFFI_SYMBOLS
       SymI_HasDataProto(nonmoving_write_barrier_enabled)
-      RTS_SSP_SYMBOLS
-      RTS_LINKER_SYMBOLS
 #if defined(darwin_HOST_OS) && defined(i386_HOST_ARCH)
       // dyld stub code contains references to this,
       // but it should never be called because we treat
       // lazy pointers as nonlazy.
       { "dyld_stub_binding_helper", (void*)0xDEADBEEF, false },
 #endif
-      { "_DYNAMIC", (void*)(&RTS_DYNAMIC), false },
       { 0, 0, false } /* sentinel */
 };



View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/7cdd38a7d542d6a9c42198df13aa2fb9f02d3e9b...dc67f215de1a74c5127af4828828ed1823dc1299

-- 
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/7cdd38a7d542d6a9c42198df13aa2fb9f02d3e9b...dc67f215de1a74c5127af4828828ed1823dc1299
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/20200721/67394a5a/attachment-0001.html>


More information about the ghc-commits mailing list