diff options
author | Nick Lewycky <nicholas@mxc.ca> | 2010-09-07 18:14:24 +0000 |
---|---|---|
committer | Nick Lewycky <nicholas@mxc.ca> | 2010-09-07 18:14:24 +0000 |
commit | f7a3c50183726c5bbb02bb08d97e65f1066a249f (patch) | |
tree | 734531668d3d7acade4fbc7aab52529e2527cf69 /lib | |
parent | 86097c384f84981494ed9c200ff5763afcd960de (diff) | |
download | external_llvm-f7a3c50183726c5bbb02bb08d97e65f1066a249f.tar.gz external_llvm-f7a3c50183726c5bbb02bb08d97e65f1066a249f.tar.bz2 external_llvm-f7a3c50183726c5bbb02bb08d97e65f1066a249f.zip |
Create PTX backend. Patch by Che-Liang Chiou!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@113235 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Support/Triple.cpp | 13 | ||||
-rw-r--r-- | lib/Target/PTX/AsmPrinter/CMakeLists.txt | 6 | ||||
-rw-r--r-- | lib/Target/PTX/AsmPrinter/Makefile | 15 | ||||
-rw-r--r-- | lib/Target/PTX/AsmPrinter/PTXAsmPrinter.cpp | 35 | ||||
-rw-r--r-- | lib/Target/PTX/CMakeLists.txt | 6 | ||||
-rw-r--r-- | lib/Target/PTX/Makefile | 19 | ||||
-rw-r--r-- | lib/Target/PTX/PTX.h | 24 | ||||
-rw-r--r-- | lib/Target/PTX/PTX.td | 10 | ||||
-rw-r--r-- | lib/Target/PTX/PTXTargetMachine.cpp | 31 | ||||
-rw-r--r-- | lib/Target/PTX/PTXTargetMachine.h | 27 | ||||
-rw-r--r-- | lib/Target/PTX/TargetInfo/CMakeLists.txt | 7 | ||||
-rw-r--r-- | lib/Target/PTX/TargetInfo/Makefile | 15 | ||||
-rw-r--r-- | lib/Target/PTX/TargetInfo/PTXTargetInfo.cpp | 22 |
13 files changed, 230 insertions, 0 deletions
diff --git a/lib/Support/Triple.cpp b/lib/Support/Triple.cpp index 3a95b65e69..365c083695 100644 --- a/lib/Support/Triple.cpp +++ b/lib/Support/Triple.cpp @@ -41,6 +41,7 @@ const char *Triple::getArchTypeName(ArchType Kind) { case x86_64: return "x86_64"; case xcore: return "xcore"; case mblaze: return "mblaze"; + case ptx: return "ptx"; } return "<invalid>"; @@ -70,7 +71,10 @@ const char *Triple::getArchTypePrefix(ArchType Kind) { case x86: case x86_64: return "x86"; + case xcore: return "xcore"; + + case ptx: return "ptx"; } } @@ -149,6 +153,8 @@ Triple::ArchType Triple::getArchTypeForLLVMName(StringRef Name) { return x86_64; if (Name == "xcore") return xcore; + if (Name == "ptx") + return ptx; return UnknownArch; } @@ -187,6 +193,9 @@ Triple::ArchType Triple::getArchTypeForDarwinArchName(StringRef Str) { Str == "armv6" || Str == "armv7") return Triple::arm; + if (Str == "ptx") + return Triple::ptx; + return Triple::UnknownArch; } @@ -216,6 +225,8 @@ const char *Triple::getArchNameForAssembler() { return "armv6"; if (Str == "armv7" || Str == "thumbv7") return "armv7"; + if (Str == "ptx") + return "ptx"; return NULL; } @@ -266,6 +277,8 @@ Triple::ArchType Triple::ParseArch(StringRef ArchName) { return tce; else if (ArchName == "xcore") return xcore; + else if (ArchName == "ptx") + return ptx; else return UnknownArch; } diff --git a/lib/Target/PTX/AsmPrinter/CMakeLists.txt b/lib/Target/PTX/AsmPrinter/CMakeLists.txt new file mode 100644 index 0000000000..3f4257b444 --- /dev/null +++ b/lib/Target/PTX/AsmPrinter/CMakeLists.txt @@ -0,0 +1,6 @@ +include_directories( ${CMAKE_CURRENT_BINARY_DIR}/.. ${CMAKE_CURRENT_SOURCE_DIR}/.. ) + +add_llvm_library(LLVMPTXAsmPrinter + PTXAsmPrinter.cpp + ) +add_dependencies(LLVMPTXAsmPrinter PTXCodeGenTable_gen) diff --git a/lib/Target/PTX/AsmPrinter/Makefile b/lib/Target/PTX/AsmPrinter/Makefile new file mode 100644 index 0000000000..67ee3bc34b --- /dev/null +++ b/lib/Target/PTX/AsmPrinter/Makefile @@ -0,0 +1,15 @@ +##===- lib/Target/PTX/AsmPrinter/Makefile ------------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## +LEVEL = ../../../.. +LIBRARYNAME = LLVMPTXAsmPrinter + +# Hack: we need to include 'main' PTX target directory to grab private headers +CPP.Flags += -I$(PROJ_OBJ_DIR)/.. -I$(PROJ_SRC_DIR)/.. + +include $(LEVEL)/Makefile.common diff --git a/lib/Target/PTX/AsmPrinter/PTXAsmPrinter.cpp b/lib/Target/PTX/AsmPrinter/PTXAsmPrinter.cpp new file mode 100644 index 0000000000..1a723a22e9 --- /dev/null +++ b/lib/Target/PTX/AsmPrinter/PTXAsmPrinter.cpp @@ -0,0 +1,35 @@ +//===-- PTXAsmPrinter.cpp - PTX LLVM assembly writer ----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file contains a printer that converts from our internal representation +// of machine-dependent LLVM code to PTX assembly language. +// +//===----------------------------------------------------------------------===// + +#include "PTX.h" +#include "PTXTargetMachine.h" +#include "llvm/CodeGen/AsmPrinter.h" +#include "llvm/Target/TargetRegistry.h" + +using namespace llvm; + +namespace { + class PTXAsmPrinter : public AsmPrinter { + public: + explicit PTXAsmPrinter(TargetMachine &TM, MCStreamer &Streamer) : + AsmPrinter(TM, Streamer) {} + const char *getPassName() const { return "PTX Assembly Printer"; } + }; +} // namespace + +// Force static initialization. +extern "C" void LLVMInitializePTXAsmPrinter() +{ + RegisterAsmPrinter<PTXAsmPrinter> X(ThePTXTarget); +} diff --git a/lib/Target/PTX/CMakeLists.txt b/lib/Target/PTX/CMakeLists.txt new file mode 100644 index 0000000000..6505e067f6 --- /dev/null +++ b/lib/Target/PTX/CMakeLists.txt @@ -0,0 +1,6 @@ +set(LLVM_TARGET_DEFINITIONS PTX.td) + +add_llvm_target(PTXCodeGen + ) + +target_link_libraries (LLVMPTXCodeGen LLVMSelectionDAG) diff --git a/lib/Target/PTX/Makefile b/lib/Target/PTX/Makefile new file mode 100644 index 0000000000..fcbf9317a9 --- /dev/null +++ b/lib/Target/PTX/Makefile @@ -0,0 +1,19 @@ +##===- lib/Target/PTX/Makefile -----------------------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LEVEL = ../../.. +LIBRARYNAME = LLVMPTXCodeGen +TARGET = PTX + +# Make sure that tblgen is run, first thing. +BUILT_SOURCES = + +DIRS = AsmPrinter TargetInfo + +include $(LEVEL)/Makefile.common diff --git a/lib/Target/PTX/PTX.h b/lib/Target/PTX/PTX.h new file mode 100644 index 0000000000..0a7b49ece2 --- /dev/null +++ b/lib/Target/PTX/PTX.h @@ -0,0 +1,24 @@ +//===-- PTX.h - Top-level interface for PTX representation ------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file contains the entry points for global functions defined in the LLVM +// PTX back-end. +// +//===----------------------------------------------------------------------===// + +#ifndef PTX_H +#define PTX_H + +#include "llvm/Target/TargetMachine.h" + +namespace llvm { + extern Target ThePTXTarget; +} // namespace llvm; + +#endif // PTX_H diff --git a/lib/Target/PTX/PTX.td b/lib/Target/PTX/PTX.td new file mode 100644 index 0000000000..5def467e64 --- /dev/null +++ b/lib/Target/PTX/PTX.td @@ -0,0 +1,10 @@ +//===- PTX.td - Describe the PTX Target Machine ---------------*- tblgen -*-==// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// This is the top level entry point for the PTX target. +//===----------------------------------------------------------------------===// diff --git a/lib/Target/PTX/PTXTargetMachine.cpp b/lib/Target/PTX/PTXTargetMachine.cpp new file mode 100644 index 0000000000..1889df41dc --- /dev/null +++ b/lib/Target/PTX/PTXTargetMachine.cpp @@ -0,0 +1,31 @@ +//===-- PTXTargetMachine.cpp - Define TargetMachine for PTX ---------------===// +// +// 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 PTX target. +// +//===----------------------------------------------------------------------===// + +#include "PTX.h" +#include "PTXTargetMachine.h" +#include "llvm/Target/TargetRegistry.h" + +using namespace llvm; + +extern "C" void LLVMInitializePTXTarget() +{ + // Register the target + RegisterTargetMachine<PTXTargetMachine> X(ThePTXTarget); +} + +PTXTargetMachine::PTXTargetMachine(const Target &T, + const std::string &TT, + const std::string &FS) : + LLVMTargetMachine(T, TT) +{ +} diff --git a/lib/Target/PTX/PTXTargetMachine.h b/lib/Target/PTX/PTXTargetMachine.h new file mode 100644 index 0000000000..c447b87478 --- /dev/null +++ b/lib/Target/PTX/PTXTargetMachine.h @@ -0,0 +1,27 @@ +//===-- PTXTargetMachine.h - Define TargetMachine for PTX -------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file declares the PTX specific subclass of TargetMachine. +// +//===----------------------------------------------------------------------===// + +#ifndef PTX_TARGET_MACHINE_H +#define PTX_TARGET_MACHINE_H + +#include "llvm/Target/TargetMachine.h" + +namespace llvm { + class PTXTargetMachine : public LLVMTargetMachine { + public: + PTXTargetMachine(const Target &T, const std::string &TT, + const std::string &FS); + }; // class PTXTargetMachine +} // namespace llvm + +#endif // PTX_TARGET_MACHINE_H diff --git a/lib/Target/PTX/TargetInfo/CMakeLists.txt b/lib/Target/PTX/TargetInfo/CMakeLists.txt new file mode 100644 index 0000000000..4b09cf5ce0 --- /dev/null +++ b/lib/Target/PTX/TargetInfo/CMakeLists.txt @@ -0,0 +1,7 @@ +include_directories( ${CMAKE_CURRENT_BINARY_DIR}/.. ${CMAKE_CURRENT_SOURCE_DIR}/.. ) + +add_llvm_library(LLVMPTXInfo + PTXTargetInfo.cpp + ) + +add_dependencies(LLVMPTXInfo PTXCodeGenTable_gen) diff --git a/lib/Target/PTX/TargetInfo/Makefile b/lib/Target/PTX/TargetInfo/Makefile new file mode 100644 index 0000000000..8619785889 --- /dev/null +++ b/lib/Target/PTX/TargetInfo/Makefile @@ -0,0 +1,15 @@ +##===- lib/Target/PTX/TargetInfo/Makefile ------------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## +LEVEL = ../../../.. +LIBRARYNAME = LLVMPTXInfo + +# Hack: we need to include 'main' target directory to grab private headers +CPPFLAGS = -I$(PROJ_OBJ_DIR)/.. -I$(PROJ_SRC_DIR)/.. + +include $(LEVEL)/Makefile.common diff --git a/lib/Target/PTX/TargetInfo/PTXTargetInfo.cpp b/lib/Target/PTX/TargetInfo/PTXTargetInfo.cpp new file mode 100644 index 0000000000..9000ae70e4 --- /dev/null +++ b/lib/Target/PTX/TargetInfo/PTXTargetInfo.cpp @@ -0,0 +1,22 @@ +//===-- PTXTargetInfo.cpp - PTX Target Implementation ---------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "PTX.h" +#include "llvm/Module.h" +#include "llvm/Target/TargetRegistry.h" + +using namespace llvm; + +Target llvm::ThePTXTarget; + +extern "C" void LLVMInitializePTXTargetInfo() +{ + // see llvm/ADT/Triple.h + RegisterTarget<Triple::ptx> X(ThePTXTarget, "ptx", "PTX"); +} |