Home | History | Annotate | Download | only in MBlaze
      1 //===-- MBlazeTargetMachine.cpp - Define TargetMachine for MBlaze ---------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // Implements the info about MBlaze target spec.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 #include "MBlaze.h"
     15 #include "MBlazeTargetMachine.h"
     16 #include "llvm/PassManager.h"
     17 #include "llvm/CodeGen/Passes.h"
     18 #include "llvm/Support/FormattedStream.h"
     19 #include "llvm/Support/TargetRegistry.h"
     20 #include "llvm/Target/TargetOptions.h"
     21 using namespace llvm;
     22 
     23 extern "C" void LLVMInitializeMBlazeTarget() {
     24   // Register the target.
     25   RegisterTargetMachine<MBlazeTargetMachine> X(TheMBlazeTarget);
     26 }
     27 
     28 // DataLayout --> Big-endian, 32-bit pointer/ABI/alignment
     29 // The stack is always 8 byte aligned
     30 // On function prologue, the stack is created by decrementing
     31 // its pointer. Once decremented, all references are done with positive
     32 // offset from the stack/frame pointer, using StackGrowsUp enables
     33 // an easier handling.
     34 MBlazeTargetMachine::
     35 MBlazeTargetMachine(const Target &T, StringRef TT,
     36                     StringRef CPU, StringRef FS,
     37                     Reloc::Model RM, CodeModel::Model CM):
     38   LLVMTargetMachine(T, TT, CPU, FS, RM, CM),
     39   Subtarget(TT, CPU, FS),
     40   DataLayout("E-p:32:32:32-i8:8:8-i16:16:16"),
     41   InstrInfo(*this),
     42   FrameLowering(Subtarget),
     43   TLInfo(*this), TSInfo(*this), ELFWriterInfo(*this),
     44   InstrItins(Subtarget.getInstrItineraryData()) {
     45 }
     46 
     47 // Install an instruction selector pass using
     48 // the ISelDag to gen MBlaze code.
     49 bool MBlazeTargetMachine::addInstSelector(PassManagerBase &PM,
     50                                           CodeGenOpt::Level OptLevel) {
     51   PM.add(createMBlazeISelDag(*this));
     52   return false;
     53 }
     54 
     55 // Implemented by targets that want to run passes immediately before
     56 // machine code is emitted. return true if -print-machineinstrs should
     57 // print out the code after the passes.
     58 bool MBlazeTargetMachine::addPreEmitPass(PassManagerBase &PM,
     59                                          CodeGenOpt::Level OptLevel) {
     60   PM.add(createMBlazeDelaySlotFillerPass(*this));
     61   return true;
     62 }
     63