
* Binary sizes go up 5% when "GHC is compiled with -fno-state-hack". I
#7411: Exceptions are optimized away in certain situations -------------------------------------+------------------------------------- Reporter: SimonHengel | Owner: tdammers Type: bug | Status: new Priority: high | Milestone: 8.8.1 Component: Compiler | Version: 7.6.1 Resolution: | Keywords: seq, deepseq, | evaluate, exceptions Operating System: Linux | Architecture: x86_64 | (amd64) Type of failure: Incorrect result | Test Case: at runtime | simplCore/should_fail/T7411 Blocked By: | Blocking: Related Tickets: #5129 #15225 | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by tdammers): Replying to [comment:44 simonpj]: think that the important thing is that the '''libraries''' (which are linked into the nofib binary) are compiled with -fno-state-hack. I doubt it's caused by the fact that ghc-stage2 is compiled with -fno-state-hack. Can you confirm?
* And if binary sizes go up by 5% because the libraries are getting
bigger, is that a generic 5% increase in .o file size? Or do a few key modules get a lot bigger? It's puzzling because the per-moudule "Module Sizes" stats in the nofib log suggest that there is an essentially-zero effect on nofib module sizes. I did some more analyzing, and unfortunately the answer is "it's complicated". I compared module sizes for every .o in the GHC build tree between the two versions, and I'm getting mixed results. Some modules get significantly smaller when disabling the state hack, on the order of 10-50%, with some outliers as high as 70%. On the other end of the spectrum, there are lots of modules that blow up by several megabytes per module, percentages typically somewhere between 25% and 80%. There is also a large number of modules where the difference is small or zero. The differences aren't isolated in libraries; in all 3 categories, modules are mostly from `/libraries`, `/bootstrapping`, and `/compiler`. So it's definitely not just the libraries that blow up; it seems that GHC actually produces larger modules, but not always. I have not managed to find a pattern to the increase yet. So here's the 30 modules with the biggest shrinkage: {{{ diff diff% hack no hack file -598704 -4% 14142232 13543528 compiler/stage2/build/HsInstances.o -232504 -36% 637000 404496 bootstrapping/Distribution/Simple/Utils.o -222928 -34% 638856 415928 libraries/Cabal/Cabal/dist- boot/build/Distribution/Simple/Utils.o -179816 -17% 1020496 840680 libraries/Cabal/Cabal/dist- boot/build/Distribution/PackageDescription/Check.o -177744 -17% 1015896 838152 bootstrapping/Distribution/PackageDescription/Check.o -144352 -24% 595592 451240 libraries/Cabal/Cabal/dist- boot/build/Distribution/Simple/Haddock.o -142432 -14% 968752 826320 bootstrapping/Distribution/Simple/Configure.o -137632 -14% 973336 835704 libraries/Cabal/Cabal/dist- boot/build/Distribution/Simple/Configure.o -136384 -23% 583088 446704 bootstrapping/Distribution/Simple/Haddock.o -131840 -13% 952160 820320 bootstrapping/Distribution/Simple/GHC.o -125008 -13% 955352 830344 libraries/Cabal/Cabal/dist- boot/build/Distribution/Simple/GHC.o -117728 -27% 422008 304280 bootstrapping/Distribution/Simple/Build.o -116264 -27% 424320 308056 libraries/Cabal/Cabal/dist- boot/build/Distribution/Simple/Build.o -108816 -18% 579808 470992 bootstrapping/Distribution/Simple/GHCJS.o -103808 -11% 884696 780888 utils/ghc-pkg/dist/build/Main.o -103280 -17% 581736 478456 libraries/Cabal/Cabal/dist- boot/build/Distribution/Simple/GHCJS.o -98288 -18% 532488 434200 utils/genprimopcode/dist/build/Main.o -92480 -16% 570120 477640 bootstrapping/Distribution/Simple.o -85024 -14% 573280 488256 libraries/Cabal/Cabal/dist- boot/build/Distribution/Simple.o -83632 -19% 433448 349816 utils/hsc2hs/dist/build/CrossCodegen.o -82520 -29% 281280 198760 bootstrapping/Distribution/Simple/SrcDist.o -81808 -28% 282832 201024 libraries/Cabal/Cabal/dist- boot/build/Distribution/Simple/SrcDist.o -78920 -55% 141696 62776 bootstrapping/Data/Text/Internal/Lazy/Encoding/Fusion.o -77768 -43% 180664 102896 bootstrapping/Data/Text/Encoding.o -72824 -71% 102400 29576 bootstrapping/Data/Text/Internal.o -69456 -49% 140888 71432 bootstrapping/System/FilePath/Posix.o -66136 -39% 168512 102376 bootstrapping/Distribution/PackageDescription/Quirks.o -61280 -15% 392096 330816 libraries/Cabal/Cabal/dist- boot/build/Distribution/Simple/PreProcess.o -59848 -35% 167816 107968 libraries/Cabal/Cabal/dist- boot/build/Distribution/PackageDescription/Quirks.o -58456 -15% 385944 327488 bootstrapping/Distribution/Simple/PreProcess.o }}} And the 30 worst offenders: {{{ diff diff% hack no hack file 242872 +42% 330888 573760 libraries/Cabal/Cabal/dist- boot/build/Distribution/PackageDescription/Parsec.o 252096 +18% 1130080 1382176 libraries/Cabal/Cabal/dist- boot/build/Language/Haskell/Extension.o 276872 +9% 2649696 2926568 libraries/containers/dist- install/build/Data/Sequence/Internal.o 282112 +50% 280448 562560 compiler/stage2/build/TcBackpack.o 286208 +21% 1039800 1326008 bootstrapping/Language/Haskell/Extension.o 293664 +43% 387048 680712 bootstrapping/Distribution/Types/GenericPackageDescription.o 295776 +42% 400880 696656 libraries/Cabal/Cabal/dist- boot/build/Distribution/Types/GenericPackageDescription.o 308792 +40% 462576 771368 libraries/template-haskell/dist- boot/build/Language/Haskell/TH/Ppr.o 320800 +28% 786912 1107712 compiler/stage2/build/PPC/CodeGen.o 326400 +38% 520592 846992 libraries/text/dist- install/build/Data/Text/Lazy/Builder/RealFloat.o 350016 +32% 719512 1069528 compiler/stage2/build/PlatformConstants.o 410272 +2% 14146704 14556976 libraries/base/dist- install/build/HSbase-4.12.0.0.o 413960 +35% 748952 1162912 libraries/Cabal/Cabal/dist- install/build/Distribution/Simple/Haddock.o 430824 +27% 1157400 1588224 compiler/stage2/build/X86/CodeGen.o 450928 +29% 1078688 1529616 compiler/stage2/build/TcRnDriver.o 530216 +100% 0 530216 libraries/xhtml/dist- install/build/HSxhtml-3000.2.2.o 563744 +77% 166952 730696 bootstrapping/Distribution/Types/InstalledPackageInfo/FieldGrammar.o 581784 +77% 170552 752336 libraries/Cabal/Cabal/dist- boot/build/Distribution/Types/InstalledPackageInfo/FieldGrammar.o 583760 +44% 731800 1315560 libraries/ghci/dist- boot/build/GHCi/Message.o 593424 +12% 4286120 4879544 libraries/containers/dist- install/build/HScontainers-0.5.11.0.o 614096 +16% 3213320 3827416 libraries/text/dist- install/build/HStext-1.2.3.0.o 747024 +41% 1063368 1810392 libraries/ghci/dist- boot/build/GHCi/TH/Binary.o 952864 +27% 2503640 3456504 libraries/Cabal/Cabal/dist- boot/build/Distribution/SPDX/LicenseId.o 992784 +29% 2330808 3323592 bootstrapping/Distribution/SPDX/LicenseId.o 1004432 +43% 1328968 2333400 libraries/Cabal/Cabal/dist- install/build/Distribution/Simple/GHC.o 1032072 +72% 382160 1414232 bootstrapping/Distribution/PackageDescription/FieldGrammar.o 1035032 +72% 392264 1427296 libraries/Cabal/Cabal/dist- boot/build/Distribution/PackageDescription/FieldGrammar.o 1212056 +29% 2905776 4117832 libraries/template-haskell/dist- boot/build/Language/Haskell/TH/Syntax.o 2236208 +62% 1317096 3553304 libraries/Cabal/Cabal/dist- install/build/Distribution/Simple/Configure.o 4569096 +10% 38406248 42975344 libraries/Cabal/Cabal/dist- install/build/HSCabal-2.3.0.0.o }}} I'll attach the full comparison log. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/7411#comment:47 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler