Author: Krzysztof Parzyszek Date: 2022-12-04T11:52:02-06:00 New Revision: 0ca43d44888885d6caf7636db91fe810e822263c
URL: https://github.com/llvm/llvm-project/commit/0ca43d44888885d6caf7636db91fe810e822263c DIFF: https://github.com/llvm/llvm-project/commit/0ca43d44888885d6caf7636db91fe810e822263c.diff LOG: DebugInfoMetadata: convert Optional to std::optional Added: Modified: clang/include/clang/Basic/TargetInfo.h clang/lib/Basic/Targets/AMDGPU.h clang/lib/Basic/Targets/NVPTX.h clang/lib/Basic/Targets/SPIR.h clang/lib/CodeGen/CGDebugInfo.cpp clang/lib/CodeGen/CGDebugInfo.h llvm/include/llvm/IR/DIBuilder.h llvm/include/llvm/IR/DebugInfoMetadata.h llvm/include/llvm/IR/IntrinsicInst.h llvm/include/llvm/MC/MCContext.h llvm/include/llvm/MC/MCDwarf.h llvm/include/llvm/MC/MCStreamer.h llvm/include/llvm/Transforms/Utils/MemoryOpRemark.h llvm/lib/AsmParser/LLParser.cpp llvm/lib/Bitcode/Reader/MetadataLoader.cpp llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp llvm/lib/CodeGen/AsmPrinter/DwarfExpression.h llvm/lib/CodeGen/LiveDebugValues/InstrRefBasedImpl.h llvm/lib/CodeGen/LiveDebugValues/VarLocBasedImpl.cpp llvm/lib/CodeGen/LiveDebugVariables.cpp llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp llvm/lib/IR/DIBuilder.cpp llvm/lib/IR/DebugInfoMetadata.cpp llvm/lib/IR/IntrinsicInst.cpp llvm/lib/IR/LLVMContextImpl.h llvm/lib/IR/Verifier.cpp llvm/lib/MC/MCAsmStreamer.cpp llvm/lib/MC/MCContext.cpp llvm/lib/MC/MCDwarf.cpp llvm/lib/MC/MCParser/AsmParser.cpp llvm/lib/MC/MCParser/MasmParser.cpp llvm/lib/MC/MCStreamer.cpp llvm/lib/Target/X86/X86DiscriminateMemOps.cpp llvm/lib/Transforms/Utils/Debugify.cpp llvm/lib/Transforms/Utils/Local.cpp llvm/lib/Transforms/Utils/MemoryOpRemark.cpp llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp llvm/unittests/IR/MetadataTest.cpp Removed: ################################################################################ diff --git a/clang/include/clang/Basic/TargetInfo.h b/clang/include/clang/Basic/TargetInfo.h index 20813d91dfad..f4b7581fd531 100644 --- a/clang/include/clang/Basic/TargetInfo.h +++ b/clang/include/clang/Basic/TargetInfo.h @@ -37,6 +37,7 @@ #include "llvm/Support/Error.h" #include "llvm/Support/VersionTuple.h" #include <cassert> +#include <optional> #include <string> #include <vector> @@ -1654,7 +1655,8 @@ class TargetInfo : public virtual TransferrableTargetInfo, /// /// \returns Otherwise return None and no conversion will be emitted in the /// DWARF. - virtual Optional<unsigned> getDWARFAddressSpace(unsigned AddressSpace) const { + virtual std::optional<unsigned> getDWARFAddressSpace(unsigned AddressSpace) + const { return std::nullopt; } diff --git a/clang/lib/Basic/Targets/AMDGPU.h b/clang/lib/Basic/Targets/AMDGPU.h index e9bda7570f00..35674ce2ff53 100644 --- a/clang/lib/Basic/Targets/AMDGPU.h +++ b/clang/lib/Basic/Targets/AMDGPU.h @@ -20,6 +20,7 @@ #include "llvm/ADT/Triple.h" #include "llvm/Support/Compiler.h" #include "llvm/Support/TargetParser.h" +#include <optional> namespace clang { namespace targets { @@ -393,7 +394,7 @@ class LLVM_LIBRARY_VISIBILITY AMDGPUTargetInfo final : public TargetInfo { /// /// \returns Otherwise return None and no conversion will be emitted in the /// DWARF. - Optional<unsigned> + std::optional<unsigned> getDWARFAddressSpace(unsigned AddressSpace) const override { const unsigned DWARF_Private = 1; const unsigned DWARF_Local = 2; diff --git a/clang/lib/Basic/Targets/NVPTX.h b/clang/lib/Basic/Targets/NVPTX.h index 79f4cbe5d169..f62d86fe99aa 100644 --- a/clang/lib/Basic/Targets/NVPTX.h +++ b/clang/lib/Basic/Targets/NVPTX.h @@ -18,6 +18,7 @@ #include "clang/Basic/TargetOptions.h" #include "llvm/ADT/Triple.h" #include "llvm/Support/Compiler.h" +#include <optional> namespace clang { namespace targets { @@ -158,7 +159,7 @@ class LLVM_LIBRARY_VISIBILITY NVPTXTargetInfo : public TargetInfo { /// /// \returns Otherwise return None and no conversion will be emitted in the /// DWARF. - Optional<unsigned> + std::optional<unsigned> getDWARFAddressSpace(unsigned AddressSpace) const override { if (AddressSpace >= std::size(NVPTXDWARFAddrSpaceMap) || NVPTXDWARFAddrSpaceMap[AddressSpace] < 0) diff --git a/clang/lib/Basic/Targets/SPIR.h b/clang/lib/Basic/Targets/SPIR.h index 17db3b1ba3a0..69596c6eb6fe 100644 --- a/clang/lib/Basic/Targets/SPIR.h +++ b/clang/lib/Basic/Targets/SPIR.h @@ -17,6 +17,7 @@ #include "clang/Basic/TargetOptions.h" #include "llvm/ADT/Triple.h" #include "llvm/Support/Compiler.h" +#include <optional> namespace clang { namespace targets { @@ -127,7 +128,7 @@ class LLVM_LIBRARY_VISIBILITY BaseSPIRTargetInfo : public TargetInfo { return TargetInfo::VoidPtrBuiltinVaList; } - Optional<unsigned> + std::optional<unsigned> getDWARFAddressSpace(unsigned AddressSpace) const override { return AddressSpace; } diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index 12b74ee01ed1..b0fe96d6b8a0 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -51,6 +51,7 @@ #include "llvm/Support/SHA1.h" #include "llvm/Support/SHA256.h" #include "llvm/Support/TimeProfiler.h" +#include <optional> using namespace clang; using namespace clang::CodeGen; @@ -345,7 +346,7 @@ StringRef CGDebugInfo::getClassName(const RecordDecl *RD) { return StringRef(); } -Optional<llvm::DIFile::ChecksumKind> +std::optional<llvm::DIFile::ChecksumKind> CGDebugInfo::computeChecksum(FileID FID, SmallString<64> &Checksum) const { Checksum.clear(); @@ -373,8 +374,8 @@ CGDebugInfo::computeChecksum(FileID FID, SmallString<64> &Checksum) const { llvm_unreachable("Unhandled DebugSrcHashKind enum"); } -Optional<StringRef> CGDebugInfo::getSource(const SourceManager &SM, - FileID FID) { +std::optional<StringRef> CGDebugInfo::getSource(const SourceManager &SM, + FileID FID) { if (!CGM.getCodeGenOpts().EmbedSource) return std::nullopt; @@ -419,17 +420,18 @@ llvm::DIFile *CGDebugInfo::getOrCreateFile(SourceLocation Loc) { SmallString<64> Checksum; - Optional<llvm::DIFile::ChecksumKind> CSKind = computeChecksum(FID, Checksum); - Optional<llvm::DIFile::ChecksumInfo<StringRef>> CSInfo; + std::optional<llvm::DIFile::ChecksumKind> CSKind = + computeChecksum(FID, Checksum); + std::optional<llvm::DIFile::ChecksumInfo<StringRef>> CSInfo; if (CSKind) CSInfo.emplace(*CSKind, Checksum); return createFile(FileName, CSInfo, getSource(SM, SM.getFileID(Loc))); } -llvm::DIFile * -CGDebugInfo::createFile(StringRef FileName, - Optional<llvm::DIFile::ChecksumInfo<StringRef>> CSInfo, - Optional<StringRef> Source) { +llvm::DIFile *CGDebugInfo::createFile( + StringRef FileName, + std::optional<llvm::DIFile::ChecksumInfo<StringRef>> CSInfo, + std::optional<StringRef> Source) { StringRef Dir; StringRef File; std::string RemappedFile = remapDIPath(FileName); @@ -512,8 +514,8 @@ StringRef CGDebugInfo::getCurrentDirname() { void CGDebugInfo::CreateCompileUnit() { SmallString<64> Checksum; - Optional<llvm::DIFile::ChecksumKind> CSKind; - Optional<llvm::DIFile::ChecksumInfo<StringRef>> CSInfo; + std::optional<llvm::DIFile::ChecksumKind> CSKind; + std::optional<llvm::DIFile::ChecksumInfo<StringRef>> CSInfo; // Should we be asking the SourceManager for the main file name, instead of // accepting it as an argument? This just causes the main file name to @@ -1148,8 +1150,9 @@ llvm::DIType *CGDebugInfo::CreatePointerLikeType(llvm::dwarf::Tag Tag, // Size is always the size of a pointer. uint64_t Size = CGM.getContext().getTypeSize(Ty); auto Align = getTypeAlignIfRequired(Ty, CGM.getContext()); - Optional<unsigned> DWARFAddressSpace = CGM.getTarget().getDWARFAddressSpace( - CGM.getTypes().getTargetAddressSpace(PointeeTy)); + std::optional<unsigned> DWARFAddressSpace = + CGM.getTarget().getDWARFAddressSpace( + CGM.getTypes().getTargetAddressSpace(PointeeTy)); SmallVector<llvm::Metadata *, 4> Annots; auto *BTFAttrTy = dyn_cast<BTFTagAttributedType>(PointeeTy); @@ -2201,7 +2204,7 @@ llvm::DIType *CGDebugInfo::getOrCreateVTablePtrType(llvm::DIFile *Unit) { llvm::DIType *SubTy = DBuilder.createSubroutineType(SElements); unsigned Size = Context.getTypeSize(Context.VoidPtrTy); unsigned VtblPtrAddressSpace = CGM.getTarget().getVtblPtrAddressSpace(); - Optional<unsigned> DWARFAddressSpace = + std::optional<unsigned> DWARFAddressSpace = CGM.getTarget().getDWARFAddressSpace(VtblPtrAddressSpace); llvm::DIType *vtbl_ptr_type = DBuilder.createPointerType( @@ -2298,7 +2301,7 @@ void CGDebugInfo::CollectVTableInfo(const CXXRecordDecl *RD, llvm::DIFile *Unit, VFTLayout.vtable_components().size() - CGM.getLangOpts().RTTIData; unsigned VTableWidth = PtrWidth * VSlotCount; unsigned VtblPtrAddressSpace = CGM.getTarget().getVtblPtrAddressSpace(); - Optional<unsigned> DWARFAddressSpace = + std::optional<unsigned> DWARFAddressSpace = CGM.getTarget().getDWARFAddressSpace(VtblPtrAddressSpace); // Create a very wide void* type and insert it directly in the element list. @@ -4284,7 +4287,7 @@ void CGDebugInfo::CreateLexicalBlock(SourceLocation Loc) { void CGDebugInfo::AppendAddressSpaceXDeref( unsigned AddressSpace, SmallVectorImpl<uint64_t> &Expr) const { - Optional<unsigned> DWARFAddressSpace = + std::optional<unsigned> DWARFAddressSpace = CGM.getTarget().getDWARFAddressSpace(AddressSpace); if (!DWARFAddressSpace) return; diff --git a/clang/lib/CodeGen/CGDebugInfo.h b/clang/lib/CodeGen/CGDebugInfo.h index c675ff8ce7d9..9d54832fd655 100644 --- a/clang/lib/CodeGen/CGDebugInfo.h +++ b/clang/lib/CodeGen/CGDebugInfo.h @@ -30,6 +30,7 @@ #include "llvm/IR/DebugInfo.h" #include "llvm/IR/ValueHandle.h" #include "llvm/Support/Allocator.h" +#include <optional> namespace llvm { class MDNode; @@ -630,11 +631,11 @@ class CGDebugInfo { void CreateCompileUnit(); /// Compute the file checksum debug info for input file ID. - Optional<llvm::DIFile::ChecksumKind> + std::optional<llvm::DIFile::ChecksumKind> computeChecksum(FileID FID, SmallString<64> &Checksum) const; /// Get the source of the given file ID. - Optional<StringRef> getSource(const SourceManager &SM, FileID FID); + std::optional<StringRef> getSource(const SourceManager &SM, FileID FID); /// Convenience function to get the file debug info descriptor for the input /// location. @@ -643,8 +644,8 @@ class CGDebugInfo { /// Create a file debug info descriptor for a source file. llvm::DIFile * createFile(StringRef FileName, - Optional<llvm::DIFile::ChecksumInfo<StringRef>> CSInfo, - Optional<StringRef> Source); + std::optional<llvm::DIFile::ChecksumInfo<StringRef>> CSInfo, + std::optional<StringRef> Source); /// Get the type from the cache or create a new type if necessary. llvm::DIType *getOrCreateType(QualType Ty, llvm::DIFile *Fg); diff --git a/llvm/include/llvm/IR/DIBuilder.h b/llvm/include/llvm/IR/DIBuilder.h index 81ead0cf067d..2898d481c3c2 100644 --- a/llvm/include/llvm/IR/DIBuilder.h +++ b/llvm/include/llvm/IR/DIBuilder.h @@ -17,7 +17,6 @@ #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/MapVector.h" -#include "llvm/ADT/Optional.h" #include "llvm/ADT/SetVector.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringRef.h" @@ -27,6 +26,7 @@ #include "llvm/Support/Casting.h" #include <algorithm> #include <cstdint> +#include <optional> namespace llvm { @@ -175,8 +175,8 @@ namespace llvm { /// \param Source Optional source text. DIFile *createFile( StringRef Filename, StringRef Directory, - Optional<DIFile::ChecksumInfo<StringRef>> Checksum = std::nullopt, - Optional<StringRef> Source = std::nullopt); + std::optional<DIFile::ChecksumInfo<StringRef>> Checksum = std::nullopt, + std::optional<StringRef> Source = std::nullopt); /// Create debugging information entry for a macro. /// \param Parent Macro parent (could be nullptr). @@ -256,7 +256,7 @@ namespace llvm { DIDerivedType * createPointerType(DIType *PointeeTy, uint64_t SizeInBits, uint32_t AlignInBits = 0, - Optional<unsigned> DWARFAddressSpace = std::nullopt, + std::optional<unsigned> DWARFAddressSpace = std::nullopt, StringRef Name = "", DINodeArray Annotations = nullptr); /// Create debugging information entry for a pointer to member. @@ -271,10 +271,10 @@ namespace llvm { /// Create debugging information entry for a c++ /// style reference or rvalue reference type. - DIDerivedType * - createReferenceType(unsigned Tag, DIType *RTy, uint64_t SizeInBits = 0, - uint32_t AlignInBits = 0, - Optional<unsigned> DWARFAddressSpace = std::nullopt); + DIDerivedType *createReferenceType( + unsigned Tag, DIType *RTy, uint64_t SizeInBits = 0, + uint32_t AlignInBits = 0, + std::optional<unsigned> DWARFAddressSpace = std::nullopt); /// Create debugging information entry for a typedef. /// \param Ty Original type. diff --git a/llvm/include/llvm/IR/DebugInfoMetadata.h b/llvm/include/llvm/IR/DebugInfoMetadata.h index c4d60fbaef59..9aef251613aa 100644 --- a/llvm/include/llvm/IR/DebugInfoMetadata.h +++ b/llvm/include/llvm/IR/DebugInfoMetadata.h @@ -16,7 +16,6 @@ #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/BitmaskEnum.h" #include "llvm/ADT/None.h" -#include "llvm/ADT/Optional.h" #include "llvm/ADT/PointerUnion.h" #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/SmallVector.h" @@ -32,6 +31,7 @@ #include <cstddef> #include <cstdint> #include <iterator> +#include <optional> #include <vector> // Helper macros for defining get() overrides. @@ -518,7 +518,7 @@ class DIScope : public DINode { inline StringRef getFilename() const; inline StringRef getDirectory() const; - inline Optional<StringRef> getSource() const; + inline std::optional<StringRef> getSource() const; StringRef getName() const; DIScope *getScope() const; @@ -597,33 +597,33 @@ class DIFile : public DIScope { }; private: - Optional<ChecksumInfo<MDString *>> Checksum; - Optional<MDString *> Source; + std::optional<ChecksumInfo<MDString *>> Checksum; + std::optional<MDString *> Source; DIFile(LLVMContext &C, StorageType Storage, - Optional<ChecksumInfo<MDString *>> CS, Optional<MDString *> Src, - ArrayRef<Metadata *> Ops); + std::optional<ChecksumInfo<MDString *>> CS, + std::optional<MDString *> Src, ArrayRef<Metadata *> Ops); ~DIFile() = default; static DIFile *getImpl(LLVMContext &Context, StringRef Filename, StringRef Directory, - Optional<ChecksumInfo<StringRef>> CS, - Optional<StringRef> Source, StorageType Storage, + std::optional<ChecksumInfo<StringRef>> CS, + std::optional<StringRef> Source, StorageType Storage, bool ShouldCreate = true) { - Optional<ChecksumInfo<MDString *>> MDChecksum; + std::optional<ChecksumInfo<MDString *>> MDChecksum; if (CS) MDChecksum.emplace(CS->Kind, getCanonicalMDString(Context, CS->Value)); - return getImpl( - Context, getCanonicalMDString(Context, Filename), - getCanonicalMDString(Context, Directory), MDChecksum, - Source ? Optional<MDString *>(getCanonicalMDString(Context, *Source)) - : std::nullopt, - Storage, ShouldCreate); + return getImpl(Context, getCanonicalMDString(Context, Filename), + getCanonicalMDString(Context, Directory), MDChecksum, + Source ? std::optional<MDString *>( + getCanonicalMDString(Context, *Source)) + : std::nullopt, + Storage, ShouldCreate); } static DIFile *getImpl(LLVMContext &Context, MDString *Filename, MDString *Directory, - Optional<ChecksumInfo<MDString *>> CS, - Optional<MDString *> Source, StorageType Storage, + std::optional<ChecksumInfo<MDString *>> CS, + std::optional<MDString *> Source, StorageType Storage, bool ShouldCreate = true); TempDIFile cloneImpl() const { @@ -634,36 +634,39 @@ class DIFile : public DIScope { public: DEFINE_MDNODE_GET(DIFile, (StringRef Filename, StringRef Directory, - Optional<ChecksumInfo<StringRef>> CS = std::nullopt, - Optional<StringRef> Source = std::nullopt), + std::optional<ChecksumInfo<StringRef>> CS = std::nullopt, + std::optional<StringRef> Source = std::nullopt), (Filename, Directory, CS, Source)) DEFINE_MDNODE_GET(DIFile, (MDString * Filename, MDString *Directory, - Optional<ChecksumInfo<MDString *>> CS = std::nullopt, - Optional<MDString *> Source = std::nullopt), + std::optional<ChecksumInfo<MDString *>> CS = std::nullopt, + std::optional<MDString *> Source = std::nullopt), (Filename, Directory, CS, Source)) TempDIFile clone() const { return cloneImpl(); } StringRef getFilename() const { return getStringOperand(0); } StringRef getDirectory() const { return getStringOperand(1); } - Optional<ChecksumInfo<StringRef>> getChecksum() const { - Optional<ChecksumInfo<StringRef>> StringRefChecksum; + std::optional<ChecksumInfo<StringRef>> getChecksum() const { + std::optional<ChecksumInfo<StringRef>> StringRefChecksum; if (Checksum) StringRefChecksum.emplace(Checksum->Kind, Checksum->Value->getString()); return StringRefChecksum; } - Optional<StringRef> getSource() const { - return Source ? Optional<StringRef>((*Source)->getString()) : std::nullopt; + std::optional<StringRef> getSource() const { + return Source ? std::optional<StringRef>((*Source)->getString()) + : std::nullopt; } MDString *getRawFilename() const { return getOperandAs<MDString>(0); } MDString *getRawDirectory() const { return getOperandAs<MDString>(1); } - Optional<ChecksumInfo<MDString *>> getRawChecksum() const { return Checksum; } - Optional<MDString *> getRawSource() const { return Source; } + std::optional<ChecksumInfo<MDString *>> getRawChecksum() const { + return Checksum; + } + std::optional<MDString *> getRawSource() const { return Source; } static StringRef getChecksumKindAsString(ChecksumKind CSKind); - static Optional<ChecksumKind> getChecksumKind(StringRef CSKindStr); + static std::optional<ChecksumKind> getChecksumKind(StringRef CSKindStr); static bool classof(const Metadata *MD) { return MD->getMetadataID() == DIFileKind; @@ -682,7 +685,7 @@ StringRef DIScope::getDirectory() const { return ""; } -Optional<StringRef> DIScope::getSource() const { +std::optional<StringRef> DIScope::getSource() const { if (auto *F = getFile()) return F->getSource(); return std::nullopt; @@ -859,7 +862,7 @@ class DIBasicType : public DIType { /// Return the signedness of this type, or None if this type is neither /// signed nor unsigned. - Optional<Signedness> getSignedness() const; + std::optional<Signedness> getSignedness() const; static bool classof(const Metadata *MD) { return MD->getMetadataID() == DIBasicTypeKind; @@ -965,22 +968,22 @@ class DIDerivedType : public DIType { /// The DWARF address space of the memory pointed to or referenced by a /// pointer or reference type respectively. - Optional<unsigned> DWARFAddressSpace; + std::optional<unsigned> DWARFAddressSpace; DIDerivedType(LLVMContext &C, StorageType Storage, unsigned Tag, unsigned Line, uint64_t SizeInBits, uint32_t AlignInBits, - uint64_t OffsetInBits, Optional<unsigned> DWARFAddressSpace, - DIFlags Flags, ArrayRef<Metadata *> Ops) + uint64_t OffsetInBits, + std::optional<unsigned> DWARFAddressSpace, DIFlags Flags, + ArrayRef<Metadata *> Ops) : DIType(C, DIDerivedTypeKind, Storage, Tag, Line, SizeInBits, AlignInBits, OffsetInBits, Flags, Ops), DWARFAddressSpace(DWARFAddressSpace) {} ~DIDerivedType() = default; - static DIDerivedType * getImpl(LLVMContext &Context, unsigned Tag, StringRef Name, DIFile *File, unsigned Line, DIScope *Scope, DIType *BaseType, uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits, - Optional<unsigned> DWARFAddressSpace, DIFlags Flags, + std::optional<unsigned> DWARFAddressSpace, DIFlags Flags, Metadata *ExtraData, DINodeArray Annotations, StorageType Storage, bool ShouldCreate = true) { return getImpl(Context, Tag, getCanonicalMDString(Context, Name), File, @@ -992,7 +995,7 @@ class DIDerivedType : public DIType { getImpl(LLVMContext &Context, unsigned Tag, MDString *Name, Metadata *File, unsigned Line, Metadata *Scope, Metadata *BaseType, uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits, - Optional<unsigned> DWARFAddressSpace, DIFlags Flags, + std::optional<unsigned> DWARFAddressSpace, DIFlags Flags, Metadata *ExtraData, Metadata *Annotations, StorageType Storage, bool ShouldCreate = true); @@ -1009,7 +1012,7 @@ class DIDerivedType : public DIType { (unsigned Tag, MDString *Name, Metadata *File, unsigned Line, Metadata *Scope, Metadata *BaseType, uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits, - Optional<unsigned> DWARFAddressSpace, DIFlags Flags, + std::optional<unsigned> DWARFAddressSpace, DIFlags Flags, Metadata *ExtraData = nullptr, Metadata *Annotations = nullptr), (Tag, Name, File, Line, Scope, BaseType, SizeInBits, AlignInBits, OffsetInBits, DWARFAddressSpace, Flags, ExtraData, Annotations)) @@ -1017,7 +1020,7 @@ class DIDerivedType : public DIType { (unsigned Tag, StringRef Name, DIFile *File, unsigned Line, DIScope *Scope, DIType *BaseType, uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits, - Optional<unsigned> DWARFAddressSpace, DIFlags Flags, + std::optional<unsigned> DWARFAddressSpace, DIFlags Flags, Metadata *ExtraData = nullptr, DINodeArray Annotations = nullptr), (Tag, Name, File, Line, Scope, BaseType, SizeInBits, @@ -1032,7 +1035,9 @@ class DIDerivedType : public DIType { /// \returns The DWARF address space of the memory pointed to or referenced by /// a pointer or reference type respectively. - Optional<unsigned> getDWARFAddressSpace() const { return DWARFAddressSpace; } + std::optional<unsigned> getDWARFAddressSpace() const { + return DWARFAddressSpace; + } /// Get extra data associated with this derived type. /// @@ -1377,9 +1382,9 @@ class DICompileUnit : public DIScope { LastDebugNameTableKind = None }; - static Optional<DebugEmissionKind> getEmissionKind(StringRef Str); + static std::optional<DebugEmissionKind> getEmissionKind(StringRef Str); static const char *emissionKindString(DebugEmissionKind EK); - static Optional<DebugNameTableKind> getNameTableKind(StringRef Str); + static std::optional<DebugNameTableKind> getNameTableKind(StringRef Str); static const char *nameTableKindString(DebugNameTableKind PK); private: @@ -1657,7 +1662,7 @@ class DILocation : public MDNode { DIFile *getFile() const { return getScope()->getFile(); } StringRef getFilename() const { return getScope()->getFilename(); } StringRef getDirectory() const { return getScope()->getDirectory(); } - Optional<StringRef> getSource() const { return getScope()->getSource(); } + std::optional<StringRef> getSource() const { return getScope()->getSource(); } /// Get the scope where this is inlined. /// @@ -1724,7 +1729,7 @@ class DILocation : public MDNode { /// base discriminator is set in the new DILocation, the other encoded values /// are elided. /// If the discriminator cannot be encoded, the function returns None. - inline Optional<const DILocation *> + inline std::optional<const DILocation *> cloneWithBaseDiscriminator(unsigned BD) const; /// Returns the duplication factor stored in the discriminator, or 1 if no @@ -1741,7 +1746,7 @@ class DILocation : public MDNode { /// duplication factor encoded in the discriminator. The current duplication /// factor is as defined by getDuplicationFactor(). /// Returns None if encoding failed. - inline Optional<const DILocation *> + inline std::optional<const DILocation *> cloneByMultiplyingDuplicationFactor(unsigned DF) const; /// When two instructions are combined into a single instruction we also @@ -1800,8 +1805,8 @@ class DILocation : public MDNode { /// The return is None if the values cannot be encoded in 32 bits - for /// example, values for BD or DF larger than 12 bits. Otherwise, the return is /// the encoded value. - static Optional<unsigned> encodeDiscriminator(unsigned BD, unsigned DF, - unsigned CI); + static std::optional<unsigned> encodeDiscriminator(unsigned BD, unsigned DF, + unsigned CI); /// Raw decoder for values in an encoded discriminator D. static void decodeDiscriminator(unsigned D, unsigned &BD, unsigned &DF, @@ -2259,7 +2264,7 @@ unsigned DILocation::getCopyIdentifier() const { return getCopyIdentifierFromDiscriminator(getDiscriminator()); } -Optional<const DILocation *> +std::optional<const DILocation *> DILocation::cloneWithBaseDiscriminator(unsigned D) const { unsigned BD, DF, CI; @@ -2273,12 +2278,12 @@ DILocation::cloneWithBaseDiscriminator(unsigned D) const { decodeDiscriminator(getDiscriminator(), BD, DF, CI); if (D == BD) return this; - if (Optional<unsigned> Encoded = encodeDiscriminator(D, DF, CI)) + if (std::optional<unsigned> Encoded = encodeDiscriminator(D, DF, CI)) return cloneWithDiscriminator(*Encoded); return std::nullopt; } -Optional<const DILocation *> +std::optional<const DILocation *> DILocation::cloneByMultiplyingDuplicationFactor(unsigned DF) const { assert(!EnableFSDiscriminator && "FSDiscriminator should not call this."); @@ -2288,7 +2293,7 @@ DILocation::cloneByMultiplyingDuplicationFactor(unsigned DF) const { unsigned BD = getBaseDiscriminator(); unsigned CI = getCopyIdentifier(); - if (Optional<unsigned> D = encodeDiscriminator(BD, DF, CI)) + if (std::optional<unsigned> D = encodeDiscriminator(BD, DF, CI)) return cloneWithDiscriminator(*D); return std::nullopt; } @@ -2545,11 +2550,11 @@ class DIVariable : public DINode { uint32_t getAlignInBits() const { return AlignInBits; } uint32_t getAlignInBytes() const { return getAlignInBits() / CHAR_BIT; } /// Determines the size of the variable's type. - Optional<uint64_t> getSizeInBits() const; + std::optional<uint64_t> getSizeInBits() const; /// Return the signedness of this variable's type, or None if this type is /// neither signed nor unsigned. - Optional<DIBasicType::Signedness> getSignedness() const { + std::optional<DIBasicType::Signedness> getSignedness() const { if (auto *BT = dyn_cast<DIBasicType>(getType())) return BT->getSignedness(); return std::nullopt; @@ -2567,7 +2572,7 @@ class DIVariable : public DINode { return ""; } - Optional<StringRef> getSource() const { + std::optional<StringRef> getSource() const { if (auto *F = getFile()) return F->getSource(); return std::nullopt; @@ -2629,7 +2634,7 @@ class DIExpression : public MDNode { enum SignedOrUnsignedConstant { SignedConstant, UnsignedConstant }; /// Determine whether this represents a constant value, if so // return it's sign information. - llvm::Optional<SignedOrUnsignedConstant> isConstant() const; + std::optional<SignedOrUnsignedConstant> isConstant() const; /// Return the number of unique location operands referred to (via /// DW_OP_LLVM_arg) in this expression; this is not necessarily the number of @@ -2761,11 +2766,11 @@ class DIExpression : public MDNode { }; /// Retrieve the details of this fragment expression. - static Optional<FragmentInfo> getFragmentInfo(expr_op_iterator Start, - expr_op_iterator End); + static std::optional<FragmentInfo> getFragmentInfo(expr_op_iterator Start, + expr_op_iterator End); /// Retrieve the details of this fragment expression. - Optional<FragmentInfo> getFragmentInfo() const { + std::optional<FragmentInfo> getFragmentInfo() const { return getFragmentInfo(expr_op_begin(), expr_op_end()); } @@ -2858,7 +2863,7 @@ class DIExpression : public MDNode { /// \return Creating a fragment expression may fail if \c Expr /// contains arithmetic operations that would be /// truncated. - static Optional<DIExpression *> + static std::optional<DIExpression *> createFragmentExpression(const DIExpression *Expr, unsigned OffsetInBits, unsigned SizeInBits); @@ -3660,7 +3665,7 @@ class DebugVariable { using FragmentInfo = DIExpression::FragmentInfo; const DILocalVariable *Variable; - Optional<FragmentInfo> Fragment; + std::optional<FragmentInfo> Fragment; const DILocation *InlinedAt; /// Fragment that will overlap all other fragments. Used as default when @@ -3670,7 +3675,8 @@ class DebugVariable { public: DebugVariable(const DbgVariableIntrinsic *DII); - DebugVariable(const DILocalVariable *Var, Optional<FragmentInfo> FragmentInfo, + DebugVariable(const DILocalVariable *Var, + std::optional<FragmentInfo> FragmentInfo, const DILocation *InlinedAt) : Variable(Var), Fragment(FragmentInfo), InlinedAt(InlinedAt) {} @@ -3681,7 +3687,7 @@ class DebugVariable { InlinedAt(InlinedAt) {} const DILocalVariable *getVariable() const { return Variable; } - Optional<FragmentInfo> getFragment() const { return Fragment; } + std::optional<FragmentInfo> getFragment() const { return Fragment; } const DILocation *getInlinedAt() const { return InlinedAt; } FragmentInfo getFragmentOrDefault() const { @@ -3718,7 +3724,7 @@ template <> struct DenseMapInfo<DebugVariable> { static unsigned getHashValue(const DebugVariable &D) { unsigned HV = 0; - const Optional<FragmentInfo> Fragment = D.getFragment(); + const std::optional<FragmentInfo> Fragment = D.getFragment(); if (Fragment) HV = DenseMapInfo<FragmentInfo>::getHashValue(*Fragment); diff --git a/llvm/include/llvm/IR/IntrinsicInst.h b/llvm/include/llvm/IR/IntrinsicInst.h index 82d52de44e55..4b807824db31 100644 --- a/llvm/include/llvm/IR/IntrinsicInst.h +++ b/llvm/include/llvm/IR/IntrinsicInst.h @@ -314,10 +314,10 @@ class DbgVariableIntrinsic : public DbgInfoIntrinsic { /// Get the size (in bits) of the variable, or fragment of the variable that /// is described. - Optional<uint64_t> getFragmentSizeInBits() const; + std::optional<uint64_t> getFragmentSizeInBits() const; /// Get the FragmentInfo for the variable. - Optional<DIExpression::FragmentInfo> getFragment() const { + std::optional<DIExpression::FragmentInfo> getFragment() const { return getExpression()->getFragmentInfo(); } diff --git a/llvm/include/llvm/MC/MCContext.h b/llvm/include/llvm/MC/MCContext.h index 415f271ed795..4fb273fb1ccd 100644 --- a/llvm/include/llvm/MC/MCContext.h +++ b/llvm/include/llvm/MC/MCContext.h @@ -35,6 +35,7 @@ #include <functional> #include <map> #include <memory> +#include <optional> #include <string> #include <utility> #include <vector> @@ -716,10 +717,10 @@ class MCContext { void setMainFileName(StringRef S) { MainFileName = std::string(S); } /// Creates an entry in the dwarf file and directory tables. - Expected<unsigned> getDwarfFile(StringRef Directory, StringRef FileName, - unsigned FileNumber, - Optional<MD5::MD5Result> Checksum, - Optional<StringRef> Source, unsigned CUID); + Expected<unsigned> getDwarfFile( + StringRef Directory, StringRef FileName, unsigned FileNumber, + Optional<MD5::MD5Result> Checksum, std::optional<StringRef> Source, + unsigned CUID); bool isValidDwarfFileNumber(unsigned FileNumber, unsigned CUID = 0); @@ -754,7 +755,7 @@ class MCContext { void setMCLineTableRootFile(unsigned CUID, StringRef CompilationDir, StringRef Filename, Optional<MD5::MD5Result> Checksum, - Optional<StringRef> Source) { + std::optional<StringRef> Source) { getMCDwarfLineTable(CUID).setRootFile(CompilationDir, Filename, Checksum, Source); } diff --git a/llvm/include/llvm/MC/MCDwarf.h b/llvm/include/llvm/MC/MCDwarf.h index 557c713575e4..e576dab2f9eb 100644 --- a/llvm/include/llvm/MC/MCDwarf.h +++ b/llvm/include/llvm/MC/MCDwarf.h @@ -25,6 +25,7 @@ #include "llvm/Support/StringSaver.h" #include <cassert> #include <cstdint> +#include <optional> #include <string> #include <utility> #include <vector> @@ -93,7 +94,7 @@ struct MCDwarfFile { /// The source code of the file. Non-owning reference to data allocated in /// MCContext. - Optional<StringRef> Source; + std::optional<StringRef> Source; }; /// Instances of this class represent the information from a @@ -271,7 +272,7 @@ struct MCDwarfLineTableHeader { Expected<unsigned> tryGetFile(StringRef &Directory, StringRef &FileName, Optional<MD5::MD5Result> Checksum, - Optional<StringRef> Source, + std::optional<StringRef> Source, uint16_t DwarfVersion, unsigned FileNumber = 0); std::pair<MCSymbol *, MCSymbol *> @@ -295,7 +296,7 @@ struct MCDwarfLineTableHeader { void setRootFile(StringRef Directory, StringRef FileName, Optional<MD5::MD5Result> Checksum, - Optional<StringRef> Source) { + std::optional<StringRef> Source) { CompilationDir = std::string(Directory); RootFile.Name = std::string(FileName); RootFile.DirIndex = 0; @@ -325,7 +326,7 @@ class MCDwarfDwoLineTable { public: void maybeSetRootFile(StringRef Directory, StringRef FileName, Optional<MD5::MD5Result> Checksum, - Optional<StringRef> Source) { + std::optional<StringRef> Source) { if (!Header.RootFile.Name.empty()) return; Header.setRootFile(Directory, FileName, Checksum, Source); @@ -333,7 +334,7 @@ class MCDwarfDwoLineTable { unsigned getFile(StringRef Directory, StringRef FileName, Optional<MD5::MD5Result> Checksum, uint16_t DwarfVersion, - Optional<StringRef> Source) { + std::optional<StringRef> Source) { HasSplitLineTable = true; return cantFail(Header.tryGetFile(Directory, FileName, Checksum, Source, DwarfVersion)); @@ -362,18 +363,20 @@ class MCDwarfLineTable { Expected<unsigned> tryGetFile(StringRef &Directory, StringRef &FileName, Optional<MD5::MD5Result> Checksum, - Optional<StringRef> Source, + std::optional<StringRef> Source, uint16_t DwarfVersion, unsigned FileNumber = 0); unsigned getFile(StringRef &Directory, StringRef &FileName, - Optional<MD5::MD5Result> Checksum, Optional<StringRef> Source, - uint16_t DwarfVersion, unsigned FileNumber = 0) { + Optional<MD5::MD5Result> Checksum, + std::optional<StringRef> Source, uint16_t DwarfVersion, + unsigned FileNumber = 0) { return cantFail(tryGetFile(Directory, FileName, Checksum, Source, DwarfVersion, FileNumber)); } void setRootFile(StringRef Directory, StringRef FileName, - Optional<MD5::MD5Result> Checksum, Optional<StringRef> Source) { + Optional<MD5::MD5Result> Checksum, + std::optional<StringRef> Source) { Header.CompilationDir = std::string(Directory); Header.RootFile.Name = std::string(FileName); Header.RootFile.DirIndex = 0; diff --git a/llvm/include/llvm/MC/MCStreamer.h b/llvm/include/llvm/MC/MCStreamer.h index 423879ed5a9c..5edae19eccfb 100644 --- a/llvm/include/llvm/MC/MCStreamer.h +++ b/llvm/include/llvm/MC/MCStreamer.h @@ -31,6 +31,7 @@ #include <cassert> #include <cstdint> #include <memory> +#include <optional> #include <string> #include <utility> #include <vector> @@ -908,7 +909,7 @@ class MCStreamer { unsigned emitDwarfFileDirective( unsigned FileNo, StringRef Directory, StringRef Filename, Optional<MD5::MD5Result> Checksum = std::nullopt, - Optional<StringRef> Source = std::nullopt, unsigned CUID = 0) { + std::optional<StringRef> Source = std::nullopt, unsigned CUID = 0) { return cantFail( tryEmitDwarfFileDirective(FileNo, Directory, Filename, Checksum, Source, CUID)); @@ -922,12 +923,12 @@ class MCStreamer { virtual Expected<unsigned> tryEmitDwarfFileDirective( unsigned FileNo, StringRef Directory, StringRef Filename, Optional<MD5::MD5Result> Checksum = std::nullopt, - Optional<StringRef> Source = std::nullopt, unsigned CUID = 0); + std::optional<StringRef> Source = std::nullopt, unsigned CUID = 0); /// Specify the "root" file of the compilation, using the ".file 0" extension. virtual void emitDwarfFile0Directive(StringRef Directory, StringRef Filename, Optional<MD5::MD5Result> Checksum, - Optional<StringRef> Source, + std::optional<StringRef> Source, unsigned CUID = 0); virtual void emitCFIBKeyFrame(); diff --git a/llvm/include/llvm/Transforms/Utils/MemoryOpRemark.h b/llvm/include/llvm/Transforms/Utils/MemoryOpRemark.h index 56cc15658675..fdb586e153ff 100644 --- a/llvm/include/llvm/Transforms/Utils/MemoryOpRemark.h +++ b/llvm/include/llvm/Transforms/Utils/MemoryOpRemark.h @@ -17,6 +17,7 @@ #include "llvm/ADT/StringRef.h" #include "llvm/Analysis/TargetLibraryInfo.h" #include "llvm/IR/DiagnosticInfo.h" +#include <optional> namespace llvm { @@ -81,8 +82,8 @@ struct MemoryOpRemark { void visitSizeOperand(Value *V, DiagnosticInfoIROptimization &R); struct VariableInfo { - Optional<StringRef> Name; - Optional<uint64_t> Size; + std::optional<StringRef> Name; + std::optional<uint64_t> Size; bool isEmpty() const { return !Name && !Size; } }; /// Gather more information about \p V as a variable. This can be debug info, diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp index 0ac42a4976ba..2c1a94b12b31 100644 --- a/llvm/lib/AsmParser/LLParser.cpp +++ b/llvm/lib/AsmParser/LLParser.cpp @@ -4590,7 +4590,7 @@ bool LLParser::parseMDField(LocTy Loc, StringRef Name, MDFieldList &Result) { template <> bool LLParser::parseMDField(LocTy Loc, StringRef Name, ChecksumKindField &Result) { - Optional<DIFile::ChecksumKind> CSKind = + std::optional<DIFile::ChecksumKind> CSKind = DIFile::getChecksumKind(Lex.getStrVal()); if (Lex.getKind() != lltok::ChecksumKind || !CSKind) @@ -4890,7 +4890,7 @@ bool LLParser::parseDIDerivedType(MDNode *&Result, bool IsDistinct) { PARSE_MD_FIELDS(); #undef VISIT_MD_FIELDS - Optional<unsigned> DWARFAddressSpace; + std::optional<unsigned> DWARFAddressSpace; if (dwarfAddressSpace.Val != UINT32_MAX) DWARFAddressSpace = dwarfAddressSpace.Val; @@ -4990,13 +4990,13 @@ bool LLParser::parseDIFile(MDNode *&Result, bool IsDistinct) { PARSE_MD_FIELDS(); #undef VISIT_MD_FIELDS - Optional<DIFile::ChecksumInfo<MDString *>> OptChecksum; + std::optional<DIFile::ChecksumInfo<MDString *>> OptChecksum; if (checksumkind.Seen && checksum.Seen) OptChecksum.emplace(checksumkind.Val, checksum.Val); else if (checksumkind.Seen || checksum.Seen) return Lex.Error("'checksumkind' and 'checksum' must be provided together"); - Optional<MDString *> OptSource; + std::optional<MDString *> OptSource; if (source.Seen) OptSource = source.Val; Result = GET_OR_DISTINCT(DIFile, (Context, filename.Val, directory.Val, diff --git a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp index fd493a5df352..adb36e93faf0 100644 --- a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp +++ b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp @@ -55,6 +55,7 @@ #include <deque> #include <iterator> #include <limits> +#include <optional> #include <string> #include <tuple> #include <type_traits> @@ -1448,7 +1449,7 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata( // DWARF address space is encoded as N->getDWARFAddressSpace() + 1. 0 means // that there is no DWARF address space associated with DIDerivedType. - Optional<unsigned> DWARFAddressSpace; + std::optional<unsigned> DWARFAddressSpace; if (Record.size() > 12 && Record[12]) DWARFAddressSpace = Record[12] - 1; @@ -1611,7 +1612,7 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata( return error("Invalid record"); IsDistinct = Record[0]; - Optional<DIFile::ChecksumInfo<MDString *>> Checksum; + std::optional<DIFile::ChecksumInfo<MDString *>> Checksum; // The BitcodeWriter writes null bytes into Record[3:4] when the Checksum // is not present. This matches up with the old internal representation, // and the old encoding for CSK_None in the ChecksumKind. The new @@ -1621,11 +1622,11 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata( Checksum.emplace(static_cast<DIFile::ChecksumKind>(Record[3]), getMDString(Record[4])); MetadataList.assignValue( - GET_OR_DISTINCT( - DIFile, - (Context, getMDString(Record[1]), getMDString(Record[2]), Checksum, - Record.size() > 5 ? Optional<MDString *>(getMDString(Record[5])) - : std::nullopt)), + GET_OR_DISTINCT(DIFile, (Context, getMDString(Record[1]), + getMDString(Record[2]), Checksum, + Record.size() > 5 ? std::optional<MDString *>( + getMDString(Record[5])) + : std::nullopt)), NextMetadataNo); NextMetadataNo++; break; diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index a06cec599bde..9629a5b1d1f9 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -56,6 +56,7 @@ #include <algorithm> #include <cstddef> #include <iterator> +#include <optional> #include <string> using namespace llvm; @@ -3533,7 +3534,7 @@ Optional<MD5::MD5Result> DwarfDebug::getMD5AsBytes(const DIFile *File) const { assert(File); if (getDwarfVersion() < 5) return std::nullopt; - Optional<DIFile::ChecksumInfo<StringRef>> Checksum = File->getChecksum(); + std::optional<DIFile::ChecksumInfo<StringRef>> Checksum = File->getChecksum(); if (!Checksum || Checksum->Kind != DIFile::CSK_MD5) return std::nullopt; diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfExpression.h b/llvm/lib/CodeGen/AsmPrinter/DwarfExpression.h index 36fdf0415cc1..3cb5f56df06a 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfExpression.h +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfExpression.h @@ -22,6 +22,7 @@ #include <cassert> #include <cstdint> #include <iterator> +#include <optional> namespace llvm { @@ -88,7 +89,7 @@ class DIExpressionCursor { DIExpression::expr_op_iterator end() const { return End; } /// Retrieve the fragment information, if any. - Optional<DIExpression::FragmentInfo> getFragmentInfo() const { + std::optional<DIExpression::FragmentInfo> getFragmentInfo() const { return DIExpression::getFragmentInfo(Start, End); } }; diff --git a/llvm/lib/CodeGen/LiveDebugValues/InstrRefBasedImpl.h b/llvm/lib/CodeGen/LiveDebugValues/InstrRefBasedImpl.h index 7db61d82d781..c12608515e64 100644 --- a/llvm/lib/CodeGen/LiveDebugValues/InstrRefBasedImpl.h +++ b/llvm/lib/CodeGen/LiveDebugValues/InstrRefBasedImpl.h @@ -19,6 +19,7 @@ #include "llvm/CodeGen/MachineInstr.h" #include "llvm/CodeGen/TargetRegisterInfo.h" #include "llvm/IR/DebugInfoMetadata.h" +#include <optional> #include "LiveDebugValues.h" @@ -1005,7 +1006,7 @@ class VLocTracker { // The "empty" fragment is stored as DebugVariable::DefaultFragment, so // that it overlaps with everything, however its cannonical representation // in a DebugVariable is as "None". - Optional<DIExpression::FragmentInfo> OptFragmentInfo = FragmentInfo; + std::optional<DIExpression::FragmentInfo> OptFragmentInfo = FragmentInfo; if (DebugVariable::isDefaultFragment(FragmentInfo)) OptFragmentInfo = std::nullopt; @@ -1033,7 +1034,7 @@ class InstrRefBasedLDV : public LDVImpl { friend class ::InstrRefLDVTest; using FragmentInfo = DIExpression::FragmentInfo; - using OptFragmentInfo = Optional<DIExpression::FragmentInfo>; + using OptFragmentInfo = std::optional<DIExpression::FragmentInfo>; // Helper while building OverlapMap, a map of all fragments seen for a given // DILocalVariable. diff --git a/llvm/lib/CodeGen/LiveDebugValues/VarLocBasedImpl.cpp b/llvm/lib/CodeGen/LiveDebugValues/VarLocBasedImpl.cpp index 3b36e1a4243e..222bbb0784cd 100644 --- a/llvm/lib/CodeGen/LiveDebugValues/VarLocBasedImpl.cpp +++ b/llvm/lib/CodeGen/LiveDebugValues/VarLocBasedImpl.cpp @@ -148,6 +148,7 @@ #include <cstdint> #include <functional> #include <map> +#include <optional> #include <queue> #include <tuple> #include <utility> @@ -281,7 +282,7 @@ class VarLocBasedLDV : public LDVImpl { enum struct TransferKind { TransferCopy, TransferSpill, TransferRestore }; using FragmentInfo = DIExpression::FragmentInfo; - using OptFragmentInfo = Optional<DIExpression::FragmentInfo>; + using OptFragmentInfo = std::optional<DIExpression::FragmentInfo>; /// A pair of debug variable and value location. struct VarLoc { diff --git a/llvm/lib/CodeGen/LiveDebugVariables.cpp b/llvm/lib/CodeGen/LiveDebugVariables.cpp index f514f4011db5..4db941ea2d9e 100644 --- a/llvm/lib/CodeGen/LiveDebugVariables.cpp +++ b/llvm/lib/CodeGen/LiveDebugVariables.cpp @@ -59,6 +59,7 @@ #include <cassert> #include <iterator> #include <memory> +#include <optional> #include <utility> using namespace llvm; @@ -286,7 +287,7 @@ class LDVImpl; class UserValue { const DILocalVariable *Variable; ///< The debug info variable we are part of. /// The part of the variable we describe. - const Optional<DIExpression::FragmentInfo> Fragment; + const std::optional<DIExpression::FragmentInfo> Fragment; DebugLoc dl; ///< The debug location for the variable. This is ///< used by dwarf writer to find lexical scope. UserValue *leader; ///< Equivalence class leader. @@ -319,7 +320,7 @@ class UserValue { public: /// Create a new UserValue. UserValue(const DILocalVariable *var, - Optional<DIExpression::FragmentInfo> Fragment, DebugLoc L, + std::optional<DIExpression::FragmentInfo> Fragment, DebugLoc L, LocMap::Allocator &alloc) : Variable(var), Fragment(Fragment), dl(std::move(L)), leader(this), locInts(alloc) {} @@ -582,7 +583,7 @@ class LDVImpl { /// Find or create a UserValue. UserValue *getUserValue(const DILocalVariable *Var, - Optional<DIExpression::FragmentInfo> Fragment, + std::optional<DIExpression::FragmentInfo> Fragment, const DebugLoc &DL); /// Find the EC leader for VirtReg or null. @@ -768,9 +769,10 @@ void UserValue::mapVirtRegs(LDVImpl *LDV) { LDV->mapVirtReg(locations[i].getReg(), this); } -UserValue *LDVImpl::getUserValue(const DILocalVariable *Var, - Optional<DIExpression::FragmentInfo> Fragment, - const DebugLoc &DL) { +UserValue * +LDVImpl::getUserValue(const DILocalVariable *Var, + std::optional<DIExpression::FragmentInfo> Fragment, + const DebugLoc &DL) { // FIXME: Handle partially overlapping fragments. See // https://reviews.llvm.org/D70121#1849741. DebugVariable ID(Var, Fragment, DL->getInlinedAt()); diff --git a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp index faedf38f40fa..300f19a89f1b 100644 --- a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp +++ b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp @@ -41,6 +41,7 @@ #include "llvm/Transforms/Utils/UnrollLoop.h" #include <cstdint> +#include <optional> #define DEBUG_TYPE "openmp-ir-builder" @@ -624,7 +625,7 @@ Constant *OpenMPIRBuilder::getOrCreateSrcLocStr(DebugLoc DL, return getOrCreateDefaultSrcLocStr(SrcLocStrSize); StringRef FileName = M.getName(); if (DIFile *DIF = DIL->getFile()) - if (Optional<StringRef> Source = DIF->getSource()) + if (std::optional<StringRef> Source = DIF->getSource()) FileName = *Source; StringRef Function = DIL->getScope()->getSubprogram()->getName(); if (Function.empty() && F) diff --git a/llvm/lib/IR/DIBuilder.cpp b/llvm/lib/IR/DIBuilder.cpp index 730069308e20..8cb8303852b3 100644 --- a/llvm/lib/IR/DIBuilder.cpp +++ b/llvm/lib/IR/DIBuilder.cpp @@ -12,13 +12,13 @@ #include "llvm/IR/DIBuilder.h" #include "LLVMContextImpl.h" -#include "llvm/ADT/Optional.h" #include "llvm/BinaryFormat/Dwarf.h" #include "llvm/IR/Constants.h" #include "llvm/IR/DebugInfo.h" #include "llvm/IR/IRBuilder.h" #include "llvm/IR/Module.h" #include "llvm/Support/CommandLine.h" +#include <optional> using namespace llvm; using namespace llvm::dwarf; @@ -229,8 +229,8 @@ DIBuilder::createImportedDeclaration(DIScope *Context, DINode *Decl, } DIFile *DIBuilder::createFile(StringRef Filename, StringRef Directory, - Optional<DIFile::ChecksumInfo<StringRef>> CS, - Optional<StringRef> Source) { + std::optional<DIFile::ChecksumInfo<StringRef>> CS, + std::optional<StringRef> Source) { return DIFile::get(VMContext, Filename, Directory, CS, Source); } @@ -318,7 +318,7 @@ DIDerivedType *DIBuilder::createQualifiedType(unsigned Tag, DIType *FromTy) { DIDerivedType * DIBuilder::createPointerType(DIType *PointeeTy, uint64_t SizeInBits, uint32_t AlignInBits, - Optional<unsigned> DWARFAddressSpace, + std::optional<unsigned> DWARFAddressSpace, StringRef Name, DINodeArray Annotations) { // FIXME: Why is there a name here? return DIDerivedType::get(VMContext, dwarf::DW_TAG_pointer_type, Name, @@ -340,7 +340,7 @@ DIDerivedType *DIBuilder::createMemberPointerType(DIType *PointeeTy, DIDerivedType * DIBuilder::createReferenceType(unsigned Tag, DIType *RTy, uint64_t SizeInBits, uint32_t AlignInBits, - Optional<unsigned> DWARFAddressSpace) { + std::optional<unsigned> DWARFAddressSpace) { assert(RTy && "Unable to create reference type"); return DIDerivedType::get(VMContext, Tag, "", nullptr, 0, nullptr, RTy, SizeInBits, AlignInBits, 0, DWARFAddressSpace, diff --git a/llvm/lib/IR/DebugInfoMetadata.cpp b/llvm/lib/IR/DebugInfoMetadata.cpp index 4db2b6989711..424c44f0055e 100644 --- a/llvm/lib/IR/DebugInfoMetadata.cpp +++ b/llvm/lib/IR/DebugInfoMetadata.cpp @@ -22,6 +22,7 @@ #include "llvm/IR/Value.h" #include <numeric> +#include <optional> using namespace llvm; @@ -172,8 +173,8 @@ const DILocation *DILocation::getMergedLocation(const DILocation *LocA, return DILocation::get(C, Line, Col, S, L); } -Optional<unsigned> DILocation::encodeDiscriminator(unsigned BD, unsigned DF, - unsigned CI) { +std::optional<unsigned> +DILocation::encodeDiscriminator(unsigned BD, unsigned DF, unsigned CI) { std::array<unsigned, 3> Components = {BD, DF, CI}; uint64_t RemainingWork = 0U; // We use RemainingWork to figure out if we have no remaining components to @@ -601,7 +602,7 @@ DIBasicType *DIBasicType::getImpl(LLVMContext &Context, unsigned Tag, (Tag, SizeInBits, AlignInBits, Encoding, Flags), Ops); } -Optional<DIBasicType::Signedness> DIBasicType::getSignedness() const { +std::optional<DIBasicType::Signedness> DIBasicType::getSignedness() const { switch (getEncoding()) { case dwarf::DW_ATE_signed: case dwarf::DW_ATE_signed_char: @@ -661,12 +662,14 @@ Constant *DIDerivedType::getDiscriminantValue() const { return nullptr; } -DIDerivedType *DIDerivedType::getImpl( - LLVMContext &Context, unsigned Tag, MDString *Name, Metadata *File, - unsigned Line, Metadata *Scope, Metadata *BaseType, uint64_t SizeInBits, - uint32_t AlignInBits, uint64_t OffsetInBits, - Optional<unsigned> DWARFAddressSpace, DIFlags Flags, Metadata *ExtraData, - Metadata *Annotations, StorageType Storage, bool ShouldCreate) { +DIDerivedType * +DIDerivedType::getImpl(LLVMContext &Context, unsigned Tag, MDString *Name, + Metadata *File, unsigned Line, Metadata *Scope, + Metadata *BaseType, uint64_t SizeInBits, + uint32_t AlignInBits, uint64_t OffsetInBits, + std::optional<unsigned> DWARFAddressSpace, DIFlags Flags, + Metadata *ExtraData, Metadata *Annotations, + StorageType Storage, bool ShouldCreate) { assert(isCanonical(Name) && "Expected canonical MDString"); DEFINE_GETIMPL_LOOKUP(DIDerivedType, (Tag, Name, File, Line, Scope, BaseType, SizeInBits, @@ -798,8 +801,8 @@ DISubroutineType *DISubroutineType::getImpl(LLVMContext &Context, DIFlags Flags, } DIFile::DIFile(LLVMContext &C, StorageType Storage, - Optional<ChecksumInfo<MDString *>> CS, Optional<MDString *> Src, - ArrayRef<Metadata *> Ops) + std::optional<ChecksumInfo<MDString *>> CS, + std::optional<MDString *> Src, ArrayRef<Metadata *> Ops) : DIScope(C, DIFileKind, Storage, dwarf::DW_TAG_file_type, Ops), Checksum(CS), Source(Src) {} @@ -819,8 +822,9 @@ StringRef DIFile::getChecksumKindAsString(ChecksumKind CSKind) { return ChecksumKindName[CSKind - 1]; } -Optional<DIFile::ChecksumKind> DIFile::getChecksumKind(StringRef CSKindStr) { - return StringSwitch<Optional<DIFile::ChecksumKind>>(CSKindStr) +std::optional<DIFile::ChecksumKind> +DIFile::getChecksumKind(StringRef CSKindStr) { + return StringSwitch<std::optional<DIFile::ChecksumKind>>(CSKindStr) .Case("CSK_MD5", DIFile::CSK_MD5) .Case("CSK_SHA1", DIFile::CSK_SHA1) .Case("CSK_SHA256", DIFile::CSK_SHA256) @@ -829,8 +833,8 @@ Optional<DIFile::ChecksumKind> DIFile::getChecksumKind(StringRef CSKindStr) { DIFile *DIFile::getImpl(LLVMContext &Context, MDString *Filename, MDString *Directory, - Optional<DIFile::ChecksumInfo<MDString *>> CS, - Optional<MDString *> Source, StorageType Storage, + std::optional<DIFile::ChecksumInfo<MDString *>> CS, + std::optional<MDString *> Source, StorageType Storage, bool ShouldCreate) { assert(isCanonical(Filename) && "Expected canonical MDString"); assert(isCanonical(Directory) && "Expected canonical MDString"); @@ -889,9 +893,9 @@ DICompileUnit *DICompileUnit::getImpl( Storage); } -Optional<DICompileUnit::DebugEmissionKind> +std::optional<DICompileUnit::DebugEmissionKind> DICompileUnit::getEmissionKind(StringRef Str) { - return StringSwitch<Optional<DebugEmissionKind>>(Str) + return StringSwitch<std::optional<DebugEmissionKind>>(Str) .Case("NoDebug", NoDebug) .Case("FullDebug", FullDebug) .Case("LineTablesOnly", LineTablesOnly) @@ -899,9 +903,9 @@ DICompileUnit::getEmissionKind(StringRef Str) { .Default(std::nullopt); } -Optional<DICompileUnit::DebugNameTableKind> +std::optional<DICompileUnit::DebugNameTableKind> DICompileUnit::getNameTableKind(StringRef Str) { - return StringSwitch<Optional<DebugNameTableKind>>(Str) + return StringSwitch<std::optional<DebugNameTableKind>>(Str) .Case("Default", DebugNameTableKind::Default) .Case("GNU", DebugNameTableKind::GNU) .Case("None", DebugNameTableKind::None) @@ -1204,7 +1208,7 @@ DIVariable::DIVariable(LLVMContext &C, unsigned ID, StorageType Storage, uint32_t AlignInBits) : DINode(C, ID, Storage, dwarf::DW_TAG_variable, Ops), Line(Line), AlignInBits(AlignInBits) {} -Optional<uint64_t> DIVariable::getSizeInBits() const { +std::optional<uint64_t> DIVariable::getSizeInBits() const { // This is used by the Verifier so be mindful of broken types. const Metadata *RawType = getRawType(); while (RawType) { @@ -1408,7 +1412,7 @@ bool DIExpression::isComplex() const { return false; } -Optional<DIExpression::FragmentInfo> +std::optional<DIExpression::FragmentInfo> DIExpression::getFragmentInfo(expr_op_iterator Start, expr_op_iterator End) { for (auto I = Start; I != End; ++I) if (I->getOp() == dwarf::DW_OP_LLVM_fragment) { @@ -1622,7 +1626,7 @@ DIExpression *DIExpression::appendToStack(const DIExpression *Expr, // has no DW_OP_stack_value. // // Match .* DW_OP_stack_value (DW_OP_LLVM_fragment A B)?. - Optional<FragmentInfo> FI = Expr->getFragmentInfo(); + std::optional<FragmentInfo> FI = Expr->getFragmentInfo(); unsigned DropUntilStackValue = FI ? 3 : 0; ArrayRef<uint64_t> ExprOpsBeforeFragment = Expr->getElements().drop_back(DropUntilStackValue); @@ -1641,7 +1645,7 @@ DIExpression *DIExpression::appendToStack(const DIExpression *Expr, return DIExpression::append(Expr, NewOps); } -Optional<DIExpression *> DIExpression::createFragmentExpression( +std::optional<DIExpression *> DIExpression::createFragmentExpression( const DIExpression *Expr, unsigned OffsetInBits, unsigned SizeInBits) { SmallVector<uint64_t, 8> Ops; // Track whether it's safe to split the value at the top of the DWARF stack, @@ -1752,7 +1756,7 @@ uint64_t DIExpression::getNumLocationOperands() const { return Result; } -llvm::Optional<DIExpression::SignedOrUnsignedConstant> +std::optional<DIExpression::SignedOrUnsignedConstant> DIExpression::isConstant() const { // Recognize signed and unsigned constants. diff --git a/llvm/lib/IR/IntrinsicInst.cpp b/llvm/lib/IR/IntrinsicInst.cpp index 1b1e67167389..bd0438400e83 100644 --- a/llvm/lib/IR/IntrinsicInst.cpp +++ b/llvm/lib/IR/IntrinsicInst.cpp @@ -185,7 +185,7 @@ void DbgVariableIntrinsic::addVariableLocationOps(ArrayRef<Value *> NewValues, 0, MetadataAsValue::get(getContext(), DIArgList::get(getContext(), MDs))); } -Optional<uint64_t> DbgVariableIntrinsic::getFragmentSizeInBits() const { +std::optional<uint64_t> DbgVariableIntrinsic::getFragmentSizeInBits() const { if (auto Fragment = getExpression()->getFragmentInfo()) return Fragment->SizeInBits; return getVariable()->getSizeInBits(); diff --git a/llvm/lib/IR/LLVMContextImpl.h b/llvm/lib/IR/LLVMContextImpl.h index 3f4f222a0720..80886e95c060 100644 --- a/llvm/lib/IR/LLVMContextImpl.h +++ b/llvm/lib/IR/LLVMContextImpl.h @@ -47,6 +47,7 @@ #include <cstddef> #include <cstdint> #include <memory> +#include <optional> #include <string> #include <utility> #include <vector> @@ -482,7 +483,7 @@ template <> struct MDNodeKeyImpl<DIDerivedType> { uint64_t SizeInBits; uint64_t OffsetInBits; uint32_t AlignInBits; - Optional<unsigned> DWARFAddressSpace; + std::optional<unsigned> DWARFAddressSpace; unsigned Flags; Metadata *ExtraData; Metadata *Annotations; @@ -490,7 +491,7 @@ template <> struct MDNodeKeyImpl<DIDerivedType> { MDNodeKeyImpl(unsigned Tag, MDString *Name, Metadata *File, unsigned Line, Metadata *Scope, Metadata *BaseType, uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits, - Optional<unsigned> DWARFAddressSpace, unsigned Flags, + std::optional<unsigned> DWARFAddressSpace, unsigned Flags, Metadata *ExtraData, Metadata *Annotations) : Tag(Tag), Name(Name), File(File), Line(Line), Scope(Scope), BaseType(BaseType), SizeInBits(SizeInBits), OffsetInBits(OffsetInBits), @@ -667,12 +668,12 @@ template <> struct MDNodeKeyImpl<DISubroutineType> { template <> struct MDNodeKeyImpl<DIFile> { MDString *Filename; MDString *Directory; - Optional<DIFile::ChecksumInfo<MDString *>> Checksum; - Optional<MDString *> Source; + std::optional<DIFile::ChecksumInfo<MDString *>> Checksum; + std::optional<MDString *> Source; MDNodeKeyImpl(MDString *Filename, MDString *Directory, - Optional<DIFile::ChecksumInfo<MDString *>> Checksum, - Optional<MDString *> Source) + std::optional<DIFile::ChecksumInfo<MDString *>> Checksum, + std::optional<MDString *> Source) : Filename(Filename), Directory(Directory), Checksum(Checksum), Source(Source) {} MDNodeKeyImpl(const DIFile *N) diff --git a/llvm/lib/IR/Verifier.cpp b/llvm/lib/IR/Verifier.cpp index 99ee2c48bc48..836990030aee 100644 --- a/llvm/lib/IR/Verifier.cpp +++ b/llvm/lib/IR/Verifier.cpp @@ -1241,7 +1241,7 @@ void Verifier::visitDISubroutineType(const DISubroutineType &N) { void Verifier::visitDIFile(const DIFile &N) { CheckDI(N.getTag() == dwarf::DW_TAG_file_type, "invalid tag", &N); - Optional<DIFile::ChecksumInfo<StringRef>> Checksum = N.getChecksum(); + std::optional<DIFile::ChecksumInfo<StringRef>> Checksum = N.getChecksum(); if (Checksum) { CheckDI(Checksum->Kind <= DIFile::ChecksumKind::CSK_Last, "invalid checksum kind", &N); diff --git a/llvm/lib/MC/MCAsmStreamer.cpp b/llvm/lib/MC/MCAsmStreamer.cpp index 59c1d9427880..469d89708ced 100644 --- a/llvm/lib/MC/MCAsmStreamer.cpp +++ b/llvm/lib/MC/MCAsmStreamer.cpp @@ -37,6 +37,7 @@ #include "llvm/Support/LEB128.h" #include "llvm/Support/MathExtras.h" #include "llvm/Support/Path.h" +#include <optional> using namespace llvm; @@ -63,7 +64,7 @@ class MCAsmStreamer final : public MCStreamer { void printDwarfFileDirective(unsigned FileNo, StringRef Directory, StringRef Filename, Optional<MD5::MD5Result> Checksum, - Optional<StringRef> Source, + std::optional<StringRef> Source, bool UseDwarfDirectory, raw_svector_ostream &OS) const; void emitCFIStartProcImpl(MCDwarfFrameInfo &Frame) override; @@ -266,13 +267,15 @@ class MCAsmStreamer final : public MCStreamer { void emitFileDirective(StringRef Filename) override; void emitFileDirective(StringRef Filename, StringRef CompilerVerion, StringRef TimeStamp, StringRef Description) override; - Expected<unsigned> tryEmitDwarfFileDirective( - unsigned FileNo, StringRef Directory, StringRef Filename, - Optional<MD5::MD5Result> Checksum = std::nullopt, - Optional<StringRef> Source = std::nullopt, unsigned CUID = 0) override; + Expected<unsigned> + tryEmitDwarfFileDirective(unsigned FileNo, StringRef Directory, + StringRef Filename, + Optional<MD5::MD5Result> Checksum = std::nullopt, + std::optional<StringRef> Source = std::nullopt, + unsigned CUID = 0) override; void emitDwarfFile0Directive(StringRef Directory, StringRef Filename, Optional<MD5::MD5Result> Checksum, - Optional<StringRef> Source, + std::optional<StringRef> Source, unsigned CUID = 0) override; void emitDwarfLocDirective(unsigned FileNo, unsigned Line, unsigned Column, unsigned Flags, unsigned Isa, @@ -1541,7 +1544,7 @@ void MCAsmStreamer::emitFileDirective(StringRef Filename, void MCAsmStreamer::printDwarfFileDirective( unsigned FileNo, StringRef Directory, StringRef Filename, - Optional<MD5::MD5Result> Checksum, Optional<StringRef> Source, + Optional<MD5::MD5Result> Checksum, std::optional<StringRef> Source, bool UseDwarfDirectory, raw_svector_ostream &OS) const { SmallString<128> FullPathName; @@ -1572,7 +1575,8 @@ void MCAsmStreamer::printDwarfFileDirective( Expected<unsigned> MCAsmStreamer::tryEmitDwarfFileDirective( unsigned FileNo, StringRef Directory, StringRef Filename, - Optional<MD5::MD5Result> Checksum, Optional<StringRef> Source, unsigned CUID) { + Optional<MD5::MD5Result> Checksum, std::optional<StringRef> Source, + unsigned CUID) { assert(CUID == 0 && "multiple CUs not supported by MCAsmStreamer"); MCDwarfLineTable &Table = getContext().getMCDwarfLineTable(CUID); @@ -1606,7 +1610,7 @@ Expected<unsigned> MCAsmStreamer::tryEmitDwarfFileDirective( void MCAsmStreamer::emitDwarfFile0Directive(StringRef Directory, StringRef Filename, Optional<MD5::MD5Result> Checksum, - Optional<StringRef> Source, + std::optional<StringRef> Source, unsigned CUID) { assert(CUID == 0); // .file 0 is new for DWARF v5. diff --git a/llvm/lib/MC/MCContext.cpp b/llvm/lib/MC/MCContext.cpp index e504a6b0ed1b..773738c8f282 100644 --- a/llvm/lib/MC/MCContext.cpp +++ b/llvm/lib/MC/MCContext.cpp @@ -54,6 +54,7 @@ #include "llvm/Support/raw_ostream.h" #include <cassert> #include <cstdlib> +#include <optional> #include <tuple> #include <utility> @@ -972,7 +973,7 @@ Expected<unsigned> MCContext::getDwarfFile(StringRef Directory, StringRef FileName, unsigned FileNumber, Optional<MD5::MD5Result> Checksum, - Optional<StringRef> Source, + std::optional<StringRef> Source, unsigned CUID) { MCDwarfLineTable &Table = MCDwarfLineTablesCUMap[CUID]; return Table.tryGetFile(Directory, FileName, Checksum, Source, DwarfVersion, diff --git a/llvm/lib/MC/MCDwarf.cpp b/llvm/lib/MC/MCDwarf.cpp index 136c40db825a..c129157657c3 100644 --- a/llvm/lib/MC/MCDwarf.cpp +++ b/llvm/lib/MC/MCDwarf.cpp @@ -38,6 +38,7 @@ #include "llvm/Support/raw_ostream.h" #include <cassert> #include <cstdint> +#include <optional> #include <string> #include <utility> #include <vector> @@ -562,7 +563,7 @@ void MCDwarfLineTable::emitCU(MCStreamer *MCOS, MCDwarfLineTableParams Params, Expected<unsigned> MCDwarfLineTable::tryGetFile(StringRef &Directory, StringRef &FileName, Optional<MD5::MD5Result> Checksum, - Optional<StringRef> Source, + std::optional<StringRef> Source, uint16_t DwarfVersion, unsigned FileNumber) { return Header.tryGetFile(Directory, FileName, Checksum, Source, DwarfVersion, @@ -580,7 +581,7 @@ Expected<unsigned> MCDwarfLineTableHeader::tryGetFile(StringRef &Directory, StringRef &FileName, Optional<MD5::MD5Result> Checksum, - Optional<StringRef> Source, + std::optional<StringRef> Source, uint16_t DwarfVersion, unsigned FileNumber) { if (Directory == CompilationDir) diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp index 343ac3b59459..767c467f21ad 100644 --- a/llvm/lib/MC/MCParser/AsmParser.cpp +++ b/llvm/lib/MC/MCParser/AsmParser.cpp @@ -64,6 +64,7 @@ #include <cstdint> #include <deque> #include <memory> +#include <optional> #include <sstream> #include <string> #include <tuple> @@ -3538,7 +3539,7 @@ bool AsmParser::parseDirectiveFile(SMLoc DirectiveLoc) { uint64_t MD5Hi, MD5Lo; bool HasMD5 = false; - Optional<StringRef> Source; + std::optional<StringRef> Source; bool HasSource = false; std::string SourceString; diff --git a/llvm/lib/MC/MCParser/MasmParser.cpp b/llvm/lib/MC/MCParser/MasmParser.cpp index e7d2dd098cc8..fa419c882534 100644 --- a/llvm/lib/MC/MCParser/MasmParser.cpp +++ b/llvm/lib/MC/MCParser/MasmParser.cpp @@ -4844,7 +4844,7 @@ bool MasmParser::parseDirectiveFile(SMLoc DirectiveLoc) { uint64_t MD5Hi, MD5Lo; bool HasMD5 = false; - Optional<StringRef> Source; + std::optional<StringRef> Source; bool HasSource = false; std::string SourceString; diff --git a/llvm/lib/MC/MCStreamer.cpp b/llvm/lib/MC/MCStreamer.cpp index 805ca571002a..5f999b3d652c 100644 --- a/llvm/lib/MC/MCStreamer.cpp +++ b/llvm/lib/MC/MCStreamer.cpp @@ -39,6 +39,7 @@ #include <cassert> #include <cstdint> #include <cstdlib> +#include <optional> #include <utility> using namespace llvm; @@ -230,7 +231,7 @@ Expected<unsigned> MCStreamer::tryEmitDwarfFileDirective(unsigned FileNo, StringRef Directory, StringRef Filename, Optional<MD5::MD5Result> Checksum, - Optional<StringRef> Source, + std::optional<StringRef> Source, unsigned CUID) { return getContext().getDwarfFile(Directory, Filename, FileNo, Checksum, Source, CUID); @@ -239,7 +240,7 @@ MCStreamer::tryEmitDwarfFileDirective(unsigned FileNo, StringRef Directory, void MCStreamer::emitDwarfFile0Directive(StringRef Directory, StringRef Filename, Optional<MD5::MD5Result> Checksum, - Optional<StringRef> Source, + std::optional<StringRef> Source, unsigned CUID) { getContext().setMCLineTableRootFile(CUID, Directory, Filename, Checksum, Source); diff --git a/llvm/lib/Target/X86/X86DiscriminateMemOps.cpp b/llvm/lib/Target/X86/X86DiscriminateMemOps.cpp index 03ee685d5212..becd221e1e86 100644 --- a/llvm/lib/Target/X86/X86DiscriminateMemOps.cpp +++ b/llvm/lib/Target/X86/X86DiscriminateMemOps.cpp @@ -23,6 +23,7 @@ #include "llvm/ProfileData/SampleProfReader.h" #include "llvm/Support/Debug.h" #include "llvm/Transforms/IPO/SampleProfile.h" +#include <optional> using namespace llvm; #define DEBUG_TYPE "x86-discriminate-memops" @@ -144,8 +145,8 @@ bool X86DiscriminateMemOps::runOnMachineFunction(MachineFunction &MF) { if (!TryInsert.second || !HasDebug) { unsigned BF, DF, CI = 0; DILocation::decodeDiscriminator(DI->getDiscriminator(), BF, DF, CI); - Optional<unsigned> EncodedDiscriminator = DILocation::encodeDiscriminator( - MemOpDiscriminators[L] + 1, DF, CI); + std::optional<unsigned> EncodedDiscriminator = + DILocation::encodeDiscriminator(MemOpDiscriminators[L] + 1, DF, CI); if (!EncodedDiscriminator) { // FIXME(mtrofin): The assumption is that this scenario is infrequent/OK diff --git a/llvm/lib/Transforms/Utils/Debugify.cpp b/llvm/lib/Transforms/Utils/Debugify.cpp index d814c5ec4b9d..f4d9bce72dc3 100644 --- a/llvm/lib/Transforms/Utils/Debugify.cpp +++ b/llvm/lib/Transforms/Utils/Debugify.cpp @@ -27,6 +27,7 @@ #include "llvm/Support/CommandLine.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/JSON.h" +#include <optional> #define DEBUG_TYPE "debugify" @@ -680,7 +681,7 @@ bool diagnoseMisSizedDbgValue(Module &M, DbgValueInst *DVI) { Type *Ty = V->getType(); uint64_t ValueOperandSize = getAllocSizeInBits(M, Ty); - Optional<uint64_t> DbgVarSize = DVI->getFragmentSizeInBits(); + std::optional<uint64_t> DbgVarSize = DVI->getFragmentSizeInBits(); if (!ValueOperandSize || !DbgVarSize) return false; diff --git a/llvm/lib/Transforms/Utils/Local.cpp b/llvm/lib/Transforms/Utils/Local.cpp index 86949945550f..ffdba22512a2 100644 --- a/llvm/lib/Transforms/Utils/Local.cpp +++ b/llvm/lib/Transforms/Utils/Local.cpp @@ -1473,7 +1473,7 @@ static bool PhiHasDebugValue(DILocalVariable *DIVar, static bool valueCoversEntireFragment(Type *ValTy, DbgVariableIntrinsic *DII) { const DataLayout &DL = DII->getModule()->getDataLayout(); TypeSize ValueSize = DL.getTypeAllocSizeInBits(ValTy); - if (Optional<uint64_t> FragmentSize = DII->getFragmentSizeInBits()) { + if (std::optional<uint64_t> FragmentSize = DII->getFragmentSizeInBits()) { assert(!ValueSize.isScalable() && "Fragments don't work on scalable types."); return ValueSize.getFixedSize() >= *FragmentSize; diff --git a/llvm/lib/Transforms/Utils/MemoryOpRemark.cpp b/llvm/lib/Transforms/Utils/MemoryOpRemark.cpp index dbef880014ac..c31b472978eb 100644 --- a/llvm/lib/Transforms/Utils/MemoryOpRemark.cpp +++ b/llvm/lib/Transforms/Utils/MemoryOpRemark.cpp @@ -16,6 +16,7 @@ #include "llvm/IR/DebugInfo.h" #include "llvm/IR/Instructions.h" #include "llvm/IR/IntrinsicInst.h" +#include <optional> using namespace llvm; using namespace llvm::ore; @@ -144,7 +145,8 @@ static void inlineVolatileOrAtomicWithExtraArgs(bool *Inline, bool Volatile, R << " Atomic: " << NV("StoreAtomic", false) << "."; } -static Optional<uint64_t> getSizeInBytes(Optional<uint64_t> SizeInBits) { +static std::optional<uint64_t> +getSizeInBytes(std::optional<uint64_t> SizeInBits) { if (!SizeInBits || *SizeInBits % 8 != 0) return std::nullopt; return *SizeInBits / 8; @@ -297,7 +299,7 @@ void MemoryOpRemark::visitSizeOperand(Value *V, DiagnosticInfoIROptimization &R) } } -static Optional<StringRef> nameOrNone(const Value *V) { +static std::optional<StringRef> nameOrNone(const Value *V) { if (V->hasName()) return V->getName(); return std::nullopt; @@ -321,7 +323,7 @@ void MemoryOpRemark::visitVariable(const Value *V, for (const DbgVariableIntrinsic *DVI : FindDbgAddrUses(const_cast<Value *>(V))) { if (DILocalVariable *DILV = DVI->getVariable()) { - Optional<uint64_t> DISize = getSizeInBytes(DILV->getSizeInBits()); + std::optional<uint64_t> DISize = getSizeInBytes(DILV->getSizeInBits()); VariableInfo Var{DILV->getName(), DISize}; if (!Var.isEmpty()) { Result.push_back(std::move(Var)); @@ -340,7 +342,7 @@ void MemoryOpRemark::visitVariable(const Value *V, // If not, get it from the alloca. Optional<TypeSize> TySize = AI->getAllocationSizeInBits(DL); - Optional<uint64_t> Size = + std::optional<uint64_t> Size = TySize ? getSizeInBytes(TySize->getFixedSize()) : std::nullopt; VariableInfo Var{nameOrNone(AI), Size}; if (!Var.isEmpty()) diff --git a/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp b/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp index 64ff66277b04..c5a9e6e29f3e 100644 --- a/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp +++ b/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp @@ -20,6 +20,7 @@ #include "llvm/Support/Casting.h" #include "llvm/Transforms/Utils/BasicBlockUtils.h" #include "gtest/gtest.h" +#include <optional> using namespace llvm; using namespace omp; @@ -170,7 +171,7 @@ class OpenMPIRBuilderTest : public testing::Test { DIBuilder DIB(*M); auto File = DIB.createFile("test.dbg", "/src", std::nullopt, - Optional<StringRef>("/src/test.dbg")); + std::optional<StringRef>("/src/test.dbg")); auto CU = DIB.createCompileUnit(dwarf::DW_LANG_C, File, "llvm-C", true, "", 0); auto Type = diff --git a/llvm/unittests/IR/MetadataTest.cpp b/llvm/unittests/IR/MetadataTest.cpp index fcb0b296941a..bdab1f60d093 100644 --- a/llvm/unittests/IR/MetadataTest.cpp +++ b/llvm/unittests/IR/MetadataTest.cpp @@ -22,6 +22,7 @@ #include "llvm/IR/Verifier.h" #include "llvm/Support/raw_ostream.h" #include "gtest/gtest.h" +#include <optional> using namespace llvm; namespace { @@ -3016,7 +3017,7 @@ TEST_F(DIExpressionTest, createFragmentExpression) { } while (false) // createFragmentExpression adds correct ops. - Optional<DIExpression*> R = DIExpression::createFragmentExpression( + std::optional<DIExpression*> R = DIExpression::createFragmentExpression( DIExpression::get(Context, {}), 0, 32); EXPECT_EQ(R.has_value(), true); EXPECT_EQ(3u, (*R)->getNumElements()); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits