forked from OSchip/llvm-project
[NFC][MIR-Canon] clang-format cleanup of Mir Canonicalizer Pass.
llvm-svn: 330111
This commit is contained in:
parent
f594ce739b
commit
6ea89b4041
|
@ -43,14 +43,13 @@ extern char &MIRCanonicalizerID;
|
|||
#define DEBUG_TYPE "mir-canonicalizer"
|
||||
|
||||
static cl::opt<unsigned>
|
||||
CanonicalizeFunctionNumber("canon-nth-function", cl::Hidden, cl::init(~0u),
|
||||
cl::value_desc("N"),
|
||||
cl::desc("Function number to canonicalize."));
|
||||
CanonicalizeFunctionNumber("canon-nth-function", cl::Hidden, cl::init(~0u),
|
||||
cl::value_desc("N"),
|
||||
cl::desc("Function number to canonicalize."));
|
||||
|
||||
static cl::opt<unsigned>
|
||||
CanonicalizeBasicBlockNumber("canon-nth-basicblock", cl::Hidden, cl::init(~0u),
|
||||
cl::value_desc("N"),
|
||||
cl::desc("BasicBlock number to canonicalize."));
|
||||
static cl::opt<unsigned> CanonicalizeBasicBlockNumber(
|
||||
"canon-nth-basicblock", cl::Hidden, cl::init(~0u), cl::value_desc("N"),
|
||||
cl::desc("BasicBlock number to canonicalize."));
|
||||
|
||||
namespace {
|
||||
|
||||
|
@ -84,9 +83,9 @@ public:
|
|||
assert(type != RSE_Reg && "Expected a non-register type.");
|
||||
}
|
||||
|
||||
bool isReg() const { return type == RSE_Reg; }
|
||||
bool isFrameIndex() const { return type == RSE_FrameIndex; }
|
||||
bool isCandidate() const { return type == RSE_NewCandidate; }
|
||||
bool isReg() const { return type == RSE_Reg; }
|
||||
bool isFrameIndex() const { return type == RSE_FrameIndex; }
|
||||
bool isCandidate() const { return type == RSE_NewCandidate; }
|
||||
|
||||
VRType getType() const { return type; }
|
||||
unsigned getReg() const {
|
||||
|
@ -121,7 +120,7 @@ rescheduleLexographically(std::vector<MachineInstr *> instructions,
|
|||
std::function<MachineBasicBlock::iterator()> getPos) {
|
||||
|
||||
bool Changed = false;
|
||||
std::map<std::string, MachineInstr*> StringInstrMap;
|
||||
std::map<std::string, MachineInstr *> StringInstrMap;
|
||||
|
||||
for (auto *II : instructions) {
|
||||
std::string S;
|
||||
|
@ -214,7 +213,7 @@ static bool rescheduleCanonically(unsigned &PseudoIdempotentInstCount,
|
|||
if (II->getOperand(i).isReg()) {
|
||||
if (!TargetRegisterInfo::isVirtualRegister(II->getOperand(i).getReg()))
|
||||
if (llvm::find(PhysRegDefs, II->getOperand(i).getReg()) ==
|
||||
PhysRegDefs.end()) {
|
||||
PhysRegDefs.end()) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
@ -331,7 +330,8 @@ static std::vector<MachineInstr *> populateCandidates(MachineBasicBlock *MBB) {
|
|||
DoesMISideEffect |= !TargetRegisterInfo::isVirtualRegister(Dst);
|
||||
|
||||
for (auto UI = MRI.use_begin(Dst); UI != MRI.use_end(); ++UI) {
|
||||
if (DoesMISideEffect) break;
|
||||
if (DoesMISideEffect)
|
||||
break;
|
||||
DoesMISideEffect |= (UI->getParent()->getParent() != MI->getParent());
|
||||
}
|
||||
}
|
||||
|
@ -423,58 +423,53 @@ static void doCandidateWalk(std::vector<TypedVReg> &VRegs,
|
|||
|
||||
class NamedVRegCursor {
|
||||
|
||||
private:
|
||||
private:
|
||||
MachineRegisterInfo &MRI;
|
||||
unsigned virtualVRegNumber;
|
||||
|
||||
MachineRegisterInfo &MRI;
|
||||
unsigned virtualVRegNumber;
|
||||
public:
|
||||
NamedVRegCursor(MachineRegisterInfo &MRI) : MRI(MRI) {
|
||||
unsigned VRegGapIndex = 0;
|
||||
const unsigned VR_GAP = (++VRegGapIndex * 1000);
|
||||
|
||||
public:
|
||||
unsigned I = MRI.createIncompleteVirtualRegister();
|
||||
const unsigned E = (((I + VR_GAP) / VR_GAP) + 1) * VR_GAP;
|
||||
|
||||
NamedVRegCursor(MachineRegisterInfo &MRI): MRI(MRI) {
|
||||
unsigned VRegGapIndex = 0;
|
||||
const unsigned VR_GAP = (++VRegGapIndex * 1000);
|
||||
virtualVRegNumber = E;
|
||||
}
|
||||
|
||||
unsigned I = MRI.createIncompleteVirtualRegister();
|
||||
const unsigned E = (((I + VR_GAP) / VR_GAP) + 1) * VR_GAP;
|
||||
void SkipVRegs() {
|
||||
unsigned VRegGapIndex = 1;
|
||||
const unsigned VR_GAP = (++VRegGapIndex * 1000);
|
||||
|
||||
virtualVRegNumber = E;
|
||||
}
|
||||
unsigned I = virtualVRegNumber;
|
||||
const unsigned E = (((I + VR_GAP) / VR_GAP) + 1) * VR_GAP;
|
||||
|
||||
void SkipVRegs() {
|
||||
unsigned VRegGapIndex = 1;
|
||||
const unsigned VR_GAP = (++VRegGapIndex * 1000);
|
||||
virtualVRegNumber = E;
|
||||
}
|
||||
|
||||
unsigned I = virtualVRegNumber;
|
||||
const unsigned E = (((I + VR_GAP) / VR_GAP) + 1) * VR_GAP;
|
||||
unsigned getVirtualVReg() const { return virtualVRegNumber; }
|
||||
|
||||
virtualVRegNumber = E;
|
||||
}
|
||||
unsigned incrementVirtualVReg(unsigned incr = 1) {
|
||||
virtualVRegNumber += incr;
|
||||
return virtualVRegNumber;
|
||||
}
|
||||
|
||||
unsigned getVirtualVReg() const {
|
||||
return virtualVRegNumber;
|
||||
}
|
||||
unsigned createVirtualRegister(const TargetRegisterClass *RC) {
|
||||
std::string S;
|
||||
raw_string_ostream OS(S);
|
||||
OS << "namedVReg" << (virtualVRegNumber & ~0x80000000);
|
||||
OS.flush();
|
||||
virtualVRegNumber++;
|
||||
|
||||
unsigned incrementVirtualVReg(unsigned incr = 1) {
|
||||
virtualVRegNumber += incr;
|
||||
return virtualVRegNumber;
|
||||
}
|
||||
|
||||
unsigned createVirtualRegister(const TargetRegisterClass *RC) {
|
||||
std::string S;
|
||||
raw_string_ostream OS(S);
|
||||
OS << "namedVReg" << (virtualVRegNumber & ~0x80000000);
|
||||
OS.flush();
|
||||
virtualVRegNumber++;
|
||||
|
||||
return MRI.createVirtualRegister(RC, OS.str());
|
||||
}
|
||||
return MRI.createVirtualRegister(RC, OS.str());
|
||||
}
|
||||
};
|
||||
|
||||
static std::map<unsigned, unsigned>
|
||||
GetVRegRenameMap(const std::vector<TypedVReg> &VRegs,
|
||||
const std::vector<unsigned> &renamedInOtherBB,
|
||||
MachineRegisterInfo &MRI,
|
||||
NamedVRegCursor &NVC) {
|
||||
MachineRegisterInfo &MRI, NamedVRegCursor &NVC) {
|
||||
std::map<unsigned, unsigned> VRegRenameMap;
|
||||
bool FirstCandidate = true;
|
||||
|
||||
|
@ -484,7 +479,8 @@ GetVRegRenameMap(const std::vector<TypedVReg> &VRegs,
|
|||
// (especially when comparing SelectionDAG to GlobalISel generated MIR)
|
||||
// that in the other file we are just getting an incoming vreg that comes
|
||||
// from a copy from a frame index. So it's safe to skip by one.
|
||||
unsigned LastRenameReg = NVC.incrementVirtualVReg(); (void)LastRenameReg;
|
||||
unsigned LastRenameReg = NVC.incrementVirtualVReg();
|
||||
(void)LastRenameReg;
|
||||
DEBUG(dbgs() << "Skipping rename for FI " << LastRenameReg << "\n";);
|
||||
continue;
|
||||
} else if (vreg.isCandidate()) {
|
||||
|
@ -500,7 +496,8 @@ GetVRegRenameMap(const std::vector<TypedVReg> &VRegs,
|
|||
FirstCandidate = false;
|
||||
continue;
|
||||
} else if (!TargetRegisterInfo::isVirtualRegister(vreg.getReg())) {
|
||||
unsigned LastRenameReg = NVC.incrementVirtualVReg(); (void)LastRenameReg;
|
||||
unsigned LastRenameReg = NVC.incrementVirtualVReg();
|
||||
(void)LastRenameReg;
|
||||
DEBUG({
|
||||
dbgs() << "Skipping rename for Phys Reg " << LastRenameReg << "\n";
|
||||
});
|
||||
|
@ -666,8 +663,8 @@ static bool runOnBasicBlock(MachineBasicBlock *MBB,
|
|||
|
||||
DEBUG(dbgs() << "Enqueue Reg/FI"; MO.dump(); dbgs() << "\n";);
|
||||
|
||||
RegQueue.push(MO.isReg() ? TypedVReg(MO.getReg()) :
|
||||
TypedVReg(RSE_FrameIndex));
|
||||
RegQueue.push(MO.isReg() ? TypedVReg(MO.getReg())
|
||||
: TypedVReg(RSE_FrameIndex));
|
||||
}
|
||||
|
||||
doCandidateWalk(VRegs, RegQueue, VisitedMIs, MBB);
|
||||
|
@ -722,17 +719,14 @@ bool MIRCanonicalizer::runOnMachineFunction(MachineFunction &MF) {
|
|||
|
||||
// we need a valid vreg to create a vreg type for skipping all those
|
||||
// stray vreg numbers so reach alignment/canonical vreg values.
|
||||
std::vector<MachineBasicBlock*> RPOList = GetRPOList(MF);
|
||||
std::vector<MachineBasicBlock *> RPOList = GetRPOList(MF);
|
||||
|
||||
DEBUG(
|
||||
dbgs() << "\n\n NEW MACHINE FUNCTION: " << MF.getName() << " \n\n";
|
||||
dbgs() << "\n\n================================================\n\n";
|
||||
dbgs() << "Total Basic Blocks: " << RPOList.size() << "\n";
|
||||
for (auto MBB : RPOList) {
|
||||
dbgs() << MBB->getName() << "\n";
|
||||
}
|
||||
dbgs() << "\n\n================================================\n\n";
|
||||
);
|
||||
DEBUG(dbgs() << "\n\n NEW MACHINE FUNCTION: " << MF.getName() << " \n\n";
|
||||
dbgs() << "\n\n================================================\n\n";
|
||||
dbgs() << "Total Basic Blocks: " << RPOList.size() << "\n";
|
||||
for (auto MBB
|
||||
: RPOList) { dbgs() << MBB->getName() << "\n"; } dbgs()
|
||||
<< "\n\n================================================\n\n";);
|
||||
|
||||
std::vector<StringRef> BBNames;
|
||||
std::vector<unsigned> RenamedInOtherBB;
|
||||
|
@ -745,8 +739,8 @@ bool MIRCanonicalizer::runOnMachineFunction(MachineFunction &MF) {
|
|||
MachineRegisterInfo &MRI = MF.getRegInfo();
|
||||
NamedVRegCursor NVC(MRI);
|
||||
for (auto MBB : RPOList)
|
||||
Changed |= runOnBasicBlock(MBB, BBNames, RenamedInOtherBB, BBNum, GapIdx, NVC);
|
||||
Changed |=
|
||||
runOnBasicBlock(MBB, BBNames, RenamedInOtherBB, BBNum, GapIdx, NVC);
|
||||
|
||||
return Changed;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue