[llvm] r336187 - [llvm-exegesis] Add an AArch64 target

John Brawn via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 3 03:10:29 PDT 2018


Author: john.brawn
Date: Tue Jul  3 03:10:29 2018
New Revision: 336187

URL: http://llvm.org/viewvc/llvm-project?rev=336187&view=rev
Log:
[llvm-exegesis] Add an AArch64 target

The target does just enough to be able to run llvm-exegesis in latency mode for
at least some opcodes.

Differential Revision: https://reviews.llvm.org/D48780

Added:
    llvm/trunk/tools/llvm-exegesis/lib/AArch64/
    llvm/trunk/tools/llvm-exegesis/lib/AArch64/CMakeLists.txt
    llvm/trunk/tools/llvm-exegesis/lib/AArch64/LLVMBuild.txt
    llvm/trunk/tools/llvm-exegesis/lib/AArch64/Target.cpp
    llvm/trunk/unittests/tools/llvm-exegesis/AArch64/
    llvm/trunk/unittests/tools/llvm-exegesis/AArch64/CMakeLists.txt
    llvm/trunk/unittests/tools/llvm-exegesis/AArch64/TargetTest.cpp
Modified:
    llvm/trunk/tools/llvm-exegesis/lib/CMakeLists.txt
    llvm/trunk/unittests/tools/llvm-exegesis/CMakeLists.txt

Added: llvm/trunk/tools/llvm-exegesis/lib/AArch64/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-exegesis/lib/AArch64/CMakeLists.txt?rev=336187&view=auto
==============================================================================
--- llvm/trunk/tools/llvm-exegesis/lib/AArch64/CMakeLists.txt (added)
+++ llvm/trunk/tools/llvm-exegesis/lib/AArch64/CMakeLists.txt Tue Jul  3 03:10:29 2018
@@ -0,0 +1,18 @@
+include_directories(
+  ${LLVM_MAIN_SRC_DIR}/lib/Target/AArch64
+  ${LLVM_BINARY_DIR}/lib/Target/AArch64
+  )
+
+add_library(LLVMExegesisAArch64
+  STATIC
+  Target.cpp
+  )
+
+llvm_update_compile_flags(LLVMExegesisAArch64)
+llvm_map_components_to_libnames(libs
+  AArch64
+  Exegesis
+  )
+
+target_link_libraries(LLVMExegesisAArch64 ${libs})
+set_target_properties(LLVMExegesisAArch64 PROPERTIES FOLDER "Libraries")

Added: llvm/trunk/tools/llvm-exegesis/lib/AArch64/LLVMBuild.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-exegesis/lib/AArch64/LLVMBuild.txt?rev=336187&view=auto
==============================================================================
--- llvm/trunk/tools/llvm-exegesis/lib/AArch64/LLVMBuild.txt (added)
+++ llvm/trunk/tools/llvm-exegesis/lib/AArch64/LLVMBuild.txt Tue Jul  3 03:10:29 2018
@@ -0,0 +1,22 @@
+;===- ./tools/llvm-exegesis/lib/AArch64/LLVMBuild.txt ----------*- Conf -*--===;
+;
+;                     The LLVM Compiler Infrastructure
+;
+; This file is distributed under the University of Illinois Open Source
+; License. See LICENSE.TXT for details.
+;
+;===------------------------------------------------------------------------===;
+;
+; 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 = ExegesisAArch64
+parent = Libraries
+required_libraries = AArch64

Added: llvm/trunk/tools/llvm-exegesis/lib/AArch64/Target.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-exegesis/lib/AArch64/Target.cpp?rev=336187&view=auto
==============================================================================
--- llvm/trunk/tools/llvm-exegesis/lib/AArch64/Target.cpp (added)
+++ llvm/trunk/tools/llvm-exegesis/lib/AArch64/Target.cpp Tue Jul  3 03:10:29 2018
@@ -0,0 +1,54 @@
+//===-- Target.cpp ----------------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+#include "../Target.h"
+#include "../Latency.h"
+#include "AArch64.h"
+
+namespace exegesis {
+
+namespace {
+
+class AArch64LatencyBenchmarkRunner : public LatencyBenchmarkRunner {
+public:
+  AArch64LatencyBenchmarkRunner(const LLVMState &State)
+      : LatencyBenchmarkRunner(State) {}
+
+private:
+  const char *getCounterName() const override {
+    // All AArch64 subtargets have CPU_CYCLES as the cycle counter name
+    return "CPU_CYCLES";
+  }
+};
+
+class ExegesisAArch64Target : public ExegesisTarget {
+  bool matchesArch(llvm::Triple::ArchType Arch) const override {
+    return Arch == llvm::Triple::aarch64 || Arch == llvm::Triple::aarch64_be;
+  }
+  void addTargetSpecificPasses(llvm::PassManagerBase &PM) const override {
+    // Function return is a pseudo-instruction that needs to be expanded
+    PM.add(llvm::createAArch64ExpandPseudoPass());
+  }
+  std::unique_ptr<BenchmarkRunner>
+  createLatencyBenchmarkRunner(const LLVMState &State) const override {
+    return llvm::make_unique<AArch64LatencyBenchmarkRunner>(State);
+  }
+};
+
+} // namespace
+
+static ExegesisTarget *getTheExegesisAArch64Target() {
+  static ExegesisAArch64Target Target;
+  return &Target;
+}
+
+void InitializeAArch64ExegesisTarget() {
+  ExegesisTarget::registerTarget(getTheExegesisAArch64Target());
+}
+
+} // namespace exegesis

