
#9661: Branchless ==# is compiled to branchy code -------------------------------------+------------------------------------- Reporter: dfeuer | Owner: bgamari Type: feature request | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.9 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: Runtime | Unknown/Multiple performance bug | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Revisions: D854 -------------------------------------+------------------------------------- Comment (by rwbarton): Again there is a distinction between the compiler being able to generate branchless code and the compiler giving the user control over whether to generate branchless code. For example in that benchmark, it would be even better if the user could simply write {{{ let inc = if v >= 0 then 1 else 0 }}} rather than {{{ let !(I# v) = x inc = I# (v >=$# 0#) }}} Any optimizing C compiler would avoid a branch in a function like {{{ int g(int a, int b) { if (a >= 0) return b + 1; else return b; } }}} So, this isn't an example of the kind that I am talking about. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/9661#comment:25 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler