• Alex Biehl's avatar
    LLVM generate llvm.expect for conditional branches · 20fb781e
    Alex Biehl authored
    This patch adds likeliness annotations to heap and and stack checks and
    modifies the llvm codegen to recognize those to help it generate better
    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
CmmContFlowOpt.hs 15.6 KB