Skip to content

WIP: Add built-in rules for `^`, `^^` and stimes (#15842)

This is what I would submit as non-wip merge request for #15842 , but unfortunately I can not measure that two of the three rules are really beneficial.

I created a small project (https://github.com/supersven/T15842-exponentiation-PrelRules) that compiles and executes optimized examples for each rule (^, ^^, stimes) and measures the executions times.

Comparing my locally built GHC with the rules (default flavour) against the latest GHC in nixpkgs gives:

new GHC with rules
1. Run
"stimes : 22 milli seconds -- 22098683000 pico seconds"
"fractional power 1 : 0 milli seconds -- 830000 pico seconds"
"fractional power 2 : 0 milli seconds -- 601000 pico seconds"
"fractional power 3 : 0 milli seconds -- 591000 pico seconds"
"integral power : 6 milli seconds -- 6662814000 pico seconds"
2. Run
"stimes : 22 milli seconds -- 22048949000 pico seconds"
"fractional power 1 : 0 milli seconds -- 807000 pico seconds"
"fractional power 2 : 0 milli seconds -- 599000 pico seconds"
"fractional power 3 : 0 milli seconds -- 580000 pico seconds"
"integral power : 6 milli seconds -- 6671112000 pico seconds"
ghc-8.9.20190924
1. Run
Resolving dependencies...
"stimes : 38 milli seconds -- 38252165000 pico seconds"
"fractional power 1 : 0 milli seconds -- 1634000 pico seconds"
"fractional power 2 : 0 milli seconds -- 604000 pico seconds"
"fractional power 3 : 0 milli seconds -- 588000 pico seconds"
"integral power : 6 milli seconds -- 6831802000 pico seconds"
2. Run
"stimes : 38 milli seconds -- 38563477000 pico seconds"
"fractional power 1 : 0 milli seconds -- 1675000 pico seconds"
"fractional power 2 : 0 milli seconds -- 606000 pico seconds"
"fractional power 3 : 0 milli seconds -- 595000 pico seconds"
"integral power : 6 milli seconds -- 6787968000 pico seconds"

(https://github.com/supersven/T15842-exponentiation-PrelRules/blob/master/result.txt)

So, the stimes rule really makes things better: 22 milli seconds vs. 38 milli seconds. The rules for ^ and ^^ seem to have no real effect.

I put the GHC --dump.* logs into folders named after the GHC version, e.g. ghc-8.9.20190924_dumps (https://github.com/supersven/T15842-exponentiation-PrelRules/tree/master/ghc-8.9.20190924_dumps/src).

Any hints are welcome. And especially feedback regarding my code would be very welcome.

Edited by Sven Tennie

Merge request reports