mirror of
https://github.com/RPCS3/llvm.git
synced 2025-02-25 13:20:57 +00:00

The DEBUG() macro is very generic so it might clash with other projects. The renaming was done as follows: - git grep -l 'DEBUG' | xargs sed -i 's/\bDEBUG\s\?(/LLVM_DEBUG(/g' - git diff -U0 master | ../clang/tools/clang-format/clang-format-diff.py -i -p1 -style LLVM - Manual change to APInt - Manually chage DOCS as regex doesn't match it. In the transition period the DEBUG() macro is still present and aliased to the LLVM_DEBUG() one. Differential Revision: https://reviews.llvm.org/D43624 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@332240 91177308-0d34-0410-b5e6-96231b3b80d8
92 lines
2.6 KiB
C++
92 lines
2.6 KiB
C++
//===--------------------- Backend.cpp --------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
/// \file
|
|
///
|
|
/// Implementation of class Backend which emulates an hardware OoO backend.
|
|
///
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "Backend.h"
|
|
#include "HWEventListener.h"
|
|
#include "llvm/CodeGen/TargetSchedule.h"
|
|
#include "llvm/Support/Debug.h"
|
|
|
|
namespace mca {
|
|
|
|
#define DEBUG_TYPE "llvm-mca"
|
|
|
|
using namespace llvm;
|
|
|
|
void Backend::addEventListener(HWEventListener *Listener) {
|
|
if (Listener)
|
|
Listeners.insert(Listener);
|
|
}
|
|
|
|
void Backend::runCycle(unsigned Cycle) {
|
|
notifyCycleBegin(Cycle);
|
|
|
|
while (SM.hasNext()) {
|
|
SourceRef SR = SM.peekNext();
|
|
std::unique_ptr<Instruction> NewIS = IB.createInstruction(*SR.second);
|
|
const InstrDesc &Desc = NewIS->getDesc();
|
|
Instruction *IS = NewIS.get();
|
|
InstRef IR(SR.first, IS);
|
|
if (!DU->isAvailable(Desc.NumMicroOps) || !DU->canDispatch(IR))
|
|
break;
|
|
Instructions[SR.first] = std::move(NewIS);
|
|
DU->dispatch(IR, STI);
|
|
SM.updateNext();
|
|
}
|
|
|
|
notifyCycleEnd(Cycle);
|
|
}
|
|
|
|
void Backend::notifyCycleBegin(unsigned Cycle) {
|
|
LLVM_DEBUG(dbgs() << "[E] Cycle begin: " << Cycle << '\n');
|
|
for (HWEventListener *Listener : Listeners)
|
|
Listener->onCycleBegin();
|
|
|
|
DU->cycleEvent();
|
|
HWS->cycleEvent();
|
|
}
|
|
|
|
void Backend::notifyInstructionEvent(const HWInstructionEvent &Event) {
|
|
for (HWEventListener *Listener : Listeners)
|
|
Listener->onInstructionEvent(Event);
|
|
}
|
|
|
|
void Backend::notifyStallEvent(const HWStallEvent &Event) {
|
|
for (HWEventListener *Listener : Listeners)
|
|
Listener->onStallEvent(Event);
|
|
}
|
|
|
|
void Backend::notifyResourceAvailable(const ResourceRef &RR) {
|
|
LLVM_DEBUG(dbgs() << "[E] Resource Available: [" << RR.first << '.'
|
|
<< RR.second << "]\n");
|
|
for (HWEventListener *Listener : Listeners)
|
|
Listener->onResourceAvailable(RR);
|
|
}
|
|
|
|
void Backend::notifyReservedBuffers(ArrayRef<unsigned> Buffers) {
|
|
for (HWEventListener *Listener : Listeners)
|
|
Listener->onReservedBuffers(Buffers);
|
|
}
|
|
|
|
void Backend::notifyReleasedBuffers(ArrayRef<unsigned> Buffers) {
|
|
for (HWEventListener *Listener : Listeners)
|
|
Listener->onReleasedBuffers(Buffers);
|
|
}
|
|
|
|
void Backend::notifyCycleEnd(unsigned Cycle) {
|
|
LLVM_DEBUG(dbgs() << "[E] Cycle end: " << Cycle << "\n\n");
|
|
for (HWEventListener *Listener : Listeners)
|
|
Listener->onCycleEnd();
|
|
}
|
|
} // namespace mca.
|