[PowerPC] optimize conditional branch on CRSET/CRUNSET
authorHiroshi Inoue <inouehrs@jp.ibm.com>
Wed, 26 Sep 2018 12:32:45 +0000 (12:32 +0000)
committerHiroshi Inoue <inouehrs@jp.ibm.com>
Wed, 26 Sep 2018 12:32:45 +0000 (12:32 +0000)
commit20982f09956d2630a7d889293a9f4a26c6d2c43e
tree6fb200edabb49fe08589ae9081b9fc2703d6953e
parent20b5abe23b33b924a9f1a7ad62f3a9d9e118ebf5
[PowerPC] optimize conditional branch on CRSET/CRUNSET

This patch adds a check to optimize conditional branch (BC and BCn) based on a constant set by CRSET or CRUNSET.
Other optimizers, such as block placement, may generate such code and hence
I do this at the very end of the optimization in pre-emit peephole pass.

A conditional branch based on a constant is eliminated or converted into unconditional branch.
Also CRSET/CRUNSET is eliminated if the condition code register is not used
by instruction other than the branch to be optimized.

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

llvm-svn: 343100
llvm/lib/Target/PowerPC/PPCPreEmitPeephole.cpp
llvm/test/CodeGen/PowerPC/setcr_bc.mir [new file with mode: 0644]
llvm/test/CodeGen/PowerPC/setcr_bc2.mir [new file with mode: 0644]