-
Notifications
You must be signed in to change notification settings - Fork 14.2k
[llvm] annotate remaining LLVM interfaces for DLL export #144746
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
@compnerd, @vgvassilev other than the annotations for llvm-c and Demangle libraries, which require new annotation macros, this is the bulk of the remaining annotation code-mod. Please review at your convenience, thanks! |
@llvm/pr-subscribers-llvm-transforms @llvm/pr-subscribers-clang Author: Andrew Rogers (andrurogerz) ChangesPurposeThis patch is one in a series of code-mods that annotate LLVM’s public interface for export. This patch annotates the remaining LLVM interface that was missed in, or modified since, previous patches. The annotations currently have no meaningful impact on the LLVM build; however, they are a prerequisite to support an LLVM Windows DLL (shared library) build. BackgroundThis effort is tracked in #109483. Additional context is provided in this discourse, and documentation for OverviewThe bulk of these changes were generated automatically using the Interface Definition Scanner (IDS) tool, followed formatting with The following manual adjustments were also applied after running IDS:
ValidationLocal builds and tests to validate cross-platform compatibility. This included llvm, clang, and lldb on the following configurations:
Patch is 53.81 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/144746.diff 41 Files Affected:
diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp
index 7e0a3cf5591ce..97bc063ad34e5 100644
--- a/clang/lib/CodeGen/BackendUtil.cpp
+++ b/clang/lib/CodeGen/BackendUtil.cpp
@@ -43,6 +43,7 @@
#include "llvm/ProfileData/InstrProfCorrelator.h"
#include "llvm/Support/BuryPointer.h"
#include "llvm/Support/CommandLine.h"
+#include "llvm/Support/Compiler.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/PrettyStackTrace.h"
#include "llvm/Support/Program.h"
@@ -96,8 +97,6 @@ using namespace llvm;
#include "llvm/Support/Extension.def"
namespace llvm {
-extern cl::opt<bool> PrintPipelinePasses;
-
// Experiment to move sanitizers earlier.
static cl::opt<bool> ClSanitizeOnOptimizerEarlyEP(
"sanitizer-early-opt-ep", cl::Optional,
@@ -118,7 +117,8 @@ static cl::opt<PGOOptions::ColdFuncOpt> ClPGOColdFuncAttr(
clEnumValN(PGOOptions::ColdFuncOpt::OptNone, "optnone",
"Mark cold functions with optnone.")));
-extern cl::opt<InstrProfCorrelator::ProfCorrelatorKind> ProfileCorrelate;
+LLVM_ABI extern cl::opt<InstrProfCorrelator::ProfCorrelatorKind>
+ ProfileCorrelate;
} // namespace llvm
namespace clang {
extern llvm::cl::opt<bool> ClSanitizeGuardChecks;
diff --git a/flang/lib/Frontend/FrontendActions.cpp b/flang/lib/Frontend/FrontendActions.cpp
index d684eeb696755..bf15def3f3b2e 100644
--- a/flang/lib/Frontend/FrontendActions.cpp
+++ b/flang/lib/Frontend/FrontendActions.cpp
@@ -74,10 +74,6 @@
#include <memory>
#include <system_error>
-namespace llvm {
-extern cl::opt<bool> PrintPipelinePasses;
-} // namespace llvm
-
using namespace Fortran::frontend;
constexpr llvm::StringLiteral timingIdParse = "Parse";
diff --git a/llvm/include/llvm/ADT/APFloat.h b/llvm/include/llvm/ADT/APFloat.h
index 13df838da3dad..a3ff0184d666d 100644
--- a/llvm/include/llvm/ADT/APFloat.h
+++ b/llvm/include/llvm/ADT/APFloat.h
@@ -673,7 +673,9 @@ class IEEEFloat final {
integerPart addSignificand(const IEEEFloat &);
integerPart subtractSignificand(const IEEEFloat &, integerPart);
- lostFraction addOrSubtractSignificand(const IEEEFloat &, bool subtract);
+ // Exported for IEEEFloatUnitTestHelper.
+ LLVM_ABI lostFraction addOrSubtractSignificand(const IEEEFloat &,
+ bool subtract);
lostFraction multiplySignificand(const IEEEFloat &, IEEEFloat,
bool ignoreAddend = false);
lostFraction multiplySignificand(const IEEEFloat&);
diff --git a/llvm/include/llvm/ADT/APInt.h b/llvm/include/llvm/ADT/APInt.h
index fe48c60466e96..164e9e52970d8 100644
--- a/llvm/include/llvm/ADT/APInt.h
+++ b/llvm/include/llvm/ADT/APInt.h
@@ -561,7 +561,7 @@ class [[nodiscard]] APInt {
}
/// Overload to compute a hash_code for an APInt value.
- friend hash_code hash_value(const APInt &Arg);
+ LLVM_ABI_FRIEND friend hash_code hash_value(const APInt &Arg);
/// This function returns a pointer to the internal storage of the APInt.
/// This is useful for writing out the APInt in binary form without any
diff --git a/llvm/include/llvm/ADT/DynamicAPInt.h b/llvm/include/llvm/ADT/DynamicAPInt.h
index 48c5c6eac9013..373c0e6247969 100644
--- a/llvm/include/llvm/ADT/DynamicAPInt.h
+++ b/llvm/include/llvm/ADT/DynamicAPInt.h
@@ -212,7 +212,7 @@ class DynamicAPInt {
friend DynamicAPInt operator/(int64_t A, const DynamicAPInt &B);
friend DynamicAPInt operator%(int64_t A, const DynamicAPInt &B);
- friend hash_code hash_value(const DynamicAPInt &x); // NOLINT
+ LLVM_ABI_FRIEND friend hash_code hash_value(const DynamicAPInt &x); // NOLINT
LLVM_ABI void static_assert_layout(); // NOLINT
diff --git a/llvm/include/llvm/Analysis/DXILResource.h b/llvm/include/llvm/Analysis/DXILResource.h
index cfc21b3ec202b..07b0e97a20fce 100644
--- a/llvm/include/llvm/Analysis/DXILResource.h
+++ b/llvm/include/llvm/Analysis/DXILResource.h
@@ -34,7 +34,7 @@ namespace dxil {
// Returns the resource name from dx_resource_handlefrombinding or
// dx_resource_handlefromimplicitbinding call
-StringRef getResourceNameFromBindingCall(CallInst *CI);
+LLVM_ABI StringRef getResourceNameFromBindingCall(CallInst *CI);
/// The dx.RawBuffer target extension type
///
diff --git a/llvm/include/llvm/Analysis/IR2Vec.h b/llvm/include/llvm/Analysis/IR2Vec.h
index de67955d85d7c..1eb4a9b8aaf9e 100644
--- a/llvm/include/llvm/Analysis/IR2Vec.h
+++ b/llvm/include/llvm/Analysis/IR2Vec.h
@@ -32,6 +32,7 @@
#include "llvm/ADT/DenseMap.h"
#include "llvm/IR/PassManager.h"
#include "llvm/Support/CommandLine.h"
+#include "llvm/Support/Compiler.h"
#include "llvm/Support/ErrorOr.h"
#include "llvm/Support/JSON.h"
#include <map>
@@ -57,9 +58,9 @@ enum class IR2VecKind { Symbolic };
namespace ir2vec {
-extern cl::opt<float> OpcWeight;
-extern cl::opt<float> TypeWeight;
-extern cl::opt<float> ArgWeight;
+LLVM_ABI extern cl::opt<float> OpcWeight;
+LLVM_ABI extern cl::opt<float> TypeWeight;
+LLVM_ABI extern cl::opt<float> ArgWeight;
/// Embedding is a datatype that wraps std::vector<double>. It provides
/// additional functionality for arithmetic and comparison operations.
@@ -106,16 +107,17 @@ struct Embedding {
const std::vector<double> &getData() const { return Data; }
/// Arithmetic operators
- Embedding &operator+=(const Embedding &RHS);
- Embedding &operator-=(const Embedding &RHS);
+ LLVM_ABI Embedding &operator+=(const Embedding &RHS);
+ LLVM_ABI Embedding &operator-=(const Embedding &RHS);
/// Adds Src Embedding scaled by Factor with the called Embedding.
/// Called_Embedding += Src * Factor
- Embedding &scaleAndAdd(const Embedding &Src, float Factor);
+ LLVM_ABI Embedding &scaleAndAdd(const Embedding &Src, float Factor);
/// Returns true if the embedding is approximately equal to the RHS embedding
/// within the specified tolerance.
- bool approximatelyEquals(const Embedding &RHS, double Tolerance = 1e-6) const;
+ LLVM_ABI bool approximatelyEquals(const Embedding &RHS,
+ double Tolerance = 1e-6) const;
};
using InstEmbeddingsMap = DenseMap<const Instruction *, Embedding>;
@@ -148,7 +150,7 @@ class Embedder {
mutable BBEmbeddingsMap BBVecMap;
mutable InstEmbeddingsMap InstVecMap;
- Embedder(const Function &F, const Vocab &Vocabulary);
+ LLVM_ABI Embedder(const Function &F, const Vocab &Vocabulary);
/// Helper function to compute embeddings. It generates embeddings for all
/// the instructions and basic blocks in the function F. Logic of computing
@@ -161,38 +163,38 @@ class Embedder {
/// Lookup vocabulary for a given Key. If the key is not found, it returns a
/// zero vector.
- Embedding lookupVocab(const std::string &Key) const;
+ LLVM_ABI Embedding lookupVocab(const std::string &Key) const;
public:
virtual ~Embedder() = default;
/// Factory method to create an Embedder object.
- static Expected<std::unique_ptr<Embedder>>
+ LLVM_ABI static Expected<std::unique_ptr<Embedder>>
create(IR2VecKind Mode, const Function &F, const Vocab &Vocabulary);
/// Returns a map containing instructions and the corresponding embeddings for
/// the function F if it has been computed. If not, it computes the embeddings
/// for the function and returns the map.
- const InstEmbeddingsMap &getInstVecMap() const;
+ LLVM_ABI const InstEmbeddingsMap &getInstVecMap() const;
/// Returns a map containing basic block and the corresponding embeddings for
/// the function F if it has been computed. If not, it computes the embeddings
/// for the function and returns the map.
- const BBEmbeddingsMap &getBBVecMap() const;
+ LLVM_ABI const BBEmbeddingsMap &getBBVecMap() const;
/// Returns the embedding for a given basic block in the function F if it has
/// been computed. If not, it computes the embedding for the basic block and
/// returns it.
- const Embedding &getBBVector(const BasicBlock &BB) const;
+ LLVM_ABI const Embedding &getBBVector(const BasicBlock &BB) const;
/// Computes and returns the embedding for the current function.
- const Embedding &getFunctionVector() const;
+ LLVM_ABI const Embedding &getFunctionVector() const;
};
/// Class for computing the Symbolic embeddings of IR2Vec.
/// Symbolic embeddings are constructed based on the entity-level
/// representations obtained from the Vocabulary.
-class SymbolicEmbedder : public Embedder {
+class LLVM_ABI SymbolicEmbedder : public Embedder {
private:
/// Utility function to compute the embedding for a given type.
Embedding getTypeEmbedding(const Type *Ty) const;
@@ -219,13 +221,13 @@ class IR2VecVocabResult {
public:
IR2VecVocabResult() = default;
- IR2VecVocabResult(ir2vec::Vocab &&Vocabulary);
+ LLVM_ABI IR2VecVocabResult(ir2vec::Vocab &&Vocabulary);
bool isValid() const { return Valid; }
- const ir2vec::Vocab &getVocabulary() const;
- unsigned getDimension() const;
- bool invalidate(Module &M, const PreservedAnalyses &PA,
- ModuleAnalysisManager::Invalidator &Inv) const;
+ LLVM_ABI const ir2vec::Vocab &getVocabulary() const;
+ LLVM_ABI unsigned getDimension() const;
+ LLVM_ABI bool invalidate(Module &M, const PreservedAnalyses &PA,
+ ModuleAnalysisManager::Invalidator &Inv) const;
};
/// This analysis provides the vocabulary for IR2Vec. The vocabulary provides a
@@ -237,12 +239,12 @@ class IR2VecVocabAnalysis : public AnalysisInfoMixin<IR2VecVocabAnalysis> {
void emitError(Error Err, LLVMContext &Ctx);
public:
- static AnalysisKey Key;
+ LLVM_ABI static AnalysisKey Key;
IR2VecVocabAnalysis() = default;
- explicit IR2VecVocabAnalysis(const ir2vec::Vocab &Vocab);
- explicit IR2VecVocabAnalysis(ir2vec::Vocab &&Vocab);
+ LLVM_ABI explicit IR2VecVocabAnalysis(const ir2vec::Vocab &Vocab);
+ LLVM_ABI explicit IR2VecVocabAnalysis(ir2vec::Vocab &&Vocab);
using Result = IR2VecVocabResult;
- Result run(Module &M, ModuleAnalysisManager &MAM);
+ LLVM_ABI Result run(Module &M, ModuleAnalysisManager &MAM);
};
/// This pass prints the IR2Vec embeddings for instructions, basic blocks, and
@@ -253,7 +255,7 @@ class IR2VecPrinterPass : public PassInfoMixin<IR2VecPrinterPass> {
public:
explicit IR2VecPrinterPass(raw_ostream &OS) : OS(OS) {}
- PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM);
+ LLVM_ABI PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM);
static bool isRequired() { return true; }
};
diff --git a/llvm/include/llvm/Analysis/ValueTracking.h b/llvm/include/llvm/Analysis/ValueTracking.h
index e215c90b5a72a..1b0c57b917954 100644
--- a/llvm/include/llvm/Analysis/ValueTracking.h
+++ b/llvm/include/llvm/Analysis/ValueTracking.h
@@ -311,11 +311,11 @@ LLVM_ABI std::optional<bool> computeKnownFPSignBit(const Value *V,
/// Return true if the sign bit of the FP value can be ignored by the user when
/// the value is zero.
-bool canIgnoreSignBitOfZero(const Use &U);
+LLVM_ABI bool canIgnoreSignBitOfZero(const Use &U);
/// Return true if the sign bit of the FP value can be ignored by the user when
/// the value is NaN.
-bool canIgnoreSignBitOfNaN(const Use &U);
+LLVM_ABI bool canIgnoreSignBitOfNaN(const Use &U);
/// If the specified value can be set by repeating the same byte in memory,
/// return the i8 value that it is represented with. This is true for all i8
diff --git a/llvm/include/llvm/BinaryFormat/DXContainer.h b/llvm/include/llvm/BinaryFormat/DXContainer.h
index 6d625dad5853f..260535f8da21f 100644
--- a/llvm/include/llvm/BinaryFormat/DXContainer.h
+++ b/llvm/include/llvm/BinaryFormat/DXContainer.h
@@ -181,7 +181,7 @@ enum class DescriptorRangeType : uint32_t {
#include "DXContainerConstants.def"
};
-ArrayRef<EnumEntry<DescriptorRangeType>> getDescriptorRangeTypes();
+LLVM_ABI ArrayRef<EnumEntry<DescriptorRangeType>> getDescriptorRangeTypes();
#define ROOT_PARAMETER(Val, Enum) \
case Val: \
diff --git a/llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h b/llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h
index 109dc8812c24d..75c051712ae43 100644
--- a/llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h
+++ b/llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h
@@ -609,6 +609,15 @@ class LLVM_ABI CallLowering {
virtual bool isTypeIsValidForThisReturn(EVT Ty) const { return false; }
};
+extern template LLVM_ABI void
+CallLowering::setArgFlags<Function>(CallLowering::ArgInfo &Arg, unsigned OpIdx,
+ const DataLayout &DL,
+ const Function &FuncInfo) const;
+
+extern template LLVM_ABI void
+CallLowering::setArgFlags<CallBase>(CallLowering::ArgInfo &Arg, unsigned OpIdx,
+ const DataLayout &DL,
+ const CallBase &FuncInfo) const;
} // end namespace llvm
#endif // LLVM_CODEGEN_GLOBALISEL_CALLLOWERING_H
diff --git a/llvm/include/llvm/CodeGenTypes/LowLevelType.h b/llvm/include/llvm/CodeGenTypes/LowLevelType.h
index 06879e1f8d15b..d8e0848aff84d 100644
--- a/llvm/include/llvm/CodeGenTypes/LowLevelType.h
+++ b/llvm/include/llvm/CodeGenTypes/LowLevelType.h
@@ -28,6 +28,7 @@
#include "llvm/ADT/DenseMapInfo.h"
#include "llvm/CodeGenTypes/MachineValueType.h"
+#include "llvm/Support/Compiler.h"
#include "llvm/Support/Debug.h"
#include <cassert>
@@ -140,7 +141,7 @@ class LLT {
explicit constexpr LLT()
: IsScalar(false), IsPointer(false), IsVector(false), RawData(0) {}
- explicit LLT(MVT VT);
+ LLVM_ABI explicit LLT(MVT VT);
constexpr bool isValid() const { return IsScalar || RawData != 0; }
constexpr bool isScalar() const { return IsScalar; }
@@ -282,7 +283,7 @@ class LLT {
return scalar(getScalarSizeInBits());
}
- void print(raw_ostream &OS) const;
+ LLVM_ABI void print(raw_ostream &OS) const;
#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
LLVM_DUMP_METHOD void dump() const;
diff --git a/llvm/include/llvm/CodeGenTypes/MachineValueType.h b/llvm/include/llvm/CodeGenTypes/MachineValueType.h
index c14abca027350..b8e91a022ec5e 100644
--- a/llvm/include/llvm/CodeGenTypes/MachineValueType.h
+++ b/llvm/include/llvm/CodeGenTypes/MachineValueType.h
@@ -17,6 +17,7 @@
#define LLVM_CODEGEN_MACHINEVALUETYPE_H
#include "llvm/ADT/Sequence.h"
+#include "llvm/Support/Compiler.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/MathExtras.h"
#include "llvm/Support/TypeSize.h"
@@ -65,10 +66,10 @@ namespace llvm {
bool operator<=(const MVT& S) const { return SimpleTy <= S.SimpleTy; }
/// Support for debugging, callable in GDB: VT.dump()
- void dump() const;
+ LLVM_ABI void dump() const;
/// Implement operator<<.
- void print(raw_ostream &OS) const;
+ LLVM_ABI void print(raw_ostream &OS) const;
/// Return true if this is a valid simple valuetype.
bool isValid() const {
@@ -509,11 +510,11 @@ namespace llvm {
/// otherwise they are invalid.
/// NB: This includes pointer types, which require a DataLayout to convert
/// to a concrete value type.
- static MVT getVT(Type *Ty, bool HandleUnknown = false);
+ LLVM_ABI static MVT getVT(Type *Ty, bool HandleUnknown = false);
/// Returns an APFloat semantics tag appropriate for the value type. If this
/// is a vector type, the element semantics are returned.
- const fltSemantics &getFltSemantics() const;
+ LLVM_ABI const fltSemantics &getFltSemantics() const;
public:
/// SimpleValueType Iteration
diff --git a/llvm/include/llvm/DebugInfo/DWARF/DWARFCFIPrinter.h b/llvm/include/llvm/DebugInfo/DWARF/DWARFCFIPrinter.h
index 32e8247ac4c22..4723f00a4d241 100644
--- a/llvm/include/llvm/DebugInfo/DWARF/DWARFCFIPrinter.h
+++ b/llvm/include/llvm/DebugInfo/DWARF/DWARFCFIPrinter.h
@@ -10,6 +10,7 @@
#define LLVM_DEBUGINFO_DWARF_DWARFCFIPRINTER_H
#include "llvm/DebugInfo/DWARF/DWARFCFIProgram.h"
+#include "llvm/Support/Compiler.h"
namespace llvm {
@@ -17,9 +18,10 @@ struct DIDumpOptions;
namespace dwarf {
-void printCFIProgram(const CFIProgram &P, raw_ostream &OS,
- const DIDumpOptions &DumpOpts, unsigned IndentLevel,
- std::optional<uint64_t> Address);
+LLVM_ABI void printCFIProgram(const CFIProgram &P, raw_ostream &OS,
+ const DIDumpOptions &DumpOpts,
+ unsigned IndentLevel,
+ std::optional<uint64_t> Address);
} // end namespace dwarf
diff --git a/llvm/include/llvm/DebugInfo/DWARF/DWARFCFIProgram.h b/llvm/include/llvm/DebugInfo/DWARF/DWARFCFIProgram.h
index ad7358c28f16b..1d89ac3578c10 100644
--- a/llvm/include/llvm/DebugInfo/DWARF/DWARFCFIProgram.h
+++ b/llvm/include/llvm/DebugInfo/DWARF/DWARFCFIProgram.h
@@ -106,11 +106,11 @@ class CFIProgram {
};
/// Get the OperandType as a "const char *".
- static const char *operandTypeString(OperandType OT);
+ LLVM_ABI static const char *operandTypeString(OperandType OT);
/// Retrieve the array describing the types of operands according to the enum
/// above. This is indexed by opcode.
- static ArrayRef<OperandType[MaxOperands]> getOperandTypes();
+ LLVM_ABI static ArrayRef<OperandType[MaxOperands]> getOperandTypes();
private:
std::vector<Instruction> Instructions;
diff --git a/llvm/include/llvm/DebugInfo/DWARF/DWARFExpression.h b/llvm/include/llvm/DebugInfo/DWARF/DWARFExpression.h
index 44432d3219111..ea414278c35d6 100644
--- a/llvm/include/llvm/DebugInfo/DWARF/DWARFExpression.h
+++ b/llvm/include/llvm/DebugInfo/DWARF/DWARFExpression.h
@@ -186,8 +186,9 @@ class DWARFExpressionPrinter {
/// \param E to be printed
/// \param OS to this stream
/// \param GetNameForDWARFReg callback to return dwarf register name
- static void print(const DWARFExpression *E, raw_ostream &OS,
- DIDumpOptions DumpOpts, DWARFUnit *U, bool IsEH = false);
+ LLVM_ABI static void print(const DWARFExpression *E, raw_ostream &OS,
+ DIDumpOptions DumpOpts, DWARFUnit *U,
+ bool IsEH = false);
/// Print the expression in a format intended to be compact and useful to a
/// user, but not perfectly unambiguous, or capable of representing every
@@ -199,9 +200,10 @@ class DWARFExpressionPrinter {
/// \param GetNameForDWARFReg callback to return dwarf register name
///
/// \returns true if the expression was successfully printed
- static bool printCompact(const DWARFExpression *E, raw_ostream &OS,
- std::function<StringRef(uint64_t RegNum, bool IsEH)>
- GetNameForDWARFReg = nullptr);
+ LLVM_ABI static bool printCompact(
+ const DWARFExpression *E, raw_ostream &OS,
+ std::function<StringRef(uint64_t RegNum, bool IsEH)> GetNameForDWARFReg =
+ nullptr);
/// Pretty print a register opcode and operands.
/// \param U within the context of this Dwarf unit, if any.
@@ -211,9 +213,10 @@ class DWARFExpressionPrinter {
/// \param Operands to the opcode
///
/// returns true if the Op was successfully printed
- static bool prettyPrintRegisterOp(DWARFUnit *U, raw_ostream &OS,
- DIDumpOptions DumpOpts, uint8_t Opcode,
- ArrayRef<uint64_t> Operands);
+ LLVM_ABI static bool prettyPrintRegisterOp(DWARFUnit *U, raw_ostream &OS,
+ DIDumpOptions DumpOpts,
+ uint8_t Opcode,
+ ArrayRef<uint64_t> Operands);
private:
static bool printOp(const DWARFExpression::Operation *Op, raw_ostream &OS,
diff --git a/llvm/include/llvm/DebugInfo/LogicalView/Core/LVSourceLanguage.h b/llvm/include/llvm/DebugInfo/LogicalView/Core/LVSourceLanguage.h
index 52e4aa9701e44..f4ebfc914ad05 100644
--- a/llvm/include/llvm/DebugInfo/LogicalView/Core/LVSourceLanguage.h
+++ b/llvm/include/llvm/DebugInfo/LogicalView/Core/LVSourceLanguage.h
@@ -17,6 +17,7 @@
#include "llvm/ADT/StringRef.h"
#include "llvm/BinaryFormat/Dwarf.h"
#include "llvm/DebugInfo/CodeView/CodeView.h"
+#include "llvm/Support/Compiler.h"
namespace llvm {
namespace logicalview {
@@ -52,7 +53,7 @@ struct LVSourceLanguage {
bool isVali...
[truncated]
|
@llvm/pr-subscribers-debuginfo Author: Andrew Rogers (andrurogerz) ChangesPurposeThis patch is one in a series of code-mods that annotate LLVM’s public interface for export. This patch annotates the remaining LLVM interface that was missed in, or modified since, previous patches. The annotations currently have no meaningful impact on the LLVM build; however, they are a prerequisite to support an LLVM Windows DLL (shared library) build. BackgroundThis effort is tracked in #109483. Additional context is provided in this discourse, and documentation for OverviewThe bulk of these changes were generated automatically using the Interface Definition Scanner (IDS) tool, followed formatting with The following manual adjustments were also applied after running IDS:
ValidationLocal builds and tests to validate cross-platform compatibility. This included llvm, clang, and lldb on the following configurations:
Patch is 53.81 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/144746.diff 41 Files Affected:
diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp
index 7e0a3cf5591ce..97bc063ad34e5 100644
--- a/clang/lib/CodeGen/BackendUtil.cpp
+++ b/clang/lib/CodeGen/BackendUtil.cpp
@@ -43,6 +43,7 @@
#include "llvm/ProfileData/InstrProfCorrelator.h"
#include "llvm/Support/BuryPointer.h"
#include "llvm/Support/CommandLine.h"
+#include "llvm/Support/Compiler.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/PrettyStackTrace.h"
#include "llvm/Support/Program.h"
@@ -96,8 +97,6 @@ using namespace llvm;
#include "llvm/Support/Extension.def"
namespace llvm {
-extern cl::opt<bool> PrintPipelinePasses;
-
// Experiment to move sanitizers earlier.
static cl::opt<bool> ClSanitizeOnOptimizerEarlyEP(
"sanitizer-early-opt-ep", cl::Optional,
@@ -118,7 +117,8 @@ static cl::opt<PGOOptions::ColdFuncOpt> ClPGOColdFuncAttr(
clEnumValN(PGOOptions::ColdFuncOpt::OptNone, "optnone",
"Mark cold functions with optnone.")));
-extern cl::opt<InstrProfCorrelator::ProfCorrelatorKind> ProfileCorrelate;
+LLVM_ABI extern cl::opt<InstrProfCorrelator::ProfCorrelatorKind>
+ ProfileCorrelate;
} // namespace llvm
namespace clang {
extern llvm::cl::opt<bool> ClSanitizeGuardChecks;
diff --git a/flang/lib/Frontend/FrontendActions.cpp b/flang/lib/Frontend/FrontendActions.cpp
index d684eeb696755..bf15def3f3b2e 100644
--- a/flang/lib/Frontend/FrontendActions.cpp
+++ b/flang/lib/Frontend/FrontendActions.cpp
@@ -74,10 +74,6 @@
#include <memory>
#include <system_error>
-namespace llvm {
-extern cl::opt<bool> PrintPipelinePasses;
-} // namespace llvm
-
using namespace Fortran::frontend;
constexpr llvm::StringLiteral timingIdParse = "Parse";
diff --git a/llvm/include/llvm/ADT/APFloat.h b/llvm/include/llvm/ADT/APFloat.h
index 13df838da3dad..a3ff0184d666d 100644
--- a/llvm/include/llvm/ADT/APFloat.h
+++ b/llvm/include/llvm/ADT/APFloat.h
@@ -673,7 +673,9 @@ class IEEEFloat final {
integerPart addSignificand(const IEEEFloat &);
integerPart subtractSignificand(const IEEEFloat &, integerPart);
- lostFraction addOrSubtractSignificand(const IEEEFloat &, bool subtract);
+ // Exported for IEEEFloatUnitTestHelper.
+ LLVM_ABI lostFraction addOrSubtractSignificand(const IEEEFloat &,
+ bool subtract);
lostFraction multiplySignificand(const IEEEFloat &, IEEEFloat,
bool ignoreAddend = false);
lostFraction multiplySignificand(const IEEEFloat&);
diff --git a/llvm/include/llvm/ADT/APInt.h b/llvm/include/llvm/ADT/APInt.h
index fe48c60466e96..164e9e52970d8 100644
--- a/llvm/include/llvm/ADT/APInt.h
+++ b/llvm/include/llvm/ADT/APInt.h
@@ -561,7 +561,7 @@ class [[nodiscard]] APInt {
}
/// Overload to compute a hash_code for an APInt value.
- friend hash_code hash_value(const APInt &Arg);
+ LLVM_ABI_FRIEND friend hash_code hash_value(const APInt &Arg);
/// This function returns a pointer to the internal storage of the APInt.
/// This is useful for writing out the APInt in binary form without any
diff --git a/llvm/include/llvm/ADT/DynamicAPInt.h b/llvm/include/llvm/ADT/DynamicAPInt.h
index 48c5c6eac9013..373c0e6247969 100644
--- a/llvm/include/llvm/ADT/DynamicAPInt.h
+++ b/llvm/include/llvm/ADT/DynamicAPInt.h
@@ -212,7 +212,7 @@ class DynamicAPInt {
friend DynamicAPInt operator/(int64_t A, const DynamicAPInt &B);
friend DynamicAPInt operator%(int64_t A, const DynamicAPInt &B);
- friend hash_code hash_value(const DynamicAPInt &x); // NOLINT
+ LLVM_ABI_FRIEND friend hash_code hash_value(const DynamicAPInt &x); // NOLINT
LLVM_ABI void static_assert_layout(); // NOLINT
diff --git a/llvm/include/llvm/Analysis/DXILResource.h b/llvm/include/llvm/Analysis/DXILResource.h
index cfc21b3ec202b..07b0e97a20fce 100644
--- a/llvm/include/llvm/Analysis/DXILResource.h
+++ b/llvm/include/llvm/Analysis/DXILResource.h
@@ -34,7 +34,7 @@ namespace dxil {
// Returns the resource name from dx_resource_handlefrombinding or
// dx_resource_handlefromimplicitbinding call
-StringRef getResourceNameFromBindingCall(CallInst *CI);
+LLVM_ABI StringRef getResourceNameFromBindingCall(CallInst *CI);
/// The dx.RawBuffer target extension type
///
diff --git a/llvm/include/llvm/Analysis/IR2Vec.h b/llvm/include/llvm/Analysis/IR2Vec.h
index de67955d85d7c..1eb4a9b8aaf9e 100644
--- a/llvm/include/llvm/Analysis/IR2Vec.h
+++ b/llvm/include/llvm/Analysis/IR2Vec.h
@@ -32,6 +32,7 @@
#include "llvm/ADT/DenseMap.h"
#include "llvm/IR/PassManager.h"
#include "llvm/Support/CommandLine.h"
+#include "llvm/Support/Compiler.h"
#include "llvm/Support/ErrorOr.h"
#include "llvm/Support/JSON.h"
#include <map>
@@ -57,9 +58,9 @@ enum class IR2VecKind { Symbolic };
namespace ir2vec {
-extern cl::opt<float> OpcWeight;
-extern cl::opt<float> TypeWeight;
-extern cl::opt<float> ArgWeight;
+LLVM_ABI extern cl::opt<float> OpcWeight;
+LLVM_ABI extern cl::opt<float> TypeWeight;
+LLVM_ABI extern cl::opt<float> ArgWeight;
/// Embedding is a datatype that wraps std::vector<double>. It provides
/// additional functionality for arithmetic and comparison operations.
@@ -106,16 +107,17 @@ struct Embedding {
const std::vector<double> &getData() const { return Data; }
/// Arithmetic operators
- Embedding &operator+=(const Embedding &RHS);
- Embedding &operator-=(const Embedding &RHS);
+ LLVM_ABI Embedding &operator+=(const Embedding &RHS);
+ LLVM_ABI Embedding &operator-=(const Embedding &RHS);
/// Adds Src Embedding scaled by Factor with the called Embedding.
/// Called_Embedding += Src * Factor
- Embedding &scaleAndAdd(const Embedding &Src, float Factor);
+ LLVM_ABI Embedding &scaleAndAdd(const Embedding &Src, float Factor);
/// Returns true if the embedding is approximately equal to the RHS embedding
/// within the specified tolerance.
- bool approximatelyEquals(const Embedding &RHS, double Tolerance = 1e-6) const;
+ LLVM_ABI bool approximatelyEquals(const Embedding &RHS,
+ double Tolerance = 1e-6) const;
};
using InstEmbeddingsMap = DenseMap<const Instruction *, Embedding>;
@@ -148,7 +150,7 @@ class Embedder {
mutable BBEmbeddingsMap BBVecMap;
mutable InstEmbeddingsMap InstVecMap;
- Embedder(const Function &F, const Vocab &Vocabulary);
+ LLVM_ABI Embedder(const Function &F, const Vocab &Vocabulary);
/// Helper function to compute embeddings. It generates embeddings for all
/// the instructions and basic blocks in the function F. Logic of computing
@@ -161,38 +163,38 @@ class Embedder {
/// Lookup vocabulary for a given Key. If the key is not found, it returns a
/// zero vector.
- Embedding lookupVocab(const std::string &Key) const;
+ LLVM_ABI Embedding lookupVocab(const std::string &Key) const;
public:
virtual ~Embedder() = default;
/// Factory method to create an Embedder object.
- static Expected<std::unique_ptr<Embedder>>
+ LLVM_ABI static Expected<std::unique_ptr<Embedder>>
create(IR2VecKind Mode, const Function &F, const Vocab &Vocabulary);
/// Returns a map containing instructions and the corresponding embeddings for
/// the function F if it has been computed. If not, it computes the embeddings
/// for the function and returns the map.
- const InstEmbeddingsMap &getInstVecMap() const;
+ LLVM_ABI const InstEmbeddingsMap &getInstVecMap() const;
/// Returns a map containing basic block and the corresponding embeddings for
/// the function F if it has been computed. If not, it computes the embeddings
/// for the function and returns the map.
- const BBEmbeddingsMap &getBBVecMap() const;
+ LLVM_ABI const BBEmbeddingsMap &getBBVecMap() const;
/// Returns the embedding for a given basic block in the function F if it has
/// been computed. If not, it computes the embedding for the basic block and
/// returns it.
- const Embedding &getBBVector(const BasicBlock &BB) const;
+ LLVM_ABI const Embedding &getBBVector(const BasicBlock &BB) const;
/// Computes and returns the embedding for the current function.
- const Embedding &getFunctionVector() const;
+ LLVM_ABI const Embedding &getFunctionVector() const;
};
/// Class for computing the Symbolic embeddings of IR2Vec.
/// Symbolic embeddings are constructed based on the entity-level
/// representations obtained from the Vocabulary.
-class SymbolicEmbedder : public Embedder {
+class LLVM_ABI SymbolicEmbedder : public Embedder {
private:
/// Utility function to compute the embedding for a given type.
Embedding getTypeEmbedding(const Type *Ty) const;
@@ -219,13 +221,13 @@ class IR2VecVocabResult {
public:
IR2VecVocabResult() = default;
- IR2VecVocabResult(ir2vec::Vocab &&Vocabulary);
+ LLVM_ABI IR2VecVocabResult(ir2vec::Vocab &&Vocabulary);
bool isValid() const { return Valid; }
- const ir2vec::Vocab &getVocabulary() const;
- unsigned getDimension() const;
- bool invalidate(Module &M, const PreservedAnalyses &PA,
- ModuleAnalysisManager::Invalidator &Inv) const;
+ LLVM_ABI const ir2vec::Vocab &getVocabulary() const;
+ LLVM_ABI unsigned getDimension() const;
+ LLVM_ABI bool invalidate(Module &M, const PreservedAnalyses &PA,
+ ModuleAnalysisManager::Invalidator &Inv) const;
};
/// This analysis provides the vocabulary for IR2Vec. The vocabulary provides a
@@ -237,12 +239,12 @@ class IR2VecVocabAnalysis : public AnalysisInfoMixin<IR2VecVocabAnalysis> {
void emitError(Error Err, LLVMContext &Ctx);
public:
- static AnalysisKey Key;
+ LLVM_ABI static AnalysisKey Key;
IR2VecVocabAnalysis() = default;
- explicit IR2VecVocabAnalysis(const ir2vec::Vocab &Vocab);
- explicit IR2VecVocabAnalysis(ir2vec::Vocab &&Vocab);
+ LLVM_ABI explicit IR2VecVocabAnalysis(const ir2vec::Vocab &Vocab);
+ LLVM_ABI explicit IR2VecVocabAnalysis(ir2vec::Vocab &&Vocab);
using Result = IR2VecVocabResult;
- Result run(Module &M, ModuleAnalysisManager &MAM);
+ LLVM_ABI Result run(Module &M, ModuleAnalysisManager &MAM);
};
/// This pass prints the IR2Vec embeddings for instructions, basic blocks, and
@@ -253,7 +255,7 @@ class IR2VecPrinterPass : public PassInfoMixin<IR2VecPrinterPass> {
public:
explicit IR2VecPrinterPass(raw_ostream &OS) : OS(OS) {}
- PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM);
+ LLVM_ABI PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM);
static bool isRequired() { return true; }
};
diff --git a/llvm/include/llvm/Analysis/ValueTracking.h b/llvm/include/llvm/Analysis/ValueTracking.h
index e215c90b5a72a..1b0c57b917954 100644
--- a/llvm/include/llvm/Analysis/ValueTracking.h
+++ b/llvm/include/llvm/Analysis/ValueTracking.h
@@ -311,11 +311,11 @@ LLVM_ABI std::optional<bool> computeKnownFPSignBit(const Value *V,
/// Return true if the sign bit of the FP value can be ignored by the user when
/// the value is zero.
-bool canIgnoreSignBitOfZero(const Use &U);
+LLVM_ABI bool canIgnoreSignBitOfZero(const Use &U);
/// Return true if the sign bit of the FP value can be ignored by the user when
/// the value is NaN.
-bool canIgnoreSignBitOfNaN(const Use &U);
+LLVM_ABI bool canIgnoreSignBitOfNaN(const Use &U);
/// If the specified value can be set by repeating the same byte in memory,
/// return the i8 value that it is represented with. This is true for all i8
diff --git a/llvm/include/llvm/BinaryFormat/DXContainer.h b/llvm/include/llvm/BinaryFormat/DXContainer.h
index 6d625dad5853f..260535f8da21f 100644
--- a/llvm/include/llvm/BinaryFormat/DXContainer.h
+++ b/llvm/include/llvm/BinaryFormat/DXContainer.h
@@ -181,7 +181,7 @@ enum class DescriptorRangeType : uint32_t {
#include "DXContainerConstants.def"
};
-ArrayRef<EnumEntry<DescriptorRangeType>> getDescriptorRangeTypes();
+LLVM_ABI ArrayRef<EnumEntry<DescriptorRangeType>> getDescriptorRangeTypes();
#define ROOT_PARAMETER(Val, Enum) \
case Val: \
diff --git a/llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h b/llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h
index 109dc8812c24d..75c051712ae43 100644
--- a/llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h
+++ b/llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h
@@ -609,6 +609,15 @@ class LLVM_ABI CallLowering {
virtual bool isTypeIsValidForThisReturn(EVT Ty) const { return false; }
};
+extern template LLVM_ABI void
+CallLowering::setArgFlags<Function>(CallLowering::ArgInfo &Arg, unsigned OpIdx,
+ const DataLayout &DL,
+ const Function &FuncInfo) const;
+
+extern template LLVM_ABI void
+CallLowering::setArgFlags<CallBase>(CallLowering::ArgInfo &Arg, unsigned OpIdx,
+ const DataLayout &DL,
+ const CallBase &FuncInfo) const;
} // end namespace llvm
#endif // LLVM_CODEGEN_GLOBALISEL_CALLLOWERING_H
diff --git a/llvm/include/llvm/CodeGenTypes/LowLevelType.h b/llvm/include/llvm/CodeGenTypes/LowLevelType.h
index 06879e1f8d15b..d8e0848aff84d 100644
--- a/llvm/include/llvm/CodeGenTypes/LowLevelType.h
+++ b/llvm/include/llvm/CodeGenTypes/LowLevelType.h
@@ -28,6 +28,7 @@
#include "llvm/ADT/DenseMapInfo.h"
#include "llvm/CodeGenTypes/MachineValueType.h"
+#include "llvm/Support/Compiler.h"
#include "llvm/Support/Debug.h"
#include <cassert>
@@ -140,7 +141,7 @@ class LLT {
explicit constexpr LLT()
: IsScalar(false), IsPointer(false), IsVector(false), RawData(0) {}
- explicit LLT(MVT VT);
+ LLVM_ABI explicit LLT(MVT VT);
constexpr bool isValid() const { return IsScalar || RawData != 0; }
constexpr bool isScalar() const { return IsScalar; }
@@ -282,7 +283,7 @@ class LLT {
return scalar(getScalarSizeInBits());
}
- void print(raw_ostream &OS) const;
+ LLVM_ABI void print(raw_ostream &OS) const;
#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
LLVM_DUMP_METHOD void dump() const;
diff --git a/llvm/include/llvm/CodeGenTypes/MachineValueType.h b/llvm/include/llvm/CodeGenTypes/MachineValueType.h
index c14abca027350..b8e91a022ec5e 100644
--- a/llvm/include/llvm/CodeGenTypes/MachineValueType.h
+++ b/llvm/include/llvm/CodeGenTypes/MachineValueType.h
@@ -17,6 +17,7 @@
#define LLVM_CODEGEN_MACHINEVALUETYPE_H
#include "llvm/ADT/Sequence.h"
+#include "llvm/Support/Compiler.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/MathExtras.h"
#include "llvm/Support/TypeSize.h"
@@ -65,10 +66,10 @@ namespace llvm {
bool operator<=(const MVT& S) const { return SimpleTy <= S.SimpleTy; }
/// Support for debugging, callable in GDB: VT.dump()
- void dump() const;
+ LLVM_ABI void dump() const;
/// Implement operator<<.
- void print(raw_ostream &OS) const;
+ LLVM_ABI void print(raw_ostream &OS) const;
/// Return true if this is a valid simple valuetype.
bool isValid() const {
@@ -509,11 +510,11 @@ namespace llvm {
/// otherwise they are invalid.
/// NB: This includes pointer types, which require a DataLayout to convert
/// to a concrete value type.
- static MVT getVT(Type *Ty, bool HandleUnknown = false);
+ LLVM_ABI static MVT getVT(Type *Ty, bool HandleUnknown = false);
/// Returns an APFloat semantics tag appropriate for the value type. If this
/// is a vector type, the element semantics are returned.
- const fltSemantics &getFltSemantics() const;
+ LLVM_ABI const fltSemantics &getFltSemantics() const;
public:
/// SimpleValueType Iteration
diff --git a/llvm/include/llvm/DebugInfo/DWARF/DWARFCFIPrinter.h b/llvm/include/llvm/DebugInfo/DWARF/DWARFCFIPrinter.h
index 32e8247ac4c22..4723f00a4d241 100644
--- a/llvm/include/llvm/DebugInfo/DWARF/DWARFCFIPrinter.h
+++ b/llvm/include/llvm/DebugInfo/DWARF/DWARFCFIPrinter.h
@@ -10,6 +10,7 @@
#define LLVM_DEBUGINFO_DWARF_DWARFCFIPRINTER_H
#include "llvm/DebugInfo/DWARF/DWARFCFIProgram.h"
+#include "llvm/Support/Compiler.h"
namespace llvm {
@@ -17,9 +18,10 @@ struct DIDumpOptions;
namespace dwarf {
-void printCFIProgram(const CFIProgram &P, raw_ostream &OS,
- const DIDumpOptions &DumpOpts, unsigned IndentLevel,
- std::optional<uint64_t> Address);
+LLVM_ABI void printCFIProgram(const CFIProgram &P, raw_ostream &OS,
+ const DIDumpOptions &DumpOpts,
+ unsigned IndentLevel,
+ std::optional<uint64_t> Address);
} // end namespace dwarf
diff --git a/llvm/include/llvm/DebugInfo/DWARF/DWARFCFIProgram.h b/llvm/include/llvm/DebugInfo/DWARF/DWARFCFIProgram.h
index ad7358c28f16b..1d89ac3578c10 100644
--- a/llvm/include/llvm/DebugInfo/DWARF/DWARFCFIProgram.h
+++ b/llvm/include/llvm/DebugInfo/DWARF/DWARFCFIProgram.h
@@ -106,11 +106,11 @@ class CFIProgram {
};
/// Get the OperandType as a "const char *".
- static const char *operandTypeString(OperandType OT);
+ LLVM_ABI static const char *operandTypeString(OperandType OT);
/// Retrieve the array describing the types of operands according to the enum
/// above. This is indexed by opcode.
- static ArrayRef<OperandType[MaxOperands]> getOperandTypes();
+ LLVM_ABI static ArrayRef<OperandType[MaxOperands]> getOperandTypes();
private:
std::vector<Instruction> Instructions;
diff --git a/llvm/include/llvm/DebugInfo/DWARF/DWARFExpression.h b/llvm/include/llvm/DebugInfo/DWARF/DWARFExpression.h
index 44432d3219111..ea414278c35d6 100644
--- a/llvm/include/llvm/DebugInfo/DWARF/DWARFExpression.h
+++ b/llvm/include/llvm/DebugInfo/DWARF/DWARFExpression.h
@@ -186,8 +186,9 @@ class DWARFExpressionPrinter {
/// \param E to be printed
/// \param OS to this stream
/// \param GetNameForDWARFReg callback to return dwarf register name
- static void print(const DWARFExpression *E, raw_ostream &OS,
- DIDumpOptions DumpOpts, DWARFUnit *U, bool IsEH = false);
+ LLVM_ABI static void print(const DWARFExpression *E, raw_ostream &OS,
+ DIDumpOptions DumpOpts, DWARFUnit *U,
+ bool IsEH = false);
/// Print the expression in a format intended to be compact and useful to a
/// user, but not perfectly unambiguous, or capable of representing every
@@ -199,9 +200,10 @@ class DWARFExpressionPrinter {
/// \param GetNameForDWARFReg callback to return dwarf register name
///
/// \returns true if the expression was successfully printed
- static bool printCompact(const DWARFExpression *E, raw_ostream &OS,
- std::function<StringRef(uint64_t RegNum, bool IsEH)>
- GetNameForDWARFReg = nullptr);
+ LLVM_ABI static bool printCompact(
+ const DWARFExpression *E, raw_ostream &OS,
+ std::function<StringRef(uint64_t RegNum, bool IsEH)> GetNameForDWARFReg =
+ nullptr);
/// Pretty print a register opcode and operands.
/// \param U within the context of this Dwarf unit, if any.
@@ -211,9 +213,10 @@ class DWARFExpressionPrinter {
/// \param Operands to the opcode
///
/// returns true if the Op was successfully printed
- static bool prettyPrintRegisterOp(DWARFUnit *U, raw_ostream &OS,
- DIDumpOptions DumpOpts, uint8_t Opcode,
- ArrayRef<uint64_t> Operands);
+ LLVM_ABI static bool prettyPrintRegisterOp(DWARFUnit *U, raw_ostream &OS,
+ DIDumpOptions DumpOpts,
+ uint8_t Opcode,
+ ArrayRef<uint64_t> Operands);
private:
static bool printOp(const DWARFExpression::Operation *Op, raw_ostream &OS,
diff --git a/llvm/include/llvm/DebugInfo/LogicalView/Core/LVSourceLanguage.h b/llvm/include/llvm/DebugInfo/LogicalView/Core/LVSourceLanguage.h
index 52e4aa9701e44..f4ebfc914ad05 100644
--- a/llvm/include/llvm/DebugInfo/LogicalView/Core/LVSourceLanguage.h
+++ b/llvm/include/llvm/DebugInfo/LogicalView/Core/LVSourceLanguage.h
@@ -17,6 +17,7 @@
#include "llvm/ADT/StringRef.h"
#include "llvm/BinaryFormat/Dwarf.h"
#include "llvm/DebugInfo/CodeView/CodeView.h"
+#include "llvm/Support/Compiler.h"
namespace llvm {
namespace logicalview {
@@ -52,7 +53,7 @@ struct LVSourceLanguage {
bool isVali...
[truncated]
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could you break this up into a few smaller PRs? I'm concerned that landing a big patch like this may result in messery reverts that will force uses to recompile almost all of the project.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM!
Purpose
This patch is one in a series of code-mods that annotate LLVM’s public interface for export. This patch annotates the remaining LLVM interface that was missed in, or modified since, previous patches. The annotations currently have no meaningful impact on the LLVM build; however, they are a prerequisite to support an LLVM Windows DLL (shared library) build.
Background
This effort is tracked in #109483. Additional context is provided in this discourse, and documentation for
LLVM_ABI
and related annotations is found in the LLVM repo here.Overview
The bulk of these changes were generated automatically using the Interface Definition Scanner (IDS) tool, followed formatting with
git clang-format
.The following manual adjustments were also applied after running IDS:
extern
declarations ofllvm::PrintPipelinePasses
because it is already correctly declared with anLLVM_ABI
annotation inllvm\Passes\PassBuilder.h
. Leaving these declarations results in a gcc compile warning unless they are also annotated withLLVM_ABI
.extern
declarations ofProfileSummaryCutoffHot
andUseContextLessSummary
fromllvm/tools/llvm-profgen/ProfileGenerator.cpp
since they are declared withLLVM_ABI
inllvm\ProfileData\ProfileCommon.h
.IEEEFloat::addOrSubtractSignificand
withLLVM_ABI
because it is used by a unit test friend class.friend
function declarations withLLVM_ABI_FRIEND
since the corresponding function declarations are annotated withLLVM_ABI
(required by MSVC).CallLowering::setArgFlags
template method instances inCodeGen/GlobalISel/CallLowering.h
and annotate them withLLVM_ABI
. These methods are already explicitly instantiated inlib/CodeGen/GlobalISel/CallLowering.cpp
but were notextern
declared in the header.Telemetry::Manager
class. This is required because the class is now annotated withLLVM_ABI
and cannot otherwise be fully instantiated for export.LLVM_ABI
. These symbols are referenced by tools/tests but not declared in headers.LLVM_EXPORT_TEMPLATE
.Validation
Local builds and tests to validate cross-platform compatibility. This included llvm, clang, and lldb on the following configurations: