blob: 2280d29265f885407135e826954cb2ca3001c2b4 [file] [log] [blame]
Chris Lattner158e1f52006-02-05 05:50:24 +00001//===-- SparcTargetMachine.h - Define TargetMachine for Sparc ---*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
Chris Lattnerf3ebc3f2007-12-29 20:36:04 +00005// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Chris Lattner158e1f52006-02-05 05:50:24 +00007//
8//===----------------------------------------------------------------------===//
9//
10// This file declares the Sparc specific subclass of TargetMachine.
11//
12//===----------------------------------------------------------------------===//
13
Benjamin Kramera7c40ef2014-08-13 16:26:38 +000014#ifndef LLVM_LIB_TARGET_SPARC_SPARCTARGETMACHINE_H
15#define LLVM_LIB_TARGET_SPARC_SPARCTARGETMACHINE_H
Chris Lattner158e1f52006-02-05 05:50:24 +000016
Chandler Carruth802d7552012-12-04 07:12:27 +000017#include "SparcInstrInfo.h"
Anton Korobeynikovf7183ed2010-11-15 00:06:54 +000018#include "SparcSubtarget.h"
Chandler Carruth802d7552012-12-04 07:12:27 +000019#include "llvm/Target/TargetMachine.h"
Chris Lattner158e1f52006-02-05 05:50:24 +000020
21namespace llvm {
22
Chris Lattner12e97302006-09-04 04:14:57 +000023class SparcTargetMachine : public LLVMTargetMachine {
Chris Lattner158e1f52006-02-05 05:50:24 +000024 SparcSubtarget Subtarget;
Chris Lattner158e1f52006-02-05 05:50:24 +000025public:
Evan Cheng2129f592011-07-19 06:37:02 +000026 SparcTargetMachine(const Target &T, StringRef TT,
Nick Lewycky50f02cb2011-12-02 22:16:29 +000027 StringRef CPU, StringRef FS, const TargetOptions &Options,
Evan Chengecb29082011-11-16 08:38:26 +000028 Reloc::Model RM, CodeModel::Model CM,
Nick Lewycky50f02cb2011-12-02 22:16:29 +000029 CodeGenOpt::Level OL, bool is64bit);
Chris Lattner158e1f52006-02-05 05:50:24 +000030
Hans Wennborg12d1e242014-05-24 20:19:40 +000031 const SparcSubtarget *getSubtargetImpl() const override { return &Subtarget; }
Rafael Espindolab8141d52014-08-05 22:10:21 +000032
Eric Christopherb9fd9ed2014-08-07 22:02:54 +000033 SparcSubtarget *getSubtargetImpl() {
34 return static_cast<SparcSubtarget *>(TargetMachine::getSubtargetImpl());
35 }
36
Chris Lattner12e97302006-09-04 04:14:57 +000037 // Pass Pipeline Configuration
Craig Topperb0c941b2014-04-29 07:57:13 +000038 TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
Eric Christopherb9fd9ed2014-08-07 22:02:54 +000039 bool addCodeEmitter(PassManagerBase &PM, JITCodeEmitter &JCE) override;
Chris Lattner158e1f52006-02-05 05:50:24 +000040};
41
Chris Lattner8228b112010-02-04 06:34:01 +000042/// SparcV8TargetMachine - Sparc 32-bit target machine
43///
44class SparcV8TargetMachine : public SparcTargetMachine {
David Blaikiea379b1812011-12-20 02:50:00 +000045 virtual void anchor();
Chris Lattner8228b112010-02-04 06:34:01 +000046public:
Evan Cheng2129f592011-07-19 06:37:02 +000047 SparcV8TargetMachine(const Target &T, StringRef TT,
Evan Chengefd9b422011-07-20 07:51:56 +000048 StringRef CPU, StringRef FS,
Nick Lewycky50f02cb2011-12-02 22:16:29 +000049 const TargetOptions &Options,
Evan Chengecb29082011-11-16 08:38:26 +000050 Reloc::Model RM, CodeModel::Model CM,
51 CodeGenOpt::Level OL);
Chris Lattner8228b112010-02-04 06:34:01 +000052};
53
54/// SparcV9TargetMachine - Sparc 64-bit target machine
55///
56class SparcV9TargetMachine : public SparcTargetMachine {
David Blaikiea379b1812011-12-20 02:50:00 +000057 virtual void anchor();
Chris Lattner8228b112010-02-04 06:34:01 +000058public:
Evan Cheng2129f592011-07-19 06:37:02 +000059 SparcV9TargetMachine(const Target &T, StringRef TT,
Evan Chengefd9b422011-07-20 07:51:56 +000060 StringRef CPU, StringRef FS,
Nick Lewycky50f02cb2011-12-02 22:16:29 +000061 const TargetOptions &Options,
Evan Chengecb29082011-11-16 08:38:26 +000062 Reloc::Model RM, CodeModel::Model CM,
63 CodeGenOpt::Level OL);
Chris Lattner8228b112010-02-04 06:34:01 +000064};
65
Chris Lattner158e1f52006-02-05 05:50:24 +000066} // end namespace llvm
67
68#endif