From d37befdfe5cd93666f8077c32836673ad70385d1 Mon Sep 17 00:00:00 2001 From: Kang Zhang Date: Sun, 19 Jul 2020 07:01:45 +0000 Subject: [PATCH] [PowerPC] Remove the redundant implicit operands in ppc-early-ret pass Summary: In the `ppc-early-ret` pass, we have use `BuildMI` and `copyImplicitOps` when the branch instructions can do the early return. But the two functions will add implicit operands twice, this is not correct. This patch is to remove the redundant implicit operands in `ppc-early-ret pass`. Reviewed By: jsji Differential Revision: https://reviews.llvm.org/D76042 --- llvm/lib/Target/PowerPC/PPCEarlyReturn.cpp | 26 ++++++++++++++++---------- llvm/test/CodeGen/PowerPC/early-ret-verify.mir | 2 +- llvm/test/CodeGen/PowerPC/early-ret.mir | 8 ++++---- 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/llvm/lib/Target/PowerPC/PPCEarlyReturn.cpp b/llvm/lib/Target/PowerPC/PPCEarlyReturn.cpp index c9f74bb..08b7bdb 100644 --- a/llvm/lib/Target/PowerPC/PPCEarlyReturn.cpp +++ b/llvm/lib/Target/PowerPC/PPCEarlyReturn.cpp @@ -77,8 +77,9 @@ protected: if (J->getOperand(0).getMBB() == &ReturnMBB) { // This is an unconditional branch to the return. Replace the // branch with a blr. - BuildMI(**PI, J, J->getDebugLoc(), TII->get(I->getOpcode())) - .copyImplicitOps(*I); + MachineInstr *MI = ReturnMBB.getParent()->CloneMachineInstr(&*I); + (*PI)->insert(J, MI); + MachineBasicBlock::iterator K = J--; K->eraseFromParent(); BlockChanged = true; @@ -89,10 +90,13 @@ protected: if (J->getOperand(2).getMBB() == &ReturnMBB) { // This is a conditional branch to the return. Replace the branch // with a bclr. - BuildMI(**PI, J, J->getDebugLoc(), TII->get(PPC::BCCLR)) + MachineInstr *MI = ReturnMBB.getParent()->CloneMachineInstr(&*I); + MI->setDesc(TII->get(PPC::BCCLR)); + MachineInstrBuilder(*ReturnMBB.getParent(), MI) .add(J->getOperand(0)) - .add(J->getOperand(1)) - .copyImplicitOps(*I); + .add(J->getOperand(1)); + (*PI)->insert(J, MI); + MachineBasicBlock::iterator K = J--; K->eraseFromParent(); BlockChanged = true; @@ -103,11 +107,13 @@ protected: if (J->getOperand(1).getMBB() == &ReturnMBB) { // This is a conditional branch to the return. Replace the branch // with a bclr. - BuildMI( - **PI, J, J->getDebugLoc(), - TII->get(J->getOpcode() == PPC::BC ? PPC::BCLR : PPC::BCLRn)) - .add(J->getOperand(0)) - .copyImplicitOps(*I); + MachineInstr *MI = ReturnMBB.getParent()->CloneMachineInstr(&*I); + MI->setDesc( + TII->get(J->getOpcode() == PPC::BC ? PPC::BCLR : PPC::BCLRn)); + MachineInstrBuilder(*ReturnMBB.getParent(), MI) + .add(J->getOperand(0)); + (*PI)->insert(J, MI); + MachineBasicBlock::iterator K = J--; K->eraseFromParent(); BlockChanged = true; diff --git a/llvm/test/CodeGen/PowerPC/early-ret-verify.mir b/llvm/test/CodeGen/PowerPC/early-ret-verify.mir index 5a01aa4..967e533 100644 --- a/llvm/test/CodeGen/PowerPC/early-ret-verify.mir +++ b/llvm/test/CodeGen/PowerPC/early-ret-verify.mir @@ -40,7 +40,7 @@ body: | ; CHECK-LABEL: testEarlyRet ; CHECK: bb.0.entry: - ; CHECK: BCLR undef renamable $cr5lt, implicit $lr, implicit $rm, implicit $lr, implicit $rm + ; CHECK: BCLR undef renamable $cr5lt, implicit $lr, implicit $rm ; CHECK: bb.1: ; CHECK: renamable $r3 = IMPLICIT_DEF ; CHECK: renamable $r4 = IMPLICIT_DEF diff --git a/llvm/test/CodeGen/PowerPC/early-ret.mir b/llvm/test/CodeGen/PowerPC/early-ret.mir index bfbaa8e..9bc9769 100644 --- a/llvm/test/CodeGen/PowerPC/early-ret.mir +++ b/llvm/test/CodeGen/PowerPC/early-ret.mir @@ -27,7 +27,7 @@ body: | ; CHECK: bb.0.entry: ; CHECK: renamable $cr0 = CMPWI renamable $r3, 0 ; CHECK: BC killed renamable $cr0gt, %bb.1 - ; CHECK: BLR implicit $lr, implicit $rm, implicit $lr, implicit $rm, implicit killed $r3 + ; CHECK: BLR implicit $lr, implicit $rm, implicit killed $r3 ; CHECK: bb.1.entry: ; CHECK: renamable $r3 = ADDI killed renamable $r4, 0 ; CHECK: BLR implicit $lr, implicit $rm, implicit killed $r3 @@ -106,7 +106,7 @@ body: | ; CHECK-LABEL: name: testBCLR ; CHECK: bb.0.entry: ; CHECK: renamable $cr0 = FCMPUS killed renamable $f3, killed renamable $f4 - ; CHECK: BCLR killed renamable $cr0eq, implicit $lr, implicit $rm, implicit $lr, implicit $rm, implicit killed $v2 + ; CHECK: BCLR killed renamable $cr0eq, implicit $lr, implicit $rm, implicit killed $v2 ; CHECK: bb.1.entry: ; CHECK: renamable $cr0 = FCMPUS killed renamable $f1, killed renamable $f2 ; CHECK: BCLRn killed renamable $cr0eq, implicit $lr, implicit $rm, implicit killed $v2 @@ -139,8 +139,8 @@ body: | ; CHECK: bb.0.entry: ; CHECK: renamable $r4 = LI 0 ; CHECK: renamable $cr0 = CMPLWI killed renamable $r4, 0 - ; CHECK: BCCLR 68, renamable $cr0, implicit $lr, implicit $rm, implicit $lr, implicit $rm + ; CHECK: BCCLR 68, renamable $cr0, implicit $lr, implicit $rm ; CHECK: bb.1: - ; CHECK: BCCLR 68, killed renamable $cr0, implicit $lr, implicit $rm, implicit $lr, implicit $rm + ; CHECK: BCCLR 68, killed renamable $cr0, implicit $lr, implicit $rm ; CHECK: BLR implicit $lr, implicit $rm ... -- 2.7.4