From ec1e7faf65aecf3dd6c325ff7ef585fd3fce6b08 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Stefan=20Gr=C3=A4nitz?= Date: Sat, 29 Feb 2020 11:52:19 +0000 Subject: [PATCH] [ExecutionEngine] Add JITSymbolFlags::fromSummary(GlobalValueSummary*) Summary: A function that creates JITSymbolFlags from a GlobalValueSummary. Similar functions exist: fromGlobalValue(), fromObjectSymbol() Reviewers: lhames Reviewed By: lhames Subscribers: hiraditya, steven_wu, dexonsmith, arphaman, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D75082 --- llvm/include/llvm/ExecutionEngine/JITSymbol.h | 5 +++++ llvm/lib/ExecutionEngine/RuntimeDyld/JITSymbol.cpp | 17 +++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/llvm/include/llvm/ExecutionEngine/JITSymbol.h b/llvm/include/llvm/ExecutionEngine/JITSymbol.h index 67e531a..a7e8b3a 100644 --- a/llvm/include/llvm/ExecutionEngine/JITSymbol.h +++ b/llvm/include/llvm/ExecutionEngine/JITSymbol.h @@ -30,6 +30,7 @@ namespace llvm { class GlobalValue; +class GlobalValueSummary; namespace object { @@ -160,6 +161,10 @@ public: /// value. static JITSymbolFlags fromGlobalValue(const GlobalValue &GV); + /// Construct a JITSymbolFlags value based on the flags of the given global + /// value summary. + static JITSymbolFlags fromSummary(GlobalValueSummary *S); + /// Construct a JITSymbolFlags value based on the flags of the given libobject /// symbol. static Expected diff --git a/llvm/lib/ExecutionEngine/RuntimeDyld/JITSymbol.cpp b/llvm/lib/ExecutionEngine/RuntimeDyld/JITSymbol.cpp index 4e2d0f4..031a055 100644 --- a/llvm/lib/ExecutionEngine/RuntimeDyld/JITSymbol.cpp +++ b/llvm/lib/ExecutionEngine/RuntimeDyld/JITSymbol.cpp @@ -14,6 +14,7 @@ #include "llvm/IR/Function.h" #include "llvm/IR/GlobalAlias.h" #include "llvm/IR/GlobalValue.h" +#include "llvm/IR/ModuleSummaryIndex.h" #include "llvm/Object/ObjectFile.h" using namespace llvm; @@ -36,6 +37,22 @@ JITSymbolFlags llvm::JITSymbolFlags::fromGlobalValue(const GlobalValue &GV) { return Flags; } +JITSymbolFlags llvm::JITSymbolFlags::fromSummary(GlobalValueSummary *S) { + JITSymbolFlags Flags = JITSymbolFlags::None; + auto L = S->linkage(); + if (GlobalValue::isWeakLinkage(L) || GlobalValue::isLinkOnceLinkage(L)) + Flags |= JITSymbolFlags::Weak; + if (GlobalValue::isCommonLinkage(L)) + Flags |= JITSymbolFlags::Common; + if (GlobalValue::isExternalLinkage(L) || GlobalValue::isExternalWeakLinkage(L)) + Flags |= JITSymbolFlags::Exported; + + if (isa(S)) + Flags |= JITSymbolFlags::Callable; + + return Flags; +} + Expected llvm::JITSymbolFlags::fromObjectSymbol(const object::SymbolRef &Symbol) { JITSymbolFlags Flags = JITSymbolFlags::None; -- 2.7.4