Modified: llvm/trunk/tools/llvm-exegesis/lib/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-exegesis/lib/CMakeLists.txt?rev=336187&r1=336186&r2=336187&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-exegesis/lib/CMakeLists.txt (original)
+++ llvm/trunk/tools/llvm-exegesis/lib/CMakeLists.txt Tue Jul  3 03:10:29 2018
@@ -2,6 +2,10 @@ if (LLVM_TARGETS_TO_BUILD MATCHES "X86")
   add_subdirectory(X86)
   set(LLVM_EXEGESIS_TARGETS "${LLVM_EXEGESIS_TARGETS} X86" PARENT_SCOPE)
 endif()
+if (LLVM_TARGETS_TO_BUILD MATCHES "AArch64")
+  add_subdirectory(AArch64)
+  set(LLVM_EXEGESIS_TARGETS "${LLVM_EXEGESIS_TARGETS} AArch64" PARENT_SCOPE)
+endif()
 
 add_library(LLVMExegesis
   STATIC

Added: llvm/trunk/unittests/tools/llvm-exegesis/AArch64/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/tools/llvm-exegesis/AArch64/CMakeLists.txt?rev=336187&view=auto
==============================================================================
--- llvm/trunk/unittests/tools/llvm-exegesis/AArch64/CMakeLists.txt (added)
+++ llvm/trunk/unittests/tools/llvm-exegesis/AArch64/CMakeLists.txt Tue Jul  3 03:10:29 2018
@@ -0,0 +1,21 @@
+include_directories(
+  ${LLVM_MAIN_SRC_DIR}/lib/Target/AArch64
+  ${LLVM_BINARY_DIR}/lib/Target/AArch64
+  ${LLVM_MAIN_SRC_DIR}/tools/llvm-exegesis/lib
+  )
+
+set(LLVM_LINK_COMPONENTS
+  MC
+  MCParser
+  Object
+  Support
+  Symbolize
+  AArch64
+  )
+
+add_llvm_unittest(LLVMExegesisAArch64Tests
+  TargetTest.cpp
+  )
+target_link_libraries(LLVMExegesisAArch64Tests PRIVATE
+  LLVMExegesis
+  LLVMExegesisAArch64)

Added: llvm/trunk/unittests/tools/llvm-exegesis/AArch64/TargetTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/tools/llvm-exegesis/AArch64/TargetTest.cpp?rev=336187&view=auto
==============================================================================
--- llvm/trunk/unittests/tools/llvm-exegesis/AArch64/TargetTest.cpp (added)
+++ llvm/trunk/unittests/tools/llvm-exegesis/AArch64/TargetTest.cpp Tue Jul  3 03:10:29 2018
@@ -0,0 +1,38 @@
+#include "Target.h"
+
+#include <cassert>
+#include <memory>
+
+#include "MCTargetDesc/AArch64MCTargetDesc.h"
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
+
+namespace exegesis {
+
+void InitializeAArch64ExegesisTarget();
+
+namespace {
+
+using testing::Gt;
+using testing::NotNull;
+using testing::SizeIs;
+
+class AArch64TargetTest : public ::testing::Test {
+protected:
+  AArch64TargetTest()
+      : Target_(ExegesisTarget::lookup(llvm::Triple("aarch64-unknown-linux"))) {
+    EXPECT_THAT(Target_, NotNull());
+  }
+  static void SetUpTestCase() { InitializeAArch64ExegesisTarget(); }
+
+  const ExegesisTarget *const Target_;
+};
+
+TEST_F(AArch64TargetTest, SetRegToConstant) {
+  // The AArch64 target currently doesn't know how to set register values
+  const auto Insts = Target_->setRegToConstant(llvm::AArch64::X0);
+  EXPECT_THAT(Insts, SizeIs(0));
+}
+
+} // namespace
+} // namespace exegesis

Modified: llvm/trunk/unittests/tools/llvm-exegesis/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/tools/llvm-exegesis/CMakeLists.txt?rev=336187&r1=336186&r2=336187&view=diff
==============================================================================
--- llvm/trunk/unittests/tools/llvm-exegesis/CMakeLists.txt (original)
+++ llvm/trunk/unittests/tools/llvm-exegesis/CMakeLists.txt Tue Jul  3 03:10:29 2018
@@ -23,3 +23,6 @@ endif()
 if(LLVM_TARGETS_TO_BUILD MATCHES "ARM")
 	add_subdirectory(ARM)
 endif()
+if(LLVM_TARGETS_TO_BUILD MATCHES "AArch64")
+  add_subdirectory(AArch64)
+endif()




More information about the llvm-commits mailing list