[GHC] #15570: Core transformations generate bad indexCharOffAddr# call
GHC
ghc-devs at haskell.org
Mon Sep 3 18:50:29 UTC 2018
#15570: Core transformations generate bad indexCharOffAddr# call
-------------------------------------+-------------------------------------
Reporter: alpmestan | Owner: alpmestan
Type: bug | Status: new
Priority: normal | Milestone: 8.6.1
Component: Compiler | Version: 8.5
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by simonpj):
OK, with some help from Andrey I added to `hadrian/src/UserSettings.hs`
{{{
verboseCommand :: Predicate
verboseCommand = input "//*.hs"
}}}
Now if I touch `GHC/Real.hs` I get its command line, which is super-
helpful; so I can compile with changing flags.
Turns out that the reason for the strange `GHC.Real.even3` is that we have
{{{
GHC.Real.even4 :: Int
GHC.Real.even4 = GHC.Types.I# 1#
-- RHS size: {terms: 3, types: 1, coercions: 0, joins: 0/0}
GHC.Real.even3 :: Int
GHC.Real.even3 = negate @ Int GHC.Num.$fNumInt GHC.Real.even4
}}}
Wny aren't we negating that constant? '''Turns out that it's because we
aren't optimising `GHC.Num`'''!!! It's not surprising that we get terrible
code.
Here are the command lines printed by Hadrian for `GHC.Num` and `GHC.Real`
{{{
-- GHC.Real. Notice that it finishes with -O
_build/stage0/bin/ghc -Wall -hisuf dyn_hi -osuf dyn_o -hcsuf dyn_hc -fPIC
-dynamic -hide-all-packages -no-user-package-db '-package-db
_build/stage1/lib/package.conf.d' '-this-unit-id base-4.12.0.0' '-package-
id ghc-prim-0.5.3' '-package-id integer-gmp-1.0.2.0' '-package-id rts-1.0'
-i -i_build/stage1/libraries/base/build
-i_build/stage1/libraries/base/build/autogen -ilibraries/base/. -Iincludes
-I_build/generated -I_build/stage1/libraries/base/build
-I_build/stage1/libraries/base/build/include -Ilibraries/base/include
-I/home/simonpj/code/HEAD-3/_build/stage1/lib/x86_64-linux-
ghc-8.7.20180825/integer-gmp-1.0.2.0/include
-I/home/simonpj/code/HEAD-3/_build/stage1/lib/x86_64-linux-
ghc-8.7.20180825/rts-1.0/include -I_build/generated -optc-
I_build/generated -optP-include
-optP_build/stage1/libraries/base/build/autogen/cabal_macros.h -optc-fno-
stack-protector -optP-DOPTIMISE_INTEGER_GCD_LCM -odir
_build/stage1/libraries/base/build -hidir
_build/stage1/libraries/base/build -stubdir
_build/stage1/libraries/base/build -Wnoncanonical-monad-instances -optc-
Werror=unused-but-set-variable -optc-Wno-error=inline -c
libraries/base/GHC/Real.hs -o
_build/stage1/libraries/base/build/GHC/Real.dyn_o -O0 -H64m -this-unit-id
base -Wcompat -Wnoncanonical-monad-instances -XHaskell2010 -ghcversion-
file=/home/simonpj/code/HEAD-3/_build/generated/ghcversion.h -O -Wno-
deprecated-flags -Wno-trustworthy-safe
-- GHC.Num. The -O is there but it's overridden with -O0
_build/stage0/bin/ghc -Wall -hisuf dyn_hi -osuf dyn_o -hcsuf dyn_hc -fPIC
-dynamic -hide-all-packages -no-user-package-db '-package-db
_build/stage1/lib/package.conf.d' '-this-unit-id base-4.12.0.0' '-package-
id ghc-prim-0.5.3' '-package-id integer-gmp-1.0.2.0' '-package-id rts-1.0'
-i -i_build/stage1/libraries/base/build
-i_build/stage1/libraries/base/build/autogen -ilibraries/base/. -Iincludes
-I_build/generated -I_build/stage1/libraries/base/build
-I_build/stage1/libraries/base/build/include -Ilibraries/base/include
-I/home/simonpj/code/HEAD-3/_build/stage1/lib/x86_64-linux-
ghc-8.7.20180825/integer-gmp-1.0.2.0/include
-I/home/simonpj/code/HEAD-3/_build/stage1/lib/x86_64-linux-
ghc-8.7.20180825/rts-1.0/include -I_build/generated -optc-
I_build/generated -optP-include
-optP_build/stage1/libraries/base/build/autogen/cabal_macros.h -optc-fno-
stack-protector -optP-DOPTIMISE_INTEGER_GCD_LCM -odir
_build/stage1/libraries/base/build -hidir
_build/stage1/libraries/base/build -stubdir
_build/stage1/libraries/base/build -Wnoncanonical-monad-instances -optc-
Werror=unused-but-set-variable -optc-Wno-error=inline -c
libraries/base/GHC/Num.hs -o
_build/stage1/libraries/base/build/GHC/Num.dyn_o -O0 -H64m -this-unit-id
base -Wcompat -Wnoncanonical-monad-instances -XHaskell2010 -ghcversion-
file=/home/simonpj/code/HEAD-3/_build/generated/ghcversion.h -O -O0 -fno-
ignore-interface-pragmas -Wno-deprecated-flags -Wno-trustworthy-safe
}}}
Blimey. With `make` we'd be stuck: who is adding that `-O0`? But with
Hadrian and it's provenance tracking, it should be easy.
But I have no idea where to start: Andrey, Alp, over to you.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15570#comment:10>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list