[GHC] #8321: improve basic block layout on LLVM backend by predicting stack/heap checks

GHC ghc-devs at haskell.org
Thu Nov 17 16:04:13 UTC 2016


#8321: improve basic block layout on LLVM backend by predicting stack/heap checks
-------------------------------------+-------------------------------------
        Reporter:  rwbarton          |                Owner:  rwbarton
            Type:  feature request   |               Status:  new
        Priority:  normal            |            Milestone:
       Component:  Compiler (LLVM)   |              Version:  7.7
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
 Type of failure:  Runtime           |  Unknown/Multiple
  performance bug                    |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
-------------------------------------+-------------------------------------

Comment (by Ben Gamari <ben@…>):

 In [changeset:"20fb781ed1825578c5428ff4ae408be034c6a1d8/ghc"
 20fb781e/ghc]:
 {{{
 #!CommitTicketReference repository="ghc"
 revision="20fb781ed1825578c5428ff4ae408be034c6a1d8"
 LLVM generate llvm.expect for conditional branches

 This patch adds likeliness annotations to heap and and stack checks and
 modifies the llvm codegen to recognize those to help it generate better
 code.

 So with this patch

 ```
 ...
 if ((Sp + 8) - 24 < SpLim) (likely: False) goto c23c; else goto c23d;
 ...
 ```

 roughly generates:

 ```
   %ln23k = icmp ult i64 %ln23j, %SpLim_Arg
   %ln23m = call ccc i1 (i1, i1) @llvm.expect.i1( i1 %ln23k, i1 0 )
   br i1 %ln23m, label %c23c, label %c23d
 ```

 Note the call to `llvm.expect` which denotes the expected result for
 the comparison.

 Test Plan: Look at assembler code with and without this patch. If the
 heap-checks moved out of the way we are happy.

 Reviewers: austin, simonmar, bgamari

 Reviewed By: bgamari

 Subscribers: michalt, thomie

 Differential Revision: https://phabricator.haskell.org/D2688

 GHC Trac Issues: #8321
 }}}

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8321#comment:7>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list