tweag / ormolu

A formatter for Haskell source code
https://ormolu-live.tweag.io
Other
956 stars 83 forks source link

Slowdown on GHC 9.4 when fixity-th configure flag is enabled #941

Closed Gabriella439 closed 1 year ago

Gabriella439 commented 1 year ago

Describe the bug

ormolu is significantly slower when formatting expressions that mix operators of different fixities if ormolu was built with fixity-th enabled (which is the default).

To Reproduce

To reproduce this behavior, build ormolu with the fixity-th flag enabled (which is the default) and then format the following file:

a = b =. c <$> d

This will take a while (≈ 43 seconds on my machine).

The problem disappears if you build ormolu without the fixity-th flag or if you build using GHC 9.2 or older. In those cases formatting speed goes back to normal (≈ 0.2 seconds).

Expected behavior

The performance with fixity-th shouldn't be significantly slower than without fixity-th. My understanding is that the fixity-th flag is supposed to be an optimization (to compile the fixity look-up table at compile-time using TemplateHaskell instead of decoding the look-up table at runtime) but in this case it's actually significantly less efficient due to some change introduced in GHC 9.4.

Environment

MaxGabriel commented 1 year ago

(I have also reproduced this on a regular Intel Mac, in case anyone is worried about the M1 running x86 causing weirdness)

amesgen commented 1 year ago

Interesting, thanks for the report! I can reproduce this on x86_64-linux using GHC 9.4.3 (and also on 9.4.2). The fixity-th flag seems to be a magnet for GHC bugs, cf. #927...

amesgen commented 1 year ago

PR to disable fixity-th on GHC 9.4 for the time being: #945