Andreas Klebinger pushed to branch wip/andreask/occ_anal_tuning at Glasgow Haskell Compiler / GHC

Commits:

26 changed files:

Changes:

  • compiler/GHC.hs
    ... ... @@ -30,7 +30,7 @@ module GHC (
    30 30
     
    
    31 31
             -- * Flags and settings
    
    32 32
             DynFlags(..), GeneralFlag(..), Severity(..), Backend, gopt,
    
    33
    -        ncgBackend, llvmBackend, viaCBackend, interpreterBackend, noBackend,
    
    33
    +        ncgBackend, llvmBackend, viaCBackend, bytecodeBackend, interpreterBackend, noBackend,
    
    34 34
             GhcMode(..), GhcLink(..),
    
    35 35
             parseDynamicFlags, parseTargetFiles,
    
    36 36
             getSessionDynFlags,
    

  • compiler/GHC/Core/Opt/OccurAnal.hs
    ... ... @@ -10,6 +10,10 @@
    10 10
     -- bad for performance, so I increased the limit to allow it to unbox
    
    11 11
     -- consistently.
    
    12 12
     
    
    13
    +-- {-# OPTIONS_GHC -ddump-simpl -ddump-stg -dumpdir dumps -ddump-to-file #-}
    
    14
    +-- {-# OPTIONS_GHC -fdistinct-constructor-tables -finfo-table-map #-}
    
    15
    +-- {-# OPTIONS_GHC -ticky -ticky-allocd -ticky-LNE #-}
    
    16
    +
    
    13 17
     {-
    
    14 18
     (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
    
    15 19
     
    
    ... ... @@ -984,7 +988,7 @@ occAnalBind !env lvl ire (NonRec bndr rhs) thing_inside combine
    984 988
       = -- Analyse the RHS and /then/ the body
    
    985 989
         let -- Analyse the rhs first, generating rhs_uds
    
    986 990
             !(rhs_uds_s, bndr', rhs') = occAnalNonRecRhs env lvl ire mb_join bndr rhs
    
    987
    -        rhs_uds = foldr1 orUDs rhs_uds_s   -- NB: orUDs.  See (W4) of
    
    991
    +        rhs_uds = foldl1' orUDs rhs_uds_s   -- NB: orUDs.  See (W4) of
    
    988 992
                                                -- Note [Occurrence analysis for join points]
    
    989 993
     
    
    990 994
             -- Now analyse the body, adding the join point
    
    ... ... @@ -3650,8 +3654,10 @@ data WithTailUsageDetails a = WTUD !TailUsageDetails !a
    3650 3654
     -------------------
    
    3651 3655
     -- UsageDetails API
    
    3652 3656
     
    
    3653
    -andUDs, orUDs
    
    3654
    -        :: UsageDetails -> UsageDetails -> UsageDetails
    
    3657
    +-- {-# NOINLINE andUDs #-}
    
    3658
    +-- {-# NOINLINE orUDs #-}
    
    3659
    +andUDs:: UsageDetails -> UsageDetails -> UsageDetails
    
    3660
    +orUDs :: UsageDetails -> UsageDetails -> UsageDetails
    
    3655 3661
     andUDs = combineUsageDetailsWith andLocalOcc
    
    3656 3662
     orUDs  = combineUsageDetailsWith orLocalOcc
    
    3657 3663
     
    
    ... ... @@ -3760,16 +3766,17 @@ restrictFreeVars bndrs fvs = restrictUniqSetToUFM bndrs fvs
    3760 3766
     combineUsageDetailsWith :: (LocalOcc -> LocalOcc -> LocalOcc)
    
    3761 3767
                             -> UsageDetails -> UsageDetails -> UsageDetails
    
    3762 3768
     {-# INLINE combineUsageDetailsWith #-}
    
    3769
    +{-# SCC combineUsageDetailsWith #-}
    
    3763 3770
     combineUsageDetailsWith plus_occ_info
    
    3764 3771
         uds1@(UD { ud_env = env1, ud_z_many = z_many1, ud_z_in_lam = z_in_lam1, ud_z_tail = z_tail1 })
    
    3765 3772
         uds2@(UD { ud_env = env2, ud_z_many = z_many2, ud_z_in_lam = z_in_lam2, ud_z_tail = z_tail2 })
    
    3766 3773
       | isEmptyVarEnv env1 = uds2
    
    3767 3774
       | isEmptyVarEnv env2 = uds1
    
    3768 3775
       | otherwise
    
    3769
    -  = UD { ud_env       = plusVarEnv_C plus_occ_info env1 env2
    
    3770
    -       , ud_z_many    = plusVarEnv z_many1   z_many2
    
    3771
    -       , ud_z_in_lam  = plusVarEnv z_in_lam1 z_in_lam2
    
    3772
    -       , ud_z_tail    = plusVarEnv z_tail1   z_tail2 }
    
    3776
    +  = UD { ud_env       = {-# SCC ud_env #-} strictPlusVarEnv_C plus_occ_info env1 env2
    
    3777
    +       , ud_z_many    = {-# SCC ud_z_many #-} strictPlusVarEnv z_many1   z_many2
    
    3778
    +       , ud_z_in_lam  = {-# SCC ud_z_in_lam #-} strictPlusVarEnv z_in_lam1 z_in_lam2
    
    3779
    +       , ud_z_tail    = {-# SCC ud_z_tail #-} strictPlusVarEnv z_tail1   z_tail2 }
    
    3773 3780
     
    
    3774 3781
     lookupLetOccInfo :: UsageDetails -> Id -> OccInfo
    
    3775 3782
     -- Don't use locally-generated occ_info for exported (visible-elsewhere)
    

  • compiler/GHC/Data/Word64Map/Internal.hs
    ... ... @@ -3,6 +3,7 @@
    3 3
     
    
    4 4
     {-# OPTIONS_HADDOCK not-home #-}
    
    5 5
     {-# OPTIONS_GHC -fno-warn-incomplete-uni-patterns #-}
    
    6
    +{-# OPTIONS_GHC -ddump-simpl -ddump-stg-final -ddump-to-file -dumpdir dumps #-}
    
    6 7
     
    
    7 8
     
    
    8 9
     -----------------------------------------------------------------------------
    

  • compiler/GHC/Driver/Backend.hs
    ... ... @@ -47,6 +47,7 @@ module GHC.Driver.Backend
    47 47
        , llvmBackend
    
    48 48
        , jsBackend
    
    49 49
        , viaCBackend
    
    50
    +   , bytecodeBackend
    
    50 51
        , interpreterBackend
    
    51 52
        , noBackend
    
    52 53
        , allBackends
    
    ... ... @@ -252,7 +253,7 @@ instance Show Backend where
    252 253
       show = backendDescription
    
    253 254
     
    
    254 255
     
    
    255
    -ncgBackend, llvmBackend, viaCBackend, interpreterBackend, jsBackend, noBackend
    
    256
    +ncgBackend, llvmBackend, viaCBackend, bytecodeBackend, interpreterBackend, jsBackend, noBackend
    
    256 257
         :: Backend
    
    257 258
     
    
    258 259
     -- | The native code generator.
    
    ... ... @@ -310,7 +311,11 @@ viaCBackend = Named ViaC
    310 311
     -- (foreign primops).
    
    311 312
     --
    
    312 313
     -- See "GHC.StgToByteCode"
    
    313
    -interpreterBackend = Named Interpreter
    
    314
    +bytecodeBackend = Named Bytecode
    
    315
    +
    
    316
    +{-# DEPRECATED interpreterBackend "Renamed to bytecodeBackend" #-}
    
    317
    +interpreterBackend = bytecodeBackend
    
    318
    +
    
    314 319
     
    
    315 320
     -- | A dummy back end that generates no code.
    
    316 321
     --
    
    ... ... @@ -419,7 +424,7 @@ backendDescription (Named NCG) = "native code generator"
    419 424
     backendDescription (Named LLVM)        = "LLVM"
    
    420 425
     backendDescription (Named ViaC)        = "compiling via C"
    
    421 426
     backendDescription (Named JavaScript)  = "compiling to JavaScript"
    
    422
    -backendDescription (Named Interpreter) = "byte-code interpreter"
    
    427
    +backendDescription (Named Bytecode) = "byte-code interpreter"
    
    423 428
     backendDescription (Named NoBackend)   = "no code generated"
    
    424 429
     
    
    425 430
     -- | This flag tells the compiler driver whether the back
    
    ... ... @@ -431,7 +436,7 @@ backendWritesFiles (Named NCG) = True
    431 436
     backendWritesFiles (Named LLVM)        = True
    
    432 437
     backendWritesFiles (Named ViaC)        = True
    
    433 438
     backendWritesFiles (Named JavaScript)  = True
    
    434
    -backendWritesFiles (Named Interpreter) = False
    
    439
    +backendWritesFiles (Named Bytecode) = False
    
    435 440
     backendWritesFiles (Named NoBackend)   = False
    
    436 441
     
    
    437 442
     -- | When the back end does write files, this value tells
    
    ... ... @@ -442,7 +447,7 @@ backendPipelineOutput (Named NCG) = Persistent
    442 447
     backendPipelineOutput (Named LLVM) = Persistent
    
    443 448
     backendPipelineOutput (Named ViaC) = Persistent
    
    444 449
     backendPipelineOutput (Named JavaScript)  = Persistent
    
    445
    -backendPipelineOutput (Named Interpreter) = NoOutputFile
    
    450
    +backendPipelineOutput (Named Bytecode) = NoOutputFile
    
    446 451
     backendPipelineOutput (Named NoBackend)   = NoOutputFile
    
    447 452
     
    
    448 453
     -- | This flag tells the driver whether the back end can
    
    ... ... @@ -453,7 +458,7 @@ backendCanReuseLoadedCode (Named NCG) = False
    453 458
     backendCanReuseLoadedCode (Named LLVM)        = False
    
    454 459
     backendCanReuseLoadedCode (Named ViaC)        = False
    
    455 460
     backendCanReuseLoadedCode (Named JavaScript)  = False
    
    456
    -backendCanReuseLoadedCode (Named Interpreter) = True
    
    461
    +backendCanReuseLoadedCode (Named Bytecode) = True
    
    457 462
     backendCanReuseLoadedCode (Named NoBackend)   = False
    
    458 463
     
    
    459 464
     -- | It is is true of every back end except @-fno-code@
    
    ... ... @@ -478,7 +483,7 @@ backendGeneratesCode (Named NCG) = True
    478 483
     backendGeneratesCode (Named LLVM)        = True
    
    479 484
     backendGeneratesCode (Named ViaC)        = True
    
    480 485
     backendGeneratesCode (Named JavaScript)  = True
    
    481
    -backendGeneratesCode (Named Interpreter) = True
    
    486
    +backendGeneratesCode (Named Bytecode) = True
    
    482 487
     backendGeneratesCode (Named NoBackend)   = False
    
    483 488
     
    
    484 489
     backendGeneratesCodeForHsBoot :: Backend -> Bool
    
    ... ... @@ -486,7 +491,7 @@ backendGeneratesCodeForHsBoot (Named NCG) = True
    486 491
     backendGeneratesCodeForHsBoot (Named LLVM)        = True
    
    487 492
     backendGeneratesCodeForHsBoot (Named ViaC)        = True
    
    488 493
     backendGeneratesCodeForHsBoot (Named JavaScript)  = True
    
    489
    -backendGeneratesCodeForHsBoot (Named Interpreter) = False
    
    494
    +backendGeneratesCodeForHsBoot (Named Bytecode) = False
    
    490 495
     backendGeneratesCodeForHsBoot (Named NoBackend)   = False
    
    491 496
     
    
    492 497
     -- | When set, this flag turns on interface writing for
    
    ... ... @@ -498,7 +503,7 @@ backendSupportsInterfaceWriting (Named NCG) = True
    498 503
     backendSupportsInterfaceWriting (Named LLVM)        = True
    
    499 504
     backendSupportsInterfaceWriting (Named ViaC)        = True
    
    500 505
     backendSupportsInterfaceWriting (Named JavaScript)  = True
    
    501
    -backendSupportsInterfaceWriting (Named Interpreter) = True
    
    506
    +backendSupportsInterfaceWriting (Named Bytecode) = True
    
    502 507
     backendSupportsInterfaceWriting (Named NoBackend)   = False
    
    503 508
     
    
    504 509
     -- | When preparing code for this back end, the type
    
    ... ... @@ -510,7 +515,7 @@ backendRespectsSpecialise (Named NCG) = True
    510 515
     backendRespectsSpecialise (Named LLVM)        = True
    
    511 516
     backendRespectsSpecialise (Named ViaC)        = True
    
    512 517
     backendRespectsSpecialise (Named JavaScript)  = True
    
    513
    -backendRespectsSpecialise (Named Interpreter) = False
    
    518
    +backendRespectsSpecialise (Named Bytecode) = False
    
    514 519
     backendRespectsSpecialise (Named NoBackend)   = False
    
    515 520
     
    
    516 521
     -- | This back end wants the `mi_top_env` field of a
    
    ... ... @@ -522,7 +527,7 @@ backendWantsGlobalBindings (Named LLVM) = False
    522 527
     backendWantsGlobalBindings (Named ViaC)        = False
    
    523 528
     backendWantsGlobalBindings (Named JavaScript)  = False
    
    524 529
     backendWantsGlobalBindings (Named NoBackend)   = False
    
    525
    -backendWantsGlobalBindings (Named Interpreter) = True
    
    530
    +backendWantsGlobalBindings (Named Bytecode) = True
    
    526 531
     
    
    527 532
     -- | The back end targets a technology that implements
    
    528 533
     -- `switch` natively.  (For example, LLVM or C.) Therefore
    
    ... ... @@ -534,7 +539,7 @@ backendHasNativeSwitch (Named NCG) = False
    534 539
     backendHasNativeSwitch (Named LLVM)        = True
    
    535 540
     backendHasNativeSwitch (Named ViaC)        = True
    
    536 541
     backendHasNativeSwitch (Named JavaScript)  = True
    
    537
    -backendHasNativeSwitch (Named Interpreter) = False
    
    542
    +backendHasNativeSwitch (Named Bytecode) = False
    
    538 543
     backendHasNativeSwitch (Named NoBackend)   = False
    
    539 544
     
    
    540 545
     -- | As noted in the documentation for
    
    ... ... @@ -548,7 +553,7 @@ backendPrimitiveImplementation (Named NCG) = NcgPrimitives
    548 553
     backendPrimitiveImplementation (Named LLVM)        = LlvmPrimitives
    
    549 554
     backendPrimitiveImplementation (Named JavaScript)  = JSPrimitives
    
    550 555
     backendPrimitiveImplementation (Named ViaC)        = GenericPrimitives
    
    551
    -backendPrimitiveImplementation (Named Interpreter) = GenericPrimitives
    
    556
    +backendPrimitiveImplementation (Named Bytecode) = GenericPrimitives
    
    552 557
     backendPrimitiveImplementation (Named NoBackend)   = GenericPrimitives
    
    553 558
     
    
    554 559
     -- | When this value is `IsValid`, the back end is
    
    ... ... @@ -560,7 +565,7 @@ backendSimdValidity (Named NCG) = IsValid
    560 565
     backendSimdValidity (Named LLVM)        = IsValid
    
    561 566
     backendSimdValidity (Named ViaC)        = NotValid $ unlines ["SIMD vector instructions require using the NCG or the LLVM backend."]
    
    562 567
     backendSimdValidity (Named JavaScript)  = NotValid $ unlines ["SIMD vector instructions require using the NCG or the LLVM backend."]
    
    563
    -backendSimdValidity (Named Interpreter) = NotValid $ unlines ["SIMD vector instructions require using the NCG or the LLVM backend."]
    
    568
    +backendSimdValidity (Named Bytecode) = NotValid $ unlines ["SIMD vector instructions require using the NCG or the LLVM backend."]
    
    564 569
     backendSimdValidity (Named NoBackend)   = NotValid $ unlines ["SIMD vector instructions require using the NCG or the LLVM backend."]
    
    565 570
     
    
    566 571
     -- | This flag says whether the back end supports large
    
    ... ... @@ -571,7 +576,7 @@ backendSupportsEmbeddedBlobs (Named NCG) = True
    571 576
     backendSupportsEmbeddedBlobs (Named LLVM)        = False
    
    572 577
     backendSupportsEmbeddedBlobs (Named ViaC)        = False
    
    573 578
     backendSupportsEmbeddedBlobs (Named JavaScript)  = False
    
    574
    -backendSupportsEmbeddedBlobs (Named Interpreter) = False
    
    579
    +backendSupportsEmbeddedBlobs (Named Bytecode) = False
    
    575 580
     backendSupportsEmbeddedBlobs (Named NoBackend)   = False
    
    576 581
     
    
    577 582
     -- | This flag tells the compiler driver that the back end
    
    ... ... @@ -586,7 +591,7 @@ backendNeedsPlatformNcgSupport (Named NCG) = True
    586 591
     backendNeedsPlatformNcgSupport (Named LLVM)        = False
    
    587 592
     backendNeedsPlatformNcgSupport (Named ViaC)        = False
    
    588 593
     backendNeedsPlatformNcgSupport (Named JavaScript)  = False
    
    589
    -backendNeedsPlatformNcgSupport (Named Interpreter) = False
    
    594
    +backendNeedsPlatformNcgSupport (Named Bytecode) = False
    
    590 595
     backendNeedsPlatformNcgSupport (Named NoBackend)   = False
    
    591 596
     
    
    592 597
     -- | This flag is set if the back end can generate code
    
    ... ... @@ -598,7 +603,7 @@ backendSupportsUnsplitProcPoints (Named NCG) = True
    598 603
     backendSupportsUnsplitProcPoints (Named LLVM)        = False
    
    599 604
     backendSupportsUnsplitProcPoints (Named ViaC)        = False
    
    600 605
     backendSupportsUnsplitProcPoints (Named JavaScript)  = False
    
    601
    -backendSupportsUnsplitProcPoints (Named Interpreter) = False
    
    606
    +backendSupportsUnsplitProcPoints (Named Bytecode) = False
    
    602 607
     backendSupportsUnsplitProcPoints (Named NoBackend)   = False
    
    603 608
     
    
    604 609
     -- | This flag guides the driver in resolving issues about
    
    ... ... @@ -616,7 +621,7 @@ backendSwappableWithViaC (Named NCG) = True
    616 621
     backendSwappableWithViaC (Named LLVM)        = True
    
    617 622
     backendSwappableWithViaC (Named ViaC)        = False
    
    618 623
     backendSwappableWithViaC (Named JavaScript)  = False
    
    619
    -backendSwappableWithViaC (Named Interpreter) = False
    
    624
    +backendSwappableWithViaC (Named Bytecode) = False
    
    620 625
     backendSwappableWithViaC (Named NoBackend)   = False
    
    621 626
     
    
    622 627
     -- | This flag is true if the back end works *only* with
    
    ... ... @@ -626,7 +631,7 @@ backendUnregisterisedAbiOnly (Named NCG) = False
    626 631
     backendUnregisterisedAbiOnly (Named LLVM)        = False
    
    627 632
     backendUnregisterisedAbiOnly (Named ViaC)        = True
    
    628 633
     backendUnregisterisedAbiOnly (Named JavaScript)  = False
    
    629
    -backendUnregisterisedAbiOnly (Named Interpreter) = False
    
    634
    +backendUnregisterisedAbiOnly (Named Bytecode) = False
    
    630 635
     backendUnregisterisedAbiOnly (Named NoBackend)   = False
    
    631 636
     
    
    632 637
     -- | This flag is set if the back end generates C code in
    
    ... ... @@ -637,7 +642,7 @@ backendGeneratesHc (Named NCG) = False
    637 642
     backendGeneratesHc (Named LLVM)        = False
    
    638 643
     backendGeneratesHc (Named ViaC)        = True
    
    639 644
     backendGeneratesHc (Named JavaScript)  = False
    
    640
    -backendGeneratesHc (Named Interpreter) = False
    
    645
    +backendGeneratesHc (Named Bytecode) = False
    
    641 646
     backendGeneratesHc (Named NoBackend)   = False
    
    642 647
     
    
    643 648
     -- | This flag says whether SPT (static pointer table)
    
    ... ... @@ -649,7 +654,7 @@ backendSptIsDynamic (Named NCG) = False
    649 654
     backendSptIsDynamic (Named LLVM)        = False
    
    650 655
     backendSptIsDynamic (Named ViaC)        = False
    
    651 656
     backendSptIsDynamic (Named JavaScript)  = False
    
    652
    -backendSptIsDynamic (Named Interpreter) = True
    
    657
    +backendSptIsDynamic (Named Bytecode) = True
    
    653 658
     backendSptIsDynamic (Named NoBackend)   = False
    
    654 659
     
    
    655 660
     -- | If this flag is unset, then the driver ignores the flag @-fbreak-points@,
    
    ... ... @@ -660,7 +665,7 @@ backendSupportsBreakpoints = \case
    660 665
       Named LLVM        -> False
    
    661 666
       Named ViaC        -> False
    
    662 667
       Named JavaScript  -> False
    
    663
    -  Named Interpreter -> True
    
    668
    +  Named Bytecode -> True
    
    664 669
       Named NoBackend   -> False
    
    665 670
     
    
    666 671
     -- | If this flag is set, then the driver forces the
    
    ... ... @@ -671,7 +676,7 @@ backendForcesOptimization0 (Named NCG) = False
    671 676
     backendForcesOptimization0 (Named LLVM)        = False
    
    672 677
     backendForcesOptimization0 (Named ViaC)        = False
    
    673 678
     backendForcesOptimization0 (Named JavaScript)  = False
    
    674
    -backendForcesOptimization0 (Named Interpreter) = True
    
    679
    +backendForcesOptimization0 (Named Bytecode) = True
    
    675 680
     backendForcesOptimization0 (Named NoBackend)   = False
    
    676 681
     
    
    677 682
     -- | I don't understand exactly how this works.  But if
    
    ... ... @@ -683,7 +688,7 @@ backendNeedsFullWays (Named NCG) = False
    683 688
     backendNeedsFullWays (Named LLVM)        = False
    
    684 689
     backendNeedsFullWays (Named ViaC)        = False
    
    685 690
     backendNeedsFullWays (Named JavaScript)  = False
    
    686
    -backendNeedsFullWays (Named Interpreter) = True
    
    691
    +backendNeedsFullWays (Named Bytecode) = True
    
    687 692
     backendNeedsFullWays (Named NoBackend)   = False
    
    688 693
     
    
    689 694
     -- | This flag is also special for the interpreter: if a
    
    ... ... @@ -695,7 +700,7 @@ backendSpecialModuleSource (Named NCG) = const Nothing
    695 700
     backendSpecialModuleSource (Named LLVM)        = const Nothing
    
    696 701
     backendSpecialModuleSource (Named ViaC)        = const Nothing
    
    697 702
     backendSpecialModuleSource (Named JavaScript)  = const Nothing
    
    698
    -backendSpecialModuleSource (Named Interpreter) = \b -> if b then Just "interpreted" else Nothing
    
    703
    +backendSpecialModuleSource (Named Bytecode) = \b -> if b then Just "interpreted" else Nothing
    
    699 704
     backendSpecialModuleSource (Named NoBackend)   = const (Just "nothing")
    
    700 705
     
    
    701 706
     -- | This flag says whether the back end supports Haskell
    
    ... ... @@ -707,7 +712,7 @@ backendSupportsHpc (Named NCG) = True
    707 712
     backendSupportsHpc (Named LLVM)        = True
    
    708 713
     backendSupportsHpc (Named ViaC)        = True
    
    709 714
     backendSupportsHpc (Named JavaScript)  = False
    
    710
    -backendSupportsHpc (Named Interpreter) = False
    
    715
    +backendSupportsHpc (Named Bytecode) = False
    
    711 716
     backendSupportsHpc (Named NoBackend)   = True
    
    712 717
     
    
    713 718
     -- | This flag says whether the back end supports foreign
    
    ... ... @@ -718,7 +723,7 @@ backendSupportsCImport (Named NCG) = True
    718 723
     backendSupportsCImport (Named LLVM)        = True
    
    719 724
     backendSupportsCImport (Named ViaC)        = True
    
    720 725
     backendSupportsCImport (Named JavaScript)  = True
    
    721
    -backendSupportsCImport (Named Interpreter) = True
    
    726
    +backendSupportsCImport (Named Bytecode) = True
    
    722 727
     backendSupportsCImport (Named NoBackend)   = True
    
    723 728
     
    
    724 729
     -- | This flag says whether the back end supports foreign
    
    ... ... @@ -728,7 +733,7 @@ backendSupportsCExport (Named NCG) = True
    728 733
     backendSupportsCExport (Named LLVM)        = True
    
    729 734
     backendSupportsCExport (Named ViaC)        = True
    
    730 735
     backendSupportsCExport (Named JavaScript)  = True
    
    731
    -backendSupportsCExport (Named Interpreter) = False
    
    736
    +backendSupportsCExport (Named Bytecode) = False
    
    732 737
     backendSupportsCExport (Named NoBackend)   = True
    
    733 738
     
    
    734 739
     -- | When using this back end, it may be necessary or
    
    ... ... @@ -749,7 +754,7 @@ backendCDefs (Named NCG) = NoCDefs
    749 754
     backendCDefs (Named LLVM)        = LlvmCDefs
    
    750 755
     backendCDefs (Named ViaC)        = NoCDefs
    
    751 756
     backendCDefs (Named JavaScript)  = NoCDefs
    
    752
    -backendCDefs (Named Interpreter) = NoCDefs
    
    757
    +backendCDefs (Named Bytecode) = NoCDefs
    
    753 758
     backendCDefs (Named NoBackend)   = NoCDefs
    
    754 759
     
    
    755 760
     -- | This (defunctionalized) function generates code and
    
    ... ... @@ -768,7 +773,7 @@ backendCodeOutput (Named NCG) = NcgCodeOutput
    768 773
     backendCodeOutput (Named LLVM)        = LlvmCodeOutput
    
    769 774
     backendCodeOutput (Named ViaC)        = ViaCCodeOutput
    
    770 775
     backendCodeOutput (Named JavaScript)  = JSCodeOutput
    
    771
    -backendCodeOutput (Named Interpreter) = panic "backendCodeOutput: interpreterBackend"
    
    776
    +backendCodeOutput (Named Bytecode) = panic "backendCodeOutput: bytecodeBackend"
    
    772 777
     backendCodeOutput (Named NoBackend)   = panic "backendCodeOutput: noBackend"
    
    773 778
     
    
    774 779
     backendUseJSLinker :: Backend -> Bool
    
    ... ... @@ -776,7 +781,7 @@ backendUseJSLinker (Named NCG) = False
    776 781
     backendUseJSLinker (Named LLVM)        = False
    
    777 782
     backendUseJSLinker (Named ViaC)        = False
    
    778 783
     backendUseJSLinker (Named JavaScript)  = True
    
    779
    -backendUseJSLinker (Named Interpreter) = False
    
    784
    +backendUseJSLinker (Named Bytecode) = False
    
    780 785
     backendUseJSLinker (Named NoBackend)   = False
    
    781 786
     
    
    782 787
     -- | This (defunctionalized) function tells the compiler
    
    ... ... @@ -795,7 +800,7 @@ backendPostHscPipeline (Named NCG) = NcgPostHscPipeline
    795 800
     backendPostHscPipeline (Named LLVM) = LlvmPostHscPipeline
    
    796 801
     backendPostHscPipeline (Named ViaC) = ViaCPostHscPipeline
    
    797 802
     backendPostHscPipeline (Named JavaScript)  = JSPostHscPipeline
    
    798
    -backendPostHscPipeline (Named Interpreter) = NoPostHscPipeline
    
    803
    +backendPostHscPipeline (Named Bytecode) = NoPostHscPipeline
    
    799 804
     backendPostHscPipeline (Named NoBackend) = NoPostHscPipeline
    
    800 805
     
    
    801 806
     -- | Somewhere in the compiler driver, when compiling
    
    ... ... @@ -809,7 +814,7 @@ backendNormalSuccessorPhase (Named NCG) = As False
    809 814
     backendNormalSuccessorPhase (Named LLVM) = LlvmOpt
    
    810 815
     backendNormalSuccessorPhase (Named ViaC) = HCc
    
    811 816
     backendNormalSuccessorPhase (Named JavaScript)  = StopLn
    
    812
    -backendNormalSuccessorPhase (Named Interpreter) = StopLn
    
    817
    +backendNormalSuccessorPhase (Named Bytecode) = StopLn
    
    813 818
     backendNormalSuccessorPhase (Named NoBackend)   = StopLn
    
    814 819
     
    
    815 820
     -- | Name of the back end, if any.  Used to migrate legacy
    
    ... ... @@ -820,7 +825,7 @@ backendName (Named NCG) = NCG
    820 825
     backendName (Named LLVM) = LLVM
    
    821 826
     backendName (Named ViaC) = ViaC
    
    822 827
     backendName (Named JavaScript)  = JavaScript
    
    823
    -backendName (Named Interpreter) = Interpreter
    
    828
    +backendName (Named Bytecode) = Bytecode
    
    824 829
     backendName (Named NoBackend)   = NoBackend
    
    825 830
     
    
    826 831
     
    
    ... ... @@ -833,7 +838,7 @@ allBackends = [ ncgBackend
    833 838
                   , llvmBackend
    
    834 839
                   , viaCBackend
    
    835 840
                   , jsBackend
    
    836
    -              , interpreterBackend
    
    841
    +              , bytecodeBackend
    
    837 842
                   , noBackend
    
    838 843
                   ]
    
    839 844
     
    

  • compiler/GHC/Driver/Backend/Internal.hs
    ... ... @@ -28,6 +28,6 @@ data BackendName
    28 28
        | LLVM          -- ^ Names the LLVM backend.
    
    29 29
        | ViaC          -- ^ Names the Via-C backend.
    
    30 30
        | JavaScript    -- ^ Names the JS backend.
    
    31
    -   | Interpreter   -- ^ Names the ByteCode interpreter.
    
    31
    +   | Bytecode      -- ^ Names the ByteCode interpreter.
    
    32 32
        | NoBackend     -- ^ Names the `-fno-code` backend.
    
    33 33
      deriving (Eq, Show)

  • compiler/GHC/Driver/Downsweep.hs
    ... ... @@ -916,7 +916,7 @@ enableCodeGenWhen logger tmpfs staticLife dynLife unit_env mod_graph = do
    916 916
                        else (,) <$> (new_temp_file (hiSuf_ dflags) (dynHiSuf_ dflags))
    
    917 917
                                 <*> (new_temp_file (objectSuf_ dflags) (dynObjectSuf_ dflags))
    
    918 918
                    let new_dflags = case enable_spec of
    
    919
    -                                  EnableByteCode -> dflags { backend = interpreterBackend }
    
    919
    +                                  EnableByteCode -> dflags { backend = bytecodeBackend }
    
    920 920
                                       EnableObject   -> dflags { backend = defaultBackendOf ms }
    
    921 921
                                       EnableByteCodeAndObject -> (gopt_set dflags Opt_ByteCodeAndObjectCode) { backend = defaultBackendOf ms}
    
    922 922
                    let ms' = ms
    

  • compiler/GHC/Driver/Pipeline.hs
    ... ... @@ -281,8 +281,8 @@ compileOne' mHscMessage
    281 281
              -- was set), force it to generate byte-code. This is NOT transitive and
    
    282 282
              -- only applies to direct targets.
    
    283 283
              | loadAsByteCode
    
    284
    -         = ( interpreterBackend
    
    285
    -           , gopt_set (lcl_dflags { backend = interpreterBackend }) Opt_ForceRecomp
    
    284
    +         = ( bytecodeBackend
    
    285
    +           , gopt_set (lcl_dflags { backend = bytecodeBackend }) Opt_ForceRecomp
    
    286 286
                )
    
    287 287
     
    
    288 288
              | otherwise
    

  • compiler/GHC/Driver/Session.hs
    ... ... @@ -1931,7 +1931,7 @@ dynamic_flags_deps = [
    1931 1931
                       d { ghcLink=NoLink }) >> setBackend noBackend))
    
    1932 1932
       , make_ord_flag defFlag "fbyte-code"
    
    1933 1933
           (noArgM $ \dflags -> do
    
    1934
    -        setBackend interpreterBackend
    
    1934
    +        setBackend bytecodeBackend
    
    1935 1935
             pure $ flip gopt_unset Opt_ByteCodeAndObjectCode (gopt_set dflags Opt_ByteCode))
    
    1936 1936
       , make_ord_flag defFlag "fobject-code"     $ noArgM $ \dflags -> do
    
    1937 1937
           setBackend $ platformDefaultBackend (targetPlatform dflags)
    

  • compiler/GHC/Types/Unique/FM.hs
    ... ... @@ -51,7 +51,9 @@ module GHC.Types.Unique.FM (
    51 51
             delListFromUFM,
    
    52 52
             delListFromUFM_Directly,
    
    53 53
             plusUFM,
    
    54
    +        strictPlusUFM,
    
    54 55
             plusUFM_C,
    
    56
    +        strictPlusUFM_C,
    
    55 57
             plusUFM_CD,
    
    56 58
             plusUFM_CD2,
    
    57 59
             mergeUFM,
    
    ... ... @@ -251,16 +253,24 @@ delListFromUFM_Directly = foldl' delFromUFM_Directly
    251 253
     delFromUFM_Directly :: UniqFM key elt -> Unique -> UniqFM key elt
    
    252 254
     delFromUFM_Directly (UFM m) u = UFM (M.delete (getKey u) m)
    
    253 255
     
    
    254
    --- Bindings in right argument shadow those in the left
    
    256
    +-- | Bindings in right argument shadow those in the left.
    
    257
    +--
    
    258
    +-- Unlike containers this union is right-biased for historic reasons.
    
    255 259
     plusUFM :: UniqFM key elt -> UniqFM key elt -> UniqFM key elt
    
    256
    --- M.union is left-biased, plusUFM should be right-biased.
    
    257 260
     plusUFM (UFM x) (UFM y) = UFM (M.union y x)
    
    258 261
          -- Note (M.union y x), with arguments flipped
    
    259 262
          -- M.union is left-biased, plusUFM should be right-biased.
    
    260 263
     
    
    264
    +-- | Right biased
    
    265
    +strictPlusUFM :: UniqFM key elt -> UniqFM key elt -> UniqFM key elt
    
    266
    +strictPlusUFM (UFM x) (UFM y) = UFM (MS.union y x)
    
    267
    +
    
    261 268
     plusUFM_C :: (elt -> elt -> elt) -> UniqFM key elt -> UniqFM key elt -> UniqFM key elt
    
    262 269
     plusUFM_C f (UFM x) (UFM y) = UFM (M.unionWith f x y)
    
    263 270
     
    
    271
    +strictPlusUFM_C :: (elt -> elt -> elt) -> UniqFM key elt -> UniqFM key elt -> UniqFM key elt
    
    272
    +strictPlusUFM_C f (UFM x) (UFM y) = UFM (MS.unionWith f x y)
    
    273
    +
    
    264 274
     -- | `plusUFM_CD f m1 d1 m2 d2` merges the maps using `f` as the
    
    265 275
     -- combinding function and `d1` resp. `d2` as the default value if
    
    266 276
     -- there is no entry in `m1` reps. `m2`. The domain is the union of
    

  • compiler/GHC/Types/Var/Env.hs
    ... ... @@ -12,7 +12,8 @@ module GHC.Types.Var.Env (
    12 12
             elemVarEnv, disjointVarEnv, anyVarEnv,
    
    13 13
             extendVarEnv, extendVarEnv_C, extendVarEnv_Acc,
    
    14 14
             extendVarEnvList,
    
    15
    -        plusVarEnv, plusVarEnv_C, plusVarEnv_CD, plusMaybeVarEnv_C,
    
    15
    +        strictPlusVarEnv, plusVarEnv, plusVarEnv_C, strictPlusVarEnv_C,
    
    16
    +        plusVarEnv_CD, plusMaybeVarEnv_C,
    
    16 17
             plusVarEnvList, alterVarEnv,
    
    17 18
             delVarEnvList, delVarEnv,
    
    18 19
             minusVarEnv,
    
    ... ... @@ -511,6 +512,7 @@ extendVarEnv :: VarEnv a -> Var -> a -> VarEnv a
    511 512
     extendVarEnv_C    :: (a->a->a) -> VarEnv a -> Var -> a -> VarEnv a
    
    512 513
     extendVarEnv_Acc  :: (a->b->b) -> (a->b) -> VarEnv b -> Var -> a -> VarEnv b
    
    513 514
     plusVarEnv        :: VarEnv a -> VarEnv a -> VarEnv a
    
    515
    +strictPlusVarEnv  :: VarEnv a -> VarEnv a -> VarEnv a
    
    514 516
     plusVarEnvList    :: [VarEnv a] -> VarEnv a
    
    515 517
     extendVarEnvList  :: VarEnv a -> [(Var, a)] -> VarEnv a
    
    516 518
     varEnvDomain      :: VarEnv elt -> UnVarSet
    
    ... ... @@ -522,6 +524,7 @@ delVarEnvList :: Foldable f => VarEnv a -> f Var -> VarEnv a
    522 524
     delVarEnv         :: VarEnv a -> Var -> VarEnv a
    
    523 525
     minusVarEnv       :: VarEnv a -> VarEnv b -> VarEnv a
    
    524 526
     plusVarEnv_C      :: (a -> a -> a) -> VarEnv a -> VarEnv a -> VarEnv a
    
    527
    +strictPlusVarEnv_C :: (a -> a -> a) -> VarEnv a -> VarEnv a -> VarEnv a
    
    525 528
     plusVarEnv_CD     :: (a -> a -> a) -> VarEnv a -> a -> VarEnv a -> a -> VarEnv a
    
    526 529
     plusMaybeVarEnv_C :: (a -> a -> Maybe a) -> VarEnv a -> VarEnv a -> VarEnv a
    
    527 530
     mapVarEnv         :: (a -> b) -> VarEnv a -> VarEnv b
    
    ... ... @@ -548,6 +551,7 @@ extendVarEnv_C = addToUFM_C
    548 551
     extendVarEnv_Acc = addToUFM_Acc
    
    549 552
     extendVarEnvList = addListToUFM
    
    550 553
     plusVarEnv_C     = plusUFM_C
    
    554
    +strictPlusVarEnv_C = strictPlusUFM_C
    
    551 555
     plusVarEnv_CD    = plusUFM_CD
    
    552 556
     plusMaybeVarEnv_C = plusMaybeUFM_C
    
    553 557
     delVarEnvList    = delListFromUFM
    
    ... ... @@ -556,6 +560,7 @@ delVarEnvList = delListFromUFM
    556 560
     delVarEnv        = delFromUFM
    
    557 561
     minusVarEnv      = minusUFM
    
    558 562
     plusVarEnv       = plusUFM
    
    563
    +strictPlusVarEnv = strictPlusUFM
    
    559 564
     plusVarEnvList   = plusUFMList
    
    560 565
     -- lookupVarEnv is very hot (in part due to being called by substTyVar),
    
    561 566
     -- if it's not inlined than the mere allocation of the Just constructor causes
    

  • docs/users_guide/extending_ghc.rst
    ... ... @@ -1719,7 +1719,7 @@ constructor from version 9.4 with the corresponding value from 9.6:
    1719 1719
     +-----------------+------------------------+
    
    1720 1720
     | ``ViaC``        | ``viaCBackend``        |
    
    1721 1721
     +-----------------+------------------------+
    
    1722
    -| ``Interpreter`` | ``interpreterBackend`` |
    
    1722
    +| ``Interpreter`` | ``bytecodeBackend``    |
    
    1723 1723
     +-----------------+------------------------+
    
    1724 1724
     | ``NoBackend``   | ``noBackend``          |
    
    1725 1725
     +-----------------+------------------------+
    

  • ghc/Main.hs
    ... ... @@ -169,9 +169,9 @@ main' postLoadMode units dflags0 args flagWarnings = do
    169 169
       let dflt_backend = backend dflags0
    
    170 170
           (mode, bcknd, link)
    
    171 171
              = case postLoadMode of
    
    172
    -               DoInteractive   -> (CompManager, interpreterBackend,  LinkInMemory)
    
    173
    -               DoEval _        -> (CompManager, interpreterBackend,  LinkInMemory)
    
    174
    -               DoRun           -> (CompManager, interpreterBackend,  LinkInMemory)
    
    172
    +               DoInteractive   -> (CompManager, bytecodeBackend,  LinkInMemory)
    
    173
    +               DoEval _        -> (CompManager, bytecodeBackend,  LinkInMemory)
    
    174
    +               DoRun           -> (CompManager, bytecodeBackend,  LinkInMemory)
    
    175 175
                    DoMake          -> (CompManager, dflt_backend, LinkBinary)
    
    176 176
                    DoBackpack      -> (CompManager, dflt_backend, LinkBinary)
    
    177 177
                    DoMkDependHS    -> (MkDepend,    dflt_backend, LinkBinary)
    

  • testsuite/driver/testglobals.py
    ... ... @@ -136,9 +136,12 @@ class TestConfig:
    136 136
             # Do we have interpreter support?
    
    137 137
             self.have_interp = False
    
    138 138
     
    
    139
    +        # Do we have external interpreter support?
    
    140
    +        self.have_ext_interp = False
    
    141
    +
    
    139 142
             # Are we cross-compiling?
    
    140 143
             self.cross = False
    
    141
    -        
    
    144
    +
    
    142 145
             # Does the RTS linker only support loading shared libraries?
    
    143 146
             self.interp_force_dyn = False
    
    144 147
     
    

  • testsuite/driver/testlib.py
    ... ... @@ -549,10 +549,12 @@ only_ghci = only_ways([WayName('ghci'), WayName('ghci-opt')])
    549 549
     # -----
    
    550 550
     
    
    551 551
     def valid_way( way: WayName ) -> bool:
    
    552
    -    if way in {'ghci', 'ghci-opt', 'ghci-ext'}:
    
    552
    +    if way in {'ghci', 'ghci-opt'}:
    
    553 553
             return config.have_RTS_linker
    
    554
    -    if way == 'ghci-ext-prof':
    
    555
    -        return config.have_RTS_linker and config.have_profiling
    
    554
    +    if way in {'ghci-ext'}:
    
    555
    +        return config.have_ext_interp
    
    556
    +    if way in {'ghci-ext-prof'}:
    
    557
    +        return config.have_ext_interp and config.have_profiling
    
    556 558
         return True
    
    557 559
     
    
    558 560
     def extra_ways( ways: List[WayName] ):
    

  • testsuite/tests/concurrent/prog001/all.T
    ... ... @@ -16,4 +16,4 @@ test('concprog001', [extra_files(['Arithmetic.hs', 'Converter.hs', 'Mult.hs', 'S
    16 16
                          when(fast(), skip), only_ways(['threaded2']),
    
    17 17
                          fragile(16604),
    
    18 18
                          run_timeout_multiplier(2)],
    
    19
    -     multimod_compile_and_run, ['Mult', ''])
    19
    +     multimod_compile_and_run, ['Mult', '-Wno-x-partial'])

  • testsuite/tests/driver/T5313.hs
    ... ... @@ -7,7 +7,7 @@ main = do
    7 7
           -- begin initialize
    
    8 8
           df0 <- GHC.getSessionDynFlags
    
    9 9
           let df1 = df0{GHC.ghcMode    = GHC.CompManager,
    
    10
    -                    GHC.backend    = GHC.interpreterBackend,
    
    10
    +                    GHC.backend    = GHC.bytecodeBackend,
    
    11 11
                         GHC.ghcLink    = GHC.LinkInMemory,
    
    12 12
                         GHC.verbosity  = 0}
    
    13 13
           _ <- GHC.setSessionDynFlags df1
    

  • testsuite/tests/ghc-api/T10052/T10052.hs
    ... ... @@ -24,7 +24,7 @@ runGhc' args act = do
    24 24
           logger <- getLogger
    
    25 25
           (dflags1, _leftover, _warns) <- parseDynamicFlags logger dflags0 flags
    
    26 26
           let dflags2 = dflags1 {
    
    27
    -              backend   = interpreterBackend
    
    27
    +              backend   = bytecodeBackend
    
    28 28
                 , ghcLink   = LinkInMemory
    
    29 29
                 , verbosity = 1
    
    30 30
                 }
    

  • testsuite/tests/ghc-api/T8639_api.hs
    ... ... @@ -11,7 +11,7 @@ main
    11 11
      = do { [libdir] <- getArgs
    
    12 12
           ; runGhc (Just libdir) $ do
    
    13 13
                flags <- getSessionDynFlags
    
    14
    -           setSessionDynFlags (flags{ backend = interpreterBackend, ghcLink = LinkInMemory})
    
    14
    +           setSessionDynFlags (flags{ backend = bytecodeBackend, ghcLink = LinkInMemory})
    
    15 15
                target <- guessTarget "T8639_api_a.hs" Nothing Nothing
    
    16 16
                setTargets [target]
    
    17 17
                load LoadAllTargets
    

  • testsuite/tests/ghc-api/apirecomp001/myghc.hs
    ... ... @@ -37,7 +37,7 @@ main = do
    37 37
         prn "target nothing: ok"
    
    38 38
     
    
    39 39
         dflags <- getSessionDynFlags
    
    40
    -    setSessionDynFlags $ dflags { backend = interpreterBackend }
    
    40
    +    setSessionDynFlags $ dflags { backend = bytecodeBackend }
    
    41 41
         ok <- load LoadAllTargets
    
    42 42
         when (failed ok) $ error "Couldn't load A.hs in interpreted mode"
    
    43 43
         prn "target interpreted: ok"
    

  • testsuite/tests/ghci-wasm/T26431.hs
    ... ... @@ -16,7 +16,7 @@ main = do
    16 16
             let dflags1 =
    
    17 17
                   dflags0
    
    18 18
                     { ghcMode = CompManager,
    
    19
    -                  backend = interpreterBackend,
    
    19
    +                  backend = bytecodeBackend,
    
    20 20
                       ghcLink = LinkInMemory
    
    21 21
                     }
    
    22 22
             logger <- getLogger
    

  • testsuite/tests/ghci/linking/dyn/T3372.hs
    ... ... @@ -44,7 +44,7 @@ newGhcServer = do (libdir:_) <- getArgs
    44 44
       where ghc action libdir = GHC.runGhc (Just libdir) (init >> action)
    
    45 45
             init = do df <- GHC.getSessionDynFlags
    
    46 46
                       GHC.setSessionDynFlags df{GHC.ghcMode    = GHC.CompManager,
    
    47
    -                                            GHC.backend    = GHC.interpreterBackend,
    
    47
    +                                            GHC.backend    = GHC.bytecodeBackend,
    
    48 48
                                                 GHC.ghcLink    = GHC.LinkInMemory,
    
    49 49
                                                 GHC.verbosity  = 0}
    
    50 50
     
    

  • testsuite/tests/ghci/should_run/PackedDataCon/packeddatacon.T
    ... ... @@ -2,9 +2,8 @@ test('PackedDataCon',
    2 2
          [ extra_files(['Obj.hs', 'ByteCode.hs', 'Types.hs', 'Common.hs-incl']),
    
    3 3
            req_interp,
    
    4 4
            req_bco,
    
    5
    -       extra_ways(['ghci']),
    
    6
    -       when(config.have_ext_interp, extra_ways(['ghci', 'ghci-ext'])),
    
    7
    -       when(config.have_ext_interp and config.have_profiling, extra_ways(['ghci', 'ghci-ext', 'ghci-ext-prof']))
    
    5
    +       extra_ways(ghci_ways),
    
    6
    +       only_ways(ghci_ways),
    
    8 7
          ],
    
    9 8
          compile_and_run,
    
    10 9
          ['']
    

  • testsuite/tests/ghci/should_run/UnboxedTuples/unboxedtuples.T
    ... ... @@ -2,9 +2,8 @@ test('UnboxedTuples',
    2 2
          [ extra_files(['Obj.hs', 'ByteCode.hs', 'Common.hs-incl']),
    
    3 3
            req_interp,
    
    4 4
            req_bco,
    
    5
    -       extra_ways(['ghci']),
    
    6
    -       when(config.have_ext_interp, extra_ways(['ghci', 'ghci-ext'])),
    
    7
    -       when(config.have_ext_interp and config.have_profiling, extra_ways(['ghci', 'ghci-ext', 'ghci-ext-prof']))
    
    5
    +       only_ways(ghci_ways),
    
    6
    +       extra_ways(ghci_ways),
    
    8 7
          ],
    
    9 8
          compile_and_run,
    
    10 9
          ['']
    

  • testsuite/tests/ghci/should_run/UnliftedDataTypeInterp/unlifteddatatypeinterp.T
    ... ... @@ -2,9 +2,8 @@ test('UnliftedDataTypeInterp',
    2 2
          [ extra_files(['Obj.hs', 'ByteCode.hs', 'Types.hs', 'Common.hs-incl']),
    
    3 3
            req_interp,
    
    4 4
            req_bco,
    
    5
    -       extra_ways(['ghci']),
    
    6
    -       when(config.have_ext_interp, extra_ways(['ghci', 'ghci-ext'])),
    
    7
    -       when(config.have_ext_interp and config.have_profiling, extra_ways(['ghci', 'ghci-ext', 'ghci-ext-prof']))
    
    5
    +       only_ways(ghci_ways),
    
    6
    +       extra_ways(ghci_ways),
    
    8 7
          ],
    
    9 8
          compile_and_run,
    
    10 9
          ['']
    

  • testsuite/tests/perf/compiler/T26425.hs
    1
    +{-# LANGUAGE OverloadedStrings #-}
    
    2
    +
    
    3
    +module Reproducer (strToInt) where
    
    4
    +
    
    5
    +import qualified Data.Text as T
    
    6
    +
    
    7
    +{- This program results in a nested chain of join points and cases which tests
    
    8
    +   primarily OccAnal and Unfolding performance.
    
    9
    +-}
    
    10
    +
    
    11
    +strToInt :: T.Text -> Maybe Int
    
    12
    +strToInt txt = case txt of
    
    13
    +    "0" -> Just 0
    
    14
    +    "1" -> Just 1
    
    15
    +    "2" -> Just 2
    
    16
    +    "3" -> Just 3
    
    17
    +    "4" -> Just 4
    
    18
    +    "5" -> Just 5
    
    19
    +    "6" -> Just 6
    
    20
    +    "7" -> Just 7
    
    21
    +    "8" -> Just 8
    
    22
    +    "9" -> Just 9
    
    23
    +    "10" -> Just 10
    
    24
    +    "11" -> Just 11
    
    25
    +    "12" -> Just 12
    
    26
    +    "13" -> Just 13
    
    27
    +    "14" -> Just 14
    
    28
    +    "15" -> Just 15
    
    29
    +    "16" -> Just 16
    
    30
    +    "17" -> Just 17
    
    31
    +    "18" -> Just 18
    
    32
    +    "19" -> Just 19
    
    33
    +    "20" -> Just 20
    
    34
    +    "21" -> Just 21
    
    35
    +    "22" -> Just 22
    
    36
    +    "23" -> Just 23
    
    37
    +    "24" -> Just 24
    
    38
    +    "25" -> Just 25
    
    39
    +    "26" -> Just 26
    
    40
    +    "27" -> Just 27
    
    41
    +    "28" -> Just 28
    
    42
    +    "29" -> Just 29
    
    43
    +    "30" -> Just 30
    
    44
    +    "31" -> Just 31
    
    45
    +    "32" -> Just 32
    
    46
    +    "33" -> Just 33
    
    47
    +    "34" -> Just 34
    
    48
    +    "35" -> Just 35
    
    49
    +    "36" -> Just 36
    
    50
    +    "37" -> Just 37
    
    51
    +    "38" -> Just 38
    
    52
    +    "39" -> Just 39
    
    53
    +    "40" -> Just 40
    
    54
    +    "41" -> Just 41
    
    55
    +    "42" -> Just 42
    
    56
    +    "43" -> Just 43
    
    57
    +    "44" -> Just 44
    
    58
    +    "45" -> Just 45
    
    59
    +    "46" -> Just 46
    
    60
    +    "47" -> Just 47
    
    61
    +    "48" -> Just 48
    
    62
    +    "49" -> Just 49
    
    63
    +    "50" -> Just 50
    
    64
    +    "51" -> Just 51
    
    65
    +    "52" -> Just 52
    
    66
    +    "53" -> Just 53
    
    67
    +    "54" -> Just 54
    
    68
    +    "55" -> Just 55
    
    69
    +    "56" -> Just 56
    
    70
    +    "57" -> Just 57
    
    71
    +    "58" -> Just 58
    
    72
    +    "59" -> Just 59
    
    73
    +    "60" -> Just 60
    
    74
    +    "61" -> Just 61
    
    75
    +    "62" -> Just 62
    
    76
    +    "63" -> Just 63
    
    77
    +    "64" -> Just 64
    
    78
    +    "65" -> Just 65
    
    79
    +    "66" -> Just 66
    
    80
    +    "67" -> Just 67
    
    81
    +    "68" -> Just 68
    
    82
    +    "69" -> Just 69
    
    83
    +    "70" -> Just 70
    
    84
    +    "71" -> Just 71
    
    85
    +    "72" -> Just 72
    
    86
    +    "73" -> Just 73
    
    87
    +    "74" -> Just 74
    
    88
    +    "75" -> Just 75
    
    89
    +    "76" -> Just 76
    
    90
    +    "77" -> Just 77
    
    91
    +    "78" -> Just 78
    
    92
    +    "79" -> Just 79
    
    93
    +    "80" -> Just 80
    
    94
    +    "81" -> Just 81
    
    95
    +    "82" -> Just 82
    
    96
    +    "83" -> Just 83
    
    97
    +    "84" -> Just 84
    
    98
    +    "85" -> Just 85
    
    99
    +    "86" -> Just 86
    
    100
    +    "87" -> Just 87
    
    101
    +    "88" -> Just 88
    
    102
    +    "89" -> Just 89
    
    103
    +    "90" -> Just 90
    
    104
    +    "91" -> Just 91
    
    105
    +    "92" -> Just 92
    
    106
    +    "93" -> Just 93
    
    107
    +    "94" -> Just 94
    
    108
    +    "95" -> Just 95
    
    109
    +    "96" -> Just 96
    
    110
    +    "97" -> Just 97
    
    111
    +    "98" -> Just 98
    
    112
    +    "99" -> Just 99
    
    113
    +    "100" -> Just 100
    
    114
    +    "101" -> Just 101
    
    115
    +    "102" -> Just 102
    
    116
    +    "103" -> Just 103
    
    117
    +    "104" -> Just 104
    
    118
    +    "105" -> Just 105
    
    119
    +    "106" -> Just 106
    
    120
    +    "107" -> Just 107
    
    121
    +    "108" -> Just 108
    
    122
    +    "109" -> Just 109
    
    123
    +    "110" -> Just 110
    
    124
    +    "111" -> Just 111
    
    125
    +    "112" -> Just 112
    
    126
    +    "113" -> Just 113
    
    127
    +    "114" -> Just 114
    
    128
    +    "115" -> Just 115
    
    129
    +    "116" -> Just 116
    
    130
    +    "117" -> Just 117
    
    131
    +    "118" -> Just 118
    
    132
    +    "119" -> Just 119
    
    133
    +    "120" -> Just 120
    
    134
    +    "121" -> Just 121
    
    135
    +    "122" -> Just 122
    
    136
    +    "123" -> Just 123
    
    137
    +    "124" -> Just 124
    
    138
    +    "125" -> Just 125
    
    139
    +    "126" -> Just 126
    
    140
    +    "127" -> Just 127
    
    141
    +    "128" -> Just 128
    
    142
    +    "129" -> Just 129
    
    143
    +    "130" -> Just 130
    
    144
    +    "131" -> Just 131
    
    145
    +    "132" -> Just 132
    
    146
    +    "133" -> Just 133
    
    147
    +    "134" -> Just 134
    
    148
    +    "135" -> Just 135
    
    149
    +    "136" -> Just 136
    
    150
    +    "137" -> Just 137
    
    151
    +    "138" -> Just 138
    
    152
    +    "139" -> Just 139
    
    153
    +    "140" -> Just 140
    
    154
    +    "141" -> Just 141
    
    155
    +    "142" -> Just 142
    
    156
    +    "143" -> Just 143
    
    157
    +    "144" -> Just 144
    
    158
    +    "145" -> Just 145
    
    159
    +    "146" -> Just 146
    
    160
    +    "147" -> Just 147
    
    161
    +    "148" -> Just 148
    
    162
    +    "149" -> Just 149
    
    163
    +    "150" -> Just 150
    
    164
    +    "151" -> Just 151
    
    165
    +    "152" -> Just 152
    
    166
    +    "153" -> Just 153
    
    167
    +    "154" -> Just 154
    
    168
    +    "155" -> Just 155
    
    169
    +    "156" -> Just 156
    
    170
    +    "157" -> Just 157
    
    171
    +    "158" -> Just 158
    
    172
    +    "159" -> Just 159
    
    173
    +    "160" -> Just 160
    
    174
    +    "161" -> Just 161
    
    175
    +    "162" -> Just 162
    
    176
    +    "163" -> Just 163
    
    177
    +    "164" -> Just 164
    
    178
    +    "165" -> Just 165
    
    179
    +    "166" -> Just 166
    
    180
    +    "167" -> Just 167
    
    181
    +    "168" -> Just 168
    
    182
    +    "169" -> Just 169
    
    183
    +    "170" -> Just 170
    
    184
    +    "171" -> Just 171
    
    185
    +    "172" -> Just 172
    
    186
    +    "173" -> Just 173
    
    187
    +    "174" -> Just 174
    
    188
    +    "175" -> Just 175
    
    189
    +    "176" -> Just 176
    
    190
    +    "177" -> Just 177
    
    191
    +    "178" -> Just 178
    
    192
    +    "179" -> Just 179
    
    193
    +    "180" -> Just 180
    
    194
    +    "181" -> Just 181
    
    195
    +    "182" -> Just 182
    
    196
    +    "183" -> Just 183
    
    197
    +    "184" -> Just 184
    
    198
    +    "185" -> Just 185
    
    199
    +    "186" -> Just 186
    
    200
    +    "187" -> Just 187
    
    201
    +    "188" -> Just 188
    
    202
    +    "189" -> Just 189
    
    203
    +    "190" -> Just 190
    
    204
    +    "191" -> Just 191
    
    205
    +    "192" -> Just 192
    
    206
    +    "193" -> Just 193
    
    207
    +    "194" -> Just 194
    
    208
    +    "195" -> Just 195
    
    209
    +    "196" -> Just 196
    
    210
    +    "197" -> Just 197
    
    211
    +    "198" -> Just 198
    
    212
    +    "199" -> Just 199
    
    213
    +    "200" -> Just 200
    
    214
    +    "201" -> Just 201
    
    215
    +    "202" -> Just 202
    
    216
    +    "203" -> Just 203
    
    217
    +    "204" -> Just 204
    
    218
    +    "205" -> Just 205
    
    219
    +    "206" -> Just 206
    
    220
    +    "207" -> Just 207
    
    221
    +    "208" -> Just 208
    
    222
    +    "209" -> Just 209
    
    223
    +    "210" -> Just 210
    
    224
    +    "211" -> Just 211
    
    225
    +    "212" -> Just 212
    
    226
    +    "213" -> Just 213
    
    227
    +    "214" -> Just 214
    
    228
    +    "215" -> Just 215
    
    229
    +    "216" -> Just 216
    
    230
    +    "217" -> Just 217
    
    231
    +    "218" -> Just 218
    
    232
    +    "219" -> Just 219
    
    233
    +    "220" -> Just 220
    
    234
    +    "221" -> Just 221
    
    235
    +    "222" -> Just 222
    
    236
    +    "223" -> Just 223
    
    237
    +    "224" -> Just 224
    
    238
    +    "225" -> Just 225
    
    239
    +    "226" -> Just 226
    
    240
    +    "227" -> Just 227
    
    241
    +    "228" -> Just 228
    
    242
    +    "229" -> Just 229
    
    243
    +    "230" -> Just 230
    
    244
    +    "231" -> Just 231
    
    245
    +    "232" -> Just 232
    
    246
    +    "233" -> Just 233
    
    247
    +    "234" -> Just 234
    
    248
    +    "235" -> Just 235
    
    249
    +    "236" -> Just 236
    
    250
    +    "237" -> Just 237
    
    251
    +    "238" -> Just 238
    
    252
    +    "239" -> Just 239
    
    253
    +    "240" -> Just 240
    
    254
    +    "241" -> Just 241
    
    255
    +    "242" -> Just 242
    
    256
    +    "243" -> Just 243
    
    257
    +    "244" -> Just 244
    
    258
    +    "245" -> Just 245
    
    259
    +    "246" -> Just 246
    
    260
    +    "247" -> Just 247
    
    261
    +    "248" -> Just 248
    
    262
    +    "249" -> Just 249
    
    263
    +    "250" -> Just 250
    
    264
    +    "251" -> Just 251
    
    265
    +    "252" -> Just 252
    
    266
    +    "253" -> Just 253
    
    267
    +    "254" -> Just 254
    
    268
    +    "255" -> Just 255
    
    269
    +    "256" -> Just 256
    
    270
    +    "257" -> Just 257
    
    271
    +    "258" -> Just 258
    
    272
    +    "259" -> Just 259
    
    273
    +    "260" -> Just 260
    
    274
    +    "261" -> Just 261
    
    275
    +    "262" -> Just 262
    
    276
    +    "263" -> Just 263
    
    277
    +    "264" -> Just 264
    
    278
    +    "265" -> Just 265
    
    279
    +    "266" -> Just 266
    
    280
    +    "267" -> Just 267
    
    281
    +    "268" -> Just 268
    
    282
    +    "269" -> Just 269
    
    283
    +    "270" -> Just 270
    
    284
    +    "271" -> Just 271
    
    285
    +    "272" -> Just 272
    
    286
    +    "273" -> Just 273
    
    287
    +    "274" -> Just 274
    
    288
    +    "275" -> Just 275
    
    289
    +    "276" -> Just 276
    
    290
    +    "277" -> Just 277
    
    291
    +    "278" -> Just 278
    
    292
    +    "279" -> Just 279
    
    293
    +    "280" -> Just 280
    
    294
    +    "281" -> Just 281
    
    295
    +    "282" -> Just 282
    
    296
    +    "283" -> Just 283
    
    297
    +    "284" -> Just 284
    
    298
    +    "285" -> Just 285
    
    299
    +    "286" -> Just 286
    
    300
    +    "287" -> Just 287
    
    301
    +    "288" -> Just 288
    
    302
    +    "289" -> Just 289
    
    303
    +    "290" -> Just 290
    
    304
    +    "291" -> Just 291
    
    305
    +    "292" -> Just 292
    
    306
    +    "293" -> Just 293
    
    307
    +    "294" -> Just 294
    
    308
    +    "295" -> Just 295
    
    309
    +    "296" -> Just 296
    
    310
    +    "297" -> Just 297
    
    311
    +    "298" -> Just 298
    
    312
    +    "299" -> Just 299
    
    313
    +    "300" -> Just 300
    
    314
    +    "301" -> Just 301
    
    315
    +    "302" -> Just 302
    
    316
    +    "303" -> Just 303
    
    317
    +    "304" -> Just 304
    
    318
    +    "305" -> Just 305
    
    319
    +    "306" -> Just 306
    
    320
    +    "307" -> Just 307
    
    321
    +    "308" -> Just 308
    
    322
    +    "309" -> Just 309
    
    323
    +    "310" -> Just 310
    
    324
    +    "311" -> Just 311
    
    325
    +    "312" -> Just 312
    
    326
    +    "313" -> Just 313
    
    327
    +    "314" -> Just 314
    
    328
    +    "315" -> Just 315
    
    329
    +    "316" -> Just 316
    
    330
    +    "317" -> Just 317
    
    331
    +    "318" -> Just 318
    
    332
    +    "319" -> Just 319
    
    333
    +    "320" -> Just 320
    
    334
    +    "321" -> Just 321
    
    335
    +    "322" -> Just 322
    
    336
    +    "323" -> Just 323
    
    337
    +    "324" -> Just 324
    
    338
    +    "325" -> Just 325
    
    339
    +    "326" -> Just 326
    
    340
    +    "327" -> Just 327
    
    341
    +    "328" -> Just 328
    
    342
    +    "329" -> Just 329
    
    343
    +    "330" -> Just 330
    
    344
    +    "331" -> Just 331
    
    345
    +    "332" -> Just 332
    
    346
    +    "333" -> Just 333
    
    347
    +    "334" -> Just 334
    
    348
    +    "335" -> Just 335
    
    349
    +    "336" -> Just 336
    
    350
    +    "337" -> Just 337
    
    351
    +    "338" -> Just 338
    
    352
    +    "339" -> Just 339
    
    353
    +    "340" -> Just 340
    
    354
    +    "341" -> Just 341
    
    355
    +    "342" -> Just 342
    
    356
    +    "343" -> Just 343
    
    357
    +    "344" -> Just 344
    
    358
    +    "345" -> Just 345
    
    359
    +    "346" -> Just 346
    
    360
    +    "347" -> Just 347
    
    361
    +    "348" -> Just 348
    
    362
    +    "349" -> Just 349
    
    363
    +    "350" -> Just 350
    
    364
    +    "351" -> Just 351
    
    365
    +    "352" -> Just 352
    
    366
    +    "353" -> Just 353
    
    367
    +    "354" -> Just 354
    
    368
    +    "355" -> Just 355
    
    369
    +    "356" -> Just 356
    
    370
    +    "357" -> Just 357
    
    371
    +    "358" -> Just 358
    
    372
    +    "359" -> Just 359
    
    373
    +    "360" -> Just 360
    
    374
    +    "361" -> Just 361
    
    375
    +    "362" -> Just 362
    
    376
    +    "363" -> Just 363
    
    377
    +    "364" -> Just 364
    
    378
    +    "365" -> Just 365
    
    379
    +    "366" -> Just 366
    
    380
    +    "367" -> Just 367
    
    381
    +    "368" -> Just 368
    
    382
    +    "369" -> Just 369
    
    383
    +    "370" -> Just 370
    
    384
    +    "371" -> Just 371
    
    385
    +    "372" -> Just 372
    
    386
    +    "373" -> Just 373
    
    387
    +    "374" -> Just 374
    
    388
    +    "375" -> Just 375
    
    389
    +    "376" -> Just 376
    
    390
    +    "377" -> Just 377
    
    391
    +    "378" -> Just 378
    
    392
    +    "379" -> Just 379
    
    393
    +    "380" -> Just 380
    
    394
    +    "381" -> Just 381
    
    395
    +    "382" -> Just 382
    
    396
    +    "383" -> Just 383
    
    397
    +    "384" -> Just 384
    
    398
    +    "385" -> Just 385
    
    399
    +    "386" -> Just 386
    
    400
    +    "387" -> Just 387
    
    401
    +    "388" -> Just 388
    
    402
    +    "389" -> Just 389
    
    403
    +    "390" -> Just 390
    
    404
    +    "391" -> Just 391
    
    405
    +    "392" -> Just 392
    
    406
    +    "393" -> Just 393
    
    407
    +    "394" -> Just 394
    
    408
    +    "395" -> Just 395
    
    409
    +    "396" -> Just 396
    
    410
    +    "397" -> Just 397
    
    411
    +    "398" -> Just 398
    
    412
    +    "399" -> Just 399
    
    413
    +    "400" -> Just 400
    
    414
    +    "401" -> Just 401
    
    415
    +    "402" -> Just 402
    
    416
    +    "403" -> Just 403
    
    417
    +    "404" -> Just 404
    
    418
    +    "405" -> Just 405
    
    419
    +    "406" -> Just 406
    
    420
    +    "407" -> Just 407
    
    421
    +    "408" -> Just 408
    
    422
    +    "409" -> Just 409
    
    423
    +    "410" -> Just 410
    
    424
    +    "411" -> Just 411
    
    425
    +    "412" -> Just 412
    
    426
    +    "413" -> Just 413
    
    427
    +    "414" -> Just 414
    
    428
    +    "415" -> Just 415
    
    429
    +    "416" -> Just 416
    
    430
    +    "417" -> Just 417
    
    431
    +    "418" -> Just 418
    
    432
    +    "419" -> Just 419
    
    433
    +    "420" -> Just 420
    
    434
    +    "421" -> Just 421
    
    435
    +    "422" -> Just 422
    
    436
    +    "423" -> Just 423
    
    437
    +    "424" -> Just 424
    
    438
    +    "425" -> Just 425
    
    439
    +    "426" -> Just 426
    
    440
    +    "427" -> Just 427
    
    441
    +    "428" -> Just 428
    
    442
    +    "429" -> Just 429
    
    443
    +    "430" -> Just 430
    
    444
    +    "431" -> Just 431
    
    445
    +    "432" -> Just 432
    
    446
    +    "433" -> Just 433
    
    447
    +    "434" -> Just 434
    
    448
    +    "435" -> Just 435
    
    449
    +    "436" -> Just 436
    
    450
    +    "437" -> Just 437
    
    451
    +    "438" -> Just 438
    
    452
    +    "439" -> Just 439
    
    453
    +    "440" -> Just 440
    
    454
    +    "441" -> Just 441
    
    455
    +    "442" -> Just 442
    
    456
    +    "443" -> Just 443
    
    457
    +    "444" -> Just 444
    
    458
    +    "445" -> Just 445
    
    459
    +    "446" -> Just 446
    
    460
    +    "447" -> Just 447
    
    461
    +    "448" -> Just 448
    
    462
    +    "449" -> Just 449
    
    463
    +    "450" -> Just 450
    
    464
    +    "451" -> Just 451
    
    465
    +    "452" -> Just 452
    
    466
    +    "453" -> Just 453
    
    467
    +    "454" -> Just 454
    
    468
    +    "455" -> Just 455
    
    469
    +    "456" -> Just 456
    
    470
    +    "457" -> Just 457
    
    471
    +    "458" -> Just 458
    
    472
    +    "459" -> Just 459
    
    473
    +    "460" -> Just 460
    
    474
    +    "461" -> Just 461
    
    475
    +    "462" -> Just 462
    
    476
    +    "463" -> Just 463
    
    477
    +    "464" -> Just 464
    
    478
    +    "465" -> Just 465
    
    479
    +    "466" -> Just 466
    
    480
    +    "467" -> Just 467
    
    481
    +    "468" -> Just 468
    
    482
    +    "469" -> Just 469
    
    483
    +    "470" -> Just 470
    
    484
    +    "471" -> Just 471
    
    485
    +    "472" -> Just 472
    
    486
    +    "473" -> Just 473
    
    487
    +    "474" -> Just 474
    
    488
    +    "475" -> Just 475
    
    489
    +    "476" -> Just 476
    
    490
    +    "477" -> Just 477
    
    491
    +    "478" -> Just 478
    
    492
    +    "479" -> Just 479
    
    493
    +    "480" -> Just 480
    
    494
    +    "481" -> Just 481
    
    495
    +    "482" -> Just 482
    
    496
    +    "483" -> Just 483
    
    497
    +    "484" -> Just 484
    
    498
    +    "485" -> Just 485
    
    499
    +    "486" -> Just 486
    
    500
    +    "487" -> Just 487
    
    501
    +    "488" -> Just 488
    
    502
    +    "489" -> Just 489
    
    503
    +    "490" -> Just 490
    
    504
    +    "491" -> Just 491
    
    505
    +    "492" -> Just 492
    
    506
    +    "493" -> Just 493
    
    507
    +    "494" -> Just 494
    
    508
    +    "495" -> Just 495
    
    509
    +    "496" -> Just 496
    
    510
    +    "497" -> Just 497
    
    511
    +    "498" -> Just 498
    
    512
    +    "499" -> Just 499
    
    513
    +    "500" -> Just 500
    
    514
    +    "501" -> Just 501
    
    515
    +    "502" -> Just 502
    
    516
    +    "503" -> Just 503
    
    517
    +    "504" -> Just 504
    
    518
    +    "505" -> Just 505
    
    519
    +    "506" -> Just 506
    
    520
    +    "507" -> Just 507
    
    521
    +    "508" -> Just 508
    
    522
    +    "509" -> Just 509
    
    523
    +    "510" -> Just 510
    
    524
    +    "511" -> Just 511
    
    525
    +    "512" -> Just 512
    
    526
    +    "513" -> Just 513
    
    527
    +    "514" -> Just 514
    
    528
    +    "515" -> Just 515
    
    529
    +    "516" -> Just 516
    
    530
    +    "517" -> Just 517
    
    531
    +    "518" -> Just 518
    
    532
    +    "519" -> Just 519
    
    533
    +    "520" -> Just 520
    
    534
    +    "521" -> Just 521
    
    535
    +    "522" -> Just 522
    
    536
    +    "523" -> Just 523
    
    537
    +    "524" -> Just 524
    
    538
    +    "525" -> Just 525
    
    539
    +    "526" -> Just 526
    
    540
    +    "527" -> Just 527
    
    541
    +    "528" -> Just 528
    
    542
    +    "529" -> Just 529
    
    543
    +    "530" -> Just 530
    
    544
    +    "531" -> Just 531
    
    545
    +    "532" -> Just 532
    
    546
    +    "533" -> Just 533
    
    547
    +    "534" -> Just 534
    
    548
    +    "535" -> Just 535
    
    549
    +    "536" -> Just 536
    
    550
    +    "537" -> Just 537
    
    551
    +    "538" -> Just 538
    
    552
    +    "539" -> Just 539
    
    553
    +    "540" -> Just 540
    
    554
    +    "541" -> Just 541
    
    555
    +    "542" -> Just 542
    
    556
    +    "543" -> Just 543
    
    557
    +    "544" -> Just 544
    
    558
    +    "545" -> Just 545
    
    559
    +    "546" -> Just 546
    
    560
    +    "547" -> Just 547
    
    561
    +    "548" -> Just 548
    
    562
    +    "549" -> Just 549
    
    563
    +    "550" -> Just 550
    
    564
    +    "551" -> Just 551
    
    565
    +    "552" -> Just 552
    
    566
    +    "553" -> Just 553
    
    567
    +    "554" -> Just 554
    
    568
    +    "555" -> Just 555
    
    569
    +    "556" -> Just 556
    
    570
    +    "557" -> Just 557
    
    571
    +    "558" -> Just 558
    
    572
    +    "559" -> Just 559
    
    573
    +    "560" -> Just 560
    
    574
    +    "561" -> Just 561
    
    575
    +    "562" -> Just 562
    
    576
    +    "563" -> Just 563
    
    577
    +    "564" -> Just 564
    
    578
    +    "565" -> Just 565
    
    579
    +    "566" -> Just 566
    
    580
    +    "567" -> Just 567
    
    581
    +    "568" -> Just 568
    
    582
    +    "569" -> Just 569
    
    583
    +    "570" -> Just 570
    
    584
    +    "571" -> Just 571
    
    585
    +    "572" -> Just 572
    
    586
    +    "573" -> Just 573
    
    587
    +    "574" -> Just 574
    
    588
    +    "575" -> Just 575
    
    589
    +    "576" -> Just 576
    
    590
    +    "577" -> Just 577
    
    591
    +    "578" -> Just 578
    
    592
    +    "579" -> Just 579
    
    593
    +    "580" -> Just 580
    
    594
    +    "581" -> Just 581
    
    595
    +    "582" -> Just 582
    
    596
    +    "583" -> Just 583
    
    597
    +    "584" -> Just 584
    
    598
    +    "585" -> Just 585
    
    599
    +    "586" -> Just 586
    
    600
    +    "587" -> Just 587
    
    601
    +    "588" -> Just 588
    
    602
    +    "589" -> Just 589
    
    603
    +    "590" -> Just 590
    
    604
    +    "591" -> Just 591
    
    605
    +    "592" -> Just 592
    
    606
    +    "593" -> Just 593
    
    607
    +    "594" -> Just 594
    
    608
    +    "595" -> Just 595
    
    609
    +    "596" -> Just 596
    
    610
    +    "597" -> Just 597
    
    611
    +    "598" -> Just 598
    
    612
    +    "599" -> Just 599
    
    613
    +    "600" -> Just 600
    
    614
    +    "601" -> Just 601
    
    615
    +    "602" -> Just 602
    
    616
    +    "603" -> Just 603
    
    617
    +    "604" -> Just 604
    
    618
    +    "605" -> Just 605
    
    619
    +    "606" -> Just 606
    
    620
    +    "607" -> Just 607
    
    621
    +    "608" -> Just 608
    
    622
    +    "609" -> Just 609
    
    623
    +    "610" -> Just 610
    
    624
    +    "611" -> Just 611
    
    625
    +    "612" -> Just 612
    
    626
    +    "613" -> Just 613
    
    627
    +    "614" -> Just 614
    
    628
    +    "615" -> Just 615
    
    629
    +    "616" -> Just 616
    
    630
    +    "617" -> Just 617
    
    631
    +    "618" -> Just 618
    
    632
    +    "619" -> Just 619
    
    633
    +    "620" -> Just 620
    
    634
    +    "621" -> Just 621
    
    635
    +    "622" -> Just 622
    
    636
    +    "623" -> Just 623
    
    637
    +    "624" -> Just 624
    
    638
    +    "625" -> Just 625
    
    639
    +    "626" -> Just 626
    
    640
    +    "627" -> Just 627
    
    641
    +    "628" -> Just 628
    
    642
    +    "629" -> Just 629
    
    643
    +    "630" -> Just 630
    
    644
    +    "631" -> Just 631
    
    645
    +    "632" -> Just 632
    
    646
    +    "633" -> Just 633
    
    647
    +    "634" -> Just 634
    
    648
    +    "635" -> Just 635
    
    649
    +    "636" -> Just 636
    
    650
    +    "637" -> Just 637
    
    651
    +    "638" -> Just 638
    
    652
    +    "639" -> Just 639
    
    653
    +    "640" -> Just 640
    
    654
    +    "641" -> Just 641
    
    655
    +    "642" -> Just 642
    
    656
    +    "643" -> Just 643
    
    657
    +    "644" -> Just 644
    
    658
    +    "645" -> Just 645
    
    659
    +    "646" -> Just 646
    
    660
    +    "647" -> Just 647
    
    661
    +    "648" -> Just 648
    
    662
    +    "649" -> Just 649
    
    663
    +    "650" -> Just 650
    
    664
    +    _ -> Nothing

  • testsuite/tests/perf/compiler/all.T
    ... ... @@ -792,3 +792,8 @@ test('interpreter_steplocal',
    792 792
          ],
    
    793 793
          ghci_script,
    
    794 794
          ['interpreter_steplocal.script'])
    
    795
    +
    
    796
    +test ('T26425',
    
    797
    +      [ collect_compiler_stats('all',5) ],
    
    798
    +      compile,
    
    799
    +      ['-O'])