mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-22 03:58:15 +00:00
[globalisel] Enable tracing the legalizer with --debug-only=legalize-mir
Reviewers: t.p.northover, ab, qcolombet, aditya_nandakumar, rovka, kristof.beyls Reviewed By: kristof.beyls Subscribers: dberris, igorb, llvm-commits Differential Revision: https://reviews.llvm.org/D31750 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@300847 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
98dfa5e49d
commit
42e519ed10
@ -24,6 +24,8 @@
|
||||
#include "llvm/Target/TargetInstrInfo.h"
|
||||
#include "llvm/Target/TargetSubtargetInfo.h"
|
||||
|
||||
#include <iterator>
|
||||
|
||||
#define DEBUG_TYPE "legalizer"
|
||||
|
||||
using namespace llvm;
|
||||
@ -161,7 +163,7 @@ bool Legalizer::runOnMachineFunction(MachineFunction &MF) {
|
||||
// convergence for performance reasons.
|
||||
bool Changed = false;
|
||||
MachineBasicBlock::iterator NextMI;
|
||||
for (auto &MBB : MF)
|
||||
for (auto &MBB : MF) {
|
||||
for (auto MI = MBB.begin(); MI != MBB.end(); MI = NextMI) {
|
||||
// Get the next Instruction before we try to legalize, because there's a
|
||||
// good chance MI will be deleted.
|
||||
@ -171,18 +173,21 @@ bool Legalizer::runOnMachineFunction(MachineFunction &MF) {
|
||||
// and are assumed to be legal.
|
||||
if (!isPreISelGenericOpcode(MI->getOpcode()))
|
||||
continue;
|
||||
unsigned NumNewInsns = 0;
|
||||
SmallVector<MachineInstr *, 4> WorkList;
|
||||
Helper.MIRBuilder.recordInsertions(
|
||||
[&](MachineInstr *MI) { WorkList.push_back(MI); });
|
||||
Helper.MIRBuilder.recordInsertions([&](MachineInstr *MI) {
|
||||
++NumNewInsns;
|
||||
WorkList.push_back(MI);
|
||||
});
|
||||
WorkList.push_back(&*MI);
|
||||
|
||||
bool Changed = false;
|
||||
LegalizerHelper::LegalizeResult Res;
|
||||
unsigned Idx = 0;
|
||||
do {
|
||||
Res = Helper.legalizeInstrStep(*WorkList[Idx]);
|
||||
// Error out if we couldn't legalize this instruction. We may want to
|
||||
// fall
|
||||
// back to DAG ISel instead in the future.
|
||||
// fall back to DAG ISel instead in the future.
|
||||
if (Res == LegalizerHelper::UnableToLegalize) {
|
||||
Helper.MIRBuilder.stopRecordingInsertions();
|
||||
if (Res == LegalizerHelper::UnableToLegalize) {
|
||||
@ -194,10 +199,21 @@ bool Legalizer::runOnMachineFunction(MachineFunction &MF) {
|
||||
}
|
||||
Changed |= Res == LegalizerHelper::Legalized;
|
||||
++Idx;
|
||||
|
||||
#ifndef NDEBUG
|
||||
if (NumNewInsns) {
|
||||
DEBUG(dbgs() << ".. .. Emitted " << NumNewInsns << " insns\n");
|
||||
for (auto I = WorkList.end() - NumNewInsns, E = WorkList.end();
|
||||
I != E; ++I)
|
||||
DEBUG(dbgs() << ".. .. New MI: "; (*I)->print(dbgs()));
|
||||
NumNewInsns = 0;
|
||||
}
|
||||
#endif
|
||||
} while (Idx < WorkList.size());
|
||||
|
||||
Helper.MIRBuilder.stopRecordingInsertions();
|
||||
}
|
||||
}
|
||||
|
||||
MachineRegisterInfo &MRI = MF.getRegInfo();
|
||||
const TargetInstrInfo &TII = *MF.getSubtarget().getInstrInfo();
|
||||
|
@ -24,7 +24,7 @@
|
||||
|
||||
#include <sstream>
|
||||
|
||||
#define DEBUG_TYPE "legalize-mir"
|
||||
#define DEBUG_TYPE "legalizer"
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
@ -35,24 +35,34 @@ LegalizerHelper::LegalizerHelper(MachineFunction &MF)
|
||||
|
||||
LegalizerHelper::LegalizeResult
|
||||
LegalizerHelper::legalizeInstrStep(MachineInstr &MI) {
|
||||
DEBUG(dbgs() << "Legalizing: "; MI.print(dbgs()));
|
||||
|
||||
auto Action = LI.getAction(MI, MRI);
|
||||
switch (std::get<0>(Action)) {
|
||||
case LegalizerInfo::Legal:
|
||||
DEBUG(dbgs() << ".. Already legal\n");
|
||||
return AlreadyLegal;
|
||||
case LegalizerInfo::Libcall:
|
||||
DEBUG(dbgs() << ".. Convert to libcall\n");
|
||||
return libcall(MI);
|
||||
case LegalizerInfo::NarrowScalar:
|
||||
DEBUG(dbgs() << ".. Narrow scalar\n");
|
||||
return narrowScalar(MI, std::get<1>(Action), std::get<2>(Action));
|
||||
case LegalizerInfo::WidenScalar:
|
||||
DEBUG(dbgs() << ".. Widen scalar\n");
|
||||
return widenScalar(MI, std::get<1>(Action), std::get<2>(Action));
|
||||
case LegalizerInfo::Lower:
|
||||
DEBUG(dbgs() << ".. Lower\n");
|
||||
return lower(MI, std::get<1>(Action), std::get<2>(Action));
|
||||
case LegalizerInfo::FewerElements:
|
||||
DEBUG(dbgs() << ".. Reduce number of elements\n");
|
||||
return fewerElementsVector(MI, std::get<1>(Action), std::get<2>(Action));
|
||||
case LegalizerInfo::Custom:
|
||||
DEBUG(dbgs() << ".. Custom legalization\n");
|
||||
return LI.legalizeCustom(MI, MRI, MIRBuilder) ? Legalized
|
||||
: UnableToLegalize;
|
||||
default:
|
||||
DEBUG(dbgs() << ".. Unable to legalize\n");
|
||||
return UnableToLegalize;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user