15 May 20:46
-optc-O2 considered useful
From: Don Stewart <dons <at> galois.com>
Subject: -optc-O2 considered useful
Newsgroups: gmane.comp.lang.haskell.glasgow.user
Date: 2008-05-15 18:47:20 GMT
Subject: -optc-O2 considered useful
Newsgroups: gmane.comp.lang.haskell.glasgow.user
Date: 2008-05-15 18:47:20 GMT
I discovered something today I didn't know.
gcc -O2 can optimise out the computed jumps GHC produces in tight loops.
Consider this program,
import Data.Array.Vector
import Data.Bits
main = print . sumU
. mapU (*2)
. mapU (`shiftL` 2)
$ replicateU (100000000 :: Int) (5::Int)
Yields this core:
$wfold :: Int# -> Int# -> Int#
$wfold =
\ (ww_sMp :: Int#) (ww1_sMt :: Int#) ->
case ww1_sMt of wild_X10 {
__DEFAULT -> $wfold (+# ww_sMp 40) (+# wild_X10 1);
100000000 -> ww_sMp
And -O2 -fasm:
Main_zdwfold_info:
movq %rdi,%rax
cmpq $100000000,%rax
jne .LcOk
(Continue reading)
RSS Feed