mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-28 19:31:58 +00:00
8a8d479214
change, now you need a TargetOptions object to create a TargetMachine. Clang patch to follow. One small functionality change in PTX. PTX had commented out the machine verifier parts in their copy of printAndVerify. That now calls the version in LLVMTargetMachine. Users of PTX who need verification disabled should rely on not passing the command-line flag to enable it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145714 91177308-0d34-0410-b5e6-96231b3b80d8
62 lines
2.2 KiB
C++
62 lines
2.2 KiB
C++
//===-- MBlazeTargetMachine.cpp - Define TargetMachine for MBlaze ---------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Implements the info about MBlaze target spec.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "MBlaze.h"
|
|
#include "MBlazeTargetMachine.h"
|
|
#include "llvm/PassManager.h"
|
|
#include "llvm/CodeGen/Passes.h"
|
|
#include "llvm/Support/FormattedStream.h"
|
|
#include "llvm/Support/TargetRegistry.h"
|
|
#include "llvm/Target/TargetOptions.h"
|
|
using namespace llvm;
|
|
|
|
extern "C" void LLVMInitializeMBlazeTarget() {
|
|
// Register the target.
|
|
RegisterTargetMachine<MBlazeTargetMachine> X(TheMBlazeTarget);
|
|
}
|
|
|
|
// DataLayout --> Big-endian, 32-bit pointer/ABI/alignment
|
|
// The stack is always 8 byte aligned
|
|
// On function prologue, the stack is created by decrementing
|
|
// its pointer. Once decremented, all references are done with positive
|
|
// offset from the stack/frame pointer, using StackGrowsUp enables
|
|
// an easier handling.
|
|
MBlazeTargetMachine::
|
|
MBlazeTargetMachine(const Target &T, StringRef TT,
|
|
StringRef CPU, StringRef FS, const TargetOptions &Options,
|
|
Reloc::Model RM, CodeModel::Model CM,
|
|
CodeGenOpt::Level OL)
|
|
: LLVMTargetMachine(T, TT, CPU, FS, Options, RM, CM, OL),
|
|
Subtarget(TT, CPU, FS),
|
|
DataLayout("E-p:32:32:32-i8:8:8-i16:16:16"),
|
|
InstrInfo(*this),
|
|
FrameLowering(Subtarget),
|
|
TLInfo(*this), TSInfo(*this), ELFWriterInfo(*this),
|
|
InstrItins(Subtarget.getInstrItineraryData()) {
|
|
}
|
|
|
|
// Install an instruction selector pass using
|
|
// the ISelDag to gen MBlaze code.
|
|
bool MBlazeTargetMachine::addInstSelector(PassManagerBase &PM) {
|
|
PM.add(createMBlazeISelDag(*this));
|
|
return false;
|
|
}
|
|
|
|
// Implemented by targets that want to run passes immediately before
|
|
// machine code is emitted. return true if -print-machineinstrs should
|
|
// print out the code after the passes.
|
|
bool MBlazeTargetMachine::addPreEmitPass(PassManagerBase &PM) {
|
|
PM.add(createMBlazeDelaySlotFillerPass(*this));
|
|
return true;
|
|
}
|