Skip to content

Too many specialisations in SpecConstr

Ben reports that SpecConstr can loop:

{-# LANGUAGE PArr #-}
{-# OPTIONS -fvectorise #-}

module Loop where
import Data.Array.Parallel.Prelude
import Data.Array.Parallel.Prelude.Double
import qualified Prelude

loop :: [:Double:] -> [:Double:]
loop xs 
    | 0 == 0    = xs
    | otherwise     = ([::] !: 0) +:+ [::] +:+ ([::] !: 0)

Compile with

~/devel/ghc/ghc-head-incoming/inplace/bin/ghc-stage2 -c -Odph -fdph-seq -package dph-seq -package dph-prim-seq -c Loop.hs

(You need to build the DPH libraries first, of course.) This causes SpecConstr to loop for at least 5 mins on my machine. Removing the middle [::] in the last line gets it though SpecConstr, but the result size is 1501143 and it then runs out of memory in the simplifier.

Building with -dph-par runs fine.

This is probably also why the dph-words benchmark in the testsuite is failing due to using too much memory during compilation.

Trac metadata
Trac field Value
Version 7.0.1
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Compiler
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
Edited by rl@cse.unsw.edu.au
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information