]> granicus.if.org Git - llvm/commit
[Codegen] Merge tail blocks with no successors after block placement
authorDavid Bolvansky <david.bolvansky@gmail.com>
Thu, 13 Jun 2019 18:11:32 +0000 (18:11 +0000)
committerDavid Bolvansky <david.bolvansky@gmail.com>
Thu, 13 Jun 2019 18:11:32 +0000 (18:11 +0000)
commit9a8c62560f27fb1630960e56ffe5d193e90babe7
tree4f1ae0e334c8af24b4b53dd9f1a1d98735d6ba26
parent3ff2fb8887d7f19eedd34b08b72464c763a2a9fc
[Codegen] Merge tail blocks with no successors after block placement

Summary:
I found the following case having tail blocks with no successors merging opportunities after block placement.

Before block placement:

bb0:
    ...
    bne a0, 0, bb2:

bb1:
    mv a0, 1
    ret

bb2:
    ...

bb3:
    mv a0, 1
    ret

bb4:
    mv a0, -1
    ret

The conditional branch bne in bb0 is opposite to beq.

After block placement:

bb0:
    ...
    beq a0, 0, bb1

bb2:
    ...

bb4:
    mv a0, -1
    ret

bb1:
    mv a0, 1
    ret

bb3:
    mv a0, 1
    ret

After block placement, that appears new tail merging opportunity, bb1 and bb3 can be merged as one block. So the conditional constraint for merging tail blocks with no successors should be removed. In my experiment for RISC-V, it decreases code size.

Author of original patch: Jim Lin

Reviewers: haicheng, aheejin, craig.topper, rnk, RKSimon, Jim, dmgreen

Reviewed By: Jim, dmgreen

Subscribers: xbolva00, dschuff, javed.absar, sbc100, jgravelle-google, aheejin, kito-cheng, dmgreen, PkmX, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D54411

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@363284 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/BranchFolding.cpp
test/CodeGen/Thumb2/v8_IT_3.ll
test/CodeGen/WinEH/wineh-noret-cleanup.ll
test/CodeGen/X86/conditional-tailcall.ll
test/CodeGen/X86/loop-search.ll
test/CodeGen/X86/machine-cp.ll
test/CodeGen/X86/mul-constant-result.ll
test/CodeGen/X86/tail-merge-after-mbp.mir
test/CodeGen/X86/tail-opts.ll
test/CodeGen/X86/tail-threshold.ll
test/CodeGen/X86/test-shrink-bug.ll