[llvm] 1918cf5 - Reland D147524 "[LoongArch] Provide basic TargetTransformInfo implementation"
Weining Lu via llvm-commits
llvm-commits at lists.llvm.org
Sun May 7 17:43:56 PDT 2023
Author: Zhao Qi
Date: 2023-05-08T08:43:11+08:00
New Revision: 1918cf58a29605aab8eb2e5e7c56e870f22efafe
URL: https://github.com/llvm/llvm-project/commit/1918cf58a29605aab8eb2e5e7c56e870f22efafe
DIFF: https://github.com/llvm/llvm-project/commit/1918cf58a29605aab8eb2e5e7c56e870f22efafe.diff
LOG: Reland D147524 "[LoongArch] Provide basic TargetTransformInfo implementation"
This patch only provides basic LoongArchTTIImpl, and more hooks
will be added to provide TTI machinery for LoongArch soon.
Reviewed By: SixWeining, xen0n
Differential Revision: https://reviews.llvm.org/D147524
Added:
llvm/lib/Target/LoongArch/LoongArchTargetTransformInfo.cpp
llvm/lib/Target/LoongArch/LoongArchTargetTransformInfo.h
Modified:
llvm/lib/Target/LoongArch/CMakeLists.txt
llvm/lib/Target/LoongArch/LoongArchTargetMachine.cpp
llvm/lib/Target/LoongArch/LoongArchTargetMachine.h
Removed:
################################################################################
diff --git a/llvm/lib/Target/LoongArch/CMakeLists.txt b/llvm/lib/Target/LoongArch/CMakeLists.txt
index 54bd73112d461..62e5a0ab61b3f 100644
--- a/llvm/lib/Target/LoongArch/CMakeLists.txt
+++ b/llvm/lib/Target/LoongArch/CMakeLists.txt
@@ -26,6 +26,7 @@ add_llvm_target(LoongArchCodeGen
LoongArchRegisterInfo.cpp
LoongArchSubtarget.cpp
LoongArchTargetMachine.cpp
+ LoongArchTargetTransformInfo.cpp
LINK_COMPONENTS
Analysis
diff --git a/llvm/lib/Target/LoongArch/LoongArchTargetMachine.cpp b/llvm/lib/Target/LoongArch/LoongArchTargetMachine.cpp
index 504019c2a09e8..da294fcb980e1 100644
--- a/llvm/lib/Target/LoongArch/LoongArchTargetMachine.cpp
+++ b/llvm/lib/Target/LoongArch/LoongArchTargetMachine.cpp
@@ -13,8 +13,10 @@
#include "LoongArchTargetMachine.h"
#include "LoongArch.h"
#include "LoongArchMachineFunctionInfo.h"
+#include "LoongArchTargetTransformInfo.h"
#include "MCTargetDesc/LoongArchBaseInfo.h"
#include "TargetInfo/LoongArchTargetInfo.h"
+#include "llvm/Analysis/TargetTransformInfo.h"
#include "llvm/CodeGen/Passes.h"
#include "llvm/CodeGen/TargetLoweringObjectFileImpl.h"
#include "llvm/CodeGen/TargetPassConfig.h"
@@ -149,6 +151,11 @@ bool LoongArchPassConfig::addInstSelector() {
return false;
}
+TargetTransformInfo
+LoongArchTargetMachine::getTargetTransformInfo(const Function &F) const {
+ return TargetTransformInfo(LoongArchTTIImpl(this, F));
+}
+
void LoongArchPassConfig::addPreEmitPass() { addPass(&BranchRelaxationPassID); }
void LoongArchPassConfig::addPreEmitPass2() {
diff --git a/llvm/lib/Target/LoongArch/LoongArchTargetMachine.h b/llvm/lib/Target/LoongArch/LoongArchTargetMachine.h
index 4d71be49a5e08..06fcec838ea45 100644
--- a/llvm/lib/Target/LoongArch/LoongArchTargetMachine.h
+++ b/llvm/lib/Target/LoongArch/LoongArchTargetMachine.h
@@ -31,6 +31,7 @@ class LoongArchTargetMachine : public LLVMTargetMachine {
CodeGenOpt::Level OL, bool JIT);
~LoongArchTargetMachine() override;
+ TargetTransformInfo getTargetTransformInfo(const Function &F) const override;
const LoongArchSubtarget *getSubtargetImpl(const Function &F) const override;
const LoongArchSubtarget *getSubtargetImpl() const = delete;
diff --git a/llvm/lib/Target/LoongArch/LoongArchTargetTransformInfo.cpp b/llvm/lib/Target/LoongArch/LoongArchTargetTransformInfo.cpp
new file mode 100644
index 0000000000000..a6de86eea1166
--- /dev/null
+++ b/llvm/lib/Target/LoongArch/LoongArchTargetTransformInfo.cpp
@@ -0,0 +1,22 @@
+//===-- LoongArchTargetTransformInfo.cpp - LoongArch specific TTI ---------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+/// \file
+/// This file implements a TargetTransformInfo analysis pass specific to the
+/// LoongArch target machine. It uses the target's detailed information to
+/// provide more precise answers to certain TTI queries, while letting the
+/// target independent and default TTI implementations handle the rest.
+///
+//===----------------------------------------------------------------------===//
+
+#include "LoongArchTargetTransformInfo.h"
+
+using namespace llvm;
+
+#define DEBUG_TYPE "loongarchtti"
+
+// TODO: Implement more hooks to provide TTI machinery for LoongArch.
diff --git a/llvm/lib/Target/LoongArch/LoongArchTargetTransformInfo.h b/llvm/lib/Target/LoongArch/LoongArchTargetTransformInfo.h
new file mode 100644
index 0000000000000..9e02f793ba8a9
--- /dev/null
+++ b/llvm/lib/Target/LoongArch/LoongArchTargetTransformInfo.h
@@ -0,0 +1,47 @@
+//===- LoongArchTargetTransformInfo.h - LoongArch specific TTI --*- C++ -*-===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+/// \file
+/// This file a TargetTransformInfo::Concept conforming object specific to the
+/// LoongArch target machine. It uses the target's detailed information to
+/// provide more precise answers to certain TTI queries, while letting the
+/// target independent and default TTI implementations handle the rest.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIB_TARGET_LOONGARCH_LOONGARCHTARGETTRANSFORMINFO_H
+#define LLVM_LIB_TARGET_LOONGARCH_LOONGARCHTARGETTRANSFORMINFO_H
+
+#include "LoongArchSubtarget.h"
+#include "LoongArchTargetMachine.h"
+#include "llvm/Analysis/TargetTransformInfo.h"
+#include "llvm/CodeGen/BasicTTIImpl.h"
+
+namespace llvm {
+
+class LoongArchTTIImpl : public BasicTTIImplBase<LoongArchTTIImpl> {
+ typedef BasicTTIImplBase<LoongArchTTIImpl> BaseT;
+ typedef TargetTransformInfo TTI;
+ friend BaseT;
+
+ const LoongArchSubtarget *ST;
+ const LoongArchTargetLowering *TLI;
+
+ const LoongArchSubtarget *getST() const { return ST; }
+ const LoongArchTargetLowering *getTLI() const { return TLI; }
+
+public:
+ explicit LoongArchTTIImpl(const LoongArchTargetMachine *TM, const Function &F)
+ : BaseT(TM, F.getParent()->getDataLayout()), ST(TM->getSubtargetImpl(F)),
+ TLI(ST->getTargetLowering()) {}
+
+ // TODO: Implement more hooks to provide TTI machinery for LoongArch.
+};
+
+} // end namespace llvm
+
+#endif // LLVM_LIB_TARGET_LOONGARCH_LOONGARCHTARGETTRANSFORMINFO_H
More information about the llvm-commits
mailing list