[llvm] d37befd - [PowerPC] Remove the redundant implicit operands in ppc-early-ret pass
Kang Zhang via llvm-commits
llvm-commits at lists.llvm.org
Sun Jul 19 00:02:32 PDT 2020
Author: Kang Zhang
Date: 2020-07-19T07:01:45Z
New Revision: d37befdfe5cd93666f8077c32836673ad70385d1
URL: https://github.com/llvm/llvm-project/commit/d37befdfe5cd93666f8077c32836673ad70385d1
DIFF: https://github.com/llvm/llvm-project/commit/d37befdfe5cd93666f8077c32836673ad70385d1.diff
LOG: [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
Added:
Modified:
llvm/lib/Target/PowerPC/PPCEarlyReturn.cpp
llvm/test/CodeGen/PowerPC/early-ret-verify.mir
llvm/test/CodeGen/PowerPC/early-ret.mir
Removed:
################################################################################
diff --git a/llvm/lib/Target/PowerPC/PPCEarlyReturn.cpp b/llvm/lib/Target/PowerPC/PPCEarlyReturn.cpp
index c9f74bbf861c..08b7bdb3ac1e 100644
--- a/llvm/lib/Target/PowerPC/PPCEarlyReturn.cpp
+++ b/llvm/lib/Target/PowerPC/PPCEarlyReturn.cpp
@@ -77,8 +77,9 @@ namespace {
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 @@ namespace {
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 @@ namespace {
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 5a01aa4effa5..967e53302607 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 bfbaa8edeb97..9bc97695bb65 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
...
More information about the llvm-commits
mailing list