Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Glasgow Haskell Compiler
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Iterations
Merge Requests
0
Merge Requests
0
Requirements
Requirements
List
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Package Registry
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issue
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Shayne Fletcher
Glasgow Haskell Compiler
Commits
67d1d4ed
Commit
67d1d4ed
authored
Sep 06, 2013
by
parcs
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master' into ghc-parmake-gsoc
parents
1f5338e7
df614779
Changes
17
Show whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
115 additions
and
48 deletions
+115
-48
compiler/ghc.mk
compiler/ghc.mk
+16
-1
compiler/main/DriverPipeline.hs
compiler/main/DriverPipeline.hs
+13
-2
compiler/main/SysTools.lhs
compiler/main/SysTools.lhs
+3
-0
compiler/parser/Parser.y.pp
compiler/parser/Parser.y.pp
+0
-18
compiler/stranal/WwLib.lhs
compiler/stranal/WwLib.lhs
+5
-2
configure.ac
configure.ac
+6
-0
docs/users_guide/7.8.1-notes.xml
docs/users_guide/7.8.1-notes.xml
+11
-0
docs/users_guide/external_core.xml
docs/users_guide/external_core.xml
+1
-1
docs/users_guide/flags.xml
docs/users_guide/flags.xml
+17
-11
docs/users_guide/using.xml
docs/users_guide/using.xml
+18
-7
driver/ghc-usage.txt
driver/ghc-usage.txt
+0
-2
libraries/Cabal
libraries/Cabal
+1
-1
libraries/containers
libraries/containers
+1
-1
libraries/haskeline
libraries/haskeline
+1
-1
mk/config.mk.in
mk/config.mk.in
+2
-0
rts/Linker.c
rts/Linker.c
+8
-0
validate
validate
+12
-1
No files found.
compiler/ghc.mk
View file @
67d1d4ed
...
...
@@ -347,8 +347,23 @@ else
compiler_CONFIGURE_OPTS
+=
--ghc-option
=
-DNO_REGS
endif
ifeq
"$(GhcProfiled)" "YES"
# 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.
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
ifeq
"$(GhcProfiled)" "YES"
# If we're profiling GHC then we want SCCs. However, adding -auto-all
# everywhere tends to give a hard-to-read profile, and adds lots of
# overhead. A better approach is to proceed top-down; identify the
...
...
compiler/main/DriverPipeline.hs
View file @
67d1d4ed
...
...
@@ -1917,11 +1917,22 @@ linkBinary' staticLink dflags o_files dep_packages = do
-- on x86.
++
(
if
sLdSupportsCompactUnwind
mySettings
&&
not
staticLink
&&
platformOS
platform
==
OSDarwin
&&
platformArch
platform
`
elem
`
[
ArchX86
,
ArchX86_64
]
(
platformOS
platform
==
OSDarwin
||
platformOS
platform
==
OSiOS
)
&&
case
platformArch
platform
of
ArchX86
->
True
ArchX86_64
->
True
ArchARM
{}
->
True
_
->
False
then
[
"-Wl,-no_compact_unwind"
]
else
[]
)
-- '-no_pie'
-- iOS uses 'dynamic-no-pic', so we must pass this to ld to suppress a warning; see #7722
++
(
if
platformOS
platform
==
OSiOS
&&
not
staticLink
then
[
"-Wl,-no_pie"
]
else
[]
)
-- '-Wl,-read_only_relocs,suppress'
-- ld gives loads of warnings like:
-- ld: warning: text reloc in _base_GHCziArr_unsafeArray_info to _base_GHCziArr_unsafeArray_closure
...
...
compiler/main/SysTools.lhs
View file @
67d1d4ed
...
...
@@ -681,6 +681,9 @@ getLinkerInfo' dflags = do
-- that doesn't support --version. We can just assume that's
-- what we're using.
return $ DarwinLD []
OSiOS ->
-- Ditto for iOS
return $ DarwinLD []
OSMinGW32 ->
-- GHC doesn't support anything but GNU ld on Windows anyway.
-- Process creation is also fairly expensive on win32, so
...
...
compiler/parser/Parser.y.pp
View file @
67d1d4ed
...
...
@@ -24,24 +24,6 @@ to inline certain key external functions, so we instruct GHC not to
throw
away
inlinings
as
it
would
normally
do
in
-
O0
mode
.
-
}
--
CPP
tricks
because
we
want
the
directives
in
the
output
of
the
--
first
CPP
pass
.
--
--
Clang
note
,
6
/
17
/
2013
by
aseipp
:
It
is
*
extremely
*
important
(
for
--
some
reason
)
that
there
be
a
line
of
whitespace
between
the
two
--
definitions
here
,
and
the
subsequent
use
of
__IF_GHC_77__
-
this
--
seems
to
be
a
bug
in
clang
or
something
,
where
having
the
line
of
--
whitespace
will
make
the
preprocessor
correctly
format
the
rendered
--
lines
in
the
'two step'
CPP
pass
.
No
,
this
is
not
a
joke
.
#define __IF_GHC_77__ #if __GLASGOW_HASKELL__ >= 707
#define __ENDIF__ #endif
__IF_GHC_77__
--
Required
on
x86
to
avoid
the
register
allocator
running
out
of
--
stack
slots
when
compiling
this
module
with
-
fPIC
-
dynamic
.
{
-
# OPTIONS_GHC -fcmm-sink #-}
__ENDIF__
module
Parser
(
parseModule
,
parseStmt
,
parseIdentifier
,
parseType
,
parseHeader
)
where
...
...
compiler/stranal/WwLib.lhs
View file @
67d1d4ed
...
...
@@ -214,8 +214,11 @@ the sharing of E. Since absence analysis and worker-wrapper are keen
to remove such unused arguments, we add in a void argument to prevent
the function from becoming a thunk.
The user can avoid that argument with the -ffun-to-thunk
flag. However, removing all the value argus may introduce space leaks.
The user can avoid adding the void argument with the -ffun-to-thunk
flag. However, this can create sharing, which may be bad in two ways. 1) It can
create a space leak. 2) It can prevent inlining *under a lambda*. If w/w
removes the last argument from a function f, then f now looks like a thunk, and
so f can't be inlined *under a lambda*.
Note [All One-Shot Arguments of a Worker]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
...
...
configure.ac
View file @
67d1d4ed
...
...
@@ -156,6 +156,12 @@ FP_COMPARE_VERSIONS([$GhcVersion],[-lt],[7.5],
GHC_PACKAGE_DB_FLAG=package-db)
AC_SUBST(GHC_PACKAGE_DB_FLAG)
# GHC 7.7+ needs -fcmm-sink when compiling Parser.hs. See #8182
FP_COMPARE_VERSIONS([$GhcVersion],[-gt],[7.7],
CMM_SINK_BOOTSTRAP_IS_NEEDED=YES,
CMM_SINK_BOOTSTRAP_IS_NEEDED=NO)
AC_SUBST(CMM_SINK_BOOTSTRAP_IS_NEEDED)
# GHC is passed to Cabal, so we need a native path
if test "${WithGhc}" != ""
then
...
...
docs/users_guide/7.8.1-notes.xml
View file @
67d1d4ed
...
...
@@ -145,6 +145,17 @@
</para>
</listitem>
<listitem>
<para>
New PrimOps for atomic memory operations.
The
<literal>
casMutVar#
</literal>
PrimOp was introduced in
GHC 7.2 (debugged in 7.4). This release also includes additional
PrimOps for compare-and-swap (
<literal>
casArray#
</literal>
and
<literal>
casIntArray#
</literal>
) and one for fetch-and-add
(
<literal>
fetchAddIntArray#
</literal>
).
</para>
</listitem>
<listitem>
<para>
TODO: mention dynamic changes
...
...
docs/users_guide/external_core.xml
View file @
67d1d4ed
...
...
@@ -1786,7 +1786,7 @@ case (error "") of
<state>
South Carolina
</state>
</address>
<pubdate>
1993
</pubdate>
<bibliomisc><ulink
url=
"
citeseer.ist.psu.edu/launchbury93natural.html"
>
citeseer.ist.psu.edu/launchbury93natural.html
</ulink></bibliomisc>
<bibliomisc><ulink
url=
"
http://citeseer.ist.psu.edu/launchbury93natural.html"
>
http://
citeseer.ist.psu.edu/launchbury93natural.html
</ulink></bibliomisc>
<!-- booktitle = "Conference Record of the Twentieth Annual {ACM} {SIGPLAN}-{SIGACT} Symposium on Principles of Programming Languages", -->
</biblioentry>
...
...
docs/users_guide/flags.xml
View file @
67d1d4ed
...
...
@@ -1585,17 +1585,6 @@
<entry><option>
-fno-dicts-strict
</option></entry>
</row>
<row>
<entry><option>
-ffun-to-thunk
</option></entry>
<entry>
Worker-wrapper removes unused arguments; this flag
lets it thusly remove all value lambdas. Doing so creates
a thunk where it was previously a function closure, which
may save recomputation but also risks a space leak. Off by
default.
</entry>
<entry>
dynamic
</entry>
<entry><option>
-fno-fun-to-thunk
</option></entry>
</row>
<row>
<entry><option>
-fdo-eta-reduction
</option></entry>
<entry>
Enable eta-reduction. Implied by
<option>
-O
</option>
.
</entry>
...
...
@@ -1661,6 +1650,15 @@
<entry><option>
-fno-full-laziness
</option></entry>
</row>
<row>
<entry><option>
-ffun-to-thunk
</option></entry>
<entry>
Allow worker-wrapper to convert a function closure into a
thunk if the function does not use any of its arguments. Off by
default.
</entry>
<entry>
dynamic
</entry>
<entry><option>
-fno-fun-to-thunk
</option></entry>
</row>
<row>
<entry><option>
-fignore-asserts
</option></entry>
<entry>
Ignore assertions in the source
</entry>
...
...
@@ -1675,6 +1673,14 @@
<entry><option>
-fno-ignore-interface-pragmas
</option></entry>
</row>
<row>
<entry><option>
-flate-dmd-anal
</option></entry>
<entry>
Run demand analysis again, at the end of the simplification
pipeline
</entry>
<entry>
dynamic
</entry>
<entry><option>
-fno-late-dmd-anal
</option></entry>
</row>
<row>
<entry><option>
-fliberate-case
</option></entry>
<entry>
Turn on the liberate-case transformation. Implied by
<option>
-O2
</option>
.
</entry>
...
...
docs/users_guide/using.xml
View file @
67d1d4ed
...
...
@@ -2095,16 +2095,15 @@ f "2" = 2
<varlistentry>
<term>
<option>
-
-
ffun-to-thunk
</option>
<option>
-ffun-to-thunk
</option>
<indexterm><primary><option>
-fignore-asserts
</option></primary></indexterm>
</term>
<listitem>
<para>
Worker-wrapper removes unused arguments, but usually we
do not remove them all, lest it turn a function closure into a thunk,
thereby perhaps causing extra allocation (since let-no-escape can't happen)
and/or a space leak. This flag
allows worker/wrapper to remove
<emphasis>
all
</emphasis>
value lambdas.
Off by default.
<para>
Worker-wrapper removes unused arguments, but usually we do
not remove them all, lest it turn a function closure into a thunk,
thereby perhaps creating a space leak and/or disrupting inlining.
This flag allows worker/wrapper to remove
<emphasis>
all
</emphasis>
value lambdas. Off by default.
</para>
</listitem>
</varlistentry>
...
...
@@ -2137,6 +2136,18 @@ f "2" = 2
</listitem>
</varlistentry>
<varlistentry>
<term>
<option>
-flate-dmd-anal
</option>
<indexterm><primary><option>
-flate-dmd-anal
</option></primary></indexterm>
</term>
<listitem>
<para><emphasis>
Off by default.
</emphasis>
Run demand analysis
again, at the end of the simplification pipeline
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<option>
-fliberate-case
</option>
...
...
driver/ghc-usage.txt
View file @
67d1d4ed
...
...
@@ -47,8 +47,6 @@ Other commonly-used options are:
-v[n] Control verbosity (n is 0--5, normal verbosity level is 1,
-v alone is equivalent to -v3)
-fglasgow-exts Allow Glasgow extensions (unboxed types, etc.)
-O An `optimising' package of compiler flags, for faster code
-prof Compile for cost-centre profiling
...
...
Cabal
@
e41a92a7
Subproject commit
9f374ab45e62924506b992db9157c970c7259a03
Subproject commit
e41a92a7bbad928d14d4bf1291d23e6bd6ce169e
containers
@
c4f44a33
Subproject commit
154cd539a22e4d82ff56fec2d8ad38855f78513a
Subproject commit
c4f44a33136df0c6239eb5219b72a487b90b6ad1
haskeline
@
708f0f60
Subproject commit
495b00b4f125c0b4e7f1e966cd961eae89cffdc0
Subproject commit
708f0f604d8a9fea65a445892f262dfdf2a56ee6
mk/config.mk.in
View file @
67d1d4ed
...
...
@@ -471,6 +471,8 @@ endif
GHC_PACKAGE_DB_FLAG
=
@GHC_PACKAGE_DB_FLAG@
CMM_SINK_BOOTSTRAP_IS_NEEDED
=
@CMM_SINK_BOOTSTRAP_IS_NEEDED@
#-----------------------------------------------------------------------------
# C compiler
#
...
...
rts/Linker.c
View file @
67d1d4ed
...
...
@@ -3798,6 +3798,11 @@ ocGetNames_PEi386 ( ObjectCode* oc )
/* I'm sure this is the Right Way to do it. However, the
alternative of testing the sectab_i->Name field seems to
work ok with Cygwin.
EZY: We should strongly consider using this style, because
it lets us pick up sections that should be added (e.g.
for a while the linker did not work due to missing .eh_frame
in this section.)
*/
if
(
sectab_i
->
Characteristics
&
MYIMAGE_SCN_CNT_CODE
||
sectab_i
->
Characteristics
&
MYIMAGE_SCN_CNT_INITIALIZED_DATA
)
...
...
@@ -3807,6 +3812,7 @@ ocGetNames_PEi386 ( ObjectCode* oc )
if
(
0
==
strcmp
(
".text"
,(
char
*
)
secname
)
||
0
==
strcmp
(
".text.startup"
,(
char
*
)
secname
)
||
0
==
strcmp
(
".rdata"
,(
char
*
)
secname
)
||
0
==
strcmp
(
".eh_frame"
,
(
char
*
)
secname
)
||
0
==
strcmp
(
".rodata"
,(
char
*
)
secname
))
kind
=
SECTIONKIND_CODE_OR_RODATA
;
if
(
0
==
strcmp
(
".data"
,(
char
*
)
secname
)
||
...
...
@@ -3835,6 +3841,8 @@ ocGetNames_PEi386 ( ObjectCode* oc )
/* ignore unknown section that appeared in gcc 3.4.5(?) */
&&
0
!=
strcmp
(
".reloc"
,
(
char
*
)
secname
)
&&
0
!=
strcmp
(
".rdata$zzz"
,
(
char
*
)
secname
)
/* ignore linker directive sections */
&&
0
!=
strcmp
(
".drectve"
,
(
char
*
)
secname
)
)
{
errorBelch
(
"Unknown PEi386 section name `%s' (while processing: %"
PATH_FMT
")"
,
secname
,
oc
->
fileName
);
stgFree
(
secname
);
...
...
validate
View file @
67d1d4ed
...
...
@@ -22,6 +22,9 @@ Flags:
--fast Omit dyn way, omit binary distribution
--slow Build stage2 with -DDEBUG.
2008-07-01: 14% slower than the default.
--no-dph: Skip requiring libraries/dph. In --slow mode, these tests
can take a substantial amount of time, and on some platforms
with broken linkers, we don't want to try compiling it.
--help shows this usage help.
Set environment variable 'CPUS' to number of cores, to exploit
...
...
@@ -36,6 +39,7 @@ no_clean=0
testsuite_only
=
0
hpc
=
NO
speed
=
NORMAL
skip_dph
=
0
while
[
$#
-gt
0
]
do
...
...
@@ -58,6 +62,9 @@ do
--normal
)
speed
=
NORMAL
;;
--no-dph
)
skip_dph
=
1
;;
--help
)
show_help
exit
0
;;
...
...
@@ -115,7 +122,11 @@ if [ $no_clean -eq 0 ]; then
INSTDIR
=
`
cygpath
-m
"
$INSTDIR
"
`
fi
if
[
$skip_dph
-eq
1
]
;
then
/usr/bin/perl
-w
boot
--validate
else
/usr/bin/perl
-w
boot
--validate
--required-tag
=
dph
fi
./configure
--prefix
=
"
$INSTDIR
"
$config_args
fi
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment