From 46f23e13d06267911d25afe4d00444d9a3f58d2f Mon Sep 17 00:00:00 2001 From: Krishnam Tibrewala Date: Wed, 11 Sep 2024 17:56:35 -0700 Subject: [PATCH] [AIEX] Fix AIEEliminateDuplicatePHI pass --- .../Target/AIE/AIEEliminateDuplicatePHI.cpp | 12 ++--- .../GlobalISel/eliminate-duplicate-phi.mir | 50 +++++++++++++++++++ 2 files changed, 53 insertions(+), 9 deletions(-) diff --git a/llvm/lib/Target/AIE/AIEEliminateDuplicatePHI.cpp b/llvm/lib/Target/AIE/AIEEliminateDuplicatePHI.cpp index a3ab92e3b674..dfab33dda816 100644 --- a/llvm/lib/Target/AIE/AIEEliminateDuplicatePHI.cpp +++ b/llvm/lib/Target/AIE/AIEEliminateDuplicatePHI.cpp @@ -120,18 +120,12 @@ class AIEEliminateDuplicatePHI : public MachineFunctionPass { bool processMBB(MachineBasicBlock &MBB, MachineRegisterInfo &MRI, MachineIRBuilder &MIB, GISelObserverWrapper &Observer) { bool Changed = false; - auto LastPHI = MBB.getFirstNonPHI(); + auto FirstNonPHI = MBB.getFirstNonPHI(); for (auto &MI : make_early_inc_range(MBB.phis())) { if (!isPointerTypePHI(MRI, MI)) continue; - - // Ensure that next MI is valid - auto NextMI = std::next(MachineBasicBlock::instr_iterator(MI)); - if (NextMI == MBB.instr_end() || NextMI == LastPHI) - break; - - for (auto &PHI : make_early_inc_range(make_range( - NextMI, MachineBasicBlock::instr_iterator(*LastPHI)))) { + for (auto &PHI : make_early_inc_range( + make_range(++MachineBasicBlock::iterator(MI), FirstNonPHI))) { if (!isPointerTypePHI(MRI, PHI)) continue; if (MI.isIdenticalTo(PHI, MachineInstr::IgnoreDefs)) { diff --git a/llvm/test/CodeGen/AIE/GlobalISel/eliminate-duplicate-phi.mir b/llvm/test/CodeGen/AIE/GlobalISel/eliminate-duplicate-phi.mir index 9ef024ecf54f..af134afddec3 100644 --- a/llvm/test/CodeGen/AIE/GlobalISel/eliminate-duplicate-phi.mir +++ b/llvm/test/CodeGen/AIE/GlobalISel/eliminate-duplicate-phi.mir @@ -232,3 +232,53 @@ body: | %5:_(p0) = G_PTR_ADD %3:_, %4:_(s20) G_BR %bb.4 ... + +--- +name: test_two_PHI_nobranch +legalized: false +tracksRegLiveness: true +body: | + ; CHECK-LABEL: name: test_two_PHI_nobranch + ; CHECK: bb.0: + ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000) + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 + ; CHECK-NEXT: [[C1:%[0-9]+]]:_(p0) = G_CONSTANT i20 1 + ; CHECK-NEXT: [[C2:%[0-9]+]]:_(p0) = G_CONSTANT i20 2 + ; CHECK-NEXT: G_BRCOND [[C]](s32), %bb.1 + ; CHECK-NEXT: G_BR %bb.2 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: bb.1: + ; CHECK-NEXT: successors: %bb.3(0x80000000) + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: G_BR %bb.3 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: bb.2: + ; CHECK-NEXT: successors: %bb.3(0x80000000) + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: G_BR %bb.3 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: bb.3: + ; CHECK-NEXT: successors: %bb.4(0x80000000) + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: [[PHI:%[0-9]+]]:_(p0) = G_PHI [[C1]](p0), %bb.1, [[C2]](p0), %bb.2 + ; CHECK-NEXT: [[PHI1:%[0-9]+]]:_(p0) = G_PHI [[C1]](p0), %bb.1, [[C2]](p0), %bb.2 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: bb.4: + ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY [[PHI]](p0) + bb.0: + %1:_(s32) = G_CONSTANT i32 0 + %2:_(p0) = G_CONSTANT i20 1 + %3:_(p0) = G_CONSTANT i20 2 + G_BRCOND %1:_(s32), %bb.1 + G_BR %bb.2 + bb.1: + G_BR %bb.3 + bb.2: + G_BR %bb.3 + bb.3: + %4:_(p0) = G_PHI %2:_(p0), %bb.1, %3:_(p0), %bb.2 + %5:_(p0) = G_PHI %2:_(p0), %bb.1, %3:_(p0), %bb.2 + bb.4: + %6:_(p0) = COPY %5:_(p0) +...