Mercurial > hg > CbC > CbC_llvm
diff llvm/lib/IR/Module.cpp @ 239:173fe712db74
merge LLVM16
author | kono |
---|---|
date | Wed, 09 Nov 2022 18:03:41 +0900 |
parents | c4bab56944e8 |
children | 1f2b6ac9f198 |
line wrap: on
line diff
--- a/llvm/lib/IR/Module.cpp Wed Nov 09 17:58:30 2022 +0900 +++ b/llvm/lib/IR/Module.cpp Wed Nov 09 18:03:41 2022 +0900 @@ -13,7 +13,6 @@ #include "llvm/IR/Module.h" #include "SymbolTableListTraitsImpl.h" #include "llvm/ADT/Optional.h" -#include "llvm/ADT/SmallPtrSet.h" #include "llvm/ADT/SmallString.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringMap.h" @@ -39,7 +38,6 @@ #include "llvm/IR/TypeFinder.h" #include "llvm/IR/Value.h" #include "llvm/IR/ValueSymbolTable.h" -#include "llvm/Pass.h" #include "llvm/Support/Casting.h" #include "llvm/Support/CodeGen.h" #include "llvm/Support/Error.h" @@ -73,8 +71,7 @@ Module::Module(StringRef MID, LLVMContext &C) : Context(C), ValSymTab(std::make_unique<ValueSymbolTable>(-1)), - Materializer(), ModuleID(std::string(MID)), - SourceFileName(std::string(MID)), DL("") { + ModuleID(std::string(MID)), SourceFileName(std::string(MID)), DL("") { Context.addModule(this); } @@ -114,6 +111,10 @@ return cast_or_null<GlobalValue>(getValueSymbolTable().lookup(Name)); } +unsigned Module::getNumNamedValues() const { + return getValueSymbolTable().size(); +} + /// getMDKindID - Return a unique non-zero ID for the specified metadata kind. /// This ID is uniqued across modules in the current LLVMContext. unsigned Module::getMDKindID(StringRef Name) const { @@ -595,7 +596,9 @@ } void Module::setPICLevel(PICLevel::Level PL) { - addModuleFlag(ModFlagBehavior::Max, "PIC Level", PL); + // The merge result of a non-PIC object and a PIC object can only be reliably + // used as a non-PIC object, so use the Min merge behavior. + addModuleFlag(ModFlagBehavior::Min, "PIC Level", PL); } PIELevel::Level Module::getPIELevel() const { @@ -669,12 +672,15 @@ addModuleFlag(ModFlagBehavior::Max, "RtLibUseGOT", 1); } -bool Module::getUwtable() const { - auto *Val = cast_or_null<ConstantAsMetadata>(getModuleFlag("uwtable")); - return Val && (cast<ConstantInt>(Val->getValue())->getZExtValue() > 0); +UWTableKind Module::getUwtable() const { + if (auto *Val = cast_or_null<ConstantAsMetadata>(getModuleFlag("uwtable"))) + return UWTableKind(cast<ConstantInt>(Val->getValue())->getZExtValue()); + return UWTableKind::None; } -void Module::setUwtable() { addModuleFlag(ModFlagBehavior::Max, "uwtable", 1); } +void Module::setUwtable(UWTableKind Kind) { + addModuleFlag(ModFlagBehavior::Max, "uwtable", uint32_t(Kind)); +} FramePointerKind Module::getFramePointer() const { auto *Val = cast_or_null<ConstantAsMetadata>(getModuleFlag("frame-pointer")); @@ -710,6 +716,18 @@ addModuleFlag(ModFlagBehavior::Error, "stack-protector-guard-reg", ID); } +StringRef Module::getStackProtectorGuardSymbol() const { + Metadata *MD = getModuleFlag("stack-protector-guard-symbol"); + if (auto *MDS = dyn_cast_or_null<MDString>(MD)) + return MDS->getString(); + return {}; +} + +void Module::setStackProtectorGuardSymbol(StringRef Symbol) { + MDString *ID = MDString::get(getContext(), Symbol); + addModuleFlag(ModFlagBehavior::Error, "stack-protector-guard-symbol", ID); +} + int Module::getStackProtectorGuardOffset() const { Metadata *MD = getModuleFlag("stack-protector-guard-offset"); if (auto *CI = mdconst::dyn_extract_or_null<ConstantInt>(MD)) @@ -732,7 +750,7 @@ addModuleFlag(ModFlagBehavior::Error, "override-stack-alignment", Align); } -void Module::setSDKVersion(const VersionTuple &V) { +static void addSDKVersionMD(const VersionTuple &V, Module &M, StringRef Name) { SmallVector<unsigned, 3> Entries; Entries.push_back(V.getMajor()); if (auto Minor = V.getMinor()) { @@ -742,12 +760,16 @@ // Ignore the 'build' component as it can't be represented in the object // file. } - addModuleFlag(ModFlagBehavior::Warning, "SDK Version", - ConstantDataArray::get(Context, Entries)); + M.addModuleFlag(Module::ModFlagBehavior::Warning, Name, + ConstantDataArray::get(M.getContext(), Entries)); } -VersionTuple Module::getSDKVersion() const { - auto *CM = dyn_cast_or_null<ConstantAsMetadata>(getModuleFlag("SDK Version")); +void Module::setSDKVersion(const VersionTuple &V) { + addSDKVersionMD(V, *this, "SDK Version"); +} + +static VersionTuple getSDKVersionMD(Metadata *MD) { + auto *CM = dyn_cast_or_null<ConstantAsMetadata>(MD); if (!CM) return {}; auto *Arr = dyn_cast_or_null<ConstantDataArray>(CM->getValue()); @@ -771,6 +793,10 @@ return Result; } +VersionTuple Module::getSDKVersion() const { + return getSDKVersionMD(getModuleFlag("SDK Version")); +} + GlobalVariable *llvm::collectUsedGlobalVariables( const Module &M, SmallVectorImpl<GlobalValue *> &Vec, bool CompilerUsed) { const char *Name = CompilerUsed ? "llvm.compiler.used" : "llvm.used"; @@ -805,3 +831,22 @@ } } } + +StringRef Module::getDarwinTargetVariantTriple() const { + if (const auto *MD = getModuleFlag("darwin.target_variant.triple")) + return cast<MDString>(MD)->getString(); + return ""; +} + +void Module::setDarwinTargetVariantTriple(StringRef T) { + addModuleFlag(ModFlagBehavior::Override, "darwin.target_variant.triple", + MDString::get(getContext(), T)); +} + +VersionTuple Module::getDarwinTargetVariantSDKVersion() const { + return getSDKVersionMD(getModuleFlag("darwin.target_variant.SDK Version")); +} + +void Module::setDarwinTargetVariantSDKVersion(VersionTuple Version) { + addSDKVersionMD(Version, *this, "darwin.target_variant.SDK Version"); +}