[GHC] #15569: Constant folding optimises 1 into 3

GHC ghc-devs at haskell.org
Wed Aug 29 14:46:06 UTC 2018


#15569: Constant folding optimises 1 into 3
-------------------------------------+-------------------------------------
        Reporter:  snowleopard       |                Owner:  (none)
            Type:  bug               |               Status:  new
        Priority:  highest           |            Milestone:  8.6.1
       Component:  Compiler          |              Version:  8.6.1-beta1
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:  #9136             |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by Krzysztof Gogolewski <krz.gogolewski@…>):

 In [changeset:"65eec9cfd4410c0e30b0ed06116c15f8ce3de49d/ghc"
 65eec9cf/ghc]:
 {{{
 #!CommitTicketReference repository="ghc"
 revision="65eec9cfd4410c0e30b0ed06116c15f8ce3de49d"
 Fix a constant folding rule

 Summary:
 One of the constant folding rules introduced in D2858 is:

 ```
 (L y :-:   v) :-: (L x :-: w) -> return $ mkL (y-x)   `add` (w `add` v)
 ```

 Or, after removing syntactic noise: `(y - v) - (x - w) ==> (y - x) + (w +
 v)`.
 This is incorrect, since the sign of `v` is changed from negative to
 positive.
 As a consequence, the following program prints `3` when compiled with
 `-O`:

 ```
 -- This is just subtraction in disguise
 minus :: Int -> Int -> Int
 minus x y = (8 - y) - (8 - x)
 {-# NOINLINE minus #-}

 main :: IO ()
 main = print (2 `minus` 1)
 ```

 The correct rule is: `(y - v) - (x - w) ==> (y - x) + (w - v)`.

 This commit does the fix. I haven't found any other issues with the
 constant
 folding code, but it's difficult to be certain without some automated
 checking.

 Reviewers: bgamari, tdammers

 Subscribers: hsyl20, tdammers, rwbarton, carter

 GHC Trac Issues: #15569

 Differential Revision: https://phabricator.haskell.org/D5109
 }}}

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


More information about the ghc-tickets mailing list