[GHC] #10800: vector-0.11 compile time increased substantially with 7.10.1

GHC ghc-devs at haskell.org
Sun Sep 20 11:56:37 UTC 2015


#10800: vector-0.11 compile time increased substantially with 7.10.1
-------------------------------------+-------------------------------------
        Reporter:  bgamari           |                   Owner:  bgamari
            Type:  bug               |                  Status:  new
        Priority:  highest           |               Milestone:  8.0.1
       Component:  Compiler          |                 Version:  7.10.2
      Resolution:                    |                Keywords:
Operating System:  Unknown/Multiple  |            Architecture:
 Type of failure:  Compile-time      |  Unknown/Multiple
  performance bug                    |               Test Case:
      Blocked By:                    |                Blocking:
 Related Tickets:                    |  Differential Revisions:
-------------------------------------+-------------------------------------

Comment (by bgamari):

 The culprit appears to be `tests/Tests/Vector.hs`, which seems to blow up
 in the simplifier with GHC 7.10.1,

 = 7.10.1 =

 {{{
 [5 of 6] Compiling Tests.Vector     ( tests/Tests/Vector.hs, dist/dist-
 sandbox-7565eaee/build/vector-tests-O2/vector-tests-O2-tmp/Tests/Vector.o
 )
 *** Parser:
 *** Renamer/typechecker:
 *** Simplify:
 *** CorePrep:
 *** ByteCodeGen:

 ...

 *** Simplify:
 *** CorePrep:
 *** ByteCodeGen:
 *** Simplify:
 *** CorePrep:
 *** ByteCodeGen:
 *** Simplify:
 *** CorePrep:
 *** ByteCodeGen:
 *** Simplify:
 *** CorePrep:
 *** ByteCodeGen:
 *** Simplify:
 *** CorePrep:
 *** ByteCodeGen:
 *** Simplify:
 *** CorePrep:
 *** ByteCodeGen:
 *** Simplify:
 *** CorePrep:
 *** ByteCodeGen:
 *** Simplify:
 *** CorePrep:
 *** ByteCodeGen:
 *** Simplify:
 *** CorePrep:
 *** ByteCodeGen:
 *** Simplify:
 *** CorePrep:
 *** ByteCodeGen:
 *** Simplify:
 *** CorePrep:
 *** ByteCodeGen:

 tests/Tests/Vector.hs:20:1: Warning:
     The import of ‘Data.Monoid’ is redundant
       except perhaps to import instances from ‘Data.Monoid’
     To import instances alone, use: import Data.Monoid()

 tests/Tests/Vector.hs:405:5: Warning:
     Defined but not used: ‘limitUnfolds’

 tests/Tests/Vector.hs:408:5: Warning:
     Defined but not used: ‘prop_unfoldr’

 tests/Tests/Vector.hs:615:1: Warning:
     Defined but not used: ‘testBoolUnboxedVector’
 *** Desugar:
 Result size of Desugar (after optimization)
   = {terms: 8,929, types: 29,113, coercions: 12,626}
 *** Simplifier:
 Result size of Simplifier iteration=1
   = {terms: 7,718, types: 22,842, coercions: 12,683}
 Result size of Simplifier iteration=2
   = {terms: 7,645, types: 22,550, coercions: 12,627}
 Result size of Simplifier
   = {terms: 7,645, types: 22,550, coercions: 12,627}
 *** Specialise:
 Result size of Specialise
   = {terms: 158,601, types: 473,559, coercions: 266,978}
 *** Float out(FOS {Lam = Just 0, Consts = True, OverSatApps = False}):
 Result size of Float out(FOS {Lam = Just 0,
                               Consts = True,
                               OverSatApps = False})
   = {terms: 191,838, types: 610,090, coercions: 266,978}
 *** Simplifier:
 Result size of Simplifier iteration=1
   = {terms: 341,716, types: 752,822, coercions: 950,308}
 Result size of Simplifier iteration=2
   = {terms: 341,082, types: 678,899, coercions: 700,199}
 Result size of Simplifier iteration=3
   = {terms: 324,911, types: 649,679, coercions: 477,703}
 Result size of Simplifier iteration=4
   = {terms: 323,711, types: 646,845, coercions: 470,304}
 Result size of Simplifier
   = {terms: 323,711, types: 646,845, coercions: 470,304}
 *** Simplifier:
 Result size of Simplifier iteration=1
   = {terms: 2,421,941, types: 4,434,113, coercions: 2,600,098}
 Result size of Simplifier iteration=2
   = {terms: 1,532,846, types: 2,868,287, coercions: 1,167,104}
 Result size of Simplifier iteration=3
   = {terms: 1,333,796, types: 2,347,850, coercions: 910,168}
 Result size of Simplifier iteration=4
   = {terms: 1,326,682, types: 2,333,558, coercions: 893,473}
 Result size of Simplifier
   = {terms: 1,326,682, types: 2,333,558, coercions: 893,473}
 *** Simplifier:
 Result size of Simplifier iteration=1
   = {terms: 2,517,661, types: 3,700,180, coercions: 1,244,341}
 Result size of Simplifier iteration=2
   = {terms: 1,648,651, types: 2,362,735, coercions: 1,118,836}
 Result size of Simplifier iteration=3
   = {terms: 1,533,366, types: 2,160,536, coercions: 1,018,335}
 Result size of Simplifier iteration=4
   = {terms: 1,531,057, types: 2,158,142, coercions: 1,017,409}
 Result size of Simplifier
   = {terms: 1,531,057, types: 2,158,142, coercions: 1,017,409}
 *** Float inwards:
 Result size of Float inwards
   = {terms: 1,531,057, types: 2,158,142, coercions: 1,017,409}
 *** Called arity analysis:
 Result size of Called arity analysis
   = {terms: 1,531,057, types: 2,158,142, coercions: 1,017,409}
 *** Simplifier:
 Result size of Simplifier iteration=1
   = {terms: 1,525,383, types: 2,148,094, coercions: 1,012,837}
 Result size of Simplifier iteration=2
   = {terms: 1,519,162, types: 2,137,087, coercions: 1,009,451}
 Result size of Simplifier iteration=3
   = {terms: 1,518,511, types: 2,135,070, coercions: 1,008,419}
 Result size of Simplifier iteration=4
   = {terms: 1,517,741, types: 2,133,682, coercions: 1,008,349}
 Result size of Simplifier
   = {terms: 1,517,741, types: 2,133,682, coercions: 1,008,349}
 *** Demand analysis:
 Result size of Demand analysis
   = {terms: 1,517,741, types: 2,133,682, coercions: 1,008,349}
 *** Worker Wrapper binds:
 Result size of Worker Wrapper binds
   = {terms: 1,638,656, types: 2,267,189, coercions: 1,016,585}
 *** Simplifier:
 Result size of Simplifier iteration=1
   = {terms: 1,581,976, types: 2,235,934, coercions: 1,015,794}
 Result size of Simplifier iteration=2
   = {terms: 1,498,911, types: 2,130,083, coercions: 1,007,028}
 Result size of Simplifier iteration=3
   = {terms: 1,498,641, types: 2,129,656, coercions: 1,007,547}
 Result size of Simplifier iteration=4
   = {terms: 1,498,663, types: 2,129,564, coercions: 1,008,931}
 Result size of Simplifier
   = {terms: 1,498,663, types: 2,129,564, coercions: 1,008,931}
 *** Float out(FOS {Lam = Just 0, Consts = True, OverSatApps = True}):
 Result size of Float out(FOS {Lam = Just 0,
                               Consts = True,
                               OverSatApps = True})
   = {terms: 1,574,915, types: 2,289,456, coercions: 1,008,931}
 *** Common sub-expression:
 Result size of Common sub-expression
   = {terms: 1,437,681, types: 2,110,200, coercions: 999,668}
 *** Float inwards:
 Result size of Float inwards
   = {terms: 1,437,681, types: 2,110,200, coercions: 999,668}
 *** Liberate case:
 Result size of Liberate case
   = {terms: 1,460,235, types: 2,122,207, coercions: 1,002,808}
 *** Simplifier:
 Result size of Simplifier iteration=1
   = {terms: 1,409,789, types: 2,018,248, coercions: 1,006,095}
 Result size of Simplifier iteration=2
   = {terms: 1,409,904, types: 2,020,763, coercions: 1,004,750}
 Result size of Simplifier iteration=3
   = {terms: 1,407,598, types: 2,016,738, coercions: 1,005,425}
 Result size of Simplifier iteration=4
   = {terms: 1,407,068, types: 2,015,811, coercions: 1,003,311}
 Result size of Simplifier
   = {terms: 1,407,068, types: 2,015,811, coercions: 1,003,311}
 *** SpecConstr:
 Result size of SpecConstr
   = {terms: 2,875,513, types: 4,153,092, coercions: 1,868,890}
 *** Simplifier:
 Result size of Simplifier iteration=1
   = {terms: 2,811,029, types: 3,774,293, coercions: 1,781,476}
 Result size of Simplifier iteration=2
   = {terms: 1,657,609, types: 2,285,271, coercions: 1,158,260}
 Result size of Simplifier iteration=3
   = {terms: 1,634,476, types: 2,261,260, coercions: 1,111,721}
 Result size of Simplifier iteration=4
   = {terms: 1,623,734, types: 2,229,084, coercions: 1,097,616}
 Result size of Simplifier
   = {terms: 1,623,734, types: 2,229,084, coercions: 1,097,616}
 *** Tidy Core:
 Result size of Tidy Core
   = {terms: 1,374,780, types: 1,868,771, coercions: 949,928}
 writeBinIface: 12038 Names
 writeBinIface: 14118 dict entries
 writeBinIface: 12038 Names
 writeBinIface: 14118 dict entries
 *** CorePrep:
 Result size of CorePrep
   = {terms: 1,742,444, types: 2,159,089, coercions: 949,848}
 *** Stg2Stg:
 *** CodeGen:
 *** Assembler:
 /usr/bin/gcc -fno-stack-protector -DTABLES_NEXT_TO_CODE -Itests/Tests
 -Idist/dist-sandbox-7565eaee/build/vector-tests-O2/vector-tests-O2-tmp
 -Idist/dist-sandbox-7565eaee/build/vector-tests-O2/vector-tests-O2-tmp
 -Idist/dist-sandbox-7565eaee/build/autogen -Idist/dist-sandbox-
 7565eaee/build/vector-tests-O2/vector-tests-O2-tmp -x assembler -c
 /tmp/ghc32343_0/ghc32343_13.s -o dist/dist-sandbox-7565eaee/build/vector-
 tests-O2/vector-tests-O2-tmp/Tests/Vector.o
 *** CorePrep:
 Result size of CorePrep
   = {terms: 1,742,444, types: 2,159,089, coercions: 949,848}
 }}}

 This is a substantial change from 7.8.3, which behaves as follows,

 = 7.8.3 =
 {{{
 [5 of 6] Compiling Tests.Vector     ( tests/Tests/Vector.hs, dist/dist-
 sandbox-8a24a56a/build/vector-tests-O2/vector-tests-O2-tmp/Tests/Vector.o
 )
 *** Parser:
 *** Renamer/typechecker:
 *** Simplify:
 *** CorePrep:
 *** ByteCodeGen:
 *** Simplify:
 *** CorePrep:
 *** ByteCodeGen:
 *** Simplify:
 *** CorePrep:
 *** ByteCodeGen:
 *** Simplify:
 *** CorePrep:
 *** ByteCodeGen:
 *** Simplify:
 *** CorePrep:
 *** ByteCodeGen:
 *** Simplify:
 *** CorePrep:
 *** ByteCodeGen:
 *** Simplify:
 *** CorePrep:
 *** ByteCodeGen:
 *** Simplify:
 *** CorePrep:
 *** ByteCodeGen:
 *** Simplify:
 *** CorePrep:
 *** ByteCodeGen:
 *** Simplify:
 *** CorePrep:
 *** ByteCodeGen:
 *** Simplify:
 *** CorePrep:
 *** ByteCodeGen:
 *** Simplify:
 *** CorePrep:
 *** ByteCodeGen:

 tests/Tests/Vector.hs:405:5: Warning:
     Defined but not used: ‘limitUnfolds’

 tests/Tests/Vector.hs:408:5: Warning:
     Defined but not used: ‘prop_unfoldr’

 tests/Tests/Vector.hs:615:1: Warning:
     Defined but not used: ‘testBoolUnboxedVector’
 *** Desugar:
 Result size of Desugar (after optimization)
   = {terms: 11,244, types: 57,883, coercions: 7,302}
 *** Simplifier:
 Result size of Simplifier iteration=1
   = {terms: 9,193, types: 44,105, coercions: 7,337}
 Result size of Simplifier iteration=2
   = {terms: 9,116, types: 43,718, coercions: 7,159}
 Result size of Simplifier
   = {terms: 9,116, types: 43,718, coercions: 7,159}
 *** Specialise:
 Result size of Specialise
   = {terms: 82,833, types: 519,765, coercions: 78,989}
 *** Float out(FOS {Lam = Just 0, Consts = True, PAPs = False}):
 Result size of Float out(FOS {Lam = Just 0,
                               Consts = True,
                               PAPs = False})
   = {terms: 100,958, types: 568,910, coercions: 78,989}
 *** Float inwards:
 Result size of Float inwards
   = {terms: 100,958, types: 568,910, coercions: 78,989}
 *** Simplifier:
 Result size of Simplifier iteration=1
   = {terms: 179,170, types: 343,254, coercions: 645,024}
 Result size of Simplifier iteration=2
   = {terms: 123,469, types: 170,930, coercions: 259,665}
 Result size of Simplifier iteration=3
   = {terms: 113,030, types: 155,318, coercions: 230,494}
 Result size of Simplifier iteration=4
   = {terms: 112,745, types: 154,554, coercions: 221,711}
 Result size of Simplifier
   = {terms: 112,745, types: 154,554, coercions: 221,711}
 *** Simplifier:
 Result size of Simplifier iteration=1
   = {terms: 515,401, types: 809,314, coercions: 598,712}
 Result size of Simplifier iteration=2
   = {terms: 345,742, types: 520,083, coercions: 376,036}
 Result size of Simplifier iteration=3
   = {terms: 294,322, types: 416,385, coercions: 312,220}
 Result size of Simplifier iteration=4
   = {terms: 287,445, types: 402,244, coercions: 297,516}
 Result size of Simplifier
   = {terms: 287,445, types: 402,244, coercions: 297,516}
 *** Simplifier:
 Result size of Simplifier iteration=1
   = {terms: 453,076, types: 567,575, coercions: 280,117}
 Result size of Simplifier iteration=2
   = {terms: 321,815, types: 378,160, coercions: 222,556}
 Result size of Simplifier iteration=3
   = {terms: 309,758, types: 365,364, coercions: 219,987}
 Result size of Simplifier iteration=4
   = {terms: 308,628, types: 364,331, coercions: 219,583}
 Result size of Simplifier
   = {terms: 308,628, types: 364,331, coercions: 219,583}
 *** Demand analysis:
 Result size of Demand analysis
   = {terms: 308,628, types: 364,331, coercions: 219,583}
 *** Worker Wrapper binds:
 Result size of Worker Wrapper binds
   = {terms: 352,621, types: 419,343, coercions: 223,102}
 *** Simplifier:
 Result size of Simplifier iteration=1
   = {terms: 334,327, types: 396,352, coercions: 217,632}
 Result size of Simplifier iteration=2
   = {terms: 297,776, types: 344,782, coercions: 211,762}
 Result size of Simplifier iteration=3
   = {terms: 297,134, types: 343,498, coercions: 211,068}
 Result size of Simplifier iteration=4
   = {terms: 296,791, types: 342,860, coercions: 211,033}
 Result size of Simplifier
   = {terms: 296,791, types: 342,860, coercions: 211,033}
 *** Float out(FOS {Lam = Just 0, Consts = True, PAPs = True}):
 Result size of Float out(FOS {Lam = Just 0,
                               Consts = True,
                               PAPs = True})
   = {terms: 311,717, types: 380,250, coercions: 211,033}
 *** Common sub-expression:
 Result size of Common sub-expression
   = {terms: 281,729, types: 346,991, coercions: 196,315}
 *** Float inwards:
 Result size of Float inwards
   = {terms: 281,729, types: 346,991, coercions: 196,315}
 *** Liberate case:
 Result size of Liberate case
   = {terms: 301,329, types: 362,935, coercions: 200,458}
 *** Simplifier:
 Result size of Simplifier iteration=1
   = {terms: 281,187, types: 322,484, coercions: 200,278}
 Result size of Simplifier iteration=2
   = {terms: 279,511, types: 320,001, coercions: 199,549}
 Result size of Simplifier
   = {terms: 279,511, types: 320,001, coercions: 199,549}
 *** SpecConstr:
 Result size of SpecConstr
   = {terms: 398,168, types: 420,420, coercions: 230,461}
 *** Simplifier:
 Result size of Simplifier iteration=1
   = {terms: 390,005, types: 411,465, coercions: 230,270}
 Result size of Simplifier iteration=2
   = {terms: 272,588, types: 315,504, coercions: 201,634}
 Result size of Simplifier iteration=3
   = {terms: 269,759, types: 310,458, coercions: 200,366}
 Result size of Simplifier
   = {terms: 269,759, types: 310,458, coercions: 200,366}
 *** Tidy Core:
 Result size of Tidy Core
   = {terms: 269,759, types: 310,458, coercions: 200,366}
 writeBinIface: 518 Names
 writeBinIface: 694 dict entries
 writeBinIface: 518 Names
 writeBinIface: 694 dict entries
 *** CorePrep:
 Result size of CorePrep
   = {terms: 341,307, types: 360,564, coercions: 200,286}
 }}}

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10800#comment:4>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list