Refactor Unique to be represented by Word64
In #22010 we established that Int was not always sufficient to store all the uniques we generate during compilation on 32-bit platforms. This commit addresses that problem by using Word64 instead of Int for uniques. The core of the change is in GHC.Core.Types.Unique and GHC.Core.Types.Unique.Supply. However, the representation of uniques is used in many other places, so those needed changes too. Additionally, the RTS has been extended with an atomic_inc64 operation. One major change from this commit is the introduction of the Word64Set and Word64Map data types. These are adapted versions of IntSet and IntMap from the containers package. These are planned to be upstreamed in the future. As a natural consequence of these changes, the compiler will be a bit slower and take more space on 32-bit platforms. Our CI tests indicate around a 5% residency increase. Metric Increase: CoOpt_Read CoOpt_Singletons LargeRecord ManyAlternatives ManyConstructors MultiComponentModules MultiComponentModulesRecomp MultiLayerModulesTH_OneShot RecordUpdPerf T10421 T10547 T12150 T12227 T12234 T12425 T12707 T13035 T13056 T13253 T13253-spj T13379 T13386 T13719 T14683 T14697 T14766 T15164 T15703 T16577 T16875 T17516 T18140 T18223 T18282 T18304 T18698a T18698b T18923 T1969 T19695 T20049 T21839c T3064 T3294 T4801 T5030 T5321FD T5321Fun T5631 T5642 T5837 T6048 T783 T8095 T9020 T9198 T9233 T9630 T9675 T9872a T9872b T9872b_defer T9872c T9872d T9961 TcPlugin_RewritePerf UniqLoop WWRec hard_hole_fits
Showing
- compiler/GHC/Builtin/Uniques.hs 33 additions, 28 deletionscompiler/GHC/Builtin/Uniques.hs
- compiler/GHC/Cmm/CommonBlockElim.hs 4 additions, 1 deletioncompiler/GHC/Cmm/CommonBlockElim.hs
- compiler/GHC/Cmm/Dataflow/Collections.hs 7 additions, 6 deletionscompiler/GHC/Cmm/Dataflow/Collections.hs
- compiler/GHC/Cmm/Dataflow/Label.hs 5 additions, 4 deletionscompiler/GHC/Cmm/Dataflow/Label.hs
- compiler/GHC/Cmm/Dominators.hs 16 additions, 10 deletionscompiler/GHC/Cmm/Dominators.hs
- compiler/GHC/Cmm/LRegSet.hs 15 additions, 14 deletionscompiler/GHC/Cmm/LRegSet.hs
- compiler/GHC/Cmm/Sink.hs 4 additions, 4 deletionscompiler/GHC/Cmm/Sink.hs
- compiler/GHC/CmmToAsm/CFG.hs 12 additions, 7 deletionscompiler/GHC/CmmToAsm/CFG.hs
- compiler/GHC/CmmToAsm/CFG/Dominators.hs 93 additions, 70 deletionscompiler/GHC/CmmToAsm/CFG/Dominators.hs
- compiler/GHC/CmmToAsm/Wasm/Asm.hs 5 additions, 5 deletionscompiler/GHC/CmmToAsm/Wasm/Asm.hs
- compiler/GHC/CmmToAsm/Wasm/FromCmm.hs 2 additions, 2 deletionscompiler/GHC/CmmToAsm/Wasm/FromCmm.hs
- compiler/GHC/CmmToAsm/Wasm/Types.hs 3 additions, 3 deletionscompiler/GHC/CmmToAsm/Wasm/Types.hs
- compiler/GHC/CmmToLlvm/Base.hs 6 additions, 6 deletionscompiler/GHC/CmmToLlvm/Base.hs
- compiler/GHC/Core/Opt/Monad.hs 10 additions, 10 deletionscompiler/GHC/Core/Opt/Monad.hs
- compiler/GHC/Core/Opt/Pipeline.hs 2 additions, 2 deletionscompiler/GHC/Core/Opt/Pipeline.hs
- compiler/GHC/Core/Opt/Simplify/Monad.hs 5 additions, 5 deletionscompiler/GHC/Core/Opt/Simplify/Monad.hs
- compiler/GHC/Data/Graph/UnVar.hs 5 additions, 4 deletionscompiler/GHC/Data/Graph/UnVar.hs
- compiler/GHC/Data/Word64Map.hs 62 additions, 0 deletionscompiler/GHC/Data/Word64Map.hs
- compiler/GHC/Data/Word64Map/Internal.hs 3607 additions, 0 deletionscompiler/GHC/Data/Word64Map/Internal.hs
- compiler/GHC/Data/Word64Map/Lazy.hs 237 additions, 0 deletionscompiler/GHC/Data/Word64Map/Lazy.hs
Loading
Please register or sign in to comment