Add trivial subtarget support

llvm-svn: 25641
This commit is contained in:
Chris Lattner 2006-01-26 06:51:21 +00:00
parent 0a01374299
commit e6842a9da6
6 changed files with 86 additions and 1 deletions

View File

@ -14,7 +14,7 @@ TARGET = SparcV8
BUILT_SOURCES = SparcV8GenRegisterInfo.h.inc SparcV8GenRegisterNames.inc \
SparcV8GenRegisterInfo.inc SparcV8GenInstrNames.inc \
SparcV8GenInstrInfo.inc SparcV8GenAsmWriter.inc \
SparcV8GenDAGISel.inc
SparcV8GenDAGISel.inc SparcV8GenSubtarget.inc
include $(LEVEL)/Makefile.common

View File

@ -16,6 +16,14 @@
include "../Target.td"
//===----------------------------------------------------------------------===//
// PowerPC Subtarget features.
//
def Feature64Bit : SubtargetFeature<"64bit", "bool", "Is64Bit",
"Enable 64-bit instructions">;
//===----------------------------------------------------------------------===//
// Register File Description
//===----------------------------------------------------------------------===//
@ -36,6 +44,14 @@ def SparcV8InstrInfo : InstrInfo {
let TSFlagsShifts = [];
}
//===----------------------------------------------------------------------===//
// SPARC processors supported.
//===----------------------------------------------------------------------===//
def : Processor<"generic", NoItineraries, []>;
def : Processor<"v8", NoItineraries, []>;
def : Processor<"v9", NoItineraries, [Feature64Bit]>;
//===----------------------------------------------------------------------===//
// Declare the target which we are implementing
//===----------------------------------------------------------------------===//

View File

@ -0,0 +1,27 @@
//===- SparcV8Subtarget.cpp - SPARC Subtarget Information -----------------===//
//
// The LLVM Compiler Infrastructure
//
// This file was developed by Chris Lattner and is distributed under the
// University of Illinois Open Source License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file implements the SPARC specific subclass of TargetSubtarget.
//
//===----------------------------------------------------------------------===//
#include "SparcV8Subtarget.h"
#include "SparcV8GenSubtarget.inc"
using namespace llvm;
SparcV8Subtarget::SparcV8Subtarget(const Module &M, const std::string &FS) {
// Determine default and user specified characteristics
std::string CPU = "generic";
// FIXME: autodetect host here!
// Parse features string.
ParseSubtargetFeatures(FS, CPU);
};

View File

@ -0,0 +1,38 @@
//=====-- SparcV8Subtarget.h - Define Subtarget for the SPARC -*- C++ -*--====//
//
// The LLVM Compiler Infrastructure
//
// This file was developed by Chris Lattner and is distributed under the
// University of Illinois Open Source License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file declares the SPARC specific subclass of TargetSubtarget.
//
//===----------------------------------------------------------------------===//
#ifndef SPARC_SUBTARGET_H
#define SPARC_SUBTARGET_H
#include "llvm/Target/TargetSubtarget.h"
#include <string>
namespace llvm {
class Module;
class SparcV8Subtarget : public TargetSubtarget {
bool Is64Bit;
public:
SparcV8Subtarget(const Module &M, const std::string &FS);
bool is64Bit() const { return Is64Bit; }
/// ParseSubtargetFeatures - Parses features string setting specified
/// subtarget options. Definition of function is auto generated by tblgen.
void ParseSubtargetFeatures(const std::string &FS, const std::string &CPU);
};
} // end namespace llvm
#endif

View File

@ -35,6 +35,7 @@ SparcV8TargetMachine::SparcV8TargetMachine(const Module &M,
IntrinsicLowering *IL,
const std::string &FS)
: TargetMachine("SparcV8", IL, false, 4, 4),
Subtarget(M, FS),
FrameInfo(TargetFrameInfo::StackGrowsDown, 8, 0) {
}

View File

@ -18,6 +18,7 @@
#include "llvm/Target/TargetFrameInfo.h"
#include "llvm/PassManager.h"
#include "SparcV8InstrInfo.h"
#include "SparcV8Subtarget.h"
namespace llvm {
@ -25,6 +26,7 @@ class IntrinsicLowering;
class Module;
class SparcV8TargetMachine : public TargetMachine {
SparcV8Subtarget Subtarget;
SparcV8InstrInfo InstrInfo;
TargetFrameInfo FrameInfo;
public:
@ -33,6 +35,7 @@ public:
virtual const SparcV8InstrInfo *getInstrInfo() const { return &InstrInfo; }
virtual const TargetFrameInfo *getFrameInfo() const { return &FrameInfo; }
virtual const TargetSubtarget *getSubtargetImpl() const{ return &Subtarget; }
virtual const MRegisterInfo *getRegisterInfo() const {
return &InstrInfo.getRegisterInfo();
}