summaryrefslogtreecommitdiff
path: root/compiler/ghc.mk
diff options
context:
space:
mode:
authorAustin Seipp <aseipp@pobox.com>2013-09-09 10:42:55 -0500
committerAustin Seipp <aseipp@pobox.com>2013-09-09 10:44:57 -0500
commit9f8e9d29c1c6e4e031469efcfbdae508dd6540e7 (patch)
tree54170ceeee83bf4de08c6159a451a086b5ea4f01 /compiler/ghc.mk
parent9fb15842df6f3db7598b11843c33f761fb44ea87 (diff)
downloadhaskell-9f8e9d29c1c6e4e031469efcfbdae508dd6540e7.tar.gz
Fix optimization of Parser.y.pp
In 9e133b, the build was modified to pass -fcmm-sink to Parser, but unfortunately Parser specifies -O0 in its OPTIONS_GHC directive, meaning the sinking pass was actually turned off. HC_OPTS is the last thing passed to the compiler for that source file however, so the correct fix is to also move -O0 out into the build system as well. This was uncovered thanks to a build report from Kazu Yamamoto. Thanks to Jan Stolarek for eyeballing this bug and finding it. Signed-off-by: Austin Seipp <aseipp@pobox.com>
Diffstat (limited to 'compiler/ghc.mk')
-rw-r--r--compiler/ghc.mk15
1 files changed, 9 insertions, 6 deletions
diff --git a/compiler/ghc.mk b/compiler/ghc.mk
index 1149fbdf1e..770f580c07 100644
--- a/compiler/ghc.mk
+++ b/compiler/ghc.mk
@@ -341,20 +341,23 @@ else
compiler_CONFIGURE_OPTS += --ghc-option=-DNO_REGS
endif
+# Careful optimisation of the parser: we don't want to throw everything
+# at it, because that takes too long and doesn't buy much, but we do want
+# to inline certain key external functions, so we instruct GHC not to
+# throw away inlinings as it would normally do in -O0 mode.
+compiler/stage1/build/Parser_HC_OPTS += -O0 -fno-ignore-interface-pragmas
# If we're bootstrapping the compiler during stage2, or we're being
# built by a GHC whose version is > 7.8, we need -fcmm-sink to be
# passed to the compiler. This is required on x86 to avoid the
# register allocator running out of stack slots when compiling this
# module with -fPIC -dynamic.
+# See #8182 for all the details
ifeq "$(CMM_SINK_BOOTSTRAP_IS_NEEDED)" "YES"
compiler/stage1/build/Parser_HC_OPTS += -fcmm-sink
endif
-# However, we may be using e.g. 7.6, and thus the bootstrap compiler
-# does not need to pass -fcmm-sink, but stage1+ does!
-# We pass -fcmm-sink to every stage != 1
-# See #8182 for all the details
-compiler/stage2/build/Parser_HC_OPTS += -fcmm-sink
-compiler/stage3/build/Parser_HC_OPTS += -fcmm-sink
+# We also pass -fcmm-sink to every stage != 1
+compiler/stage2/build/Parser_HC_OPTS += -O0 -fno-ignore-interface-pragmas -fcmm-sink
+compiler/stage3/build/Parser_HC_OPTS += -O0 -fno-ignore-interface-pragmas -fcmm-sink
ifeq "$(GhcProfiled)" "YES"