mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-11 10:31:40 +00:00
f0f9c90204
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25544 91177308-0d34-0410-b5e6-96231b3b80d8
62 lines
1.8 KiB
C++
62 lines
1.8 KiB
C++
//===-- ScheduleDAGSimple.cpp - Implement a list scheduler for isel DAG ---===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file was developed by Evan Cheng and is distributed under the
|
|
// University of Illinois Open Source License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This implements a simple two pass scheduler. The first pass attempts to push
|
|
// backward any lengthy instructions and critical paths. The second pass packs
|
|
// instructions into semi-optimal time slots.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#define DEBUG_TYPE "sched"
|
|
#include "llvm/CodeGen/ScheduleDAG.h"
|
|
#include "llvm/CodeGen/SelectionDAG.h"
|
|
#include "llvm/Target/TargetMachine.h"
|
|
#include "llvm/Target/TargetInstrInfo.h"
|
|
#include <algorithm>
|
|
#include <queue>
|
|
using namespace llvm;
|
|
|
|
|
|
namespace llvm {
|
|
/// Sorting functions for ready queue.
|
|
struct LSSortPred : public std::binary_function<SDOperand, SDOperand, bool> {
|
|
bool operator()(const SDOperand* left, const SDOperand* right) const {
|
|
return true;
|
|
}
|
|
};
|
|
|
|
/// ScheduleDAGList - List scheduler.
|
|
|
|
class ScheduleDAGList : public ScheduleDAG {
|
|
private:
|
|
LSSortPred &Cmp;
|
|
|
|
// Ready queue
|
|
std::priority_queue<SDOperand*, std::vector<SDOperand*>, LSSortPred> Ready;
|
|
|
|
public:
|
|
ScheduleDAGList(SelectionDAG &dag, MachineBasicBlock *bb,
|
|
const TargetMachine &tm, LSSortPred cmp)
|
|
: ScheduleDAG(listSchedulingBURR, dag, bb, tm), Cmp(cmp), Ready(Cmp)
|
|
{};
|
|
|
|
void Schedule();
|
|
};
|
|
} // end namespace llvm
|
|
|
|
void ScheduleDAGList::Schedule() {
|
|
}
|
|
|
|
|
|
llvm::ScheduleDAG*
|
|
llvm::createBURRListDAGScheduler(SelectionDAG &DAG,
|
|
MachineBasicBlock *BB) {
|
|
return new ScheduleDAGList(DAG, BB, DAG.getTarget(), LSSortPred());
|
|
}
|