[llvm] r299287 - Revert "Localizer fun"
Quentin Colombet via llvm-commits
llvm-commits at lists.llvm.org
Fri Mar 31 18:26:21 PDT 2017
Author: qcolombet
Date: Fri Mar 31 20:26:21 2017
New Revision: 299287
URL: http://llvm.org/viewvc/llvm-project?rev=299287&view=rev
Log:
Revert "Localizer fun"
This reverts commit r299283.
Didn't intend to commit this :(
Removed:
llvm/trunk/include/llvm/CodeGen/GlobalISel/Localizer.h
llvm/trunk/lib/CodeGen/GlobalISel/Localizer.cpp
llvm/trunk/test/CodeGen/AArch64/GlobalISel/localizer.mir
Modified:
llvm/trunk/include/llvm/CodeGen/MachineRegisterInfo.h
llvm/trunk/include/llvm/InitializePasses.h
llvm/trunk/lib/CodeGen/GlobalISel/CMakeLists.txt
llvm/trunk/lib/CodeGen/GlobalISel/GlobalISel.cpp
Removed: llvm/trunk/include/llvm/CodeGen/GlobalISel/Localizer.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/GlobalISel/Localizer.h?rev=299286&view=auto
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/GlobalISel/Localizer.h (original)
+++ llvm/trunk/include/llvm/CodeGen/GlobalISel/Localizer.h (removed)
@@ -1,58 +0,0 @@
-//== llvm/CodeGen/GlobalISel/Localizer.h - Localizer -------------*- C++ -*-==//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-/// \file This file describes the interface of the
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CODEGEN_GLOBALISEL_LOCALIZER_H
-#define LLVM_CODEGEN_GLOBALISEL_LOCALIZER_H
-
-#include "llvm/CodeGen/GlobalISel/MachineIRBuilder.h"
-#include "llvm/CodeGen/MachineFunctionPass.h"
-
-namespace llvm {
-// Forward declarations.
-class MachineRegisterInfo;
-
-/// This pass implements the reg bank selector pass used in the GlobalISel
-/// pipeline. At the end of this pass, all register operands have been assigned
-class Localizer : public MachineFunctionPass {
-public:
- static char ID;
-
-private:
- /// MRI contains all the register class/bank information that this
- /// pass uses and updates.
- MachineRegisterInfo *MRI;
-
- static bool shouldLocalize(const MachineInstr &MI);
-
- static bool isLocalUse(MachineOperand &MOUse, const MachineInstr &Def, MachineBasicBlock **InsertMBB);
-
- /// Initialize the field members using \p MF.
- void init(MachineFunction &MF);
-
-public:
- Localizer();
-
- StringRef getPassName() const override { return "Localizer"; }
-
- MachineFunctionProperties getRequiredProperties() const override {
- return MachineFunctionProperties()
- .set(MachineFunctionProperties::Property::IsSSA)
- .set(MachineFunctionProperties::Property::Legalized)
- .set(MachineFunctionProperties::Property::RegBankSelected);
- }
-
- bool runOnMachineFunction(MachineFunction &MF) override;
-};
-
-} // End namespace llvm.
-
-#endif
Modified: llvm/trunk/include/llvm/CodeGen/MachineRegisterInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineRegisterInfo.h?rev=299287&r1=299286&r2=299287&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/MachineRegisterInfo.h (original)
+++ llvm/trunk/include/llvm/CodeGen/MachineRegisterInfo.h Fri Mar 31 20:26:21 2017
@@ -642,11 +642,6 @@ public:
///
void setRegBank(unsigned Reg, const RegisterBank &RegBank);
- void setRegClassOrRegBank(unsigned Reg,
- const RegClassOrRegBank &RCOrRB){
- VRegInfo[Reg].first = RCOrRB;
- }
-
/// constrainRegClass - Constrain the register class of the specified virtual
/// register to be a common subclass of RC and the current register class,
/// but only if the new class has at least MinNumRegs registers. Return the
Modified: llvm/trunk/include/llvm/InitializePasses.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/InitializePasses.h?rev=299287&r1=299286&r2=299287&view=diff
==============================================================================
--- llvm/trunk/include/llvm/InitializePasses.h (original)
+++ llvm/trunk/include/llvm/InitializePasses.h Fri Mar 31 20:26:21 2017
@@ -192,7 +192,6 @@ void initializeLiveVariablesPass(PassReg
void initializeLoadCombinePass(PassRegistry&);
void initializeLoadStoreVectorizerPass(PassRegistry&);
void initializeLoaderPassPass(PassRegistry&);
-void initializeLocalizerPass(PassRegistry&);
void initializeLocalStackSlotPassPass(PassRegistry&);
void initializeLoopAccessLegacyAnalysisPass(PassRegistry&);
void initializeLoopDataPrefetchLegacyPassPass(PassRegistry&);
Modified: llvm/trunk/lib/CodeGen/GlobalISel/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/GlobalISel/CMakeLists.txt?rev=299287&r1=299286&r2=299287&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/GlobalISel/CMakeLists.txt (original)
+++ llvm/trunk/lib/CodeGen/GlobalISel/CMakeLists.txt Fri Mar 31 20:26:21 2017
@@ -8,7 +8,6 @@ set(GLOBAL_ISEL_FILES
LegalizerHelper.cpp
Legalizer.cpp
LegalizerInfo.cpp
- Localizer.cpp
RegBankSelect.cpp
RegisterBank.cpp
RegisterBankInfo.cpp
Modified: llvm/trunk/lib/CodeGen/GlobalISel/GlobalISel.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/GlobalISel/GlobalISel.cpp?rev=299287&r1=299286&r2=299287&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/GlobalISel/GlobalISel.cpp (original)
+++ llvm/trunk/lib/CodeGen/GlobalISel/GlobalISel.cpp Fri Mar 31 20:26:21 2017
@@ -26,7 +26,6 @@ void llvm::initializeGlobalISel(PassRegi
void llvm::initializeGlobalISel(PassRegistry &Registry) {
initializeIRTranslatorPass(Registry);
initializeLegalizerPass(Registry);
- initializeLocalizerPass(Registry);
initializeRegBankSelectPass(Registry);
initializeInstructionSelectPass(Registry);
}
Removed: llvm/trunk/lib/CodeGen/GlobalISel/Localizer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/GlobalISel/Localizer.cpp?rev=299286&view=auto
==============================================================================
--- llvm/trunk/lib/CodeGen/GlobalISel/Localizer.cpp (original)
+++ llvm/trunk/lib/CodeGen/GlobalISel/Localizer.cpp (removed)
@@ -1,120 +0,0 @@
-//===- Localizer.cpp ---------------------- Localize some instrs -*- C++ -*-==//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-/// \file
-/// This file implements the Localizer class.
-//===----------------------------------------------------------------------===//
-
-#include "llvm/ADT/DenseMap.h"
-#include "llvm/ADT/SmallPtrSet.h"
-#include "llvm/CodeGen/GlobalISel/Localizer.h"
-#include "llvm/CodeGen/MachineRegisterInfo.h"
-#include "llvm/Support/Debug.h"
-
-#define DEBUG_TYPE "localizer"
-
-using namespace llvm;
-
-char Localizer::ID = 0;
-INITIALIZE_PASS(Localizer, DEBUG_TYPE,
- "Move/duplicate certain instructions close to their use",
- false, false);
-
-Localizer::Localizer() : MachineFunctionPass(ID) {
- initializeLocalizerPass(*PassRegistry::getPassRegistry());
-}
-
-void Localizer::init(MachineFunction &MF) {
- MRI = &MF.getRegInfo();
-}
-
-bool Localizer::shouldLocalize(const MachineInstr &MI) {
- switch(MI.getOpcode()) {
- default:
- return false;
- // Constants-like instructions should be close to their users.
- // We don't want long live-ranges for them.
- case TargetOpcode::G_CONSTANT:
- case TargetOpcode::G_FRAME_INDEX:
- return true;
- }
-}
-
-bool Localizer::isLocalUse(MachineOperand &MOUse, const MachineInstr &Def, MachineBasicBlock **InsertMBB) {
- MachineInstr &MIUse = *MOUse.getParent();
- *InsertMBB = MIUse.getParent();
- if (MIUse.isPHI())
- *InsertMBB = MIUse.getOperand(MIUse.getOperandNo(&MOUse) + 1).getMBB();
- return *InsertMBB == Def.getParent();
-}
-
-bool Localizer::runOnMachineFunction(MachineFunction &MF) {
- // If the ISel pipeline failed, do not bother running that pass.
- if (MF.getProperties().hasProperty(
- MachineFunctionProperties::Property::FailedISel))
- return false;
-
- DEBUG(dbgs() << "Localize instructions for: " << MF.getName() << '\n');
-
- init(MF);
-
- bool Changed = false;
- // Keep track of the instructions we localized.
- // We won't need to process them if we see them later in the CFG.
- SmallPtrSet<MachineInstr *, 16> LocalizedInstrs;
- DenseMap<std::pair<MachineBasicBlock *, unsigned>, unsigned> MBBWithLocalDef;
- // TODO: Do bottom up traversal.
- for (MachineBasicBlock &MBB : MF) {
- for (MachineInstr &MI : MBB) {
- if (LocalizedInstrs.count(&MI) || !shouldLocalize(MI))
- continue;
- DEBUG(dbgs() << "Should localize: " << MI);
- assert(MI.getDesc().getNumDefs() == 1 && "More than one definition not supported yet");
- unsigned Reg = MI.getOperand(0).getReg();
- // Check if all the users of MI are local.
- // We are going to invalidation the list of use operands, so we
- // can't use range iterator.
- for (auto MOIt = MRI->use_begin(Reg), MOItEnd = MRI->use_end();
- MOIt != MOItEnd;) {
- MachineOperand &MOUse = *MOIt++;
- // Check if the use is already local.
- MachineBasicBlock *InsertMBB;
- DEBUG(MachineInstr &MIUse = *MOUse.getParent();
- dbgs() << "Checking use: " << MIUse << " #Opd: " << MIUse.getOperandNo(&MOUse) << '\n');
- if (isLocalUse(MOUse, MI, &InsertMBB))
- continue;
- DEBUG(dbgs() << "Fixing non-local use\n");
- Changed = true;
- auto MBBAndReg = std::make_pair(InsertMBB, Reg);
- auto NewVRegIt = MBBWithLocalDef.find(MBBAndReg);
- if (NewVRegIt == MBBWithLocalDef.end()) {
- // Create the localized instruction.
- MachineInstr *LocalizedMI = MF.CloneMachineInstr(&MI);
- LocalizedInstrs.insert(LocalizedMI);
- // Move it at the right place.
- MachineInstr &MIUse = *MOUse.getParent();
- if (MIUse.getParent() == InsertMBB)
- InsertMBB->insert(MIUse, LocalizedMI);
- else
- InsertMBB->insert(InsertMBB->getFirstNonPHI(), LocalizedMI);
-
- // Set a new register for the definition.
- unsigned NewReg = MRI->createGenericVirtualRegister(MRI->getType(Reg));
- MRI->setRegClassOrRegBank(NewReg, MRI->getRegClassOrRegBank(Reg));
- LocalizedMI->getOperand(0).setReg(NewReg);
- NewVRegIt = MBBWithLocalDef.insert(std::make_pair(MBBAndReg, NewReg)).first;
- DEBUG(dbgs() << "Inserted: " << *LocalizedMI);
- }
- DEBUG(dbgs() << "Update use with: " << PrintReg(NewVRegIt->second) << '\n');
- // Update the user reg.
- MOUse.setReg(NewVRegIt->second);
- }
- }
- }
- return Changed;
-}
Removed: llvm/trunk/test/CodeGen/AArch64/GlobalISel/localizer.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/GlobalISel/localizer.mir?rev=299286&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/AArch64/GlobalISel/localizer.mir (original)
+++ llvm/trunk/test/CodeGen/AArch64/GlobalISel/localizer.mir (removed)
@@ -1,260 +0,0 @@
-# RUN: llc -O0 -mtriple=aarch64-apple-ios -run-pass=localizer -verify-machineinstrs -global-isel %s -o - | FileCheck %s -check-prefix=CHECK
-
-# Test the localizer.
-
---- |
- target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
-
- define void @local_use() { ret void }
- define void @non_local_1use() { ret void }
- define void @non_local_2uses() { ret void }
- define void @non_local_phi_use() { ret void }
- define void @non_local_phi_use_followed_by_use() { ret void }
- define void @non_local_phi_use_followed_by_use_fi() { ret void }
-...
-
----
-# CHECK-LABEL: name: local_use
-name: local_use
-legalized: true
-regBankSelected: true
-
-# CHECK: registers:
-registers:
- - { id: 0, class: gpr }
- - { id: 1, class: gpr }
- - { id: 2, class: gpr }
-
-# CHECK: body:
-# CHECK: %0(s32) = G_CONSTANT 1
-# CHECK-NEXT: %1(s32) = G_ADD %0, %0
-body: |
- bb.0:
- %0(s32) = G_CONSTANT 1
- %1(s32) = G_ADD %0, %0
-...
-
----
-# CHECK-LABEL: name: non_local_1use
-name: non_local_1use
-legalized: true
-regBankSelected: true
-
-# CHECK: registers:
-# Existing registers should be left untouched
-# CHECK: - { id: 0, class: gpr }
-#CHECK-NEXT: - { id: 1, class: gpr }
-#CHECK-NEXT: - { id: 2, class: gpr }
-# The newly created reg should be on the same regbank/regclass as its origin.
-#CHECK-NEXT: - { id: 3, class: gpr }
-
-registers:
- - { id: 0, class: gpr }
- - { id: 1, class: gpr }
- - { id: 2, class: gpr }
-
-# CHECK: body:
-# CHECK: %0(s32) = G_CONSTANT 1
-# CHECK-NEXT: %1(s32) = G_ADD %0, %0
-
-# CHECK: bb.1:
-# CHECK: %3(s32) = G_CONSTANT 1
-# CHECK-NEXT: %2(s32) = G_ADD %3, %1
-body: |
- bb.0:
- successors: %bb.1
-
- %0(s32) = G_CONSTANT 1
- %1(s32) = G_ADD %0, %0
-
- bb.1:
- %2(s32) = G_ADD %0, %1
-...
-
-
----
-# CHECK-LABEL: name: non_local_2uses
-name: non_local_2uses
-legalized: true
-regBankSelected: true
-
-# CHECK: registers:
-# Existing registers should be left untouched
-# CHECK: - { id: 0, class: gpr }
-#CHECK-NEXT: - { id: 1, class: gpr }
-#CHECK-NEXT: - { id: 2, class: gpr }
-# The newly created reg should be on the same regbank/regclass as its origin.
-#CHECK-NEXT: - { id: 3, class: gpr }
-
-registers:
- - { id: 0, class: gpr }
- - { id: 1, class: gpr }
- - { id: 2, class: gpr }
-
-# CHECK: body:
-# CHECK: %0(s32) = G_CONSTANT 1
-# CHECK-NEXT: %1(s32) = G_ADD %0, %0
-
-# CHECK: bb.1:
-# CHECK: %3(s32) = G_CONSTANT 1
-# CHECK-NEXT: %2(s32) = G_ADD %3, %3
-body: |
- bb.0:
- successors: %bb.1
-
- %0(s32) = G_CONSTANT 1
- %1(s32) = G_ADD %0, %0
-
- bb.1:
- %2(s32) = G_ADD %0, %0
-...
-
----
-# CHECK-LABEL: name: non_local_phi_use
-name: non_local_phi_use
-legalized: true
-regBankSelected: true
-tracksRegLiveness: true
-
-# CHECK: registers:
-# Existing registers should be left untouched
-# CHECK: - { id: 0, class: gpr }
-#CHECK-NEXT: - { id: 1, class: gpr }
-#CHECK-NEXT: - { id: 2, class: gpr }
-#CHECK-NEXT: - { id: 3, class: gpr }
-#CHECK-NEXT: - { id: 4, class: gpr }
-# The newly created reg should be on the same regbank/regclass as its origin.
-#CHECK-NEXT: - { id: 5, class: gpr }
-
-registers:
- - { id: 0, class: gpr }
- - { id: 1, class: gpr }
- - { id: 2, class: gpr }
- - { id: 3, class: gpr }
- - { id: 4, class: gpr }
-
-# CHECK: body:
-# CHECK: %0(s32) = G_CONSTANT 1
-# CHECK-NEXT: %1(s32) = G_ADD %0, %0
-
-# CHECK: bb.1:
-# CHECK: %5(s32) = G_CONSTANT 1
-
-# CHECK: bb.2:
-# CHECK: %3(s32) = PHI %5(s32), %bb.1
-body: |
- bb.0:
- successors: %bb.1
-
- %0(s32) = G_CONSTANT 1
- %1(s32) = G_ADD %0, %0
-
- bb.1:
- successors: %bb.2
-
- bb.2:
- %3(s32) = PHI %0(s32), %bb.1
- %2(s32) = G_ADD %3, %3
-...
-
----
-# CHECK-LABEL: name: non_local_phi_use_followed_by_use
-name: non_local_phi_use_followed_by_use
-legalized: true
-regBankSelected: true
-tracksRegLiveness: true
-
-# CHECK: registers:
-# Existing registers should be left untouched
-# CHECK: - { id: 0, class: gpr }
-#CHECK-NEXT: - { id: 1, class: gpr }
-#CHECK-NEXT: - { id: 2, class: gpr }
-#CHECK-NEXT: - { id: 3, class: gpr }
-#CHECK-NEXT: - { id: 4, class: gpr }
-# The newly created regs should be on the same regbank/regclass as its origin.
-#CHECK-NEXT: - { id: 5, class: gpr }
-#CHECK-NEXT: - { id: 6, class: gpr }
-
-registers:
- - { id: 0, class: gpr }
- - { id: 1, class: gpr }
- - { id: 2, class: gpr }
- - { id: 3, class: gpr }
- - { id: 4, class: gpr }
-
-# CHECK: body:
-# CHECK: %0(s32) = G_CONSTANT 1
-# CHECK-NEXT: %1(s32) = G_ADD %0, %0
-
-# CHECK: bb.1:
-# CHECK: %5(s32) = G_CONSTANT 1
-
-# CHECK: bb.2:
-# CHECK: %3(s32) = PHI %5(s32), %bb.1
-# CHECK-NEXT: %6(s32) = G_CONSTANT 1
-# CHECK-NEXT: %2(s32) = G_ADD %3, %6
-body: |
- bb.0:
- successors: %bb.1
-
- %0(s32) = G_CONSTANT 1
- %1(s32) = G_ADD %0, %0
-
- bb.1:
- successors: %bb.2
-
- bb.2:
- %3(s32) = PHI %0(s32), %bb.1
- %2(s32) = G_ADD %3, %0
-...
-
----
-# CHECK-LABEL: name: non_local_phi_use_followed_by_use_fi
-name: non_local_phi_use_followed_by_use_fi
-legalized: true
-regBankSelected: true
-tracksRegLiveness: true
-
-# CHECK: registers:
-# Existing registers should be left untouched
-# CHECK: - { id: 0, class: gpr }
-#CHECK-NEXT: - { id: 1, class: gpr }
-#CHECK-NEXT: - { id: 2, class: gpr }
-#CHECK-NEXT: - { id: 3, class: gpr }
-#CHECK-NEXT: - { id: 4, class: gpr }
-# The newly created reg should be on the same regbank/regclass as its origin.
-#CHECK-NEXT: - { id: 5, class: gpr }
-#CHECK-NEXT: - { id: 6, class: gpr }
-
-registers:
- - { id: 0, class: gpr }
- - { id: 1, class: gpr }
- - { id: 2, class: gpr }
- - { id: 3, class: gpr }
- - { id: 4, class: gpr }
-
-# CHECK: body:
-# CHECK: %0(s32) = G_FRAME_INDEX 1
-# CHECK-NEXT: %1(s32) = G_ADD %0, %0
-
-# CHECK: bb.1:
-# CHECK: %5(s32) = G_FRAME_INDEX 1
-
-# CHECK: bb.2:
-# CHECK: %3(s32) = PHI %5(s32), %bb.1
-# CHECK-NEXT: %6(s32) = G_FRAME_INDEX 1
-# CHECK-NEXT: %2(s32) = G_ADD %3, %6
-body: |
- bb.0:
- successors: %bb.1
-
- %0(s32) = G_FRAME_INDEX 1
- %1(s32) = G_ADD %0, %0
-
- bb.1:
- successors: %bb.2
-
- bb.2:
- %3(s32) = PHI %0(s32), %bb.1
- %2(s32) = G_ADD %3, %0
-...
More information about the llvm-commits
mailing list