
#14980: Runtime performance regression with binary operations on vectors -------------------------------------+------------------------------------- Reporter: ttylec | Owner: bgamari Type: bug | Status: new Priority: high | Milestone: 8.8.1 Component: Compiler | Version: 8.2.2 Resolution: | Keywords: vector | bitwise operations Operating System: Unknown/Multiple | Architecture: Type of failure: Runtime | Unknown/Multiple performance bug | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by tdammers): OK, for a very rough first impression of `RULES` that fire in either case, I did this: {{{#!diff tobias@zoidberg:~/well-typed/devel/ghc-T14980/ > diff <(grep '^Rule' ghc- bug-8.0.2/rule-firings | sort -u) <(grep '^Rule' ghc-bug-8.2.2/rule- firings | sed -e 's/\s(.*)$//' | sort -u) -u | grep '^[+-]' --- /proc/self/fd/13 2018-06-28 12:26:37.103065551 +0200 +++ /proc/self/fd/14 2018-06-28 12:26:37.103065551 +0200 -Rule fired: >=# +Rule fired: ==# +Rule fired: ># -Rule fired: Class op < -Rule fired: Class op <*> -Rule fired: Class op >= -Rule fired: Class op fmap +Rule fired: Class op liftA2 -Rule fired: Class op $p1Applicative -Rule fired: eftIntList +Rule fired: divInt# +Rule fired: foldr2/left -Rule fired: narrow32Word# -Rule fired: narrow8Word# -Rule fired: or# -Rule fired: SC:foldlM_loop0 -Rule fired: SC:foldlM_loop1 +Rule fired: SC:go0 -Rule fired: SC:$j1 +Rule fired: SC:$wfoldlM_loop0 -Rule fired: seq of cast +Rule fired: stream/unstream [Vector] +Rule fired: uncheckedShiftL# }}} That is, I compiled the `performance-bug-2` program with both compilers using `-ddump-rule-firings`, and then filtered the dump as follows: 1. Retain only the actual rule firings 2. Sort by rule name 3. Remove duplicates 4. Strip the extra information that is only present in 8.2.2 output 5. Diff 6. Retain only + and - lines. `+` lines are rules that only fire on 8.2.2, `-` lines fire only on 8.0.2. I don't know which of these makes the decisive difference, but I suspect it's one of the built-in rules. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14980#comment:26 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler