[llvm-branch-commits] [llvm] 82bd91c - [Xtensa] Add initial version of the Xtensa backend.

Andrei Safronov via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Tue Aug 11 15:40:08 PDT 2020


Author: Andrei Safronov
Date: 2020-07-21T13:25:50+03:00
New Revision: 82bd91c55a4374cbe11d171e1a25e84aa701791e

URL: https://github.com/llvm/llvm-project/commit/82bd91c55a4374cbe11d171e1a25e84aa701791e
DIFF: https://github.com/llvm/llvm-project/commit/82bd91c55a4374cbe11d171e1a25e84aa701791e.diff

LOG: [Xtensa] Add initial version of the Xtensa backend.

Added: 
    llvm/lib/Target/Xtensa/CMakeLists.txt
    llvm/lib/Target/Xtensa/LLVMBuild.txt
    llvm/lib/Target/Xtensa/MCTargetDesc/CMakeLists.txt
    llvm/lib/Target/Xtensa/MCTargetDesc/LLVMBuild.txt
    llvm/lib/Target/Xtensa/MCTargetDesc/XtensaMCTargetDesc.cpp
    llvm/lib/Target/Xtensa/MCTargetDesc/XtensaMCTargetDesc.h
    llvm/lib/Target/Xtensa/TargetInfo/CMakeLists.txt
    llvm/lib/Target/Xtensa/TargetInfo/LLVMBuild.txt
    llvm/lib/Target/Xtensa/TargetInfo/XtensaTargetInfo.cpp
    llvm/lib/Target/Xtensa/XtensaTargetMachine.cpp
    llvm/lib/Target/Xtensa/XtensaTargetMachine.h

Modified: 
    llvm/lib/Target/LLVMBuild.txt

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/LLVMBuild.txt b/llvm/lib/Target/LLVMBuild.txt
index 7403f7713a9f..e6a67b7e4cb3 100644
--- a/llvm/lib/Target/LLVMBuild.txt
+++ b/llvm/lib/Target/LLVMBuild.txt
@@ -36,6 +36,7 @@ subdirectories =
  WebAssembly
  X86
  XCore
+ Xtensa
  VE
 
 ; This is a special group whose required libraries are extended (by llvm-build)

diff  --git a/llvm/lib/Target/Xtensa/CMakeLists.txt b/llvm/lib/Target/Xtensa/CMakeLists.txt
new file mode 100644
index 000000000000..2a3a6f6a79e6
--- /dev/null
+++ b/llvm/lib/Target/Xtensa/CMakeLists.txt
@@ -0,0 +1,6 @@
+add_llvm_target(XtensaCodeGen
+  XtensaTargetMachine.cpp
+  )
+
+add_subdirectory(MCTargetDesc)
+add_subdirectory(TargetInfo)

diff  --git a/llvm/lib/Target/Xtensa/LLVMBuild.txt b/llvm/lib/Target/Xtensa/LLVMBuild.txt
new file mode 100644
index 000000000000..e12ab339883c
--- /dev/null
+++ b/llvm/lib/Target/Xtensa/LLVMBuild.txt
@@ -0,0 +1,30 @@
+;===- ./lib/Target/Xtensa/LLVMBuild.txt ------------------------*- Conf -*--===;
+;
+; Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+; See https://llvm.org/LICENSE.txt for license information.
+; SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+;
+;===------------------------------------------------------------------------===;
+;
+; This is an LLVMBuild description file for the components in this subdirectory.
+;
+; For more information on the LLVMBuild system, please see:
+;
+;   http://llvm.org/docs/LLVMBuild.html
+;
+;===------------------------------------------------------------------------===;
+
+[common]
+subdirectories = TargetInfo MCTargetDesc
+
+[component_0]
+type = TargetGroup
+name = Xtensa
+parent = Target
+
+[component_1]
+type = Library
+name = XtensaCodeGen
+parent = Xtensa
+required_libraries = CodeGen Core XtensaInfo Support Target
+add_to_library_groups = Xtensa

diff  --git a/llvm/lib/Target/Xtensa/MCTargetDesc/CMakeLists.txt b/llvm/lib/Target/Xtensa/MCTargetDesc/CMakeLists.txt
new file mode 100644
index 000000000000..dad428b96129
--- /dev/null
+++ b/llvm/lib/Target/Xtensa/MCTargetDesc/CMakeLists.txt
@@ -0,0 +1,3 @@
+add_llvm_component_library(LLVMXtensaDesc
+  XtensaMCTargetDesc.cpp
+ )

diff  --git a/llvm/lib/Target/Xtensa/MCTargetDesc/LLVMBuild.txt b/llvm/lib/Target/Xtensa/MCTargetDesc/LLVMBuild.txt
new file mode 100644
index 000000000000..8b31bbf0c087
--- /dev/null
+++ b/llvm/lib/Target/Xtensa/MCTargetDesc/LLVMBuild.txt
@@ -0,0 +1,22 @@
+;===- ./lib/Target/MCTargetDesc/LLVMBuild.txt ------------------*- Conf -*--===;
+;
+; Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+; See https://llvm.org/LICENSE.txt for license information.
+; SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+;
+;===------------------------------------------------------------------------===;
+;
+; This is an LLVMBuild description file for the components in this subdirectory.
+;
+; For more information on the LLVMBuild system, please see:
+;
+;   http://llvm.org/docs/LLVMBuild.html
+;
+;===------------------------------------------------------------------------===;
+
+[component_0]
+type = Library
+name = XtensaDesc
+parent = Xtensa
+required_libraries = MC XtensaInfo Support
+add_to_library_groups = Xtensa

diff  --git a/llvm/lib/Target/Xtensa/MCTargetDesc/XtensaMCTargetDesc.cpp b/llvm/lib/Target/Xtensa/MCTargetDesc/XtensaMCTargetDesc.cpp
new file mode 100644
index 000000000000..c9c0996b07a9
--- /dev/null
+++ b/llvm/lib/Target/Xtensa/MCTargetDesc/XtensaMCTargetDesc.cpp
@@ -0,0 +1,13 @@
+//===-- XtensaMCTargetDesc.cpp - Xtebsa target descriptions ---------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+#include "XtensaMCTargetDesc.h"
+
+// We need to define this function for linking succeed
+extern "C" void LLVMInitializeXtensaTargetMC() {}

diff  --git a/llvm/lib/Target/Xtensa/MCTargetDesc/XtensaMCTargetDesc.h b/llvm/lib/Target/Xtensa/MCTargetDesc/XtensaMCTargetDesc.h
new file mode 100644
index 000000000000..d3a9a24de408
--- /dev/null
+++ b/llvm/lib/Target/Xtensa/MCTargetDesc/XtensaMCTargetDesc.h
@@ -0,0 +1,18 @@
+//===-- XtensaMCTargetDesc.h - Xtensa Target Descriptions -------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file provides Xtensa specific target descriptions.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIB_TARGET_XTENSA_MCTARGETDESC_XTENSAMCTARGETDESC_H
+#define LLVM_LIB_TARGET_XTENSA_MCTARGETDESC_XTENSAMCTARGETDESC_H
+
+#endif /* LLVM_LIB_TARGET_XTENSA_MCTARGETDESC_XTENSAMCTARGETDESC_H */

diff  --git a/llvm/lib/Target/Xtensa/TargetInfo/CMakeLists.txt b/llvm/lib/Target/Xtensa/TargetInfo/CMakeLists.txt
new file mode 100644
index 000000000000..e9289aa297e7
--- /dev/null
+++ b/llvm/lib/Target/Xtensa/TargetInfo/CMakeLists.txt
@@ -0,0 +1,5 @@
+include_directories( ${CMAKE_CURRENT_BINARY_DIR}/.. ${CMAKE_CURRENT_SOURCE_DIR}/.. )
+
+add_llvm_component_library(LLVMXtensaInfo
+  XtensaTargetInfo.cpp
+  )

diff  --git a/llvm/lib/Target/Xtensa/TargetInfo/LLVMBuild.txt b/llvm/lib/Target/Xtensa/TargetInfo/LLVMBuild.txt
new file mode 100644
index 000000000000..f8b90111a1e2
--- /dev/null
+++ b/llvm/lib/Target/Xtensa/TargetInfo/LLVMBuild.txt
@@ -0,0 +1,22 @@
+;===- ./lib/Target/TargetInfo/LLVMBuild.txt --------------------*- Conf -*--===;
+;
+; Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+; See https://llvm.org/LICENSE.txt for license information.
+; SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+;
+;===------------------------------------------------------------------------===;
+;
+; This is an LLVMBuild description file for the components in this subdirectory.
+;
+; For more information on the LLVMBuild system, please see:
+;
+;   http://llvm.org/docs/LLVMBuild.html
+;
+;===------------------------------------------------------------------------===;
+
+[component_0]
+type = Library
+name = XtensaInfo
+parent = Xtensa
+required_libraries = Support
+add_to_library_groups = Xtensa

diff  --git a/llvm/lib/Target/Xtensa/TargetInfo/XtensaTargetInfo.cpp b/llvm/lib/Target/Xtensa/TargetInfo/XtensaTargetInfo.cpp
new file mode 100644
index 000000000000..3bd9071b6dda
--- /dev/null
+++ b/llvm/lib/Target/Xtensa/TargetInfo/XtensaTargetInfo.cpp
@@ -0,0 +1,20 @@
+//===-- XtensaTargetInfo.cpp - Xtensa Target Implementation ---------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/Support/TargetRegistry.h"
+
+using namespace llvm;
+namespace llvm {
+Target TheXtensaTarget;
+}
+extern "C" void LLVMInitializeXtensaTargetInfo() {
+  RegisterTarget<Triple::xtensa> X(TheXtensaTarget, "xtensa", "Xtensa 32",
+                                   "XTENSA");
+}

diff  --git a/llvm/lib/Target/Xtensa/XtensaTargetMachine.cpp b/llvm/lib/Target/Xtensa/XtensaTargetMachine.cpp
new file mode 100644
index 000000000000..2951149c96c5
--- /dev/null
+++ b/llvm/lib/Target/Xtensa/XtensaTargetMachine.cpp
@@ -0,0 +1,70 @@
+//===- XtensaTargetMachine.cpp - Define TargetMachine for Xtensa ----------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// Implements the info about Xtensa target spec.
+//
+//===----------------------------------------------------------------------===//
+
+#include "XtensaTargetMachine.h"
+#include "llvm/CodeGen/Passes.h"
+#include "llvm/CodeGen/TargetLoweringObjectFileImpl.h"
+#include "llvm/CodeGen/TargetPassConfig.h"
+#include "llvm/IR/LegacyPassManager.h"
+#include "llvm/Support/TargetRegistry.h"
+#include "llvm/Transforms/IPO/PassManagerBuilder.h"
+#include "llvm/Transforms/Scalar.h"
+
+using namespace llvm;
+
+extern "C" void LLVMInitializeXtensaTarget() {
+  // Register the target.
+  RegisterTargetMachine<XtensaTargetMachine> A(TheXtensaTarget);
+}
+
+static std::string computeDataLayout(const Triple &TT, StringRef CPU,
+                                     const TargetOptions &Options,
+                                     bool isLittle) {
+  std::string Ret = "e-m:e-p:32:32-i8:8:32-i16:16:32-i64:64-n32";
+
+  return Ret;
+}
+
+static Reloc::Model getEffectiveRelocModel(bool JIT,
+                                           Optional<Reloc::Model> RM) {
+  if (!RM.hasValue() || JIT)
+    return Reloc::Static;
+  return *RM;
+}
+
+XtensaTargetMachine::XtensaTargetMachine(const Target &T, const Triple &TT,
+                                         StringRef CPU, StringRef FS,
+                                         const TargetOptions &Options,
+                                         Optional<Reloc::Model> RM,
+                                         Optional<CodeModel::Model> CM,
+                                         CodeGenOpt::Level OL, bool JIT,
+                                         bool isLittle)
+    : LLVMTargetMachine(T, computeDataLayout(TT, CPU, Options, isLittle), TT,
+                        CPU, FS, Options, getEffectiveRelocModel(JIT, RM),
+                        getEffectiveCodeModel(CM, CodeModel::Small), OL),
+      TLOF(std::make_unique<TargetLoweringObjectFileELF>()) {
+  initAsmInfo();
+}
+
+XtensaTargetMachine::XtensaTargetMachine(const Target &T, const Triple &TT,
+                                         StringRef CPU, StringRef FS,
+                                         const TargetOptions &Options,
+                                         Optional<Reloc::Model> RM,
+                                         Optional<CodeModel::Model> CM,
+                                         CodeGenOpt::Level OL, bool JIT)
+    : XtensaTargetMachine(T, TT, CPU, FS, Options, RM, CM, OL, JIT, true) {}
+
+TargetPassConfig *XtensaTargetMachine::createPassConfig(PassManagerBase &PM) {
+  return new TargetPassConfig(*this, PM);
+}

diff  --git a/llvm/lib/Target/Xtensa/XtensaTargetMachine.h b/llvm/lib/Target/Xtensa/XtensaTargetMachine.h
new file mode 100644
index 000000000000..cf1a064a730b
--- /dev/null
+++ b/llvm/lib/Target/Xtensa/XtensaTargetMachine.h
@@ -0,0 +1,48 @@
+//===-- XtensaTargetMachine.h - Define TargetMachine for Xtensa -*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file declares the Xtensa specific subclass of TargetMachine.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIB_TARGET_XTENSA_XTENSATARGETMACHINE_H
+#define LLVM_LIB_TARGET_XTENSA_XTENSATARGETMACHINE_H
+
+#include "llvm/Target/TargetMachine.h"
+
+namespace llvm {
+
+class TargetFrameLowering;
+
+extern Target TheXtensaTarget;
+
+class XtensaTargetMachine : public LLVMTargetMachine {
+  std::unique_ptr<TargetLoweringObjectFile> TLOF;
+
+public:
+  XtensaTargetMachine(const Target &T, const Triple &TT, StringRef CPU,
+                      StringRef FS, const TargetOptions &Options,
+                      Optional<Reloc::Model> RM, Optional<CodeModel::Model> CM,
+                      CodeGenOpt::Level OL, bool JIT, bool isLittle);
+
+  XtensaTargetMachine(const Target &T, const Triple &TT, StringRef CPU,
+                      StringRef FS, const TargetOptions &Options,
+                      Optional<Reloc::Model> RM, Optional<CodeModel::Model> CM,
+                      CodeGenOpt::Level OL, bool JIT);
+
+  // Override LLVMTargetMachine
+  TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
+  TargetLoweringObjectFile *getObjFileLowering() const override {
+    return TLOF.get();
+  }
+};
+} // end namespace llvm
+
+#endif /* LLVM_LIB_TARGET_XTENSA_XTENSATARGETMACHINE_H */


        


More information about the llvm-branch-commits mailing list