mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-22 13:29:44 +00:00
instead of requiring all "short description" strings to begin with two spaces. This makes these strings less mysterious, and it fixes some cases where short description strings mistakenly did not begin with two spaces. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@57521 91177308-0d34-0410-b5e6-96231b3b80d8
86 lines
2.5 KiB
C++
86 lines
2.5 KiB
C++
//===-- SPUTargetMachine.cpp - Define TargetMachine for Cell SPU ----------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Top-level implementation for the Cell SPU target.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "SPU.h"
|
|
#include "SPURegisterNames.h"
|
|
#include "SPUTargetAsmInfo.h"
|
|
#include "SPUTargetMachine.h"
|
|
#include "llvm/Module.h"
|
|
#include "llvm/PassManager.h"
|
|
#include "llvm/Target/TargetMachineRegistry.h"
|
|
|
|
using namespace llvm;
|
|
|
|
namespace {
|
|
// Register the targets
|
|
RegisterTarget<SPUTargetMachine>
|
|
CELLSPU("cellspu", "STI CBEA Cell SPU");
|
|
}
|
|
|
|
const std::pair<unsigned, int> *
|
|
SPUFrameInfo::getCalleeSaveSpillSlots(unsigned &NumEntries) const {
|
|
NumEntries = 1;
|
|
return &LR[0];
|
|
}
|
|
|
|
const TargetAsmInfo *
|
|
SPUTargetMachine::createTargetAsmInfo() const
|
|
{
|
|
return new SPUTargetAsmInfo(*this);
|
|
}
|
|
|
|
unsigned
|
|
SPUTargetMachine::getModuleMatchQuality(const Module &M)
|
|
{
|
|
// We strongly match "spu-*" or "cellspu-*".
|
|
std::string TT = M.getTargetTriple();
|
|
if ((TT.size() == 3 && std::string(TT.begin(), TT.begin()+3) == "spu")
|
|
|| (TT.size() == 7 && std::string(TT.begin(), TT.begin()+7) == "cellspu")
|
|
|| (TT.size() >= 4 && std::string(TT.begin(), TT.begin()+4) == "spu-")
|
|
|| (TT.size() >= 8 && std::string(TT.begin(), TT.begin()+8) == "cellspu-"))
|
|
return 20;
|
|
|
|
return 0; // No match at all...
|
|
}
|
|
|
|
SPUTargetMachine::SPUTargetMachine(const Module &M, const std::string &FS)
|
|
: Subtarget(*this, M, FS),
|
|
DataLayout(Subtarget.getTargetDataString()),
|
|
InstrInfo(*this),
|
|
FrameInfo(*this),
|
|
TLInfo(*this),
|
|
InstrItins(Subtarget.getInstrItineraryData())
|
|
{
|
|
// For the time being, use static relocations, since there's really no
|
|
// support for PIC yet.
|
|
setRelocationModel(Reloc::Static);
|
|
}
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Pass Pipeline Configuration
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
bool
|
|
SPUTargetMachine::addInstSelector(PassManagerBase &PM, bool Fast)
|
|
{
|
|
// Install an instruction selector.
|
|
PM.add(createSPUISelDag(*this));
|
|
return false;
|
|
}
|
|
|
|
bool SPUTargetMachine::addAssemblyEmitter(PassManagerBase &PM, bool Fast,
|
|
raw_ostream &Out) {
|
|
PM.add(createSPUAsmPrinterPass(Out, *this));
|
|
return false;
|
|
}
|