
#10706: Make -fcpr-off a dynamic flag -------------------------------------+------------------------------------- Reporter: darchon | Owner: darchon Type: feature request | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.11 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Revisions: Phab:D1110 -------------------------------------+------------------------------------- Comment (by darchon): I have to confess that my use-case is very unconventional, perhaps even contrived: I work on a compiler that translates Haskell to circuits (www.clash- lang.org), and I use Streams to model sequential circuits: {{{ data Stream a = a :- Stream a }}} Given this model of a sequential circuit, appending an element to a stream: {{{ memory i s = i :- s }}} has a clear circuit semantics, it translates to a memory/latch. However, decomposing a stream: {{{ case s of i :- s' -> ... }}} would basically translate to "looking into the future", which cannot be transformed into a circuit. I have taken great care that, under normal conditions, a case statement with a {{{Signal a}}} as a scrutinee never occurs. For one by not exporting the constructor of the {{{Steam}}} data type. However, due to the CPR analysis I sometimes end up with a worker/wrapper that looks something like this: {{{ case memory i s of a :- bs -> g (#a,bs#) g (#a,bs#) = a :- bs }}} which gives me the troublesome case-decomposition on the {{{Stream}}} data type. Now, as to why I want {{{-fcpr-off}}} to be a dynamic flag: All my functions that manipulate the {{{Stream}}} type exist in a single module. If these functions get no CPR annotations, I noticed that the above troublesome worker/wrapper is never created elsewhere. The CPR annotations do not bother me in any of my other modules, and I do not want to turn off strictness analysis completely in the module where I define my {{{Stream}}}-manipulating functions. Hence I would like to have a {{{-fcpr-off}}} dynamic flag, so I can turn off CPR annotations just for that single module. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10706#comment:3 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler