<div dir="ltr">Hi David,<div><br></div><div>Sure, I'll do that next time.  I didn't mean to submit a patch containing many different things in it.</div><div><br></div><div>Kazu Hirata</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Jun 27, 2022 at 9:12 AM David Blaikie <<a href="mailto:dblaikie@gmail.com">dblaikie@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">It'd be good to include some details in the revert commit message<br>
about why the patch was reverted.<br>
<br>
On Sat, Jun 25, 2022 at 11:57 AM Kazu Hirata via llvm-commits<br>
<<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br>
><br>
><br>
> Author: Kazu Hirata<br>
> Date: 2022-06-25T11:56:50-07:00<br>
> New Revision: 3b7c3a654c9175f41ac871a937cbcae73dfb3c5d<br>
><br>
> URL: <a href="https://github.com/llvm/llvm-project/commit/3b7c3a654c9175f41ac871a937cbcae73dfb3c5d" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/3b7c3a654c9175f41ac871a937cbcae73dfb3c5d</a><br>
> DIFF: <a href="https://github.com/llvm/llvm-project/commit/3b7c3a654c9175f41ac871a937cbcae73dfb3c5d.diff" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/3b7c3a654c9175f41ac871a937cbcae73dfb3c5d.diff</a><br>
><br>
> LOG: Revert "Don't use Optional::hasValue (NFC)"<br>
><br>
> This reverts commit aa8feeefd3ac6c78ee8f67bf033976fc7d68bc6d.<br>
><br>
> Added:<br>
><br>
><br>
> Modified:<br>
>     clang-tools-extra/clang-doc/HTMLGenerator.cpp<br>
>     clang-tools-extra/clang-tidy/bugprone/NotNullTerminatedResultCheck.cpp<br>
>     clang-tools-extra/clangd/ClangdLSPServer.cpp<br>
>     clang-tools-extra/clangd/ClangdServer.cpp<br>
>     clang-tools-extra/clangd/CodeComplete.cpp<br>
>     clang-tools-extra/clangd/ConfigCompile.cpp<br>
>     clang-tools-extra/clangd/FeatureModule.cpp<br>
>     clang-tools-extra/clangd/index/YAMLSerialization.cpp<br>
>     clang-tools-extra/clangd/unittests/ConfigYAMLTests.cpp<br>
>     clang-tools-extra/clangd/unittests/FSTests.cpp<br>
>     clang-tools-extra/clangd/unittests/GlobalCompilationDatabaseTests.cpp<br>
>     clang-tools-extra/clangd/unittests/HeaderSourceSwitchTests.cpp<br>
>     clang-tools-extra/clangd/unittests/LSPBinderTests.cpp<br>
>     clang-tools-extra/clangd/unittests/TidyProviderTests.cpp<br>
>     clang-tools-extra/pseudo/lib/GLR.cpp<br>
>     clang-tools-extra/unittests/clang-doc/ClangDocTest.cpp<br>
>     clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp<br>
>     clang-tools-extra/unittests/clang-tidy/NamespaceAliaserTest.cpp<br>
>     clang-tools-extra/unittests/clang-tidy/OptionsProviderTest.cpp<br>
>     clang-tools-extra/unittests/clang-tidy/UsingInserterTest.cpp<br>
>     clang/include/clang/APINotes/Types.h<br>
>     clang/include/clang/AST/PropertiesBase.td<br>
>     clang/include/clang/Analysis/PathDiagnostic.h<br>
>     clang/include/clang/Sema/Sema.h<br>
>     clang/include/clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h<br>
>     clang/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h<br>
>     clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTConstraintManager.h<br>
>     clang/include/clang/Support/RISCVVIntrinsicUtils.h<br>
>     clang/include/clang/Tooling/DependencyScanning/DependencyScanningFilesystem.h<br>
>     clang/lib/AST/AttrImpl.cpp<br>
>     clang/lib/ASTMatchers/Dynamic/Parser.cpp<br>
>     clang/lib/ASTMatchers/Dynamic/Registry.cpp<br>
>     clang/lib/Analysis/BodyFarm.cpp<br>
>     clang/lib/Analysis/FlowSensitive/ControlFlowContext.cpp<br>
>     clang/lib/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.cpp<br>
>     clang/lib/Analysis/PathDiagnostic.cpp<br>
>     clang/lib/Analysis/UninitializedValues.cpp<br>
>     clang/lib/Basic/Targets/RISCV.cpp<br>
>     clang/lib/CodeGen/CGClass.cpp<br>
>     clang/lib/CodeGen/CodeGenModule.cpp<br>
>     clang/lib/Driver/Driver.cpp<br>
>     clang/lib/Driver/ToolChains/AVR.cpp<br>
>     clang/lib/Driver/ToolChains/Clang.cpp<br>
>     clang/lib/Driver/ToolChains/Gnu.cpp<br>
>     clang/lib/Driver/ToolChains/Hexagon.cpp<br>
>     clang/lib/Edit/RewriteObjCFoundationAPI.cpp<br>
>     clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp<br>
>     clang/lib/Frontend/CompilerInstance.cpp<br>
>     clang/lib/Frontend/CompilerInvocation.cpp<br>
>     clang/lib/Frontend/InitPreprocessor.cpp<br>
>     clang/lib/Lex/DependencyDirectivesScanner.cpp<br>
>     clang/lib/Lex/MacroInfo.cpp<br>
>     clang/lib/Lex/ModuleMap.cpp<br>
>     clang/lib/Lex/PPMacroExpansion.cpp<br>
>     clang/lib/Lex/PreprocessingRecord.cpp<br>
>     clang/lib/Parse/ParseOpenMP.cpp<br>
>     clang/lib/Sema/SemaCUDA.cpp<br>
>     clang/lib/Sema/SemaChecking.cpp<br>
>     clang/lib/Sema/SemaCodeComplete.cpp<br>
>     clang/lib/Sema/SemaDecl.cpp<br>
>     clang/lib/Sema/SemaDeclAttr.cpp<br>
>     clang/lib/Sema/SemaExprCXX.cpp<br>
>     clang/lib/Sema/SemaOpenMP.cpp<br>
>     clang/lib/Sema/SemaTemplateInstantiateDecl.cpp<br>
>     clang/lib/Serialization/ASTWriter.cpp<br>
>     clang/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp<br>
>     clang/lib/StaticAnalyzer/Checkers/GTestChecker.cpp<br>
>     clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp<br>
>     clang/lib/StaticAnalyzer/Checkers/NonNullParamChecker.cpp<br>
>     clang/lib/StaticAnalyzer/Checkers/UnixAPIChecker.cpp<br>
>     clang/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp<br>
>     clang/lib/StaticAnalyzer/Core/BugReporter.cpp<br>
>     clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp<br>
>     clang/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp<br>
>     clang/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp<br>
>     clang/lib/Support/RISCVVIntrinsicUtils.cpp<br>
>     clang/lib/Tooling/Core/Replacement.cpp<br>
>     clang/tools/driver/driver.cpp<br>
>     clang/tools/libclang/CIndex.cpp<br>
>     clang/unittests/ASTMatchers/Dynamic/ParserTest.cpp<br>
>     clang/unittests/Analysis/FlowSensitive/TestingSupport.cpp<br>
>     clang/unittests/Analysis/FlowSensitive/TypeErasedDataflowAnalysisTest.cpp<br>
>     clang/unittests/Analysis/MacroExpansionContextTest.cpp<br>
>     clang/unittests/Basic/DarwinSDKInfoTest.cpp<br>
>     clang/unittests/DirectoryWatcher/DirectoryWatcherTest.cpp<br>
>     clang/unittests/Lex/HeaderSearchTest.cpp<br>
>     clang/unittests/StaticAnalyzer/SValTest.cpp<br>
>     clang/unittests/Tooling/RefactoringTest.cpp<br>
>     clang/utils/TableGen/RISCVVEmitter.cpp<br>
>     flang/include/flang/Lower/IterationSpace.h<br>
>     flang/lib/Lower/Bridge.cpp<br>
>     flang/lib/Lower/ConvertExpr.cpp<br>
>     flang/lib/Lower/CustomIntrinsicCall.cpp<br>
>     flang/lib/Lower/IterationSpace.cpp<br>
>     flang/lib/Optimizer/CodeGen/BoxedProcedure.cpp<br>
>     flang/lib/Optimizer/CodeGen/CodeGen.cpp<br>
>     flang/lib/Optimizer/CodeGen/TargetRewrite.cpp<br>
>     flang/lib/Optimizer/Dialect/FIROps.cpp<br>
>     flang/lib/Optimizer/Dialect/FIRType.cpp<br>
>     flang/lib/Optimizer/Support/InternalNames.cpp<br>
>     flang/lib/Optimizer/Transforms/AbstractResult.cpp<br>
>     flang/lib/Optimizer/Transforms/AffinePromotion.cpp<br>
>     flang/lib/Optimizer/Transforms/ExternalNameConversion.cpp<br>
>     flang/unittests/Optimizer/Builder/FIRBuilderTest.cpp<br>
>     flang/unittests/Optimizer/Builder/Runtime/RuntimeCallTestBase.h<br>
>     lld/ELF/InputFiles.cpp<br>
>     lld/MachO/SectionPriorities.cpp<br>
>     lld/wasm/InputChunks.h<br>
>     lld/wasm/InputElement.h<br>
>     lld/wasm/Writer.cpp<br>
>     lldb/include/lldb/Target/MemoryRegionInfo.h<br>
>     lldb/source/API/SBMemoryRegionInfo.cpp<br>
>     lldb/source/Breakpoint/BreakpointIDList.cpp<br>
>     lldb/source/Commands/CommandObjectFrame.cpp<br>
>     lldb/source/Commands/CommandObjectMemory.cpp<br>
>     lldb/source/Core/DataFileCache.cpp<br>
>     lldb/source/Core/DumpDataExtractor.cpp<br>
>     lldb/source/Core/ValueObjectChild.cpp<br>
>     lldb/source/Host/common/File.cpp<br>
>     lldb/source/Host/common/Terminal.cpp<br>
>     lldb/source/Plugins/ABI/X86/ABIX86.cpp<br>
>     lldb/source/Plugins/Disassembler/LLVMC/DisassemblerLLVMC.cpp<br>
>     lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp<br>
>     lldb/source/Plugins/Language/CPlusPlus/CPlusPlusNameParser.cpp<br>
>     lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp<br>
>     lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp<br>
>     lldb/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.cpp<br>
>     lldb/source/Target/Thread.cpp<br>
>     lldb/source/Target/UnixSignals.cpp<br>
>     lldb/source/Utility/SelectHelper.cpp<br>
>     lldb/unittests/Host/ConnectionFileDescriptorTest.cpp<br>
>     lldb/unittests/Process/gdb-remote/GDBRemoteCommunicationClientTest.cpp<br>
>     lldb/unittests/Process/minidump/MinidumpParserTest.cpp<br>
>     lldb/unittests/Target/FindFileTest.cpp<br>
>     lldb/unittests/Utility/StringExtractorGDBRemoteTest.cpp<br>
>     lldb/unittests/tools/lldb-server/tests/TestClient.cpp<br>
>     llvm/include/llvm/ADT/Optional.h<br>
>     llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h<br>
>     llvm/include/llvm/Analysis/VectorUtils.h<br>
>     llvm/include/llvm/Bitstream/BitstreamWriter.h<br>
>     llvm/include/llvm/CodeGen/GlobalISel/InstructionSelectorImpl.h<br>
>     llvm/include/llvm/DebugInfo/GSYM/FunctionInfo.h<br>
>     llvm/include/llvm/IR/IRBuilder.h<br>
>     llvm/include/llvm/MC/MCDwarf.h<br>
>     llvm/include/llvm/MC/MCSectionXCOFF.h<br>
>     llvm/include/llvm/MC/MCSymbolWasm.h<br>
>     llvm/include/llvm/MC/MCSymbolXCOFF.h<br>
>     llvm/include/llvm/ObjectYAML/ELFYAML.h<br>
>     llvm/include/llvm/Support/Casting.h<br>
>     llvm/include/llvm/Support/Error.h<br>
>     llvm/include/llvm/Support/YAMLTraits.h<br>
>     llvm/include/llvm/Transforms/IPO/Attributor.h<br>
>     llvm/lib/Analysis/BranchProbabilityInfo.cpp<br>
>     llvm/lib/Analysis/CFLAndersAliasAnalysis.cpp<br>
>     llvm/lib/Analysis/CFLSteensAliasAnalysis.cpp<br>
>     llvm/lib/Analysis/IRSimilarityIdentifier.cpp<br>
>     llvm/lib/Analysis/InlineCost.cpp<br>
>     llvm/lib/Analysis/InstructionSimplify.cpp<br>
>     llvm/lib/Analysis/LazyValueInfo.cpp<br>
>     llvm/lib/Analysis/LoopCacheAnalysis.cpp<br>
>     llvm/lib/Analysis/MemoryBuiltins.cpp<br>
>     llvm/lib/Analysis/MemorySSA.cpp<br>
>     llvm/lib/Analysis/MustExecute.cpp<br>
>     llvm/lib/Analysis/ProfileSummaryInfo.cpp<br>
>     llvm/lib/Analysis/ScalarEvolution.cpp<br>
>     llvm/lib/Analysis/StratifiedSets.h<br>
>     llvm/lib/Analysis/VectorUtils.cpp<br>
>     llvm/lib/CodeGen/BasicBlockSections.cpp<br>
>     llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp<br>
>     llvm/lib/CodeGen/MIRParser/MIParser.cpp<br>
>     llvm/lib/CodeGen/MachineBasicBlock.cpp<br>
>     llvm/lib/CodeGen/MachineFunctionSplitter.cpp<br>
>     llvm/lib/CodeGen/ModuloSchedule.cpp<br>
>     llvm/lib/CodeGen/SelectOptimize.cpp<br>
>     llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp<br>
>     llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp<br>
>     llvm/lib/CodeGen/SelectionDAG/StatepointLowering.cpp<br>
>     llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp<br>
>     llvm/lib/DebugInfo/CodeView/CodeViewRecordIO.cpp<br>
>     llvm/lib/DebugInfo/CodeView/TypeRecordMapping.cpp<br>
>     llvm/lib/DebugInfo/DWARF/DWARFContext.cpp<br>
>     llvm/lib/DebugInfo/DWARF/DWARFDebugLine.cpp<br>
>     llvm/lib/DebugInfo/PDB/Native/DbiStreamBuilder.cpp<br>
>     llvm/lib/Frontend/OpenMP/OMPContext.cpp<br>
>     llvm/lib/IR/Instructions.cpp<br>
>     llvm/lib/IR/IntrinsicInst.cpp<br>
>     llvm/lib/IR/LLVMContextImpl.cpp<br>
>     llvm/lib/IR/VectorBuilder.cpp<br>
>     llvm/lib/IR/Verifier.cpp<br>
>     llvm/lib/InterfaceStub/IFSHandler.cpp<br>
>     llvm/lib/MC/MCContext.cpp<br>
>     llvm/lib/MC/MCDisassembler/MCDisassembler.cpp<br>
>     llvm/lib/MC/MCParser/MasmParser.cpp<br>
>     llvm/lib/MC/MCSchedule.cpp<br>
>     llvm/lib/MC/MCSectionXCOFF.cpp<br>
>     llvm/lib/ObjCopy/ELF/ELFObjcopy.cpp<br>
>     llvm/lib/Object/ELFObjectFile.cpp<br>
>     llvm/lib/ObjectYAML/DXContainerEmitter.cpp<br>
>     llvm/lib/Support/Process.cpp<br>
>     llvm/lib/Support/VirtualFileSystem.cpp<br>
>     llvm/lib/Support/raw_ostream.cpp<br>
>     llvm/lib/TableGen/Record.cpp<br>
>     llvm/lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp<br>
>     llvm/lib/Target/AMDGPU/AMDGPUMachineModuleInfo.h<br>
>     llvm/lib/Target/AMDGPU/SIMemoryLegalizer.cpp<br>
>     llvm/lib/Target/ARM/MVEGatherScatterLowering.cpp<br>
>     llvm/lib/Target/Hexagon/HexagonFrameLowering.cpp<br>
>     llvm/lib/Target/Lanai/AsmParser/LanaiAsmParser.cpp<br>
>     llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp<br>
>     llvm/lib/Target/PowerPC/PPCMacroFusion.cpp<br>
>     llvm/lib/Target/PowerPC/PPCTargetMachine.cpp<br>
>     llvm/lib/Target/VE/VVPISelLowering.cpp<br>
>     llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmTypeCheck.cpp<br>
>     llvm/lib/Target/WebAssembly/WebAssemblyLowerEmscriptenEHSjLj.cpp<br>
>     llvm/lib/Transforms/IPO/Attributor.cpp<br>
>     llvm/lib/Transforms/IPO/AttributorAttributes.cpp<br>
>     llvm/lib/Transforms/IPO/IROutliner.cpp<br>
>     llvm/lib/Transforms/IPO/OpenMPOpt.cpp<br>
>     llvm/lib/Transforms/IPO/SampleContextTracker.cpp<br>
>     llvm/lib/Transforms/IPO/SampleProfile.cpp<br>
>     llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp<br>
>     llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp<br>
>     llvm/lib/Transforms/Instrumentation/ThreadSanitizer.cpp<br>
>     llvm/lib/Transforms/Scalar/ConstantHoisting.cpp<br>
>     llvm/lib/Transforms/Scalar/GVN.cpp<br>
>     llvm/lib/Transforms/Scalar/InductiveRangeCheckElimination.cpp<br>
>     llvm/lib/Transforms/Scalar/LoopDistribute.cpp<br>
>     llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp<br>
>     llvm/lib/Transforms/Scalar/LoopRotation.cpp<br>
>     llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp<br>
>     llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp<br>
>     llvm/lib/Transforms/Scalar/LoopUnrollAndJamPass.cpp<br>
>     llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp<br>
>     llvm/lib/Transforms/Scalar/LowerConstantIntrinsics.cpp<br>
>     llvm/lib/Transforms/Utils/CodeExtractor.cpp<br>
>     llvm/lib/Transforms/Utils/LoopPeel.cpp<br>
>     llvm/lib/Transforms/Utils/LoopUnrollRuntime.cpp<br>
>     llvm/lib/Transforms/Utils/LoopUtils.cpp<br>
>     llvm/lib/Transforms/Utils/MisExpect.cpp<br>
>     llvm/lib/Transforms/Utils/ModuleUtils.cpp<br>
>     llvm/lib/Transforms/Vectorize/LoopVectorize.cpp<br>
>     llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp<br>
>     llvm/lib/WindowsDriver/MSVCPaths.cpp<br>
>     llvm/tools/lli/lli.cpp<br>
>     llvm/tools/llvm-cov/CoverageExporterJson.cpp<br>
>     llvm/tools/llvm-cov/SourceCoverageViewHTML.cpp<br>
>     llvm/tools/llvm-exegesis/lib/MCInstrDescView.cpp<br>
>     llvm/tools/llvm-ifs/llvm-ifs.cpp<br>
>     llvm/tools/llvm-mca/Views/InstructionInfoView.cpp<br>
>     llvm/tools/llvm-objdump/XCOFFDump.cpp<br>
>     llvm/tools/llvm-objdump/llvm-objdump.cpp<br>
>     llvm/tools/llvm-profdata/llvm-profdata.cpp<br>
>     llvm/tools/llvm-profgen/ProfiledBinary.cpp<br>
>     llvm/tools/llvm-sim/llvm-sim.cpp<br>
>     llvm/tools/obj2yaml/dwarf2yaml.cpp<br>
>     llvm/tools/obj2yaml/dxcontainer2yaml.cpp<br>
>     llvm/unittests/ADT/OptionalTest.cpp<br>
>     llvm/unittests/ADT/StatisticTest.cpp<br>
>     llvm/unittests/Analysis/BlockFrequencyInfoTest.cpp<br>
>     llvm/unittests/Analysis/IRSimilarityIdentifierTest.cpp<br>
>     llvm/unittests/Analysis/MemorySSATest.cpp<br>
>     llvm/unittests/Analysis/VectorFunctionABITest.cpp<br>
>     llvm/unittests/BinaryFormat/DwarfTest.cpp<br>
>     llvm/unittests/CodeGen/GlobalISel/ConstantFoldingTest.cpp<br>
>     llvm/unittests/DebugInfo/DWARF/DWARFDebugFrameTest.cpp<br>
>     llvm/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp<br>
>     llvm/unittests/DebugInfo/DWARF/DWARFFormValueTest.cpp<br>
>     llvm/unittests/DebugInfo/GSYM/GSYMTest.cpp<br>
>     llvm/unittests/FileCheck/FileCheckTest.cpp<br>
>     llvm/unittests/IR/MetadataTest.cpp<br>
>     llvm/unittests/IR/VPIntrinsicTest.cpp<br>
>     llvm/unittests/InterfaceStub/ELFYAMLTest.cpp<br>
>     llvm/unittests/Object/XCOFFObjectFileTest.cpp<br>
>     llvm/unittests/ObjectYAML/DWARFYAMLTest.cpp<br>
>     llvm/unittests/ProfileData/MemProfTest.cpp<br>
>     llvm/unittests/Support/AlignmentTest.cpp<br>
>     llvm/unittests/Support/Casting.cpp<br>
>     llvm/unittests/Support/KnownBitsTest.cpp<br>
>     llvm/unittests/Support/YAMLParserTest.cpp<br>
>     llvm/unittests/TableGen/ParserEntryPointTest.cpp<br>
>     llvm/utils/TableGen/GlobalISel/GIMatchTree.h<br>
>     llvm/utils/TableGen/GlobalISelEmitter.cpp<br>
>     mlir/include/mlir/Dialect/Affine/Analysis/AffineStructures.h<br>
>     mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td<br>
>     mlir/include/mlir/Dialect/LLVMIR/NVVMOps.td<br>
>     mlir/include/mlir/Dialect/Transform/IR/TransformInterfaces.h<br>
>     mlir/include/mlir/IR/OpDefinition.h<br>
>     mlir/include/mlir/IR/OpImplementation.h<br>
>     mlir/include/mlir/Support/LogicalResult.h<br>
>     mlir/include/mlir/TableGen/Operator.h<br>
>     mlir/include/mlir/Transforms/DialectConversion.h<br>
>     mlir/lib/Analysis/Presburger/IntegerRelation.cpp<br>
>     mlir/lib/Conversion/SPIRVToLLVM/SPIRVToLLVM.cpp<br>
>     mlir/lib/Conversion/TosaToLinalg/TosaToLinalg.cpp<br>
>     mlir/lib/Conversion/TosaToLinalg/TosaToLinalgNamed.cpp<br>
>     mlir/lib/Conversion/VectorToSCF/VectorToSCF.cpp<br>
>     mlir/lib/Dialect/Affine/Analysis/AffineStructures.cpp<br>
>     mlir/lib/Dialect/Affine/Analysis/LoopAnalysis.cpp<br>
>     mlir/lib/Dialect/Affine/Analysis/Utils.cpp<br>
>     mlir/lib/Dialect/Affine/IR/AffineOps.cpp<br>
>     mlir/lib/Dialect/Affine/Transforms/AffineDataCopyGeneration.cpp<br>
>     mlir/lib/Dialect/Affine/Transforms/LoopFusion.cpp<br>
>     mlir/lib/Dialect/Affine/Utils/LoopUtils.cpp<br>
>     mlir/lib/Dialect/Affine/Utils/Utils.cpp<br>
>     mlir/lib/Dialect/Arithmetic/Transforms/UnsignedWhenEquivalent.cpp<br>
>     mlir/lib/Dialect/Bufferization/IR/BufferizationOps.cpp<br>
>     mlir/lib/Dialect/Bufferization/Transforms/BufferUtils.cpp<br>
>     mlir/lib/Dialect/Bufferization/Transforms/FuncBufferizableOpInterfaceImpl.cpp<br>
>     mlir/lib/Dialect/DLTI/DLTI.cpp<br>
>     mlir/lib/Dialect/EmitC/IR/EmitC.cpp<br>
>     mlir/lib/Dialect/GPU/Transforms/SerializeToBlob.cpp<br>
>     mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp<br>
>     mlir/lib/Dialect/LLVMIR/IR/LLVMTypeSyntax.cpp<br>
>     mlir/lib/Dialect/LLVMIR/IR/NVVMDialect.cpp<br>
>     mlir/lib/Dialect/Linalg/Transforms/Fusion.cpp<br>
>     mlir/lib/Dialect/Linalg/Transforms/Promotion.cpp<br>
>     mlir/lib/Dialect/Linalg/Transforms/Transforms.cpp<br>
>     mlir/lib/Dialect/MemRef/IR/MemRefOps.cpp<br>
>     mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp<br>
>     mlir/lib/Dialect/PDL/IR/PDLTypes.cpp<br>
>     mlir/lib/Dialect/Quant/IR/TypeParser.cpp<br>
>     mlir/lib/Dialect/SCF/IR/SCF.cpp<br>
>     mlir/lib/Dialect/SCF/Transforms/TileUsingInterface.cpp<br>
>     mlir/lib/Dialect/SCF/Utils/AffineCanonicalizationUtils.cpp<br>
>     mlir/lib/Dialect/SPIRV/IR/SPIRVAttributes.cpp<br>
>     mlir/lib/Dialect/SPIRV/IR/SPIRVCanonicalization.cpp<br>
>     mlir/lib/Dialect/SPIRV/IR/SPIRVDialect.cpp<br>
>     mlir/lib/Dialect/SPIRV/IR/SPIRVOps.cpp<br>
>     mlir/lib/Dialect/SPIRV/Transforms/LowerABIAttributesPass.cpp<br>
>     mlir/lib/Dialect/Shape/IR/Shape.cpp<br>
>     mlir/lib/Dialect/SparseTensor/Transforms/Sparsification.cpp<br>
>     mlir/lib/Dialect/SparseTensor/Utils/Merger.cpp<br>
>     mlir/lib/Dialect/Tensor/Transforms/SwapExtractSliceWithProducer.cpp<br>
>     mlir/lib/Dialect/Tosa/Transforms/TosaDecomposeTransposeConv.cpp<br>
>     mlir/lib/Dialect/Transform/IR/TransformOps.cpp<br>
>     mlir/lib/Dialect/Utils/ReshapeOpsUtils.cpp<br>
>     mlir/lib/Dialect/Vector/IR/VectorOps.cpp<br>
>     mlir/lib/Dialect/Vector/Transforms/VectorTransferPermutationMapRewritePatterns.cpp<br>
>     mlir/lib/Dialect/Vector/Transforms/VectorTransforms.cpp<br>
>     mlir/lib/IR/FunctionImplementation.cpp<br>
>     mlir/lib/Interfaces/ControlFlowInterfaces.cpp<br>
>     mlir/lib/Interfaces/ViewLikeInterface.cpp<br>
>     mlir/lib/Parser/AffineParser.cpp<br>
>     mlir/lib/Parser/AttributeParser.cpp<br>
>     mlir/lib/Parser/LocationParser.cpp<br>
>     mlir/lib/Parser/Parser.cpp<br>
>     mlir/lib/Parser/TypeParser.cpp<br>
>     mlir/lib/Target/LLVMIR/ConvertFromLLVMIR.cpp<br>
>     mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp<br>
>     mlir/lib/Target/LLVMIR/ModuleTranslation.cpp<br>
>     mlir/lib/Target/SPIRV/Deserialization/Deserializer.cpp<br>
>     mlir/test/lib/Analysis/TestMemRefDependenceCheck.cpp<br>
>     mlir/test/lib/Dialect/Test/TestDialect.cpp<br>
>     mlir/test/lib/Dialect/Test/TestTypeDefs.td<br>
>     mlir/test/lib/Dialect/Test/TestTypes.cpp<br>
>     mlir/test/lib/Dialect/Test/TestTypes.h<br>
>     mlir/test/lib/Dialect/Transform/TestTransformDialectExtension.cpp<br>
>     mlir/test/lib/Transforms/TestIntRangeInference.cpp<br>
>     mlir/test/mlir-tblgen/<a href="http://default-type-attr-print-parser.td" rel="noreferrer" target="_blank">default-type-attr-print-parser.td</a><br>
>     mlir/tools/mlir-linalg-ods-gen/mlir-linalg-ods-yaml-gen.cpp<br>
>     mlir/tools/mlir-tblgen/AttrOrTypeDefGen.cpp<br>
>     mlir/tools/mlir-tblgen/OpFormatGen.cpp<br>
>     mlir/unittests/Analysis/Presburger/IntegerPolyhedronTest.cpp<br>
>     mlir/unittests/Analysis/Presburger/PWMAFunctionTest.cpp<br>
>     mlir/unittests/Analysis/Presburger/PresburgerSetTest.cpp<br>
>     mlir/unittests/Analysis/Presburger/SimplexTest.cpp<br>
>     mlir/unittests/IR/OperationSupportTest.cpp<br>
>     mlir/unittests/Interfaces/ControlFlowInterfacesTest.cpp<br>
>     mlir/unittests/Pass/AnalysisManagerTest.cpp<br>
>     polly/lib/Exchange/JSONExporter.cpp<br>
>     polly/lib/Transform/ManualOptimizer.cpp<br>
>     polly/lib/Transform/MatmulOptimizer.cpp<br>
><br>
> Removed:<br>
><br>
><br>
><br>
> ################################################################################<br>
> diff  --git a/clang-tools-extra/clang-doc/HTMLGenerator.cpp b/clang-tools-extra/clang-doc/HTMLGenerator.cpp<br>
> index 12c07ac1c1334..3e5a5331b7906 100644<br>
> --- a/clang-tools-extra/clang-doc/HTMLGenerator.cpp<br>
> +++ b/clang-tools-extra/clang-doc/HTMLGenerator.cpp<br>
> @@ -653,10 +653,10 @@ genHTML(const EnumInfo &I, const ClangDocContext &CDCtx) {<br>
><br>
>    if (I.DefLoc) {<br>
>      if (!CDCtx.RepositoryUrl)<br>
> -      Out.emplace_back(writeFileDefinition(*I.DefLoc));<br>
> +      Out.emplace_back(writeFileDefinition(I.DefLoc.getValue()));<br>
>      else<br>
> -      Out.emplace_back(<br>
> -          writeFileDefinition(*I.DefLoc, StringRef{*CDCtx.RepositoryUrl}));<br>
> +      Out.emplace_back(writeFileDefinition(<br>
> +          I.DefLoc.getValue(), StringRef{CDCtx.RepositoryUrl.getValue()}));<br>
>    }<br>
><br>
>    std::string Description;<br>
> @@ -702,10 +702,10 @@ genHTML(const FunctionInfo &I, const ClangDocContext &CDCtx,<br>
><br>
>    if (I.DefLoc) {<br>
>      if (!CDCtx.RepositoryUrl)<br>
> -      Out.emplace_back(writeFileDefinition(*I.DefLoc));<br>
> +      Out.emplace_back(writeFileDefinition(I.DefLoc.getValue()));<br>
>      else<br>
> -      Out.emplace_back(<br>
> -          writeFileDefinition(*I.DefLoc, StringRef{*CDCtx.RepositoryUrl}));<br>
> +      Out.emplace_back(writeFileDefinition(<br>
> +          I.DefLoc.getValue(), StringRef{CDCtx.RepositoryUrl.getValue()}));<br>
>    }<br>
><br>
>    std::string Description;<br>
> @@ -768,10 +768,10 @@ genHTML(const RecordInfo &I, Index &InfoIndex, const ClangDocContext &CDCtx,<br>
><br>
>    if (I.DefLoc) {<br>
>      if (!CDCtx.RepositoryUrl)<br>
> -      Out.emplace_back(writeFileDefinition(*I.DefLoc));<br>
> +      Out.emplace_back(writeFileDefinition(I.DefLoc.getValue()));<br>
>      else<br>
> -      Out.emplace_back(<br>
> -          writeFileDefinition(*I.DefLoc, StringRef{*CDCtx.RepositoryUrl}));<br>
> +      Out.emplace_back(writeFileDefinition(<br>
> +          I.DefLoc.getValue(), StringRef{CDCtx.RepositoryUrl.getValue()}));<br>
>    }<br>
><br>
>    std::string Description;<br>
><br>
> diff  --git a/clang-tools-extra/clang-tidy/bugprone/NotNullTerminatedResultCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/NotNullTerminatedResultCheck.cpp<br>
> index 418b749720686..1efd88d7cbb95 100644<br>
> --- a/clang-tools-extra/clang-tidy/bugprone/NotNullTerminatedResultCheck.cpp<br>
> +++ b/clang-tools-extra/clang-tidy/bugprone/NotNullTerminatedResultCheck.cpp<br>
> @@ -817,8 +817,8 @@ void NotNullTerminatedResultCheck::check(<br>
>        ++It;<br>
>      }<br>
><br>
> -    if (AreSafeFunctionsWanted)<br>
> -      UseSafeFunctions = *AreSafeFunctionsWanted;<br>
> +    if (AreSafeFunctionsWanted.hasValue())<br>
> +      UseSafeFunctions = AreSafeFunctionsWanted.getValue();<br>
>    }<br>
><br>
>    StringRef Name = FunctionExpr->getDirectCallee()->getName();<br>
><br>
> diff  --git a/clang-tools-extra/clangd/ClangdLSPServer.cpp b/clang-tools-extra/clangd/ClangdLSPServer.cpp<br>
> index 4a26b5ae804d4..3bade14f86b91 100644<br>
> --- a/clang-tools-extra/clangd/ClangdLSPServer.cpp<br>
> +++ b/clang-tools-extra/clangd/ClangdLSPServer.cpp<br>
> @@ -663,9 +663,9 @@ void ClangdLSPServer::onDocumentDidOpen(<br>
>  void ClangdLSPServer::onDocumentDidChange(<br>
>      const DidChangeTextDocumentParams &Params) {<br>
>    auto WantDiags = WantDiagnostics::Auto;<br>
> -  if (Params.wantDiagnostics)<br>
> -    WantDiags =<br>
> -        *Params.wantDiagnostics ? WantDiagnostics::Yes : WantDiagnostics::No;<br>
> +  if (Params.wantDiagnostics.hasValue())<br>
> +    WantDiags = Params.wantDiagnostics.getValue() ? WantDiagnostics::Yes<br>
> +                                                  : WantDiagnostics::No;<br>
><br>
>    PathRef File = Params.textDocument.uri.file();<br>
>    auto Code = Server->getDraft(File);<br>
><br>
> diff  --git a/clang-tools-extra/clangd/ClangdServer.cpp b/clang-tools-extra/clangd/ClangdServer.cpp<br>
> index 1fe63c1f0b25f..fa6c70b4acbc4 100644<br>
> --- a/clang-tools-extra/clangd/ClangdServer.cpp<br>
> +++ b/clang-tools-extra/clangd/ClangdServer.cpp<br>
> @@ -411,9 +411,10 @@ void ClangdServer::codeComplete(PathRef File, Position Pos,<br>
>        clang::clangd::trace::Span Tracer("Completion results callback");<br>
>        CB(std::move(Result));<br>
>      }<br>
> -    if (SpecFuzzyFind && SpecFuzzyFind->NewReq) {<br>
> +    if (SpecFuzzyFind && SpecFuzzyFind->NewReq.hasValue()) {<br>
>        std::lock_guard<std::mutex> Lock(CachedCompletionFuzzyFindRequestMutex);<br>
> -      CachedCompletionFuzzyFindRequestByFile[File] = *SpecFuzzyFind->NewReq;<br>
> +      CachedCompletionFuzzyFindRequestByFile[File] =<br>
> +          SpecFuzzyFind->NewReq.getValue();<br>
>      }<br>
>      // SpecFuzzyFind is only destroyed after speculative fuzzy find finishes.<br>
>      // We don't want `codeComplete` to wait for the async call if it doesn't use<br>
><br>
> diff  --git a/clang-tools-extra/clangd/CodeComplete.cpp b/clang-tools-extra/clangd/CodeComplete.cpp<br>
> index d17a14bfaf2e7..fbd7488c07d21 100644<br>
> --- a/clang-tools-extra/clangd/CodeComplete.cpp<br>
> +++ b/clang-tools-extra/clangd/CodeComplete.cpp<br>
> @@ -391,9 +391,11 @@ struct CodeCompletionBuilder {<br>
>              ToInclude.takeError());<br>
>      }<br>
>      // Prefer includes that do not need edits (i.e. already exist).<br>
> -    std::stable_partition(<br>
> -        Completion.Includes.begin(), Completion.Includes.end(),<br>
> -        [](const CodeCompletion::IncludeCandidate &I) { return !I.Insertion; });<br>
> +    std::stable_partition(Completion.Includes.begin(),<br>
> +                          Completion.Includes.end(),<br>
> +                          [](const CodeCompletion::IncludeCandidate &I) {<br>
> +                            return !I.Insertion.hasValue();<br>
> +                          });<br>
>    }<br>
><br>
>    void add(const CompletionCandidate &C, CodeCompletionString *SemaCCS) {<br>
><br>
> diff  --git a/clang-tools-extra/clangd/ConfigCompile.cpp b/clang-tools-extra/clangd/ConfigCompile.cpp<br>
> index 8f207aba29bf4..2de8816f9f084 100644<br>
> --- a/clang-tools-extra/clangd/ConfigCompile.cpp<br>
> +++ b/clang-tools-extra/clangd/ConfigCompile.cpp<br>
> @@ -358,8 +358,8 @@ struct FragmentCompiler {<br>
>      }<br>
>  #endif<br>
>      // Make sure exactly one of the Sources is set.<br>
> -    unsigned SourceCount = External.File.has_value() +<br>
> -                           External.Server.has_value() + *External.IsNone;<br>
> +    unsigned SourceCount = External.File.hasValue() +<br>
> +                           External.Server.hasValue() + *External.IsNone;<br>
>      if (SourceCount != 1) {<br>
>        diag(Error, "Exactly one of File, Server or None must be set.",<br>
>             BlockRange);<br>
><br>
> diff  --git a/clang-tools-extra/clangd/FeatureModule.cpp b/clang-tools-extra/clangd/FeatureModule.cpp<br>
> index 872cea1443789..85977aadd6e32 100644<br>
> --- a/clang-tools-extra/clangd/FeatureModule.cpp<br>
> +++ b/clang-tools-extra/clangd/FeatureModule.cpp<br>
> @@ -13,12 +13,12 @@ namespace clang {<br>
>  namespace clangd {<br>
><br>
>  void FeatureModule::initialize(const Facilities &F) {<br>
> -  assert(!Fac && "Initialized twice");<br>
> +  assert(!Fac.hasValue() && "Initialized twice");<br>
>    Fac.emplace(F);<br>
>  }<br>
><br>
>  FeatureModule::Facilities &FeatureModule::facilities() {<br>
> -  assert(Fac && "Not initialized yet");<br>
> +  assert(Fac.hasValue() && "Not initialized yet");<br>
>    return *Fac;<br>
>  }<br>
><br>
><br>
> diff  --git a/clang-tools-extra/clangd/index/YAMLSerialization.cpp b/clang-tools-extra/clangd/index/YAMLSerialization.cpp<br>
> index 1ac74338298a8..79c9e1dfd9918 100644<br>
> --- a/clang-tools-extra/clangd/index/YAMLSerialization.cpp<br>
> +++ b/clang-tools-extra/clangd/index/YAMLSerialization.cpp<br>
> @@ -354,23 +354,23 @@ template <> struct MappingTraits<CompileCommandYAML> {<br>
><br>
>  template <> struct MappingTraits<VariantEntry> {<br>
>    static void mapping(IO &IO, VariantEntry &Variant) {<br>
> -    if (IO.mapTag("!Symbol", Variant.Symbol.has_value())) {<br>
> +    if (IO.mapTag("!Symbol", Variant.Symbol.hasValue())) {<br>
>        if (!IO.outputting())<br>
>          Variant.Symbol.emplace();<br>
>        MappingTraits<Symbol>::mapping(IO, *Variant.Symbol);<br>
> -    } else if (IO.mapTag("!Refs", Variant.Refs.has_value())) {<br>
> +    } else if (IO.mapTag("!Refs", Variant.Refs.hasValue())) {<br>
>        if (!IO.outputting())<br>
>          Variant.Refs.emplace();<br>
>        MappingTraits<RefBundle>::mapping(IO, *Variant.Refs);<br>
> -    } else if (IO.mapTag("!Relations", Variant.Relation.has_value())) {<br>
> +    } else if (IO.mapTag("!Relations", Variant.Relation.hasValue())) {<br>
>        if (!IO.outputting())<br>
>          Variant.Relation.emplace();<br>
>        MappingTraits<Relation>::mapping(IO, *Variant.Relation);<br>
> -    } else if (IO.mapTag("!Source", Variant.Source.has_value())) {<br>
> +    } else if (IO.mapTag("!Source", Variant.Source.hasValue())) {<br>
>        if (!IO.outputting())<br>
>          Variant.Source.emplace();<br>
>        MappingTraits<IncludeGraphNode>::mapping(IO, *Variant.Source);<br>
> -    } else if (IO.mapTag("!Cmd", Variant.Cmd.has_value())) {<br>
> +    } else if (IO.mapTag("!Cmd", Variant.Cmd.hasValue())) {<br>
>        if (!IO.outputting())<br>
>          Variant.Cmd.emplace();<br>
>        MappingTraits<CompileCommandYAML>::mapping(<br>
><br>
> diff  --git a/clang-tools-extra/clangd/unittests/ConfigYAMLTests.cpp b/clang-tools-extra/clangd/unittests/ConfigYAMLTests.cpp<br>
> index 6af1e3bb74111..ddf6f4f5fb1f6 100644<br>
> --- a/clang-tools-extra/clangd/unittests/ConfigYAMLTests.cpp<br>
> +++ b/clang-tools-extra/clangd/unittests/ConfigYAMLTests.cpp<br>
> @@ -82,12 +82,12 @@ CompileFlags: { Add: [foo, bar] }<br>
>    EXPECT_THAT(Results[1].CompileFlags.Add, ElementsAre(val("b\naz\n")));<br>
><br>
>    ASSERT_TRUE(Results[2].Index.Background);<br>
> -  EXPECT_EQ("Skip", *Results[2].Index.Background.value());<br>
> +  EXPECT_EQ("Skip", *Results[2].Index.Background.getValue());<br>
>    EXPECT_THAT(Results[3].Diagnostics.ClangTidy.CheckOptions,<br>
>                ElementsAre(PairVal("IgnoreMacros", "true"),<br>
>                            PairVal("example-check.ExampleOption", "0")));<br>
>    EXPECT_TRUE(Results[3].Diagnostics.UnusedIncludes);<br>
> -  EXPECT_EQ("Strict", *Results[3].Diagnostics.UnusedIncludes.value());<br>
> +  EXPECT_EQ("Strict", *Results[3].Diagnostics.UnusedIncludes.getValue());<br>
>  }<br>
><br>
>  TEST(ParseYAML, Locations) {<br>
> @@ -163,10 +163,10 @@ TEST(ParseYAML, ExternalBlockNone) {<br>
>    ASSERT_THAT(Diags.Diagnostics, IsEmpty());<br>
>    ASSERT_EQ(Results.size(), 1u);<br>
>    ASSERT_TRUE(Results[0].Index.External);<br>
> -  EXPECT_FALSE(Results[0].Index.External.value()->File.has_value());<br>
> -  EXPECT_FALSE(Results[0].Index.External.value()->MountPoint.has_value());<br>
> -  EXPECT_FALSE(Results[0].Index.External.value()->Server.has_value());<br>
> -  EXPECT_THAT(*Results[0].Index.External.value()->IsNone, testing::Eq(true));<br>
> +  EXPECT_FALSE(Results[0].Index.External.getValue()->File.hasValue());<br>
> +  EXPECT_FALSE(Results[0].Index.External.getValue()->MountPoint.hasValue());<br>
> +  EXPECT_FALSE(Results[0].Index.External.getValue()->Server.hasValue());<br>
> +  EXPECT_THAT(*Results[0].Index.External.getValue()->IsNone, testing::Eq(true));<br>
>  }<br>
><br>
>  TEST(ParseYAML, ExternalBlock) {<br>
> @@ -182,10 +182,10 @@ TEST(ParseYAML, ExternalBlock) {<br>
>        Fragment::parseYAML(YAML.code(), "config.yaml", Diags.callback());<br>
>    ASSERT_EQ(Results.size(), 1u);<br>
>    ASSERT_TRUE(Results[0].Index.External);<br>
> -  EXPECT_THAT(*Results[0].Index.External.value()->File, val("foo"));<br>
> -  EXPECT_THAT(*Results[0].Index.External.value()->MountPoint, val("baz"));<br>
> +  EXPECT_THAT(*Results[0].Index.External.getValue()->File, val("foo"));<br>
> +  EXPECT_THAT(*Results[0].Index.External.getValue()->MountPoint, val("baz"));<br>
>    ASSERT_THAT(Diags.Diagnostics, IsEmpty());<br>
> -  EXPECT_THAT(*Results[0].Index.External.value()->Server, val("bar"));<br>
> +  EXPECT_THAT(*Results[0].Index.External.getValue()->Server, val("bar"));<br>
>  }<br>
><br>
>  TEST(ParseYAML, AllScopes) {<br>
><br>
> diff  --git a/clang-tools-extra/clangd/unittests/FSTests.cpp b/clang-tools-extra/clangd/unittests/FSTests.cpp<br>
> index 81129fec98c2d..575111e841dc5 100644<br>
> --- a/clang-tools-extra/clangd/unittests/FSTests.cpp<br>
> +++ b/clang-tools-extra/clangd/unittests/FSTests.cpp<br>
> @@ -28,10 +28,10 @@ TEST(FSTests, PreambleStatusCache) {<br>
>    EXPECT_TRUE(ProduceFS->status("y"));<br>
>    EXPECT_TRUE(ProduceFS->status("main"));<br>
><br>
> -  EXPECT_TRUE(StatCache.lookup(testPath("x")).has_value());<br>
> -  EXPECT_TRUE(StatCache.lookup(testPath("y")).has_value());<br>
> +  EXPECT_TRUE(StatCache.lookup(testPath("x")).hasValue());<br>
> +  EXPECT_TRUE(StatCache.lookup(testPath("y")).hasValue());<br>
>    // Main file is not cached.<br>
> -  EXPECT_FALSE(StatCache.lookup(testPath("main")).has_value());<br>
> +  EXPECT_FALSE(StatCache.lookup(testPath("main")).hasValue());<br>
><br>
>    llvm::vfs::Status S("fake", llvm::sys::fs::UniqueID(123, 456),<br>
>                        std::chrono::system_clock::now(), 0, 0, 1024,<br>
><br>
> diff  --git a/clang-tools-extra/clangd/unittests/GlobalCompilationDatabaseTests.cpp b/clang-tools-extra/clangd/unittests/GlobalCompilationDatabaseTests.cpp<br>
> index 3959c3eabc45c..fbf07aad4cd1f 100644<br>
> --- a/clang-tools-extra/clangd/unittests/GlobalCompilationDatabaseTests.cpp<br>
> +++ b/clang-tools-extra/clangd/unittests/GlobalCompilationDatabaseTests.cpp<br>
> @@ -331,14 +331,14 @@ TEST(GlobalCompilationDatabaseTest, CompileFlagsDirectory) {<br>
>    FS.Files[testPath("x/compile_flags.txt")] = "-DFOO";<br>
>    DirectoryBasedGlobalCompilationDatabase CDB(FS);<br>
>    auto Commands = CDB.getCompileCommand(testPath("x/y.cpp"));<br>
> -  ASSERT_TRUE(Commands.has_value());<br>
> -  EXPECT_THAT(Commands->CommandLine, Contains("-DFOO"));<br>
> +  ASSERT_TRUE(Commands.hasValue());<br>
> +  EXPECT_THAT(Commands.getValue().CommandLine, Contains("-DFOO"));<br>
>    // Make sure we pick the right working directory.<br>
> -  EXPECT_EQ(testPath("x"), Commands->Directory);<br>
> +  EXPECT_EQ(testPath("x"), Commands.getValue().Directory);<br>
>  }<br>
><br>
>  MATCHER_P(hasArg, Flag, "") {<br>
> -  if (!arg) {<br>
> +  if (!arg.hasValue()) {<br>
>      *result_listener << "command is null";<br>
>      return false;<br>
>    }<br>
><br>
> diff  --git a/clang-tools-extra/clangd/unittests/HeaderSourceSwitchTests.cpp b/clang-tools-extra/clangd/unittests/HeaderSourceSwitchTests.cpp<br>
> index 5b9467f5c52f6..b2d7a7ee77240 100644<br>
> --- a/clang-tools-extra/clangd/unittests/HeaderSourceSwitchTests.cpp<br>
> +++ b/clang-tools-extra/clangd/unittests/HeaderSourceSwitchTests.cpp<br>
> @@ -33,12 +33,12 @@ TEST(HeaderSourceSwitchTest, FileHeuristic) {<br>
>    FS.Files[Invalid];<br>
>    Optional<Path> PathResult =<br>
>        getCorrespondingHeaderOrSource(FooCpp, FS.view(llvm::None));<br>
> -  EXPECT_TRUE(PathResult.has_value());<br>
> -  ASSERT_EQ(*PathResult, FooH);<br>
> +  EXPECT_TRUE(PathResult.hasValue());<br>
> +  ASSERT_EQ(PathResult.getValue(), FooH);<br>
><br>
>    PathResult = getCorrespondingHeaderOrSource(FooH, FS.view(llvm::None));<br>
> -  EXPECT_TRUE(PathResult.has_value());<br>
> -  ASSERT_EQ(*PathResult, FooCpp);<br>
> +  EXPECT_TRUE(PathResult.hasValue());<br>
> +  ASSERT_EQ(PathResult.getValue(), FooCpp);<br>
><br>
>    // Test with header file in capital letters and<br>
> diff erent extension, source<br>
>    // file with<br>
> diff erent extension<br>
> @@ -48,8 +48,8 @@ TEST(HeaderSourceSwitchTest, FileHeuristic) {<br>
>    FS.Files[FooC];<br>
>    FS.Files[FooHH];<br>
>    PathResult = getCorrespondingHeaderOrSource(FooC, FS.view(llvm::None));<br>
> -  EXPECT_TRUE(PathResult.has_value());<br>
> -  ASSERT_EQ(*PathResult, FooHH);<br>
> +  EXPECT_TRUE(PathResult.hasValue());<br>
> +  ASSERT_EQ(PathResult.getValue(), FooHH);<br>
><br>
>    // Test with both capital letters<br>
>    auto Foo2C = testPath("foo2.C");<br>
> @@ -57,8 +57,8 @@ TEST(HeaderSourceSwitchTest, FileHeuristic) {<br>
>    FS.Files[Foo2C];<br>
>    FS.Files[Foo2HH];<br>
>    PathResult = getCorrespondingHeaderOrSource(Foo2C, FS.view(llvm::None));<br>
> -  EXPECT_TRUE(PathResult.has_value());<br>
> -  ASSERT_EQ(*PathResult, Foo2HH);<br>
> +  EXPECT_TRUE(PathResult.hasValue());<br>
> +  ASSERT_EQ(PathResult.getValue(), Foo2HH);<br>
><br>
>    // Test with source file as capital letter and .hxx header file<br>
>    auto Foo3C = testPath("foo3.C");<br>
> @@ -67,13 +67,13 @@ TEST(HeaderSourceSwitchTest, FileHeuristic) {<br>
>    FS.Files[Foo3C];<br>
>    FS.Files[Foo3HXX];<br>
>    PathResult = getCorrespondingHeaderOrSource(Foo3C, FS.view(llvm::None));<br>
> -  EXPECT_TRUE(PathResult.has_value());<br>
> -  ASSERT_EQ(*PathResult, Foo3HXX);<br>
> +  EXPECT_TRUE(PathResult.hasValue());<br>
> +  ASSERT_EQ(PathResult.getValue(), Foo3HXX);<br>
><br>
>    // Test if asking for a corresponding file that doesn't exist returns an empty<br>
>    // string.<br>
>    PathResult = getCorrespondingHeaderOrSource(Invalid, FS.view(llvm::None));<br>
> -  EXPECT_FALSE(PathResult.has_value());<br>
> +  EXPECT_FALSE(PathResult.hasValue());<br>
>  }<br>
><br>
>  MATCHER_P(declNamed, Name, "") {<br>
><br>
> diff  --git a/clang-tools-extra/clangd/unittests/LSPBinderTests.cpp b/clang-tools-extra/clangd/unittests/LSPBinderTests.cpp<br>
> index 97a4316928a8c..8b9363ba08655 100644<br>
> --- a/clang-tools-extra/clangd/unittests/LSPBinderTests.cpp<br>
> +++ b/clang-tools-extra/clangd/unittests/LSPBinderTests.cpp<br>
> @@ -93,18 +93,19 @@ TEST(LSPBinderTest, IncomingCalls) {<br>
><br>
>    auto &RawPlusOne = RawHandlers.MethodHandlers["plusOne"];<br>
>    RawPlusOne(1, capture(Reply));<br>
> -  ASSERT_TRUE(Reply.has_value());<br>
> -  EXPECT_THAT_EXPECTED(*Reply, llvm::HasValue(2));<br>
> +  ASSERT_TRUE(Reply.hasValue());<br>
> +  EXPECT_THAT_EXPECTED(Reply.getValue(), llvm::HasValue(2));<br>
>    RawPlusOne("foo", capture(Reply));<br>
> -  ASSERT_TRUE(Reply.has_value());<br>
> +  ASSERT_TRUE(Reply.hasValue());<br>
>    EXPECT_THAT_EXPECTED(<br>
> -      *Reply, llvm::FailedWithMessage(HasSubstr(<br>
> -                  "failed to decode plusOne request: expected integer")));<br>
> +      Reply.getValue(),<br>
> +      llvm::FailedWithMessage(<br>
> +          HasSubstr("failed to decode plusOne request: expected integer")));<br>
><br>
>    auto &RawFail = RawHandlers.MethodHandlers["fail"];<br>
>    RawFail(2, capture(Reply));<br>
> -  ASSERT_TRUE(Reply.has_value());<br>
> -  EXPECT_THAT_EXPECTED(*Reply, llvm::FailedWithMessage("X=2"));<br>
> +  ASSERT_TRUE(Reply.hasValue());<br>
> +  EXPECT_THAT_EXPECTED(Reply.getValue(), llvm::FailedWithMessage("X=2"));<br>
><br>
>    auto &RawNotify = RawHandlers.NotificationHandlers["notify"];<br>
>    RawNotify(42);<br>
> @@ -116,8 +117,8 @@ TEST(LSPBinderTest, IncomingCalls) {<br>
><br>
>    auto &RawCmdPlusOne = RawHandlers.CommandHandlers["cmdPlusOne"];<br>
>    RawCmdPlusOne(1, capture(Reply));<br>
> -  ASSERT_TRUE(Reply.has_value());<br>
> -  EXPECT_THAT_EXPECTED(*Reply, llvm::HasValue(2));<br>
> +  ASSERT_TRUE(Reply.hasValue());<br>
> +  EXPECT_THAT_EXPECTED(Reply.getValue(), llvm::HasValue(2));<br>
><br>
>    // None of this generated any outgoing traffic.<br>
>    EXPECT_THAT(RawOutgoing.Received, IsEmpty());<br>
> @@ -138,23 +139,23 @@ TEST(LSPBinderTest, OutgoingCalls) {<br>
>    llvm::Optional<llvm::Expected<Foo>> Reply;<br>
>    Echo(Foo{2}, capture(Reply));<br>
>    EXPECT_THAT(RawOutgoing.take("echo"), ElementsAre(llvm::json::Value(2)));<br>
> -  ASSERT_TRUE(Reply.has_value());<br>
> -  EXPECT_THAT_EXPECTED(*Reply, llvm::HasValue(Foo{2}));<br>
> +  ASSERT_TRUE(Reply.hasValue());<br>
> +  EXPECT_THAT_EXPECTED(Reply.getValue(), llvm::HasValue(Foo{2}));<br>
><br>
>    // JSON response is integer, can't be parsed as string.<br>
>    llvm::Optional<llvm::Expected<std::string>> WrongTypeReply;<br>
>    WrongSignature(Foo{2}, capture(WrongTypeReply));<br>
>    EXPECT_THAT(RawOutgoing.take("wrongSignature"),<br>
>                ElementsAre(llvm::json::Value(2)));<br>
> -  ASSERT_TRUE(Reply.has_value());<br>
> -  EXPECT_THAT_EXPECTED(*WrongTypeReply,<br>
> +  ASSERT_TRUE(Reply.hasValue());<br>
> +  EXPECT_THAT_EXPECTED(WrongTypeReply.getValue(),<br>
>                         llvm::FailedWithMessage(<br>
>                             HasSubstr("failed to decode wrongSignature reply")));<br>
><br>
>    Fail(Foo{2}, capture(Reply));<br>
>    EXPECT_THAT(RawOutgoing.take("fail"), ElementsAre(llvm::json::Value(2)));<br>
> -  ASSERT_TRUE(Reply.has_value());<br>
> -  EXPECT_THAT_EXPECTED(*Reply, llvm::FailedWithMessage("Params=2"));<br>
> +  ASSERT_TRUE(Reply.hasValue());<br>
> +  EXPECT_THAT_EXPECTED(Reply.getValue(), llvm::FailedWithMessage("Params=2"));<br>
>  }<br>
><br>
>  } // namespace<br>
><br>
> diff  --git a/clang-tools-extra/clangd/unittests/TidyProviderTests.cpp b/clang-tools-extra/clangd/unittests/TidyProviderTests.cpp<br>
> index ece7f52d04d45..df3dcac0aa51a 100644<br>
> --- a/clang-tools-extra/clangd/unittests/TidyProviderTests.cpp<br>
> +++ b/clang-tools-extra/clangd/unittests/TidyProviderTests.cpp<br>
> @@ -37,18 +37,18 @@ TEST(TidyProvider, NestedDirectories) {<br>
>    TidyProvider Provider = provideClangTidyFiles(FS);<br>
><br>
>    auto BaseOptions = getTidyOptionsForFile(Provider, testPath("File.cpp"));<br>
> -  ASSERT_TRUE(BaseOptions.Checks.has_value());<br>
> +  ASSERT_TRUE(BaseOptions.Checks.hasValue());<br>
>    EXPECT_EQ(*BaseOptions.Checks, "llvm-*");<br>
>    EXPECT_EQ(BaseOptions.CheckOptions.lookup("TestKey").Value, "1");<br>
><br>
>    auto Sub1Options = getTidyOptionsForFile(Provider, testPath("sub1/File.cpp"));<br>
> -  ASSERT_TRUE(Sub1Options.Checks.has_value());<br>
> +  ASSERT_TRUE(Sub1Options.Checks.hasValue());<br>
>    EXPECT_EQ(*Sub1Options.Checks, "misc-*");<br>
>    EXPECT_EQ(Sub1Options.CheckOptions.lookup("TestKey").Value, "2");<br>
><br>
>    auto Sub2Options =<br>
>        getTidyOptionsForFile(Provider, testPath("sub1/sub2/File.cpp"));<br>
> -  ASSERT_TRUE(Sub2Options.Checks.has_value());<br>
> +  ASSERT_TRUE(Sub2Options.Checks.hasValue());<br>
>    EXPECT_EQ(*Sub2Options.Checks, "misc-*,bugprone-*");<br>
>    EXPECT_EQ(Sub2Options.CheckOptions.lookup("TestKey").Value, "3");<br>
>  }<br>
><br>
> diff  --git a/clang-tools-extra/pseudo/lib/GLR.cpp b/clang-tools-extra/pseudo/lib/GLR.cpp<br>
> index d93f682afac6c..1cee8f86e599d 100644<br>
> --- a/clang-tools-extra/pseudo/lib/GLR.cpp<br>
> +++ b/clang-tools-extra/pseudo/lib/GLR.cpp<br>
> @@ -375,11 +375,11 @@ class GLRReduce {<br>
>      for (auto &A : Params.Table.getActions(Head->State, Lookahead)) {<br>
>        if (A.kind() != LRTable::Action::Reduce)<br>
>          continue;<br>
> -      if (RID)<br>
> +      if (RID.hasValue())<br>
>          return false;<br>
>        RID = A.getReduceRule();<br>
>      }<br>
> -    if (!RID)<br>
> +    if (!RID.hasValue())<br>
>        return true; // no reductions available, but we've processed the head!<br>
>      const auto &Rule = Params.G.lookupRule(*RID);<br>
>      const GSS::Node *Base = Head;<br>
><br>
> diff  --git a/clang-tools-extra/unittests/clang-doc/ClangDocTest.cpp b/clang-tools-extra/unittests/clang-doc/ClangDocTest.cpp<br>
> index ea1ef734593cd..970ffcebd717b 100644<br>
> --- a/clang-tools-extra/unittests/clang-doc/ClangDocTest.cpp<br>
> +++ b/clang-tools-extra/unittests/clang-doc/ClangDocTest.cpp<br>
> @@ -95,8 +95,8 @@ void CheckBaseInfo(Info *Expected, Info *Actual) {<br>
><br>
>  void CheckSymbolInfo(SymbolInfo *Expected, SymbolInfo *Actual) {<br>
>    CheckBaseInfo(Expected, Actual);<br>
> -  EXPECT_EQ(Expected->DefLoc.has_value(), Actual->DefLoc.has_value());<br>
> -  if (Expected->DefLoc && Actual->DefLoc) {<br>
> +  EXPECT_EQ(Expected->DefLoc.hasValue(), Actual->DefLoc.hasValue());<br>
> +  if (Expected->DefLoc.hasValue() && Actual->DefLoc.hasValue()) {<br>
>      EXPECT_EQ(Expected->DefLoc->LineNumber, Actual->DefLoc->LineNumber);<br>
>      EXPECT_EQ(Expected->DefLoc->Filename, Actual->DefLoc->Filename);<br>
>    }<br>
><br>
> diff  --git a/clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp b/clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp<br>
> index 5dcec035c476a..3558b5f346a23 100644<br>
> --- a/clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp<br>
> +++ b/clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp<br>
> @@ -129,14 +129,14 @@ TEST(ParseConfiguration, MergeConfigurations) {<br>
>    EXPECT_EQ("check1,check2,check3,check4", *Options.Checks);<br>
>    EXPECT_EQ("filter2", *Options.HeaderFilterRegex);<br>
>    EXPECT_EQ("user2", *Options.User);<br>
> -  ASSERT_TRUE(Options.ExtraArgs.has_value());<br>
> +  ASSERT_TRUE(Options.ExtraArgs.hasValue());<br>
>    EXPECT_EQ("arg1,arg2,arg3,arg4", llvm::join(Options.ExtraArgs->begin(),<br>
>                                                Options.ExtraArgs->end(), ","));<br>
> -  ASSERT_TRUE(Options.ExtraArgsBefore.has_value());<br>
> +  ASSERT_TRUE(Options.ExtraArgsBefore.hasValue());<br>
>    EXPECT_EQ("arg-before1,arg-before2,arg-before3,arg-before4",<br>
>              llvm::join(Options.ExtraArgsBefore->begin(),<br>
>                         Options.ExtraArgsBefore->end(), ","));<br>
> -  ASSERT_TRUE(Options.UseColor.has_value());<br>
> +  ASSERT_TRUE(Options.UseColor.hasValue());<br>
>    EXPECT_TRUE(*Options.UseColor);<br>
>  }<br>
><br>
> @@ -325,9 +325,9 @@ TEST(CheckOptionsValidation, ValidIntOptions) {<br>
><br>
>    CHECK_VAL(TestCheck.getIntLocal("IntExpected"), 1);<br>
>    CHECK_VAL(TestCheck.getIntGlobal("GlobalIntExpected"), 1);<br>
> -  EXPECT_FALSE(TestCheck.getIntLocal("IntInvalid1").has_value());<br>
> -  EXPECT_FALSE(TestCheck.getIntLocal("IntInvalid2").has_value());<br>
> -  EXPECT_FALSE(TestCheck.getIntGlobal("GlobalIntInvalid").has_value());<br>
> +  EXPECT_FALSE(TestCheck.getIntLocal("IntInvalid1").hasValue());<br>
> +  EXPECT_FALSE(TestCheck.getIntLocal("IntInvalid2").hasValue());<br>
> +  EXPECT_FALSE(TestCheck.getIntGlobal("GlobalIntInvalid").hasValue());<br>
>    ASSERT_EQ(TestCheck.getIntLocal("DefaultedIntInvalid", 1), 1);<br>
><br>
>    CHECK_VAL(TestCheck.getIntLocal<bool>("BoolITrueValue"), true);<br>
> @@ -395,14 +395,14 @@ TEST(ValidConfiguration, ValidEnumOptions) {<br>
>                                              /*IgnoreCase*/ true),<br>
>              Colours::Violet);<br>
><br>
> -  EXPECT_FALSE(TestCheck.getIntLocal<Colours>("ValidWrongCase").has_value());<br>
> -  EXPECT_FALSE(TestCheck.getIntLocal<Colours>("NearMiss").has_value());<br>
> -  EXPECT_FALSE(TestCheck.getIntGlobal<Colours>("GlobalInvalid").has_value());<br>
> +  EXPECT_FALSE(TestCheck.getIntLocal<Colours>("ValidWrongCase").hasValue());<br>
> +  EXPECT_FALSE(TestCheck.getIntLocal<Colours>("NearMiss").hasValue());<br>
> +  EXPECT_FALSE(TestCheck.getIntGlobal<Colours>("GlobalInvalid").hasValue());<br>
>    EXPECT_FALSE(<br>
> -      TestCheck.getIntGlobal<Colours>("GlobalValidWrongCase").has_value());<br>
> -  EXPECT_FALSE(TestCheck.getIntGlobal<Colours>("GlobalNearMiss").has_value());<br>
> +      TestCheck.getIntGlobal<Colours>("GlobalValidWrongCase").hasValue());<br>
> +  EXPECT_FALSE(TestCheck.getIntGlobal<Colours>("GlobalNearMiss").hasValue());<br>
><br>
> -  EXPECT_FALSE(TestCheck.getIntLocal<Colours>("Invalid").has_value());<br>
> +  EXPECT_FALSE(TestCheck.getIntLocal<Colours>("Invalid").hasValue());<br>
>    EXPECT_THAT(<br>
>        DiagConsumer.take(),<br>
>        UnorderedElementsAre(<br>
><br>
> diff  --git a/clang-tools-extra/unittests/clang-tidy/NamespaceAliaserTest.cpp b/clang-tools-extra/unittests/clang-tidy/NamespaceAliaserTest.cpp<br>
> index c7ebd5e9339ef..e4cd74ede7e4a 100644<br>
> --- a/clang-tools-extra/unittests/clang-tidy/NamespaceAliaserTest.cpp<br>
> +++ b/clang-tools-extra/unittests/clang-tidy/NamespaceAliaserTest.cpp<br>
> @@ -34,8 +34,8 @@ class InsertAliasCheck : public ClangTidyCheck {<br>
>      assert(Call != nullptr && "Did not find node \"foo\"");<br>
>      auto Hint = Aliaser->createAlias(*Result.Context, *Call, "::foo::bar",<br>
>                                       {"b", "some_alias"});<br>
> -    if (Hint)<br>
> -      diag(Call->getBeginLoc(), "Fix for testing") << *Hint;<br>
> +    if (Hint.hasValue())<br>
> +      diag(Call->getBeginLoc(), "Fix for testing") << Hint.getValue();<br>
><br>
>      diag(Call->getBeginLoc(), "insert call") << FixItHint::CreateInsertion(<br>
>          Call->getBeginLoc(),<br>
><br>
> diff  --git a/clang-tools-extra/unittests/clang-tidy/OptionsProviderTest.cpp b/clang-tools-extra/unittests/clang-tidy/OptionsProviderTest.cpp<br>
> index 5aa3730ac5ccf..b99d0781e3f7d 100644<br>
> --- a/clang-tools-extra/unittests/clang-tidy/OptionsProviderTest.cpp<br>
> +++ b/clang-tools-extra/unittests/clang-tidy/OptionsProviderTest.cpp<br>
> @@ -53,9 +53,9 @@ TEST(ClangTidyOptionsProvider, InMemoryFileSystems) {<br>
>    ClangTidyOptions File3Options =<br>
>        FileOpt.getOptions("ProjectRoot/SubDir1/SubDir2/SubDir3/File.cpp");<br>
><br>
> -  ASSERT_TRUE(File1Options.Checks.has_value());<br>
> +  ASSERT_TRUE(File1Options.Checks.hasValue());<br>
>    EXPECT_EQ(*File1Options.Checks, "-*,clang-diagnostic-*,readability-*");<br>
> -  ASSERT_TRUE(File2Options.Checks.has_value());<br>
> +  ASSERT_TRUE(File2Options.Checks.hasValue());<br>
>    EXPECT_EQ(*File2Options.Checks, "bugprone-*,misc-*,clang-diagnostic-*");<br>
><br>
>    // 2 and 3 should use the same config so these should also be the same.<br>
><br>
> diff  --git a/clang-tools-extra/unittests/clang-tidy/UsingInserterTest.cpp b/clang-tools-extra/unittests/clang-tidy/UsingInserterTest.cpp<br>
> index 43350cbff4e85..71c71596d0d90 100644<br>
> --- a/clang-tools-extra/unittests/clang-tidy/UsingInserterTest.cpp<br>
> +++ b/clang-tools-extra/unittests/clang-tidy/UsingInserterTest.cpp<br>
> @@ -37,8 +37,8 @@ class InsertUsingCheck : public clang::tidy::ClangTidyCheck {<br>
>      auto Hint =<br>
>          Inserter->createUsingDeclaration(*Result.Context, *Call, "::foo::func");<br>
><br>
> -    if (Hint)<br>
> -      diag(Call->getBeginLoc(), "Fix for testing") << *Hint;<br>
> +    if (Hint.hasValue())<br>
> +      diag(Call->getBeginLoc(), "Fix for testing") << Hint.getValue();<br>
><br>
>      diag(Call->getBeginLoc(), "insert call")<br>
>          << clang::FixItHint::CreateReplacement(<br>
><br>
> diff  --git a/clang/include/clang/APINotes/Types.h b/clang/include/clang/APINotes/Types.h<br>
> index d98b3d979ccac..ed5250f3d5b4e 100644<br>
> --- a/clang/include/clang/APINotes/Types.h<br>
> +++ b/clang/include/clang/APINotes/Types.h<br>
> @@ -76,8 +76,8 @@ class CommonEntityInfo {<br>
>    }<br>
><br>
>    void setSwiftPrivate(llvm::Optional<bool> Private) {<br>
> -    SwiftPrivateSpecified = Private.has_value();<br>
> -    SwiftPrivate = Private.value_or(0);<br>
> +    SwiftPrivateSpecified = Private.hasValue();<br>
> +    SwiftPrivate = Private.hasValue() ? *Private : 0;<br>
>    }<br>
><br>
>    friend bool operator==(const CommonEntityInfo &, const CommonEntityInfo &);<br>
><br>
> diff  --git a/clang/include/clang/AST/PropertiesBase.td b/clang/include/clang/AST/PropertiesBase.td<br>
> index 0f7acf6006ddc..559f29edcf0fe 100644<br>
> --- a/clang/include/clang/AST/PropertiesBase.td<br>
> +++ b/clang/include/clang/AST/PropertiesBase.td<br>
> @@ -520,15 +520,15 @@ let Class = PropertyTypeCase<APValue, "LValue"> in {<br>
>      if (hasBase) {<br>
>        if (isTypeInfo) {<br>
>          base = APValue::LValueBase::getTypeInfo(<br>
> -            TypeInfoLValue(typeInfo->getTypePtr()), *type);<br>
> +            TypeInfoLValue(typeInfo.getValue().getTypePtr()), type.getValue());<br>
>          elemTy = base.getTypeInfoType();<br>
>        } else if (isExpr) {<br>
> -        base = APValue::LValueBase(cast<Expr>(*stmt),<br>
> -                                   *callIndex, *version);<br>
> +        base = APValue::LValueBase(cast<Expr>(stmt.getValue()),<br>
> +                                   callIndex.getValue(), version.getValue());<br>
>          elemTy = base.get<const Expr *>()->getType();<br>
>        } else {<br>
> -        base = APValue::LValueBase(cast<ValueDecl>(*decl),<br>
> -                                   *callIndex, *version);<br>
> +        base = APValue::LValueBase(cast<ValueDecl>(decl.getValue()),<br>
> +                                   callIndex.getValue(), version.getValue());<br>
>          elemTy = base.get<const ValueDecl *>()->getType();<br>
>        }<br>
>      }<br>
><br>
> diff  --git a/clang/include/clang/Analysis/PathDiagnostic.h b/clang/include/clang/Analysis/PathDiagnostic.h<br>
> index 9877f1e3d01fd..47cb549c8e669 100644<br>
> --- a/clang/include/clang/Analysis/PathDiagnostic.h<br>
> +++ b/clang/include/clang/Analysis/PathDiagnostic.h<br>
> @@ -544,8 +544,8 @@ class PathDiagnosticEventPiece : public PathDiagnosticSpotPiece {<br>
>    /// flag may have been previously set, at which point it will not<br>
>    /// be reset unless one specifies to do so.<br>
>    void setPrunable(bool isPrunable, bool override = false) {<br>
> -    if (IsPrunable && !override)<br>
> -      return;<br>
> +    if (IsPrunable.hasValue() && !override)<br>
> +     return;<br>
>      IsPrunable = isPrunable;<br>
>    }<br>
><br>
><br>
> diff  --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h<br>
> index 8b8b1b2e2e864..ba4d0bb8f4354 100644<br>
> --- a/clang/include/clang/Sema/Sema.h<br>
> +++ b/clang/include/clang/Sema/Sema.h<br>
> @@ -1766,9 +1766,9 @@ class Sema final {<br>
>      template <typename T><br>
>      friend const SemaDiagnosticBuilder &<br>
>      operator<<(const SemaDiagnosticBuilder &Diag, const T &Value) {<br>
> -      if (Diag.ImmediateDiag)<br>
> +      if (Diag.ImmediateDiag.hasValue())<br>
>          *Diag.ImmediateDiag << Value;<br>
> -      else if (Diag.PartialDiagId)<br>
> +      else if (Diag.PartialDiagId.hasValue())<br>
>          Diag.S.DeviceDeferredDiags[Diag.Fn][*Diag.PartialDiagId].second<br>
>              << Value;<br>
>        return Diag;<br>
> @@ -1780,26 +1780,26 @@ class Sema final {<br>
>      template <typename T, typename = typename std::enable_if<<br>
>                                !std::is_lvalue_reference<T>::value>::type><br>
>      const SemaDiagnosticBuilder &operator<<(T &&V) const {<br>
> -      if (ImmediateDiag)<br>
> +      if (ImmediateDiag.hasValue())<br>
>          *ImmediateDiag << std::move(V);<br>
> -      else if (PartialDiagId)<br>
> +      else if (PartialDiagId.hasValue())<br>
>          S.DeviceDeferredDiags[Fn][*PartialDiagId].second << std::move(V);<br>
>        return *this;<br>
>      }<br>
><br>
>      friend const SemaDiagnosticBuilder &<br>
>      operator<<(const SemaDiagnosticBuilder &Diag, const PartialDiagnostic &PD) {<br>
> -      if (Diag.ImmediateDiag)<br>
> +      if (Diag.ImmediateDiag.hasValue())<br>
>          PD.Emit(*Diag.ImmediateDiag);<br>
> -      else if (Diag.PartialDiagId)<br>
> +      else if (Diag.PartialDiagId.hasValue())<br>
>          Diag.S.DeviceDeferredDiags[Diag.Fn][*Diag.PartialDiagId].second = PD;<br>
>        return Diag;<br>
>      }<br>
><br>
>      void AddFixItHint(const FixItHint &Hint) const {<br>
> -      if (ImmediateDiag)<br>
> +      if (ImmediateDiag.hasValue())<br>
>          ImmediateDiag->AddFixItHint(Hint);<br>
> -      else if (PartialDiagId)<br>
> +      else if (PartialDiagId.hasValue())<br>
>          S.DeviceDeferredDiags[Fn][*PartialDiagId].second.AddFixItHint(Hint);<br>
>      }<br>
><br>
><br>
> diff  --git a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h<br>
> index 59fe535e820bb..a01b32669ce3f 100644<br>
> --- a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h<br>
> +++ b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h<br>
> @@ -414,8 +414,7 @@ class CallEvent {<br>
>    bool isArgumentConstructedDirectly(unsigned Index) const {<br>
>      // This assumes that the object was not yet removed from the state.<br>
>      return ExprEngine::getObjectUnderConstruction(<br>
> -               getState(), {getOriginExpr(), Index}, getLocationContext())<br>
> -        .has_value();<br>
> +        getState(), {getOriginExpr(), Index}, getLocationContext()).hasValue();<br>
>    }<br>
><br>
>    /// Some calls have parameter numbering mismatched from argument numbering.<br>
> @@ -1017,8 +1016,9 @@ class CXXAllocatorCall : public AnyFunctionCall {<br>
>    }<br>
><br>
>    SVal getObjectUnderConstruction() const {<br>
> -    return *ExprEngine::getObjectUnderConstruction(getState(), getOriginExpr(),<br>
> -                                                   getLocationContext());<br>
> +    return ExprEngine::getObjectUnderConstruction(getState(), getOriginExpr(),<br>
> +                                                  getLocationContext())<br>
> +        .getValue();<br>
>    }<br>
><br>
>    /// Number of non-placement arguments to the call. It is equal to 2 for<br>
><br>
> diff  --git a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h<br>
> index 92a37c6a9e608..11c60b6895627 100644<br>
> --- a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h<br>
> +++ b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h<br>
> @@ -53,17 +53,25 @@ class ConditionTruthVal {<br>
>    }<br>
><br>
>    /// Return true if the constraint is perfectly constrained to 'true'.<br>
> -  bool isConstrainedTrue() const { return Val && *Val; }<br>
> +  bool isConstrainedTrue() const {<br>
> +    return Val.hasValue() && Val.getValue();<br>
> +  }<br>
><br>
>    /// Return true if the constraint is perfectly constrained to 'false'.<br>
> -  bool isConstrainedFalse() const { return Val && !*Val; }<br>
> +  bool isConstrainedFalse() const {<br>
> +    return Val.hasValue() && !Val.getValue();<br>
> +  }<br>
><br>
>    /// Return true if the constrained is perfectly constrained.<br>
> -  bool isConstrained() const { return Val.has_value(); }<br>
> +  bool isConstrained() const {<br>
> +    return Val.hasValue();<br>
> +  }<br>
><br>
>    /// Return true if the constrained is underconstrained and we do not know<br>
>    /// if the constraint is true of value.<br>
> -  bool isUnderconstrained() const { return !Val.has_value(); }<br>
> +  bool isUnderconstrained() const {<br>
> +    return !Val.hasValue();<br>
> +  }<br>
>  };<br>
><br>
>  class ConstraintManager {<br>
><br>
> diff  --git a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTConstraintManager.h b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTConstraintManager.h<br>
> index 6c8ed07efbb29..250ba4f528968 100644<br>
> --- a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTConstraintManager.h<br>
> +++ b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTConstraintManager.h<br>
> @@ -341,10 +341,10 @@ class SMTConstraintManager : public clang::ento::SimpleConstraintManager {<br>
>      addStateConstraints(NewState);<br>
><br>
>      Optional<bool> res = Solver->check();<br>
> -    if (!res)<br>
> +    if (!res.hasValue())<br>
>        Cached[hash] = ConditionTruthVal();<br>
>      else<br>
> -      Cached[hash] = ConditionTruthVal(*res);<br>
> +      Cached[hash] = ConditionTruthVal(res.getValue());<br>
><br>
>      return Cached[hash];<br>
>    }<br>
><br>
> diff  --git a/clang/include/clang/Support/RISCVVIntrinsicUtils.h b/clang/include/clang/Support/RISCVVIntrinsicUtils.h<br>
> index 8d34cafb1d8a8..0e9fe97ab735e 100644<br>
> --- a/clang/include/clang/Support/RISCVVIntrinsicUtils.h<br>
> +++ b/clang/include/clang/Support/RISCVVIntrinsicUtils.h<br>
> @@ -209,8 +209,8 @@ class RVVType {<br>
>    }<br>
><br>
>    bool isValid() const { return Valid; }<br>
> -  bool isScalar() const { return Scale && *Scale == 0; }<br>
> -  bool isVector() const { return Scale && *Scale != 0; }<br>
> +  bool isScalar() const { return Scale.hasValue() && Scale.getValue() == 0; }<br>
> +  bool isVector() const { return Scale.hasValue() && Scale.getValue() != 0; }<br>
>    bool isVector(unsigned Width) const {<br>
>      return isVector() && ElementBitwidth == Width;<br>
>    }<br>
><br>
> diff  --git a/clang/include/clang/Tooling/DependencyScanning/DependencyScanningFilesystem.h b/clang/include/clang/Tooling/DependencyScanning/DependencyScanningFilesystem.h<br>
> index b3882c227eaff..e0d16df92e1a4 100644<br>
> --- a/clang/include/clang/Tooling/DependencyScanning/DependencyScanningFilesystem.h<br>
> +++ b/clang/include/clang/Tooling/DependencyScanning/DependencyScanningFilesystem.h<br>
> @@ -94,9 +94,9 @@ class CachedFileSystemEntry {<br>
>      assert(!isDirectory() && "not a file");<br>
>      assert(Contents && "contents not initialized");<br>
>      if (auto *Directives = Contents->DepDirectives.load()) {<br>
> -      if (Directives->has_value())<br>
> +      if (Directives->hasValue())<br>
>          return ArrayRef<dependency_directives_scan::Directive>(<br>
> -            Directives->value());<br>
> +            Directives->getValue());<br>
>      }<br>
>      return None;<br>
>    }<br>
><br>
> diff  --git a/clang/lib/AST/AttrImpl.cpp b/clang/lib/AST/AttrImpl.cpp<br>
> index deb28bee5ed8c..7b8acfcd92bea 100644<br>
> --- a/clang/lib/AST/AttrImpl.cpp<br>
> +++ b/clang/lib/AST/AttrImpl.cpp<br>
> @@ -168,24 +168,24 @@ OMPDeclareTargetDeclAttr::getActiveAttr(const ValueDecl *VD) {<br>
>  llvm::Optional<OMPDeclareTargetDeclAttr::MapTypeTy><br>
>  OMPDeclareTargetDeclAttr::isDeclareTargetDeclaration(const ValueDecl *VD) {<br>
>    llvm::Optional<OMPDeclareTargetDeclAttr *> ActiveAttr = getActiveAttr(VD);<br>
> -  if (ActiveAttr)<br>
> -    return ActiveAttr.value()->getMapType();<br>
> +  if (ActiveAttr.hasValue())<br>
> +    return ActiveAttr.getValue()->getMapType();<br>
>    return llvm::None;<br>
>  }<br>
><br>
>  llvm::Optional<OMPDeclareTargetDeclAttr::DevTypeTy><br>
>  OMPDeclareTargetDeclAttr::getDeviceType(const ValueDecl *VD) {<br>
>    llvm::Optional<OMPDeclareTargetDeclAttr *> ActiveAttr = getActiveAttr(VD);<br>
> -  if (ActiveAttr)<br>
> -    return ActiveAttr.value()->getDevType();<br>
> +  if (ActiveAttr.hasValue())<br>
> +    return ActiveAttr.getValue()->getDevType();<br>
>    return llvm::None;<br>
>  }<br>
><br>
>  llvm::Optional<SourceLocation><br>
>  OMPDeclareTargetDeclAttr::getLocation(const ValueDecl *VD) {<br>
>    llvm::Optional<OMPDeclareTargetDeclAttr *> ActiveAttr = getActiveAttr(VD);<br>
> -  if (ActiveAttr)<br>
> -    return ActiveAttr.value()->getRange().getBegin();<br>
> +  if (ActiveAttr.hasValue())<br>
> +    return ActiveAttr.getValue()->getRange().getBegin();<br>
>    return llvm::None;<br>
>  }<br>
><br>
><br>
> diff  --git a/clang/lib/ASTMatchers/Dynamic/Parser.cpp b/clang/lib/ASTMatchers/Dynamic/Parser.cpp<br>
> index 6470df27e6e23..ec14f7abfdccf 100644<br>
> --- a/clang/lib/ASTMatchers/Dynamic/Parser.cpp<br>
> +++ b/clang/lib/ASTMatchers/Dynamic/Parser.cpp<br>
> @@ -397,9 +397,9 @@ bool Parser::parseIdentifierPrefixImpl(VariantValue *Value) {<br>
>        assert(NamedValue.isMatcher());<br>
>        llvm::Optional<DynTypedMatcher> Result =<br>
>            NamedValue.getMatcher().getSingleMatcher();<br>
> -      if (Result) {<br>
> +      if (Result.hasValue()) {<br>
>          llvm::Optional<DynTypedMatcher> Bound = Result->tryBind(BindID);<br>
> -        if (Bound) {<br>
> +        if (Bound.hasValue()) {<br>
>            *Value = VariantMatcher::SingleMatcher(*Bound);<br>
>            return true;<br>
>          }<br>
><br>
> diff  --git a/clang/lib/ASTMatchers/Dynamic/Registry.cpp b/clang/lib/ASTMatchers/Dynamic/Registry.cpp<br>
> index 42193e65496dc..72629d0aa91e5 100644<br>
> --- a/clang/lib/ASTMatchers/Dynamic/Registry.cpp<br>
> +++ b/clang/lib/ASTMatchers/Dynamic/Registry.cpp<br>
> @@ -797,9 +797,9 @@ VariantMatcher Registry::constructBoundMatcher(MatcherCtor Ctor,<br>
>    if (Out.isNull()) return Out;<br>
><br>
>    llvm::Optional<DynTypedMatcher> Result = Out.getSingleMatcher();<br>
> -  if (Result) {<br>
> +  if (Result.hasValue()) {<br>
>      llvm::Optional<DynTypedMatcher> Bound = Result->tryBind(BindID);<br>
> -    if (Bound) {<br>
> +    if (Bound.hasValue()) {<br>
>        return VariantMatcher::SingleMatcher(*Bound);<br>
>      }<br>
>    }<br>
><br>
> diff  --git a/clang/lib/Analysis/BodyFarm.cpp b/clang/lib/Analysis/BodyFarm.cpp<br>
> index f182506a958a4..3587cf4678af8 100644<br>
> --- a/clang/lib/Analysis/BodyFarm.cpp<br>
> +++ b/clang/lib/Analysis/BodyFarm.cpp<br>
> @@ -697,8 +697,8 @@ static Stmt *create_OSAtomicCompareAndSwap(ASTContext &C, const FunctionDecl *D)<br>
><br>
>  Stmt *BodyFarm::getBody(const FunctionDecl *D) {<br>
>    Optional<Stmt *> &Val = Bodies[D];<br>
> -  if (Val)<br>
> -    return *Val;<br>
> +  if (Val.hasValue())<br>
> +    return Val.getValue();<br>
><br>
>    Val = nullptr;<br>
><br>
> @@ -872,8 +872,8 @@ Stmt *BodyFarm::getBody(const ObjCMethodDecl *D) {<br>
>      return nullptr;<br>
><br>
>    Optional<Stmt *> &Val = Bodies[D];<br>
> -  if (Val)<br>
> -    return *Val;<br>
> +  if (Val.hasValue())<br>
> +    return Val.getValue();<br>
>    Val = nullptr;<br>
><br>
>    // For now, we only synthesize getters.<br>
><br>
> diff  --git a/clang/lib/Analysis/FlowSensitive/ControlFlowContext.cpp b/clang/lib/Analysis/FlowSensitive/ControlFlowContext.cpp<br>
> index 3a362d49d21ab..c0b8119038f2d 100644<br>
> --- a/clang/lib/Analysis/FlowSensitive/ControlFlowContext.cpp<br>
> +++ b/clang/lib/Analysis/FlowSensitive/ControlFlowContext.cpp<br>
> @@ -31,10 +31,13 @@ buildStmtToBasicBlockMap(const CFG &Cfg) {<br>
>      if (Block == nullptr)<br>
>        continue;<br>
><br>
> -    for (const CFGElement &Element : *Block)<br>
> -      if (auto Stmt = Element.getAs<CFGStmt>())<br>
> -        StmtToBlock[Stmt->getStmt()] = Block;<br>
> +    for (const CFGElement &Element : *Block) {<br>
> +      auto Stmt = Element.getAs<CFGStmt>();<br>
> +      if (!Stmt.hasValue())<br>
> +        continue;<br>
><br>
> +      StmtToBlock[Stmt.getValue().getStmt()] = Block;<br>
> +    }<br>
>      if (const Stmt *TerminatorStmt = Block->getTerminatorStmt())<br>
>        StmtToBlock[TerminatorStmt] = Block;<br>
>    }<br>
><br>
> diff  --git a/clang/lib/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.cpp b/clang/lib/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.cpp<br>
> index 0de4bca3ffc16..68e897e035962 100644<br>
> --- a/clang/lib/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.cpp<br>
> +++ b/clang/lib/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.cpp<br>
> @@ -50,8 +50,8 @@ class StmtToEnvMapImpl : public StmtToEnvMap {<br>
>      auto BlockIT = CFCtx.getStmtToBlock().find(&ignoreCFGOmittedNodes(S));<br>
>      assert(BlockIT != CFCtx.getStmtToBlock().end());<br>
>      const auto &State = BlockToState[BlockIT->getSecond()->getBlockID()];<br>
> -    assert(State);<br>
> -    return &State->Env;<br>
> +    assert(State.hasValue());<br>
> +    return &State.getValue().Env;<br>
>    }<br>
><br>
>  private:<br>
> @@ -209,10 +209,10 @@ static TypeErasedDataflowAnalysisState computeBlockInputState(<br>
>      // loop back edge to `Block`.<br>
>      const llvm::Optional<TypeErasedDataflowAnalysisState> &MaybePredState =<br>
>          BlockStates[Pred->getBlockID()];<br>
> -    if (!MaybePredState)<br>
> +    if (!MaybePredState.hasValue())<br>
>        continue;<br>
><br>
> -    TypeErasedDataflowAnalysisState PredState = *MaybePredState;<br>
> +    TypeErasedDataflowAnalysisState PredState = MaybePredState.getValue();<br>
>      if (ApplyBuiltinTransfer) {<br>
>        if (const Stmt *PredTerminatorStmt = Pred->getTerminatorStmt()) {<br>
>          const StmtToEnvMapImpl StmtToEnv(CFCtx, BlockStates);<br>
> @@ -222,14 +222,14 @@ static TypeErasedDataflowAnalysisState computeBlockInputState(<br>
>        }<br>
>      }<br>
><br>
> -    if (MaybeState) {<br>
> +    if (MaybeState.hasValue()) {<br>
>        Analysis.joinTypeErased(MaybeState->Lattice, PredState.Lattice);<br>
>        MaybeState->Env.join(PredState.Env, Analysis);<br>
>      } else {<br>
>        MaybeState = std::move(PredState);<br>
>      }<br>
>    }<br>
> -  if (!MaybeState) {<br>
> +  if (!MaybeState.hasValue()) {<br>
>      // FIXME: Consider passing `Block` to `Analysis.typeErasedInitialElement()`<br>
>      // to enable building analyses like computation of dominators that<br>
>      // initialize the state of each basic block<br>
> diff erently.<br>
> @@ -367,8 +367,8 @@ runTypeErasedDataflowAnalysis(const ControlFlowContext &CFCtx,<br>
>      TypeErasedDataflowAnalysisState NewBlockState =<br>
>          transferBlock(CFCtx, BlockStates, *Block, InitEnv, Analysis);<br>
><br>
> -    if (OldBlockState &&<br>
> -        Analysis.isEqualTypeErased(OldBlockState->Lattice,<br>
> +    if (OldBlockState.hasValue() &&<br>
> +        Analysis.isEqualTypeErased(OldBlockState.getValue().Lattice,<br>
>                                     NewBlockState.Lattice) &&<br>
>          OldBlockState->Env.equivalentTo(NewBlockState.Env, Analysis)) {<br>
>        // The state of `Block` didn't change after transfer so there's no need to<br>
><br>
> diff  --git a/clang/lib/Analysis/PathDiagnostic.cpp b/clang/lib/Analysis/PathDiagnostic.cpp<br>
> index b5be64552cfbb..90c4624018069 100644<br>
> --- a/clang/lib/Analysis/PathDiagnostic.cpp<br>
> +++ b/clang/lib/Analysis/PathDiagnostic.cpp<br>
> @@ -319,8 +319,8 @@ static Optional<bool> comparePath(const PathPieces &X, const PathPieces &Y) {<br>
><br>
>    for ( ; X_I != X_end && Y_I != Y_end; ++X_I, ++Y_I) {<br>
>      Optional<bool> b = comparePiece(**X_I, **Y_I);<br>
> -    if (b)<br>
> -      return *b;<br>
> +    if (b.hasValue())<br>
> +      return b.getValue();<br>
>    }<br>
><br>
>    return None;<br>
> @@ -396,8 +396,8 @@ static bool compare(const PathDiagnostic &X, const PathDiagnostic &Y) {<br>
>        return (*XI) < (*YI);<br>
>    }<br>
>    Optional<bool> b = comparePath(X.path, Y.path);<br>
> -  assert(b);<br>
> -  return *b;<br>
> +  assert(b.hasValue());<br>
> +  return b.getValue();<br>
>  }<br>
><br>
>  void PathDiagnosticConsumer::FlushDiagnostics(<br>
><br>
> diff  --git a/clang/lib/Analysis/UninitializedValues.cpp b/clang/lib/Analysis/UninitializedValues.cpp<br>
> index f1be39298350d..811146e50b45a 100644<br>
> --- a/clang/lib/Analysis/UninitializedValues.cpp<br>
> +++ b/clang/lib/Analysis/UninitializedValues.cpp<br>
> @@ -148,8 +148,8 @@ class CFGBlockValues {<br>
>    Value getValue(const CFGBlock *block, const CFGBlock *dstBlock,<br>
>                   const VarDecl *vd) {<br>
>      const Optional<unsigned> &idx = declToIndex.getValueIndex(vd);<br>
> -    assert(idx);<br>
> -    return getValueVector(block)[*idx];<br>
> +    assert(idx.hasValue());<br>
> +    return getValueVector(block)[idx.getValue()];<br>
>    }<br>
>  };<br>
><br>
> @@ -209,8 +209,8 @@ void CFGBlockValues::resetScratch() {<br>
><br>
>  ValueVector::reference CFGBlockValues::operator[](const VarDecl *vd) {<br>
>    const Optional<unsigned> &idx = declToIndex.getValueIndex(vd);<br>
> -  assert(idx);<br>
> -  return scratch[*idx];<br>
> +  assert(idx.hasValue());<br>
> +  return scratch[idx.getValue()];<br>
>  }<br>
><br>
>  //------------------------------------------------------------------------====//<br>
><br>
> diff  --git a/clang/lib/Basic/Targets/RISCV.cpp b/clang/lib/Basic/Targets/RISCV.cpp<br>
> index 722a605d1c641..098bf21d6caa0 100644<br>
> --- a/clang/lib/Basic/Targets/RISCV.cpp<br>
> +++ b/clang/lib/Basic/Targets/RISCV.cpp<br>
> @@ -251,8 +251,8 @@ bool RISCVTargetInfo::hasFeature(StringRef Feature) const {<br>
>                      .Case("riscv64", Is64Bit)<br>
>                      .Case("64bit", Is64Bit)<br>
>                      .Default(None);<br>
> -  if (Result)<br>
> -    return *Result;<br>
> +  if (Result.hasValue())<br>
> +    return Result.getValue();<br>
><br>
>    if (ISAInfo->isSupportedExtensionFeature(Feature))<br>
>      return ISAInfo->hasExtension(Feature);<br>
><br>
> diff  --git a/clang/lib/CodeGen/CGClass.cpp b/clang/lib/CodeGen/CGClass.cpp<br>
> index ec9e325835c63..153f299a1c4b4 100644<br>
> --- a/clang/lib/CodeGen/CGClass.cpp<br>
> +++ b/clang/lib/CodeGen/CGClass.cpp<br>
> @@ -1782,15 +1782,15 @@ namespace {<br>
>         if (!StartIndex)<br>
>           StartIndex = FieldIndex;<br>
>       } else if (StartIndex) {<br>
> -       EHStack.pushCleanup<SanitizeDtorFieldRange>(NormalAndEHCleanup, DD,<br>
> -                                                   *StartIndex, FieldIndex);<br>
> +       EHStack.pushCleanup<SanitizeDtorFieldRange>(<br>
> +           NormalAndEHCleanup, DD, StartIndex.getValue(), FieldIndex);<br>
>         StartIndex = None;<br>
>       }<br>
>     }<br>
>     void End() {<br>
>       if (StartIndex)<br>
>         EHStack.pushCleanup<SanitizeDtorFieldRange>(NormalAndEHCleanup, DD,<br>
> -                                                   *StartIndex, -1);<br>
> +                                                   StartIndex.getValue(), -1);<br>
>     }<br>
>   };<br>
>  } // end anonymous namespace<br>
><br>
> diff  --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp<br>
> index 34d8b3a7d3609..17b8e6bc1b470 100644<br>
> --- a/clang/lib/CodeGen/CodeGenModule.cpp<br>
> +++ b/clang/lib/CodeGen/CodeGenModule.cpp<br>
> @@ -2826,12 +2826,12 @@ bool CodeGenModule::isProfileInstrExcluded(llvm::Function *Fn,<br>
>    CodeGenOptions::ProfileInstrKind Kind = getCodeGenOpts().getProfileInstr();<br>
>    // First, check the function name.<br>
>    Optional<bool> V = ProfileList.isFunctionExcluded(Fn->getName(), Kind);<br>
> -  if (V)<br>
> +  if (V.hasValue())<br>
>      return *V;<br>
>    // Next, check the source location.<br>
>    if (Loc.isValid()) {<br>
>      Optional<bool> V = ProfileList.isLocationExcluded(Loc, Kind);<br>
> -    if (V)<br>
> +    if (V.hasValue())<br>
>        return *V;<br>
>    }<br>
>    // If location is unknown, this may be a compiler-generated function. Assume<br>
><br>
> diff  --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp<br>
> index 721c8f8ae9f23..d83142286e7d6 100644<br>
> --- a/clang/lib/Driver/Driver.cpp<br>
> +++ b/clang/lib/Driver/Driver.cpp<br>
> @@ -3325,8 +3325,8 @@ class OffloadingActionBuilder final {<br>
>          A = C.getDriver().ConstructPhaseAction(C, Args, CurPhase, A,<br>
>                                                 AssociatedOffloadKind);<br>
><br>
> -      if (CompileDeviceOnly && CurPhase == FinalPhase && BundleOutput &&<br>
> -          *BundleOutput) {<br>
> +      if (CompileDeviceOnly && CurPhase == FinalPhase &&<br>
> +          BundleOutput.hasValue() && BundleOutput.getValue()) {<br>
>          for (unsigned I = 0, E = GpuArchList.size(); I != E; ++I) {<br>
>            OffloadAction::DeviceDependences DDep;<br>
>            DDep.add(*CudaDeviceActions[I], *ToolChains.front(), GpuArchList[I],<br>
><br>
> diff  --git a/clang/lib/Driver/ToolChains/AVR.cpp b/clang/lib/Driver/ToolChains/AVR.cpp<br>
> index 0b68a3241e12d..2547d1312322e 100644<br>
> --- a/clang/lib/Driver/ToolChains/AVR.cpp<br>
> +++ b/clang/lib/Driver/ToolChains/AVR.cpp<br>
> @@ -475,9 +475,9 @@ void AVR::Linker::ConstructJob(Compilation &C, const JobAction &JA,<br>
>        D.Diag(diag::warn_drv_avr_stdlib_not_linked);<br>
>    }<br>
><br>
> -  if (SectionAddressData) {<br>
> -    std::string DataSectionArg =<br>
> -        std::string("-Tdata=0x") + llvm::utohexstr(*SectionAddressData);<br>
> +  if (SectionAddressData.hasValue()) {<br>
> +    std::string DataSectionArg = std::string("-Tdata=0x") +<br>
> +                                 llvm::utohexstr(SectionAddressData.getValue());<br>
>      CmdArgs.push_back(Args.MakeArgString(DataSectionArg));<br>
>    } else {<br>
>      // We do not have an entry for this CPU in the address mapping table yet.<br>
><br>
> diff  --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp<br>
> index 286d414ddb372..5142b72a160fb 100644<br>
> --- a/clang/lib/Driver/ToolChains/Clang.cpp<br>
> +++ b/clang/lib/Driver/ToolChains/Clang.cpp<br>
> @@ -2340,8 +2340,8 @@ void Clang::AddHexagonTargetArgs(const ArgList &Args,<br>
><br>
>    if (auto G = toolchains::HexagonToolChain::getSmallDataThreshold(Args)) {<br>
>      CmdArgs.push_back("-mllvm");<br>
> -    CmdArgs.push_back(<br>
> -        Args.MakeArgString("-hexagon-small-data-threshold=" + Twine(*G)));<br>
> +    CmdArgs.push_back(Args.MakeArgString("-hexagon-small-data-threshold=" +<br>
> +                                         Twine(G.getValue())));<br>
>    }<br>
><br>
>    if (!Args.hasArg(options::OPT_fno_short_enums))<br>
><br>
> diff  --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp<br>
> index d813def123b15..dc99010107376 100644<br>
> --- a/clang/lib/Driver/ToolChains/Gnu.cpp<br>
> +++ b/clang/lib/Driver/ToolChains/Gnu.cpp<br>
> @@ -2086,8 +2086,8 @@ void Generic_GCC::GCCInstallationDetector::print(raw_ostream &OS) const {<br>
>  }<br>
><br>
>  bool Generic_GCC::GCCInstallationDetector::getBiarchSibling(Multilib &M) const {<br>
> -  if (BiarchSibling) {<br>
> -    M = *BiarchSibling;<br>
> +  if (BiarchSibling.hasValue()) {<br>
> +    M = BiarchSibling.getValue();<br>
>      return true;<br>
>    }<br>
>    return false;<br>
><br>
> diff  --git a/clang/lib/Driver/ToolChains/Hexagon.cpp b/clang/lib/Driver/ToolChains/Hexagon.cpp<br>
> index e129e3054dd86..9142dba81d54a 100644<br>
> --- a/clang/lib/Driver/ToolChains/Hexagon.cpp<br>
> +++ b/clang/lib/Driver/ToolChains/Hexagon.cpp<br>
> @@ -340,8 +340,8 @@ constructHexagonLinkArgs(Compilation &C, const JobAction &JA,<br>
>      CmdArgs.push_back("-pie");<br>
><br>
>    if (auto G = toolchains::HexagonToolChain::getSmallDataThreshold(Args)) {<br>
> -    CmdArgs.push_back(Args.MakeArgString("-G" + Twine(*G)));<br>
> -    UseG0 = *G == 0;<br>
> +    CmdArgs.push_back(Args.MakeArgString("-G" + Twine(G.getValue())));<br>
> +    UseG0 = G.getValue() == 0;<br>
>    }<br>
><br>
>    CmdArgs.push_back("-o");<br>
><br>
> diff  --git a/clang/lib/Edit/RewriteObjCFoundationAPI.cpp b/clang/lib/Edit/RewriteObjCFoundationAPI.cpp<br>
> index 1ca041f3ed6da..589bf8d216ed3 100644<br>
> --- a/clang/lib/Edit/RewriteObjCFoundationAPI.cpp<br>
> +++ b/clang/lib/Edit/RewriteObjCFoundationAPI.cpp<br>
> @@ -725,11 +725,11 @@ static bool getLiteralInfo(SourceRange literalRange,<br>
>        break;<br>
>    }<br>
><br>
> -  if (!UpperU && !UpperL)<br>
> +  if (!UpperU.hasValue() && !UpperL.hasValue())<br>
>      UpperU = UpperL = true;<br>
> -  else if (UpperU && !UpperL)<br>
> +  else if (UpperU.hasValue() && !UpperL.hasValue())<br>
>      UpperL = UpperU;<br>
> -  else if (UpperL && !UpperU)<br>
> +  else if (UpperL.hasValue() && !UpperU.hasValue())<br>
>      UpperU = UpperL;<br>
><br>
>    Info.U = *UpperU ? "U" : "u";<br>
><br>
> diff  --git a/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp b/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp<br>
> index b1450b273ed4f..c4797cea333fe 100644<br>
> --- a/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp<br>
> +++ b/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp<br>
> @@ -31,14 +31,14 @@ namespace {<br>
>  /// at position \p Key.<br>
>  void serializeObject(Object &Paren, StringRef Key, Optional<Object> Obj) {<br>
>    if (Obj)<br>
> -    Paren[Key] = std::move(*Obj);<br>
> +    Paren[Key] = std::move(Obj.getValue());<br>
>  }<br>
><br>
>  /// Helper function to inject a JSON array \p Array into object \p Paren at<br>
>  /// position \p Key.<br>
>  void serializeArray(Object &Paren, StringRef Key, Optional<Array> Array) {<br>
>    if (Array)<br>
> -    Paren[Key] = std::move(*Array);<br>
> +    Paren[Key] = std::move(Array.getValue());<br>
>  }<br>
><br>
>  /// Serialize a \c VersionTuple \p V with the Symbol Graph semantic version<br>
><br>
> diff  --git a/clang/lib/Frontend/CompilerInstance.cpp b/clang/lib/Frontend/CompilerInstance.cpp<br>
> index 95e5b04798b42..b982ca72c78ce 100644<br>
> --- a/clang/lib/Frontend/CompilerInstance.cpp<br>
> +++ b/clang/lib/Frontend/CompilerInstance.cpp<br>
> @@ -115,9 +115,9 @@ bool CompilerInstance::createTarget() {<br>
>      auto TO = std::make_shared<TargetOptions>();<br>
>      TO->Triple = llvm::Triple::normalize(getFrontendOpts().AuxTriple);<br>
>      if (getFrontendOpts().AuxTargetCPU)<br>
> -      TO->CPU = *getFrontendOpts().AuxTargetCPU;<br>
> +      TO->CPU = getFrontendOpts().AuxTargetCPU.getValue();<br>
>      if (getFrontendOpts().AuxTargetFeatures)<br>
> -      TO->FeaturesAsWritten = *getFrontendOpts().AuxTargetFeatures;<br>
> +      TO->FeaturesAsWritten = getFrontendOpts().AuxTargetFeatures.getValue();<br>
>      TO->HostTriple = getTarget().getTriple().str();<br>
>      setAuxTarget(TargetInfo::CreateTargetInfo(getDiagnostics(), TO));<br>
>    }<br>
><br>
> diff  --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp<br>
> index 4b53d6d8b0458..c0eed3ad87485 100644<br>
> --- a/clang/lib/Frontend/CompilerInvocation.cpp<br>
> +++ b/clang/lib/Frontend/CompilerInvocation.cpp<br>
> @@ -1951,8 +1951,8 @@ bool CompilerInvocation::ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args,<br>
>            << "-fdiagnostics-hotness-threshold=";<br>
>      } else {<br>
>        Opts.DiagnosticsHotnessThreshold = *ResultOrErr;<br>
> -      if ((!Opts.DiagnosticsHotnessThreshold ||<br>
> -           *Opts.DiagnosticsHotnessThreshold > 0) &&<br>
> +      if ((!Opts.DiagnosticsHotnessThreshold.hasValue() ||<br>
> +           Opts.DiagnosticsHotnessThreshold.getValue() > 0) &&<br>
>            !UsingProfile)<br>
>          Diags.Report(diag::warn_drv_diagnostics_hotness_requires_pgo)<br>
>              << "-fdiagnostics-hotness-threshold=";<br>
> @@ -1968,8 +1968,8 @@ bool CompilerInvocation::ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args,<br>
>            << "-fdiagnostics-misexpect-tolerance=";<br>
>      } else {<br>
>        Opts.DiagnosticsMisExpectTolerance = *ResultOrErr;<br>
> -      if ((!Opts.DiagnosticsMisExpectTolerance ||<br>
> -           *Opts.DiagnosticsMisExpectTolerance > 0) &&<br>
> +      if ((!Opts.DiagnosticsMisExpectTolerance.hasValue() ||<br>
> +           Opts.DiagnosticsMisExpectTolerance.getValue() > 0) &&<br>
>            !UsingProfile)<br>
>          Diags.Report(diag::warn_drv_diagnostics_misexpect_requires_pgo)<br>
>              << "-fdiagnostics-misexpect-tolerance=";<br>
> @@ -2578,10 +2578,10 @@ static void GenerateFrontendArgs(const FrontendOptions &Opts,<br>
>    for (const auto &ModuleFile : Opts.ModuleFiles)<br>
>      GenerateArg(Args, OPT_fmodule_file, ModuleFile, SA);<br>
><br>
> -  if (Opts.AuxTargetCPU)<br>
> +  if (Opts.AuxTargetCPU.hasValue())<br>
>      GenerateArg(Args, OPT_aux_target_cpu, *Opts.AuxTargetCPU, SA);<br>
><br>
> -  if (Opts.AuxTargetFeatures)<br>
> +  if (Opts.AuxTargetFeatures.hasValue())<br>
>      for (const auto &Feature : *Opts.AuxTargetFeatures)<br>
>        GenerateArg(Args, OPT_aux_target_feature, Feature, SA);<br>
><br>
><br>
> diff  --git a/clang/lib/Frontend/InitPreprocessor.cpp b/clang/lib/Frontend/InitPreprocessor.cpp<br>
> index 033f332b24361..1032cb2e8e0ef 100644<br>
> --- a/clang/lib/Frontend/InitPreprocessor.cpp<br>
> +++ b/clang/lib/Frontend/InitPreprocessor.cpp<br>
> @@ -831,12 +831,12 @@ static void InitializePredefinedMacros(const TargetInfo &TI,<br>
>        VersionTuple tuple = LangOpts.ObjCRuntime.getVersion();<br>
><br>
>        unsigned minor = 0;<br>
> -      if (tuple.getMinor())<br>
> -        minor = *tuple.getMinor();<br>
> +      if (tuple.getMinor().hasValue())<br>
> +        minor = tuple.getMinor().getValue();<br>
><br>
>        unsigned subminor = 0;<br>
> -      if (tuple.getSubminor())<br>
> -        subminor = *tuple.getSubminor();<br>
> +      if (tuple.getSubminor().hasValue())<br>
> +        subminor = tuple.getSubminor().getValue();<br>
><br>
>        Builder.defineMacro("__OBJFW_RUNTIME_ABI__",<br>
>                            Twine(tuple.getMajor() * 10000 + minor * 100 +<br>
><br>
> diff  --git a/clang/lib/Lex/DependencyDirectivesScanner.cpp b/clang/lib/Lex/DependencyDirectivesScanner.cpp<br>
> index d7c40e2c29099..d8583841c607b 100644<br>
> --- a/clang/lib/Lex/DependencyDirectivesScanner.cpp<br>
> +++ b/clang/lib/Lex/DependencyDirectivesScanner.cpp<br>
> @@ -549,8 +549,8 @@ Scanner::tryLexIdentifierOrSkipLine(const char *&First, const char *const End) {<br>
><br>
>  StringRef Scanner::lexIdentifier(const char *&First, const char *const End) {<br>
>    Optional<StringRef> Id = tryLexIdentifierOrSkipLine(First, End);<br>
> -  assert(Id && "expected identifier token");<br>
> -  return *Id;<br>
> +  assert(Id.hasValue() && "expected identifier token");<br>
> +  return Id.getValue();<br>
>  }<br>
><br>
>  bool Scanner::isNextIdentifierOrSkipLine(StringRef Id, const char *&First,<br>
><br>
> diff  --git a/clang/lib/Lex/MacroInfo.cpp b/clang/lib/Lex/MacroInfo.cpp<br>
> index 54445d9754472..4a8127d29a459 100644<br>
> --- a/clang/lib/Lex/MacroInfo.cpp<br>
> +++ b/clang/lib/Lex/MacroInfo.cpp<br>
> @@ -209,11 +209,12 @@ MacroDirective::DefInfo MacroDirective::getDefinition() {<br>
>      }<br>
><br>
>      VisibilityMacroDirective *VisMD = cast<VisibilityMacroDirective>(MD);<br>
> -    if (!isPublic)<br>
> +    if (!isPublic.hasValue())<br>
>        isPublic = VisMD->isPublic();<br>
>    }<br>
><br>
> -  return DefInfo(nullptr, UndefLoc, !isPublic || *isPublic);<br>
> +  return DefInfo(nullptr, UndefLoc,<br>
> +                 !isPublic.hasValue() || isPublic.getValue());<br>
>  }<br>
><br>
>  const MacroDirective::DefInfo<br>
><br>
> diff  --git a/clang/lib/Lex/ModuleMap.cpp b/clang/lib/Lex/ModuleMap.cpp<br>
> index 57e344622f25a..c791e3e4e5ca9 100644<br>
> --- a/clang/lib/Lex/ModuleMap.cpp<br>
> +++ b/clang/lib/Lex/ModuleMap.cpp<br>
> @@ -1219,8 +1219,8 @@ void ModuleMap::resolveHeaderDirectives(<br>
>      Module *Mod, llvm::Optional<const FileEntry *> File) const {<br>
>    bool NeedsFramework = false;<br>
>    SmallVector<Module::UnresolvedHeaderDirective, 1> NewHeaders;<br>
> -  const auto Size = File ? File.value()->getSize() : 0;<br>
> -  const auto ModTime = File ? File.value()->getModificationTime() : 0;<br>
> +  const auto Size = File ? File.getValue()->getSize() : 0;<br>
> +  const auto ModTime = File ? File.getValue()->getModificationTime() : 0;<br>
><br>
>    for (auto &Header : Mod->UnresolvedHeaders) {<br>
>      if (File && ((Header.ModTime && Header.ModTime != ModTime) ||<br>
><br>
> diff  --git a/clang/lib/Lex/PPMacroExpansion.cpp b/clang/lib/Lex/PPMacroExpansion.cpp<br>
> index fb0d67d0556b0..49e14732b3c23 100644<br>
> --- a/clang/lib/Lex/PPMacroExpansion.cpp<br>
> +++ b/clang/lib/Lex/PPMacroExpansion.cpp<br>
> @@ -1325,11 +1325,11 @@ static void EvaluateFeatureLikeBuiltinMacro(llvm::raw_svector_ostream& OS,<br>
><br>
>          // The last ')' has been reached; return the value if one found or<br>
>          // a diagnostic and a dummy value.<br>
> -        if (Result) {<br>
> -          OS << *Result;<br>
> +        if (Result.hasValue()) {<br>
> +          OS << Result.getValue();<br>
>            // For strict conformance to __has_cpp_attribute rules, use 'L'<br>
>            // suffix for dated literals.<br>
> -          if (*Result > 1)<br>
> +          if (Result.getValue() > 1)<br>
>              OS << 'L';<br>
>          } else {<br>
>            OS << 0;<br>
><br>
> diff  --git a/clang/lib/Lex/PreprocessingRecord.cpp b/clang/lib/Lex/PreprocessingRecord.cpp<br>
> index 66610c4892411..432068b35f19c 100644<br>
> --- a/clang/lib/Lex/PreprocessingRecord.cpp<br>
> +++ b/clang/lib/Lex/PreprocessingRecord.cpp<br>
> @@ -114,8 +114,8 @@ bool PreprocessingRecord::isEntityInFileID(iterator PPEI, FileID FID) {<br>
>      // deserializing it.<br>
>      Optional<bool> IsInFile =<br>
>          ExternalSource->isPreprocessedEntityInFileID(LoadedIndex, FID);<br>
> -    if (IsInFile)<br>
> -      return *IsInFile;<br>
> +    if (IsInFile.hasValue())<br>
> +      return IsInFile.getValue();<br>
><br>
>      // The external source did not provide a definite answer, go and deserialize<br>
>      // the entity to check it.<br>
><br>
> diff  --git a/clang/lib/Parse/ParseOpenMP.cpp b/clang/lib/Parse/ParseOpenMP.cpp<br>
> index d508d2d1bfe38..1fa82a19d88d4 100644<br>
> --- a/clang/lib/Parse/ParseOpenMP.cpp<br>
> +++ b/clang/lib/Parse/ParseOpenMP.cpp<br>
> @@ -1873,13 +1873,14 @@ void Parser::ParseOMPDeclareTargetClauses(<br>
>        if (IsDeviceTypeClause) {<br>
>          Optional<SimpleClauseData> DevTypeData =<br>
>              parseOpenMPSimpleClause(*this, OMPC_device_type);<br>
> -        if (DevTypeData) {<br>
> +        if (DevTypeData.hasValue()) {<br>
>            if (DeviceTypeLoc.isValid()) {<br>
>              // We already saw another device_type clause, diagnose it.<br>
> -            Diag(DevTypeData->Loc, diag::warn_omp_more_one_device_type_clause);<br>
> +            Diag(DevTypeData.getValue().Loc,<br>
> +                 diag::warn_omp_more_one_device_type_clause);<br>
>              break;<br>
>            }<br>
> -          switch (static_cast<OpenMPDeviceType>(DevTypeData->Type)) {<br>
> +          switch (static_cast<OpenMPDeviceType>(DevTypeData.getValue().Type)) {<br>
>            case OMPC_DEVICE_TYPE_any:<br>
>              DTCI.DT = OMPDeclareTargetDeclAttr::DT_Any;<br>
>              break;<br>
> @@ -2312,9 +2313,9 @@ Parser::DeclGroupPtrTy Parser::ParseOpenMPDeclarativeDirectiveWithExtDecl(<br>
>      Sema::DeclareTargetContextInfo DTCI(DKind, DTLoc);<br>
>      if (HasClauses)<br>
>        ParseOMPDeclareTargetClauses(DTCI);<br>
> -    bool HasImplicitMappings = DKind == OMPD_begin_declare_target ||<br>
> -                               !HasClauses ||<br>
> -                               (DTCI.ExplicitlyMapped.empty() && DTCI.Indirect);<br>
> +    bool HasImplicitMappings =<br>
> +        DKind == OMPD_begin_declare_target || !HasClauses ||<br>
> +        (DTCI.ExplicitlyMapped.empty() && DTCI.Indirect.hasValue());<br>
><br>
>      // Skip the last annot_pragma_openmp_end.<br>
>      ConsumeAnyToken();<br>
> @@ -3619,18 +3620,20 @@ OMPClause *Parser::ParseOpenMPSimpleClause(OpenMPClauseKind Kind,<br>
>    if (!Val || ParseOnly)<br>
>      return nullptr;<br>
>    if (getLangOpts().OpenMP < 51 && Kind == OMPC_default &&<br>
> -      (static_cast<DefaultKind>(Val->Type) == OMP_DEFAULT_private ||<br>
> -       static_cast<DefaultKind>(Val->Type) == OMP_DEFAULT_firstprivate)) {<br>
> -    Diag(Val->LOpen, diag::err_omp_invalid_dsa)<br>
> -        << getOpenMPClauseName(static_cast<DefaultKind>(Val->Type) ==<br>
> +      (static_cast<DefaultKind>(Val.getValue().Type) == OMP_DEFAULT_private ||<br>
> +       static_cast<DefaultKind>(Val.getValue().Type) ==<br>
> +           OMP_DEFAULT_firstprivate)) {<br>
> +    Diag(Val.getValue().LOpen, diag::err_omp_invalid_dsa)<br>
> +        << getOpenMPClauseName(static_cast<DefaultKind>(Val.getValue().Type) ==<br>
>                                         OMP_DEFAULT_private<br>
>                                     ? OMPC_private<br>
>                                     : OMPC_firstprivate)<br>
>          << getOpenMPClauseName(OMPC_default) << "5.1";<br>
>      return nullptr;<br>
>    }<br>
> -  return Actions.ActOnOpenMPSimpleClause(Kind, Val->Type, Val->TypeLoc,<br>
> -                                         Val->LOpen, Val->Loc, Val->RLoc);<br>
> +  return Actions.ActOnOpenMPSimpleClause(<br>
> +      Kind, Val.getValue().Type, Val.getValue().TypeLoc, Val.getValue().LOpen,<br>
> +      Val.getValue().Loc, Val.getValue().RLoc);<br>
>  }<br>
><br>
>  /// Parsing of OpenMP clauses like 'ordered'.<br>
><br>
> diff  --git a/clang/lib/Sema/SemaCUDA.cpp b/clang/lib/Sema/SemaCUDA.cpp<br>
> index a0bc1b5142692..a3b15fe7e90b6 100644<br>
> --- a/clang/lib/Sema/SemaCUDA.cpp<br>
> +++ b/clang/lib/Sema/SemaCUDA.cpp<br>
> @@ -381,12 +381,13 @@ bool Sema::inferCUDATargetForImplicitSpecialMember(CXXRecordDecl *ClassDecl,<br>
>        InferredTarget = BaseMethodTarget;<br>
>      } else {<br>
>        bool ResolutionError = resolveCalleeCUDATargetConflict(<br>
> -          *InferredTarget, BaseMethodTarget, InferredTarget.getPointer());<br>
> +          InferredTarget.getValue(), BaseMethodTarget,<br>
> +          InferredTarget.getPointer());<br>
>        if (ResolutionError) {<br>
>          if (Diagnose) {<br>
>            Diag(ClassDecl->getLocation(),<br>
>                 diag::note_implicit_member_target_infer_collision)<br>
> -              << (unsigned)CSM << *InferredTarget << BaseMethodTarget;<br>
> +              << (unsigned)CSM << InferredTarget.getValue() << BaseMethodTarget;<br>
>          }<br>
>          MemberDecl->addAttr(CUDAInvalidTargetAttr::CreateImplicit(Context));<br>
>          return true;<br>
> @@ -424,12 +425,14 @@ bool Sema::inferCUDATargetForImplicitSpecialMember(CXXRecordDecl *ClassDecl,<br>
>        InferredTarget = FieldMethodTarget;<br>
>      } else {<br>
>        bool ResolutionError = resolveCalleeCUDATargetConflict(<br>
> -          *InferredTarget, FieldMethodTarget, InferredTarget.getPointer());<br>
> +          InferredTarget.getValue(), FieldMethodTarget,<br>
> +          InferredTarget.getPointer());<br>
>        if (ResolutionError) {<br>
>          if (Diagnose) {<br>
>            Diag(ClassDecl->getLocation(),<br>
>                 diag::note_implicit_member_target_infer_collision)<br>
> -              << (unsigned)CSM << *InferredTarget << FieldMethodTarget;<br>
> +              << (unsigned)CSM << InferredTarget.getValue()<br>
> +              << FieldMethodTarget;<br>
>          }<br>
>          MemberDecl->addAttr(CUDAInvalidTargetAttr::CreateImplicit(Context));<br>
>          return true;<br>
> @@ -441,10 +444,10 @@ bool Sema::inferCUDATargetForImplicitSpecialMember(CXXRecordDecl *ClassDecl,<br>
>    // If no target was inferred, mark this member as __host__ __device__;<br>
>    // it's the least restrictive option that can be invoked from any target.<br>
>    bool NeedsH = true, NeedsD = true;<br>
> -  if (InferredTarget) {<br>
> -    if (*InferredTarget == CFT_Device)<br>
> +  if (InferredTarget.hasValue()) {<br>
> +    if (InferredTarget.getValue() == CFT_Device)<br>
>        NeedsH = false;<br>
> -    else if (*InferredTarget == CFT_Host)<br>
> +    else if (InferredTarget.getValue() == CFT_Host)<br>
>        NeedsD = false;<br>
>    }<br>
><br>
><br>
> diff  --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp<br>
> index c83f648f39b00..28cfdfca4f3c7 100644<br>
> --- a/clang/lib/Sema/SemaChecking.cpp<br>
> +++ b/clang/lib/Sema/SemaChecking.cpp<br>
> @@ -1873,9 +1873,9 @@ static ExprResult SemaBuiltinLaunder(Sema &S, CallExpr *TheCall) {<br>
>        return 2;<br>
>      return llvm::Optional<unsigned>{};<br>
>    }();<br>
> -  if (DiagSelect) {<br>
> +  if (DiagSelect.hasValue()) {<br>
>      S.Diag(TheCall->getBeginLoc(), diag::err_builtin_launder_invalid_arg)<br>
> -        << *DiagSelect << TheCall->getSourceRange();<br>
> +        << DiagSelect.getValue() << TheCall->getSourceRange();<br>
>      return ExprError();<br>
>    }<br>
><br>
><br>
> diff  --git a/clang/lib/Sema/SemaCodeComplete.cpp b/clang/lib/Sema/SemaCodeComplete.cpp<br>
> index 86bad736227d7..8c9ed53894882 100644<br>
> --- a/clang/lib/Sema/SemaCodeComplete.cpp<br>
> +++ b/clang/lib/Sema/SemaCodeComplete.cpp<br>
> @@ -5362,8 +5362,8 @@ class ConceptInfo {<br>
>        // Overwrite existing if the new member has more info.<br>
>        // The preference of . vs :: vs -> is fairly arbitrary.<br>
>        if (/*Inserted*/ R.second ||<br>
> -          std::make_tuple(M.ArgTypes.has_value(), M.ResultType != nullptr,<br>
> -                          M.Operator) > std::make_tuple(O.ArgTypes.has_value(),<br>
> +          std::make_tuple(M.ArgTypes.hasValue(), M.ResultType != nullptr,<br>
> +                          M.Operator) > std::make_tuple(O.ArgTypes.hasValue(),<br>
>                                                          O.ResultType != nullptr,<br>
>                                                          O.Operator))<br>
>          O = std::move(M);<br>
><br>
> diff  --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp<br>
> index c9c32f9440fba..2e0620785b551 100644<br>
> --- a/clang/lib/Sema/SemaDecl.cpp<br>
> +++ b/clang/lib/Sema/SemaDecl.cpp<br>
> @@ -15444,9 +15444,9 @@ void Sema::AddKnownFunctionAttributesForReplaceableGlobalAllocationFunction(<br>
>    //   (3.1) If the allocation function takes an argument of type<br>
>    //         std::align_­val_­t, the storage will have the alignment<br>
>    //         specified by the value of this argument.<br>
> -  if (AlignmentParam && !FD->hasAttr<AllocAlignAttr>()) {<br>
> +  if (AlignmentParam.hasValue() && !FD->hasAttr<AllocAlignAttr>()) {<br>
>      FD->addAttr(AllocAlignAttr::CreateImplicit(<br>
> -        Context, ParamIdx(*AlignmentParam, FD), FD->getLocation()));<br>
> +        Context, ParamIdx(AlignmentParam.getValue(), FD), FD->getLocation()));<br>
>    }<br>
><br>
>    // FIXME:<br>
> @@ -19102,12 +19102,12 @@ Sema::FunctionEmissionStatus Sema::getEmissionStatus(FunctionDecl *FD,<br>
>      //  #pragma omp declare target to(*) device_type(*).<br>
>      // Therefore DevTy having no value does not imply host. The emission status<br>
>      // will be checked again at the end of compilation unit with Final = true.<br>
> -    if (DevTy)<br>
> +    if (DevTy.hasValue())<br>
>        if (*DevTy == OMPDeclareTargetDeclAttr::DT_Host)<br>
>          return FunctionEmissionStatus::OMPDiscarded;<br>
>      // If we have an explicit value for the device type, or we are in a target<br>
>      // declare context, we need to emit all extern and used symbols.<br>
> -    if (isInOpenMPDeclareTargetContext() || DevTy)<br>
> +    if (isInOpenMPDeclareTargetContext() || DevTy.hasValue())<br>
>        if (IsEmittedForExternalSymbol())<br>
>          return FunctionEmissionStatus::Emitted;<br>
>      // Device mode only emits what it must, if it wasn't tagged yet and needed,<br>
><br>
> diff  --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp<br>
> index 942e7f18ec40e..73a4be54861b6 100644<br>
> --- a/clang/lib/Sema/SemaDeclAttr.cpp<br>
> +++ b/clang/lib/Sema/SemaDeclAttr.cpp<br>
> @@ -2673,19 +2673,19 @@ static void handleAvailabilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {<br>
>          if (IOSToWatchOSMapping) {<br>
>            if (auto MappedVersion = IOSToWatchOSMapping->map(<br>
>                    Version, MinimumWatchOSVersion, None)) {<br>
> -            return *MappedVersion;<br>
> +            return MappedVersion.getValue();<br>
>            }<br>
>          }<br>
><br>
>          auto Major = Version.getMajor();<br>
>          auto NewMajor = Major >= 9 ? Major - 7 : 0;<br>
>          if (NewMajor >= 2) {<br>
> -          if (Version.getMinor()) {<br>
> -            if (Version.getSubminor())<br>
> -              return VersionTuple(NewMajor, *Version.getMinor(),<br>
> -                                  *Version.getSubminor());<br>
> +          if (Version.getMinor().hasValue()) {<br>
> +            if (Version.getSubminor().hasValue())<br>
> +              return VersionTuple(NewMajor, Version.getMinor().getValue(),<br>
> +                                  Version.getSubminor().getValue());<br>
>              else<br>
> -              return VersionTuple(NewMajor, *Version.getMinor());<br>
> +              return VersionTuple(NewMajor, Version.getMinor().getValue());<br>
>            }<br>
>            return VersionTuple(NewMajor);<br>
>          }<br>
><br>
> diff  --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp<br>
> index 1e7975ed513f1..bb1cf4b941b78 100644<br>
> --- a/clang/lib/Sema/SemaExprCXX.cpp<br>
> +++ b/clang/lib/Sema/SemaExprCXX.cpp<br>
> @@ -2274,10 +2274,10 @@ Sema::BuildCXXNew(SourceRange Range, bool UseGlobal,<br>
><br>
>      // How many bytes do we want to allocate here?<br>
>      llvm::Optional<llvm::APInt> AllocationSize;<br>
> -    if (!ArraySize && !AllocType->isDependentType()) {<br>
> +    if (!ArraySize.hasValue() && !AllocType->isDependentType()) {<br>
>        // For non-array operator new, we only want to allocate one element.<br>
>        AllocationSize = SingleEltSize;<br>
> -    } else if (KnownArraySize && !AllocType->isDependentType()) {<br>
> +    } else if (KnownArraySize.hasValue() && !AllocType->isDependentType()) {<br>
>        // For array operator new, only deal with static array size case.<br>
>        bool Overflow;<br>
>        AllocationSize = llvm::APInt(SizeTyWidth, *KnownArraySize)<br>
><br>
> diff  --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp<br>
> index fbea99daee598..7395e67505ff5 100644<br>
> --- a/clang/lib/Sema/SemaOpenMP.cpp<br>
> +++ b/clang/lib/Sema/SemaOpenMP.cpp<br>
> @@ -822,29 +822,29 @@ class DSAStackTy {<br>
>    /// false - otherwise.<br>
>    bool isOrderedRegion() const {<br>
>      if (const SharingMapTy *Top = getTopOfStackOrNull())<br>
> -      return Top->OrderedRegion.has_value();<br>
> +      return Top->OrderedRegion.hasValue();<br>
>      return false;<br>
>    }<br>
>    /// Returns optional parameter for the ordered region.<br>
>    std::pair<const Expr *, OMPOrderedClause *> getOrderedRegionParam() const {<br>
>      if (const SharingMapTy *Top = getTopOfStackOrNull())<br>
> -      if (Top->OrderedRegion)<br>
> -        return *Top->OrderedRegion;<br>
> +      if (Top->OrderedRegion.hasValue())<br>
> +        return Top->OrderedRegion.getValue();<br>
>      return std::make_pair(nullptr, nullptr);<br>
>    }<br>
>    /// Returns true, if parent region is ordered (has associated<br>
>    /// 'ordered' clause), false - otherwise.<br>
>    bool isParentOrderedRegion() const {<br>
>      if (const SharingMapTy *Parent = getSecondOnStackOrNull())<br>
> -      return Parent->OrderedRegion.has_value();<br>
> +      return Parent->OrderedRegion.hasValue();<br>
>      return false;<br>
>    }<br>
>    /// Returns optional parameter for the ordered region.<br>
>    std::pair<const Expr *, OMPOrderedClause *><br>
>    getParentOrderedRegionParam() const {<br>
>      if (const SharingMapTy *Parent = getSecondOnStackOrNull())<br>
> -      if (Parent->OrderedRegion)<br>
> -        return *Parent->OrderedRegion;<br>
> +      if (Parent->OrderedRegion.hasValue())<br>
> +        return Parent->OrderedRegion.getValue();<br>
>      return std::make_pair(nullptr, nullptr);<br>
>    }<br>
>    /// Marks current region as nowait (it has a 'nowait' clause).<br>
> @@ -7653,9 +7653,9 @@ class OpenMPIterationSpaceChecker {<br>
>    /// Return true if any expression is dependent.<br>
>    bool dependent() const;<br>
>    /// Returns true if the initializer forms non-rectangular loop.<br>
> -  bool doesInitDependOnLC() const { return InitDependOnLC.has_value(); }<br>
> +  bool doesInitDependOnLC() const { return InitDependOnLC.hasValue(); }<br>
>    /// Returns true if the condition forms non-rectangular loop.<br>
> -  bool doesCondDependOnLC() const { return CondDependOnLC.has_value(); }<br>
> +  bool doesCondDependOnLC() const { return CondDependOnLC.hasValue(); }<br>
>    /// Returns index of the loop we depend on (starting from 1), or 0 otherwise.<br>
>    unsigned getLoopDependentIdx() const {<br>
>      return InitDependOnLC.value_or(CondDependOnLC.value_or(0));<br>
> @@ -7761,20 +7761,21 @@ bool OpenMPIterationSpaceChecker::setStep(Expr *NewStep, bool Subtract) {<br>
>      bool IsConstZero = Result && !Result->getBoolValue();<br>
><br>
>      // != with increment is treated as <; != with decrement is treated as ><br>
> -    if (!TestIsLessOp)<br>
> +    if (!TestIsLessOp.hasValue())<br>
>        TestIsLessOp = IsConstPos || (IsUnsigned && !Subtract);<br>
> -    if (UB && (IsConstZero ||<br>
> -               (*TestIsLessOp ? (IsConstNeg || (IsUnsigned && Subtract))<br>
> -                              : (IsConstPos || (IsUnsigned && !Subtract))))) {<br>
> +    if (UB &&<br>
> +        (IsConstZero || (TestIsLessOp.getValue()<br>
> +                             ? (IsConstNeg || (IsUnsigned && Subtract))<br>
> +                             : (IsConstPos || (IsUnsigned && !Subtract))))) {<br>
>        SemaRef.Diag(NewStep->getExprLoc(),<br>
>                     diag::err_omp_loop_incr_not_compatible)<br>
> -          << LCDecl << *TestIsLessOp << NewStep->getSourceRange();<br>
> +          << LCDecl << TestIsLessOp.getValue() << NewStep->getSourceRange();<br>
>        SemaRef.Diag(ConditionLoc,<br>
>                     diag::note_omp_loop_cond_requres_compatible_incr)<br>
> -          << *TestIsLessOp << ConditionSrcRange;<br>
> +          << TestIsLessOp.getValue() << ConditionSrcRange;<br>
>        return true;<br>
>      }<br>
> -    if (*TestIsLessOp == Subtract) {<br>
> +    if (TestIsLessOp.getValue() == Subtract) {<br>
>        NewStep =<br>
>            SemaRef.CreateBuiltinUnaryOp(NewStep->getExprLoc(), UO_Minus, NewStep)<br>
>                .get();<br>
> @@ -8529,8 +8530,8 @@ Expr *OpenMPIterationSpaceChecker::buildNumIterations(<br>
>        UBVal = MinUB.get();<br>
>      }<br>
>    }<br>
> -  Expr *UBExpr = *TestIsLessOp ? UBVal : LBVal;<br>
> -  Expr *LBExpr = *TestIsLessOp ? LBVal : UBVal;<br>
> +  Expr *UBExpr = TestIsLessOp.getValue() ? UBVal : LBVal;<br>
> +  Expr *LBExpr = TestIsLessOp.getValue() ? LBVal : UBVal;<br>
>    Expr *Upper = tryBuildCapture(SemaRef, UBExpr, Captures).get();<br>
>    Expr *Lower = tryBuildCapture(SemaRef, LBExpr, Captures).get();<br>
>    if (!Upper || !Lower)<br>
> @@ -8593,12 +8594,12 @@ std::pair<Expr *, Expr *> OpenMPIterationSpaceChecker::buildMinMaxValues(<br>
>    // init value.<br>
>    Expr *MinExpr = nullptr;<br>
>    Expr *MaxExpr = nullptr;<br>
> -  Expr *LBExpr = *TestIsLessOp ? LB : UB;<br>
> -  Expr *UBExpr = *TestIsLessOp ? UB : LB;<br>
> -  bool LBNonRect =<br>
> -      *TestIsLessOp ? InitDependOnLC.has_value() : CondDependOnLC.has_value();<br>
> -  bool UBNonRect =<br>
> -      *TestIsLessOp ? CondDependOnLC.has_value() : InitDependOnLC.has_value();<br>
> +  Expr *LBExpr = TestIsLessOp.getValue() ? LB : UB;<br>
> +  Expr *UBExpr = TestIsLessOp.getValue() ? UB : LB;<br>
> +  bool LBNonRect = TestIsLessOp.getValue() ? InitDependOnLC.hasValue()<br>
> +                                           : CondDependOnLC.hasValue();<br>
> +  bool UBNonRect = TestIsLessOp.getValue() ? CondDependOnLC.hasValue()<br>
> +                                           : InitDependOnLC.hasValue();<br>
>    Expr *Lower =<br>
>        LBNonRect ? LBExpr : tryBuildCapture(SemaRef, LBExpr, Captures).get();<br>
>    Expr *Upper =<br>
> @@ -8720,11 +8721,11 @@ Expr *OpenMPIterationSpaceChecker::buildPreCond(<br>
>    if (!NewLB.isUsable() || !NewUB.isUsable())<br>
>      return nullptr;<br>
><br>
> -  ExprResult CondExpr =<br>
> -      SemaRef.BuildBinOp(S, DefaultLoc,<br>
> -                         *TestIsLessOp ? (TestIsStrictOp ? BO_LT : BO_LE)<br>
> -                                       : (TestIsStrictOp ? BO_GT : BO_GE),<br>
> -                         NewLB.get(), NewUB.get());<br>
> +  ExprResult CondExpr = SemaRef.BuildBinOp(<br>
> +      S, DefaultLoc,<br>
> +      TestIsLessOp.getValue() ? (TestIsStrictOp ? BO_LT : BO_LE)<br>
> +                              : (TestIsStrictOp ? BO_GT : BO_GE),<br>
> +      NewLB.get(), NewUB.get());<br>
>    if (CondExpr.isUsable()) {<br>
>      if (!SemaRef.Context.hasSameUnqualifiedType(CondExpr.get()->getType(),<br>
>                                                  SemaRef.Context.BoolTy))<br>
> @@ -8799,10 +8800,12 @@ Expr *OpenMPIterationSpaceChecker::buildOrderedLoopData(<br>
>        !SemaRef.getLangOpts().CPlusPlus)<br>
>      return nullptr;<br>
>    // Upper - Lower<br>
> -  Expr *Upper =<br>
> -      *TestIsLessOp ? Cnt : tryBuildCapture(SemaRef, LB, Captures).get();<br>
> -  Expr *Lower =<br>
> -      *TestIsLessOp ? tryBuildCapture(SemaRef, LB, Captures).get() : Cnt;<br>
> +  Expr *Upper = TestIsLessOp.getValue()<br>
> +                    ? Cnt<br>
> +                    : tryBuildCapture(SemaRef, LB, Captures).get();<br>
> +  Expr *Lower = TestIsLessOp.getValue()<br>
> +                    ? tryBuildCapture(SemaRef, LB, Captures).get()<br>
> +                    : Cnt;<br>
>    if (!Upper || !Lower)<br>
>      return nullptr;<br>
><br>
> @@ -22177,27 +22180,27 @@ void Sema::ActOnOpenMPDeclareTargetName(NamedDecl *ND, SourceLocation Loc,<br>
>    auto *VD = cast<ValueDecl>(ND);<br>
>    llvm::Optional<OMPDeclareTargetDeclAttr *> ActiveAttr =<br>
>        OMPDeclareTargetDeclAttr::getActiveAttr(VD);<br>
> -  if (ActiveAttr && (*ActiveAttr)->getDevType() != DTCI.DT &&<br>
> -      (*ActiveAttr)->getLevel() == Level) {<br>
> +  if (ActiveAttr.hasValue() && ActiveAttr.getValue()->getDevType() != DTCI.DT &&<br>
> +      ActiveAttr.getValue()->getLevel() == Level) {<br>
>      Diag(Loc, diag::err_omp_device_type_mismatch)<br>
>          << OMPDeclareTargetDeclAttr::ConvertDevTypeTyToStr(DTCI.DT)<br>
>          << OMPDeclareTargetDeclAttr::ConvertDevTypeTyToStr(<br>
> -               ActiveAttr.value()->getDevType());<br>
> +               ActiveAttr.getValue()->getDevType());<br>
>      return;<br>
>    }<br>
> -  if (ActiveAttr && (*ActiveAttr)->getMapType() != MT &&<br>
> -      (*ActiveAttr)->getLevel() == Level) {<br>
> +  if (ActiveAttr.hasValue() && ActiveAttr.getValue()->getMapType() != MT &&<br>
> +      ActiveAttr.getValue()->getLevel() == Level) {<br>
>      Diag(Loc, diag::err_omp_declare_target_to_and_link) << ND;<br>
>      return;<br>
>    }<br>
><br>
> -  if (ActiveAttr && (*ActiveAttr)->getLevel() == Level)<br>
> +  if (ActiveAttr.hasValue() && ActiveAttr.getValue()->getLevel() == Level)<br>
>      return;<br>
><br>
>    Expr *IndirectE = nullptr;<br>
>    bool IsIndirect = false;<br>
> -  if (DTCI.Indirect) {<br>
> -    IndirectE = *DTCI.Indirect;<br>
> +  if (DTCI.Indirect.hasValue()) {<br>
> +    IndirectE = DTCI.Indirect.getValue();<br>
>      if (!IndirectE)<br>
>        IsIndirect = true;<br>
>    }<br>
> @@ -22291,13 +22294,13 @@ void Sema::checkDeclIsAllowedInOpenMPTarget(Expr *E, Decl *D,<br>
>          llvm::Optional<OMPDeclareTargetDeclAttr *> ActiveAttr =<br>
>              OMPDeclareTargetDeclAttr::getActiveAttr(VD);<br>
>          unsigned Level = DeclareTargetNesting.size();<br>
> -        if (ActiveAttr && (*ActiveAttr)->getLevel() >= Level)<br>
> +        if (ActiveAttr.hasValue() && ActiveAttr.getValue()->getLevel() >= Level)<br>
>            return;<br>
>          DeclareTargetContextInfo &DTCI = DeclareTargetNesting.back();<br>
>          Expr *IndirectE = nullptr;<br>
>          bool IsIndirect = false;<br>
> -        if (DTCI.Indirect) {<br>
> -          IndirectE = *DTCI.Indirect;<br>
> +        if (DTCI.Indirect.hasValue()) {<br>
> +          IndirectE = DTCI.Indirect.getValue();<br>
>            if (!IndirectE)<br>
>              IsIndirect = true;<br>
>          }<br>
><br>
> diff  --git a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp<br>
> index 4352e7ec1c6d7..d7558017948a2 100644<br>
> --- a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp<br>
> +++ b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp<br>
> @@ -469,8 +469,8 @@ static void instantiateOMPDeclareVariantAttr(<br>
>    if (!DeclVarData)<br>
>      return;<br>
><br>
> -  E = DeclVarData->second;<br>
> -  FD = DeclVarData->first;<br>
> +  E = DeclVarData.getValue().second;<br>
> +  FD = DeclVarData.getValue().first;<br>
><br>
>    if (auto *VariantDRE = dyn_cast<DeclRefExpr>(E->IgnoreParenImpCasts())) {<br>
>      if (auto *VariantFD = dyn_cast<FunctionDecl>(VariantDRE->getDecl())) {<br>
><br>
> diff  --git a/clang/lib/Serialization/ASTWriter.cpp b/clang/lib/Serialization/ASTWriter.cpp<br>
> index f58f166db7af1..1787909bb6f77 100644<br>
> --- a/clang/lib/Serialization/ASTWriter.cpp<br>
> +++ b/clang/lib/Serialization/ASTWriter.cpp<br>
> @@ -1888,8 +1888,8 @@ void ASTWriter::WriteHeaderSearch(const HeaderSearch &HS) {<br>
>          // without this file existing on disk.<br>
>          if (!U.Size || (!U.ModTime && IncludeTimestamps)) {<br>
>            PP->Diag(U.FileNameLoc, diag::err_module_no_size_mtime_for_header)<br>
> -              << WritingModule->getFullModuleName() << U.Size.has_value()<br>
> -              << U.FileName;<br>
> +            << WritingModule->getFullModuleName() << U.Size.hasValue()<br>
> +            << U.FileName;<br>
>            continue;<br>
>          }<br>
><br>
><br>
> diff  --git a/clang/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp b/clang/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp<br>
> index 16e0b8a3fe3d9..970bfd2d241cc 100644<br>
> --- a/clang/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp<br>
> +++ b/clang/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp<br>
> @@ -766,10 +766,10 @@ void VariadicMethodTypeChecker::checkPreObjCMessage(const ObjCMethodCall &msg,<br>
>        continue;<br>
><br>
>      // Generate only one error node to use for all bug reports.<br>
> -    if (!errorNode)<br>
> +    if (!errorNode.hasValue())<br>
>        errorNode = C.generateNonFatalErrorNode();<br>
><br>
> -    if (!*errorNode)<br>
> +    if (!errorNode.getValue())<br>
>        continue;<br>
><br>
>      SmallString<128> sbuf;<br>
> @@ -786,8 +786,8 @@ void VariadicMethodTypeChecker::checkPreObjCMessage(const ObjCMethodCall &msg,<br>
>      ArgTy.print(os, C.getLangOpts());<br>
>      os << "'";<br>
><br>
> -    auto R =<br>
> -        std::make_unique<PathSensitiveBugReport>(*BT, os.str(), *errorNode);<br>
> +    auto R = std::make_unique<PathSensitiveBugReport>(*BT, os.str(),<br>
> +                                                      errorNode.getValue());<br>
>      R->addRange(msg.getArgSourceRange(I));<br>
>      C.emitReport(std::move(R));<br>
>    }<br>
><br>
> diff  --git a/clang/lib/StaticAnalyzer/Checkers/GTestChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/GTestChecker.cpp<br>
> index dbfdff4d2a3b1..0e273771498cc 100644<br>
> --- a/clang/lib/StaticAnalyzer/Checkers/GTestChecker.cpp<br>
> +++ b/clang/lib/StaticAnalyzer/Checkers/GTestChecker.cpp<br>
> @@ -272,12 +272,12 @@ ProgramStateRef GTestChecker::assumeValuesEqual(SVal Val1, SVal Val2,<br>
>                                                  CheckerContext &C) {<br>
>    auto DVal1 = Val1.getAs<DefinedOrUnknownSVal>();<br>
>    auto DVal2 = Val2.getAs<DefinedOrUnknownSVal>();<br>
> -  if (!DVal1 || !DVal2)<br>
> +  if (!DVal1.hasValue() || !DVal2.hasValue())<br>
>      return State;<br>
><br>
>    auto ValuesEqual =<br>
>        C.getSValBuilder().evalEQ(State, *DVal1, *DVal2).getAs<DefinedSVal>();<br>
> -  if (!ValuesEqual)<br>
> +  if (!ValuesEqual.hasValue())<br>
>      return State;<br>
><br>
>    State = C.getConstraintManager().assume(State, *ValuesEqual, true);<br>
><br>
> diff  --git a/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp<br>
> index 2aeb32d074906..552d042483393 100644<br>
> --- a/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp<br>
> +++ b/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp<br>
> @@ -1190,8 +1190,8 @@ MallocChecker::performKernelMalloc(const CallEvent &Call, CheckerContext &C,<br>
><br>
>    NonLoc Flags = V.castAs<NonLoc>();<br>
>    NonLoc ZeroFlag = C.getSValBuilder()<br>
> -                        .makeIntVal(*KernelZeroFlagVal, FlagsEx->getType())<br>
> -                        .castAs<NonLoc>();<br>
> +      .makeIntVal(KernelZeroFlagVal.getValue(), FlagsEx->getType())<br>
> +      .castAs<NonLoc>();<br>
>    SVal MaskedFlagsUC = C.getSValBuilder().evalBinOpNN(State, BO_And,<br>
>                                                        Flags, ZeroFlag,<br>
>                                                        FlagsEx->getType());<br>
> @@ -1238,8 +1238,8 @@ void MallocChecker::checkKernelMalloc(const CallEvent &Call,<br>
>    ProgramStateRef State = C.getState();<br>
>    llvm::Optional<ProgramStateRef> MaybeState =<br>
>        performKernelMalloc(Call, C, State);<br>
> -  if (MaybeState)<br>
> -    State = *MaybeState;<br>
> +  if (MaybeState.hasValue())<br>
> +    State = MaybeState.getValue();<br>
>    else<br>
>      State = MallocMemAux(C, Call, Call.getArgExpr(0), UndefinedVal(), State,<br>
>                           AF_Malloc);<br>
> @@ -3571,13 +3571,13 @@ void MallocChecker::printState(raw_ostream &Out, ProgramStateRef State,<br>
>        const RefState *RefS = State->get<RegionState>(I.getKey());<br>
>        AllocationFamily Family = RefS->getAllocationFamily();<br>
>        Optional<MallocChecker::CheckKind> CheckKind = getCheckIfTracked(Family);<br>
> -      if (!CheckKind)<br>
> -        CheckKind = getCheckIfTracked(Family, true);<br>
> +      if (!CheckKind.hasValue())<br>
> +         CheckKind = getCheckIfTracked(Family, true);<br>
><br>
>        I.getKey()->dumpToStream(Out);<br>
>        Out << " : ";<br>
>        I.getData().dump(Out);<br>
> -      if (CheckKind)<br>
> +      if (CheckKind.hasValue())<br>
>          Out << " (" << CheckNames[*CheckKind].getName() << ")";<br>
>        Out << NL;<br>
>      }<br>
><br>
> diff  --git a/clang/lib/StaticAnalyzer/Checkers/NonNullParamChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/NonNullParamChecker.cpp<br>
> index fd47e19cb786c..3481936e572bf 100644<br>
> --- a/clang/lib/StaticAnalyzer/Checkers/NonNullParamChecker.cpp<br>
> +++ b/clang/lib/StaticAnalyzer/Checkers/NonNullParamChecker.cpp<br>
> @@ -136,10 +136,10 @@ void NonNullParamChecker::checkPreCall(const CallEvent &Call,<br>
>      if (!DV)<br>
>        continue;<br>
><br>
> -    assert(!HasRefTypeParam || isa<Loc>(*DV));<br>
> +    assert(!HasRefTypeParam || isa<Loc>(DV.getValue()));<br>
><br>
>      // Process the case when the argument is not a location.<br>
> -    if (ExpectedToBeNonNull && !isa<Loc>(*DV)) {<br>
> +    if (ExpectedToBeNonNull && !isa<Loc>(DV.getValue())) {<br>
>        // If the argument is a union type, we want to handle a potential<br>
>        // transparent_union GCC extension.<br>
>        if (!ArgE)<br>
><br>
> diff  --git a/clang/lib/StaticAnalyzer/Checkers/UnixAPIChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/UnixAPIChecker.cpp<br>
> index 19b63a17191ca..9da44d5c0d394 100644<br>
> --- a/clang/lib/StaticAnalyzer/Checkers/UnixAPIChecker.cpp<br>
> +++ b/clang/lib/StaticAnalyzer/Checkers/UnixAPIChecker.cpp<br>
> @@ -234,8 +234,7 @@ void UnixAPIMisuseChecker::CheckOpenVariant(CheckerContext &C,<br>
>    }<br>
>    NonLoc oflags = V.castAs<NonLoc>();<br>
>    NonLoc ocreateFlag = C.getSValBuilder()<br>
> -                           .makeIntVal(*Val_O_CREAT, oflagsEx->getType())<br>
> -                           .castAs<NonLoc>();<br>
> +      .makeIntVal(Val_O_CREAT.getValue(), oflagsEx->getType()).castAs<NonLoc>();<br>
>    SVal maskedFlagsUC = C.getSValBuilder().evalBinOpNN(state, BO_And,<br>
>                                                        oflags, ocreateFlag,<br>
>                                                        oflagsEx->getType());<br>
><br>
> diff  --git a/clang/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp b/clang/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp<br>
> index 3b01ec6e24029..de94cb7c978da 100644<br>
> --- a/clang/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp<br>
> +++ b/clang/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp<br>
> @@ -77,8 +77,8 @@ AnalyzerOptions::getExplorationStrategy() const {<br>
>            .Case("bfs_block_dfs_contents",<br>
>                  ExplorationStrategyKind::BFSBlockDFSContents)<br>
>            .Default(None);<br>
> -  assert(K && "User mode is invalid.");<br>
> -  return *K;<br>
> +  assert(K.hasValue() && "User mode is invalid.");<br>
> +  return K.getValue();<br>
>  }<br>
><br>
>  CTUPhase1InliningKind AnalyzerOptions::getCTUPhase1Inlining() const {<br>
> @@ -88,8 +88,8 @@ CTUPhase1InliningKind AnalyzerOptions::getCTUPhase1Inlining() const {<br>
>                 .Case("small", CTUPhase1InliningKind::Small)<br>
>                 .Case("all", CTUPhase1InliningKind::All)<br>
>                 .Default(None);<br>
> -  assert(K && "CTU inlining mode is invalid.");<br>
> -  return *K;<br>
> +  assert(K.hasValue() && "CTU inlining mode is invalid.");<br>
> +  return K.getValue();<br>
>  }<br>
><br>
>  IPAKind AnalyzerOptions::getIPAMode() const {<br>
> @@ -100,9 +100,9 @@ IPAKind AnalyzerOptions::getIPAMode() const {<br>
>            .Case("dynamic", IPAK_DynamicDispatch)<br>
>            .Case("dynamic-bifurcate", IPAK_DynamicDispatchBifurcate)<br>
>            .Default(None);<br>
> -  assert(K && "IPA Mode is invalid.");<br>
> +  assert(K.hasValue() && "IPA Mode is invalid.");<br>
><br>
> -  return *K;<br>
> +  return K.getValue();<br>
>  }<br>
><br>
>  bool<br>
><br>
> diff  --git a/clang/lib/StaticAnalyzer/Core/BugReporter.cpp b/clang/lib/StaticAnalyzer/Core/BugReporter.cpp<br>
> index 4d6b82e63f6a4..a2efe14f10453 100644<br>
> --- a/clang/lib/StaticAnalyzer/Core/BugReporter.cpp<br>
> +++ b/clang/lib/StaticAnalyzer/Core/BugReporter.cpp<br>
> @@ -2363,15 +2363,15 @@ PathSensitiveBugReport::getInterestingnessKind(const MemRegion *R) const {<br>
>  }<br>
><br>
>  bool PathSensitiveBugReport::isInteresting(SVal V) const {<br>
> -  return getInterestingnessKind(V).has_value();<br>
> +  return getInterestingnessKind(V).hasValue();<br>
>  }<br>
><br>
>  bool PathSensitiveBugReport::isInteresting(SymbolRef sym) const {<br>
> -  return getInterestingnessKind(sym).has_value();<br>
> +  return getInterestingnessKind(sym).hasValue();<br>
>  }<br>
><br>
>  bool PathSensitiveBugReport::isInteresting(const MemRegion *R) const {<br>
> -  return getInterestingnessKind(R).has_value();<br>
> +  return getInterestingnessKind(R).hasValue();<br>
>  }<br>
><br>
>  bool PathSensitiveBugReport::isInteresting(const LocationContext *LC)  const {<br>
><br>
> diff  --git a/clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp b/clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp<br>
> index 9d89069b239e4..339a675ed1baf 100644<br>
> --- a/clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp<br>
> +++ b/clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp<br>
> @@ -2949,8 +2949,8 @@ PathDiagnosticPieceRef ConditionBRVisitor::VisitTrueTest(<br>
><br>
>    PathDiagnosticLocation Loc(Cond, SM, LCtx);<br>
>    auto event = std::make_shared<PathDiagnosticEventPiece>(Loc, Message);<br>
> -  if (shouldPrune)<br>
> -    event->setPrunable(*shouldPrune);<br>
> +  if (shouldPrune.hasValue())<br>
> +    event->setPrunable(shouldPrune.getValue());<br>
>    return event;<br>
>  }<br>
><br>
> @@ -3084,9 +3084,9 @@ bool ConditionBRVisitor::printValue(const Expr *CondVarExpr, raw_ostream &Out,<br>
>        Out << (TookTrue ? "not equal to 0" : "0");<br>
>    } else {<br>
>      if (Ty->isBooleanType())<br>
> -      Out << (IntValue.value()->getBoolValue() ? "true" : "false");<br>
> +      Out << (IntValue.getValue()->getBoolValue() ? "true" : "false");<br>
>      else<br>
> -      Out << *IntValue.value();<br>
> +      Out << *IntValue.getValue();<br>
>    }<br>
><br>
>    return true;<br>
> @@ -3279,10 +3279,10 @@ void FalsePositiveRefutationBRVisitor::finalizeVisitor(<br>
><br>
>    // And check for satisfiability<br>
>    Optional<bool> IsSAT = RefutationSolver->check();<br>
> -  if (!IsSAT)<br>
> +  if (!IsSAT.hasValue())<br>
>      return;<br>
><br>
> -  if (!*IsSAT)<br>
> +  if (!IsSAT.getValue())<br>
>      BR.markInvalid("Infeasible constraints", EndPathNode->getLocationContext());<br>
>  }<br>
><br>
><br>
> diff  --git a/clang/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp b/clang/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp<br>
> index b03af13622542..326a3b1fb665f 100644<br>
> --- a/clang/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp<br>
> +++ b/clang/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp<br>
> @@ -1015,8 +1015,8 @@ bool ExprEngine::shouldInlineCall(const CallEvent &Call, const Decl *D,<br>
><br>
>    // Check if this function has been marked as non-inlinable.<br>
>    Optional<bool> MayInline = Engine.FunctionSummaries->mayInline(D);<br>
> -  if (MayInline) {<br>
> -    if (!*MayInline)<br>
> +  if (MayInline.hasValue()) {<br>
> +    if (!MayInline.getValue())<br>
>        return false;<br>
><br>
>    } else {<br>
><br>
> diff  --git a/clang/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp b/clang/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp<br>
> index 56f441ec2c8f2..93c19a688b9a8 100644<br>
> --- a/clang/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp<br>
> +++ b/clang/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp<br>
> @@ -407,11 +407,11 @@ void PlistPrinter::ReportMacroExpansions(raw_ostream &o, unsigned indent) {<br>
><br>
>      // Output the macro name.<br>
>      Indent(o, indent) << "<key>name</key>";<br>
> -    EmitString(o, *MacroName) << '\n';<br>
> +    EmitString(o, MacroName.getValue()) << '\n';<br>
><br>
>      // Output what it expands into.<br>
>      Indent(o, indent) << "<key>expansion</key>";<br>
> -    EmitString(o, *ExpansionText) << '\n';<br>
> +    EmitString(o, ExpansionText.getValue()) << '\n';<br>
><br>
>      // Finish up.<br>
>      --indent;<br>
><br>
> diff  --git a/clang/lib/Support/RISCVVIntrinsicUtils.cpp b/clang/lib/Support/RISCVVIntrinsicUtils.cpp<br>
> index 3f7c1315a4846..ebfe1a168936b 100644<br>
> --- a/clang/lib/Support/RISCVVIntrinsicUtils.cpp<br>
> +++ b/clang/lib/Support/RISCVVIntrinsicUtils.cpp<br>
> @@ -114,11 +114,11 @@ bool RVVType::verifyType() const {<br>
>      return false;<br>
>    if (isScalar())<br>
>      return true;<br>
> -  if (!Scale)<br>
> +  if (!Scale.hasValue())<br>
>      return false;<br>
>    if (isFloat() && ElementBitwidth == 8)<br>
>      return false;<br>
> -  unsigned V = *Scale;<br>
> +  unsigned V = Scale.getValue();<br>
>    switch (ElementBitwidth) {<br>
>    case 1:<br>
>    case 8:<br>
> @@ -799,10 +799,10 @@ RVVType::computeTypes(BasicType BT, int Log2LMUL, unsigned NF,<br>
>    RVVTypes Types;<br>
>    for (const PrototypeDescriptor &Proto : Prototype) {<br>
>      auto T = computeType(BT, Log2LMUL, Proto);<br>
> -    if (!T)<br>
> +    if (!T.hasValue())<br>
>        return llvm::None;<br>
>      // Record legal type index<br>
> -    Types.push_back(*T);<br>
> +    Types.push_back(T.getValue());<br>
>    }<br>
>    return Types;<br>
>  }<br>
><br>
> diff  --git a/clang/lib/Tooling/Core/Replacement.cpp b/clang/lib/Tooling/Core/Replacement.cpp<br>
> index aca2afceea446..30e1923bf1cb7 100644<br>
> --- a/clang/lib/Tooling/Core/Replacement.cpp<br>
> +++ b/clang/lib/Tooling/Core/Replacement.cpp<br>
> @@ -179,9 +179,9 @@ static std::string getReplacementErrString(replacement_error Err) {<br>
><br>
>  std::string ReplacementError::message() const {<br>
>    std::string Message = getReplacementErrString(Err);<br>
> -  if (NewReplacement)<br>
> +  if (NewReplacement.hasValue())<br>
>      Message += "\nNew replacement: " + NewReplacement->toString();<br>
> -  if (ExistingReplacement)<br>
> +  if (ExistingReplacement.hasValue())<br>
>      Message += "\nExisting replacement: " + ExistingReplacement->toString();<br>
>    return Message;<br>
>  }<br>
><br>
> diff  --git a/clang/tools/driver/driver.cpp b/clang/tools/driver/driver.cpp<br>
> index 7231297f27575..fa1f09b44f4da 100644<br>
> --- a/clang/tools/driver/driver.cpp<br>
> +++ b/clang/tools/driver/driver.cpp<br>
> @@ -406,18 +406,18 @@ int clang_main(int Argc, char **Argv) {<br>
>    if (ClangCLMode) {<br>
>      // Arguments in "CL" are prepended.<br>
>      llvm::Optional<std::string> OptCL = llvm::sys::Process::GetEnv("CL");<br>
> -    if (OptCL) {<br>
> +    if (OptCL.hasValue()) {<br>
>        SmallVector<const char *, 8> PrependedOpts;<br>
> -      getCLEnvVarOptions(*OptCL, Saver, PrependedOpts);<br>
> +      getCLEnvVarOptions(OptCL.getValue(), Saver, PrependedOpts);<br>
><br>
>        // Insert right after the program name to prepend to the argument list.<br>
>        Args.insert(Args.begin() + 1, PrependedOpts.begin(), PrependedOpts.end());<br>
>      }<br>
>      // Arguments in "_CL_" are appended.<br>
>      llvm::Optional<std::string> Opt_CL_ = llvm::sys::Process::GetEnv("_CL_");<br>
> -    if (Opt_CL_) {<br>
> +    if (Opt_CL_.hasValue()) {<br>
>        SmallVector<const char *, 8> AppendedOpts;<br>
> -      getCLEnvVarOptions(*Opt_CL_, Saver, AppendedOpts);<br>
> +      getCLEnvVarOptions(Opt_CL_.getValue(), Saver, AppendedOpts);<br>
><br>
>        // Insert at the end of the argument list to append.<br>
>        Args.append(AppendedOpts.begin(), AppendedOpts.end());<br>
><br>
> diff  --git a/clang/tools/libclang/CIndex.cpp b/clang/tools/libclang/CIndex.cpp<br>
> index 8d6c16efc3d0d..cba265b1d7d41 100644<br>
> --- a/clang/tools/libclang/CIndex.cpp<br>
> +++ b/clang/tools/libclang/CIndex.cpp<br>
> @@ -536,9 +536,9 @@ bool CursorVisitor::VisitChildren(CXCursor Cursor) {<br>
>                                             TLEnd = CXXUnit->top_level_end();<br>
>                 TL != TLEnd; ++TL) {<br>
>              const Optional<bool> V = handleDeclForVisitation(*TL);<br>
> -            if (!V)<br>
> +            if (!V.hasValue())<br>
>                continue;<br>
> -            return *V;<br>
> +            return V.getValue();<br>
>            }<br>
>          } else if (VisitDeclContext(<br>
>                         CXXUnit->getASTContext().getTranslationUnitDecl()))<br>
> @@ -641,9 +641,9 @@ bool CursorVisitor::VisitDeclContext(DeclContext *DC) {<br>
>          if (OMD->isSynthesizedAccessorStub())<br>
>            continue;<br>
>      const Optional<bool> V = handleDeclForVisitation(D);<br>
> -    if (!V)<br>
> +    if (!V.hasValue())<br>
>        continue;<br>
> -    return *V;<br>
> +    return V.getValue();<br>
>    }<br>
>    return false;<br>
>  }<br>
> @@ -675,9 +675,9 @@ Optional<bool> CursorVisitor::handleDeclForVisitation(const Decl *D) {<br>
>    }<br>
><br>
>    const Optional<bool> V = shouldVisitCursor(Cursor);<br>
> -  if (!V)<br>
> +  if (!V.hasValue())<br>
>      return None;<br>
> -  if (!*V)<br>
> +  if (!V.getValue())<br>
>      return false;<br>
>    if (Visit(Cursor, true))<br>
>      return true;<br>
> @@ -1074,9 +1074,9 @@ bool CursorVisitor::VisitObjCContainerDecl(ObjCContainerDecl *D) {<br>
>         I != E; ++I) {<br>
>      CXCursor Cursor = MakeCXCursor(*I, TU, RegionOfInterest);<br>
>      const Optional<bool> &V = shouldVisitCursor(Cursor);<br>
> -    if (!V)<br>
> +    if (!V.hasValue())<br>
>        continue;<br>
> -    if (!*V)<br>
> +    if (!V.getValue())<br>
>        return false;<br>
>      if (Visit(Cursor, true))<br>
>        return true;<br>
> @@ -8178,13 +8178,13 @@ static CXVersion convertVersion(VersionTuple In) {<br>
>    Out.Major = In.getMajor();<br>
><br>
>    Optional<unsigned> Minor = In.getMinor();<br>
> -  if (Minor)<br>
> +  if (Minor.hasValue())<br>
>      Out.Minor = *Minor;<br>
>    else<br>
>      return Out;<br>
><br>
>    Optional<unsigned> Subminor = In.getSubminor();<br>
> -  if (Subminor)<br>
> +  if (Subminor.hasValue())<br>
>      Out.Subminor = *Subminor;<br>
><br>
>    return Out;<br>
><br>
> diff  --git a/clang/unittests/ASTMatchers/Dynamic/ParserTest.cpp b/clang/unittests/ASTMatchers/Dynamic/ParserTest.cpp<br>
> index 312b9af989e3f..eaba6b762c026 100644<br>
> --- a/clang/unittests/ASTMatchers/Dynamic/ParserTest.cpp<br>
> +++ b/clang/unittests/ASTMatchers/Dynamic/ParserTest.cpp<br>
> @@ -449,27 +449,27 @@ TEST(ParserTest, ParseMultiline) {<br>
>    )<br>
>  )matcher";<br>
>      Diagnostics Error;<br>
> -    EXPECT_TRUE(Parser::parseMatcherExpression(Code, &Error));<br>
> +    EXPECT_TRUE(Parser::parseMatcherExpression(Code, &Error).hasValue());<br>
>    }<br>
><br>
>    {<br>
>      Code = R"matcher(decl(decl()<br>
>  , decl()))matcher";<br>
>      Diagnostics Error;<br>
> -    EXPECT_TRUE(Parser::parseMatcherExpression(Code, &Error).has_value());<br>
> +    EXPECT_TRUE(Parser::parseMatcherExpression(Code, &Error).hasValue());<br>
>    }<br>
><br>
>    {<br>
>      Code = R"matcher(decl(decl(),<br>
>  decl()))matcher";<br>
>      Diagnostics Error;<br>
> -    EXPECT_TRUE(Parser::parseMatcherExpression(Code, &Error).has_value());<br>
> +    EXPECT_TRUE(Parser::parseMatcherExpression(Code, &Error).hasValue());<br>
>    }<br>
><br>
>    {<br>
>      Code = "namedDecl(hasName(\"n\"\n))";<br>
>      Diagnostics Error;<br>
> -    EXPECT_TRUE(Parser::parseMatcherExpression(Code, &Error).has_value());<br>
> +    EXPECT_TRUE(Parser::parseMatcherExpression(Code, &Error).hasValue());<br>
>    }<br>
><br>
>    {<br>
><br>
> diff  --git a/clang/unittests/Analysis/FlowSensitive/TestingSupport.cpp b/clang/unittests/Analysis/FlowSensitive/TestingSupport.cpp<br>
> index 7c50453abe509..4c5efa7504048 100644<br>
> --- a/clang/unittests/Analysis/FlowSensitive/TestingSupport.cpp<br>
> +++ b/clang/unittests/Analysis/FlowSensitive/TestingSupport.cpp<br>
> @@ -40,8 +40,9 @@ isAnnotationDirectlyAfterStatement(const Stmt *Stmt, unsigned AnnotationBegin,<br>
>    auto NextToken =<br>
>        Lexer::findNextToken(Stmt->getEndLoc(), SourceManager, LangOptions);<br>
><br>
> -  while (NextToken && SourceManager.getFileOffset(NextToken->getLocation()) <<br>
> -                          AnnotationBegin) {<br>
> +  while (NextToken.hasValue() &&<br>
> +         SourceManager.getFileOffset(NextToken->getLocation()) <<br>
> +             AnnotationBegin) {<br>
>      if (NextToken->isNot(tok::semi))<br>
>        return false;<br>
><br>
><br>
> diff  --git a/clang/unittests/Analysis/FlowSensitive/TypeErasedDataflowAnalysisTest.cpp b/clang/unittests/Analysis/FlowSensitive/TypeErasedDataflowAnalysisTest.cpp<br>
> index 27b767101692e..594764b4e71bd 100644<br>
> --- a/clang/unittests/Analysis/FlowSensitive/TypeErasedDataflowAnalysisTest.cpp<br>
> +++ b/clang/unittests/Analysis/FlowSensitive/TypeErasedDataflowAnalysisTest.cpp<br>
> @@ -82,8 +82,8 @@ TEST(DataflowAnalysisTest, NoopAnalysis) {<br>
>          return NoopAnalysis(C, false);<br>
>        }));<br>
>    EXPECT_EQ(BlockStates.size(), 2u);<br>
> -  EXPECT_TRUE(BlockStates[0].has_value());<br>
> -  EXPECT_TRUE(BlockStates[1].has_value());<br>
> +  EXPECT_TRUE(BlockStates[0].hasValue());<br>
> +  EXPECT_TRUE(BlockStates[1].hasValue());<br>
>  }<br>
><br>
>  struct NonConvergingLattice {<br>
><br>
> diff  --git a/clang/unittests/Analysis/MacroExpansionContextTest.cpp b/clang/unittests/Analysis/MacroExpansionContextTest.cpp<br>
> index 88642303cf812..7cee64c1b9b0c 100644<br>
> --- a/clang/unittests/Analysis/MacroExpansionContextTest.cpp<br>
> +++ b/clang/unittests/Analysis/MacroExpansionContextTest.cpp<br>
> @@ -121,14 +121,14 @@ TEST_F(MacroExpansionContextTest, IgnoresPragmas) {<br>
>    EXPECT_EQ("\n=============== ExpansionRanges ===============\n",<br>
>              dumpExpansionRanges(*Ctx));<br>
><br>
> -  EXPECT_FALSE(Ctx->getExpandedText(at(2, 1)).has_value());<br>
> -  EXPECT_FALSE(Ctx->getOriginalText(at(2, 1)).has_value());<br>
> +  EXPECT_FALSE(Ctx->getExpandedText(at(2, 1)).hasValue());<br>
> +  EXPECT_FALSE(Ctx->getOriginalText(at(2, 1)).hasValue());<br>
><br>
> -  EXPECT_FALSE(Ctx->getExpandedText(at(2, 3)).has_value());<br>
> -  EXPECT_FALSE(Ctx->getOriginalText(at(2, 3)).has_value());<br>
> +  EXPECT_FALSE(Ctx->getExpandedText(at(2, 3)).hasValue());<br>
> +  EXPECT_FALSE(Ctx->getOriginalText(at(2, 3)).hasValue());<br>
><br>
> -  EXPECT_FALSE(Ctx->getExpandedText(at(3, 3)).has_value());<br>
> -  EXPECT_FALSE(Ctx->getOriginalText(at(3, 3)).has_value());<br>
> +  EXPECT_FALSE(Ctx->getExpandedText(at(3, 3)).hasValue());<br>
> +  EXPECT_FALSE(Ctx->getOriginalText(at(3, 3)).hasValue());<br>
>  }<br>
><br>
>  TEST_F(MacroExpansionContextTest, NoneForNonExpansionLocations) {<br>
> @@ -142,33 +142,33 @@ EMPTY zz<br>
>    //      zz<br>
><br>
>    // That's the beginning of the definition of EMPTY.<br>
> -  EXPECT_FALSE(Ctx->getExpandedText(at(2, 11)).has_value());<br>
> -  EXPECT_FALSE(Ctx->getOriginalText(at(2, 11)).has_value());<br>
> +  EXPECT_FALSE(Ctx->getExpandedText(at(2, 11)).hasValue());<br>
> +  EXPECT_FALSE(Ctx->getOriginalText(at(2, 11)).hasValue());<br>
><br>
>    // The space before the first expansion of EMPTY.<br>
> -  EXPECT_FALSE(Ctx->getExpandedText(at(3, 9)).has_value());<br>
> -  EXPECT_FALSE(Ctx->getOriginalText(at(3, 9)).has_value());<br>
> +  EXPECT_FALSE(Ctx->getExpandedText(at(3, 9)).hasValue());<br>
> +  EXPECT_FALSE(Ctx->getOriginalText(at(3, 9)).hasValue());<br>
><br>
>    // The beginning of the first expansion of EMPTY.<br>
> -  EXPECT_TRUE(Ctx->getExpandedText(at(3, 10)).has_value());<br>
> -  EXPECT_TRUE(Ctx->getOriginalText(at(3, 10)).has_value());<br>
> +  EXPECT_TRUE(Ctx->getExpandedText(at(3, 10)).hasValue());<br>
> +  EXPECT_TRUE(Ctx->getOriginalText(at(3, 10)).hasValue());<br>
><br>
>    // Pointing inside of the token EMPTY, but not at the beginning.<br>
>    // FIXME: We only deal with begin locations.<br>
> -  EXPECT_FALSE(Ctx->getExpandedText(at(3, 11)).has_value());<br>
> -  EXPECT_FALSE(Ctx->getOriginalText(at(3, 11)).has_value());<br>
> +  EXPECT_FALSE(Ctx->getExpandedText(at(3, 11)).hasValue());<br>
> +  EXPECT_FALSE(Ctx->getOriginalText(at(3, 11)).hasValue());<br>
><br>
>    // Same here.<br>
> -  EXPECT_FALSE(Ctx->getExpandedText(at(3, 12)).has_value());<br>
> -  EXPECT_FALSE(Ctx->getOriginalText(at(3, 12)).has_value());<br>
> +  EXPECT_FALSE(Ctx->getExpandedText(at(3, 12)).hasValue());<br>
> +  EXPECT_FALSE(Ctx->getOriginalText(at(3, 12)).hasValue());<br>
><br>
>    // The beginning of the last expansion of EMPTY.<br>
> -  EXPECT_TRUE(Ctx->getExpandedText(at(4, 1)).has_value());<br>
> -  EXPECT_TRUE(Ctx->getOriginalText(at(4, 1)).has_value());<br>
> +  EXPECT_TRUE(Ctx->getExpandedText(at(4, 1)).hasValue());<br>
> +  EXPECT_TRUE(Ctx->getOriginalText(at(4, 1)).hasValue());<br>
><br>
>    // Same as for the 3:11 case.<br>
> -  EXPECT_FALSE(Ctx->getExpandedText(at(4, 2)).has_value());<br>
> -  EXPECT_FALSE(Ctx->getOriginalText(at(4, 2)).has_value());<br>
> +  EXPECT_FALSE(Ctx->getExpandedText(at(4, 2)).hasValue());<br>
> +  EXPECT_FALSE(Ctx->getOriginalText(at(4, 2)).hasValue());<br>
>  }<br>
><br>
>  TEST_F(MacroExpansionContextTest, EmptyExpansions) {<br>
> @@ -181,14 +181,14 @@ EMPTY zz<br>
>    //  A b cd ef gh<br>
>    //      zz<br>
><br>
> -  EXPECT_EQ("", *Ctx->getExpandedText(at(3, 10)));<br>
> -  EXPECT_EQ("EMPTY", *Ctx->getOriginalText(at(3, 10)));<br>
> +  EXPECT_EQ("", Ctx->getExpandedText(at(3, 10)).getValue());<br>
> +  EXPECT_EQ("EMPTY", Ctx->getOriginalText(at(3, 10)).getValue());<br>
><br>
> -  EXPECT_EQ("", *Ctx->getExpandedText(at(3, 19)));<br>
> -  EXPECT_EQ("EMPTY", *Ctx->getOriginalText(at(3, 19)));<br>
> +  EXPECT_EQ("", Ctx->getExpandedText(at(3, 19)).getValue());<br>
> +  EXPECT_EQ("EMPTY", Ctx->getOriginalText(at(3, 19)).getValue());<br>
><br>
> -  EXPECT_EQ("", *Ctx->getExpandedText(at(4, 1)));<br>
> -  EXPECT_EQ("EMPTY", *Ctx->getOriginalText(at(4, 1)));<br>
> +  EXPECT_EQ("", Ctx->getExpandedText(at(4, 1)).getValue());<br>
> +  EXPECT_EQ("EMPTY", Ctx->getOriginalText(at(4, 1)).getValue());<br>
>  }<br>
><br>
>  TEST_F(MacroExpansionContextTest, TransitiveExpansions) {<br>
> @@ -200,10 +200,10 @@ TEST_F(MacroExpansionContextTest, TransitiveExpansions) {<br>
>    // After preprocessing:<br>
>    //  A b cd ) 1 ef gh<br>
><br>
> -  EXPECT_EQ("WOOF", *Ctx->getOriginalText(at(4, 10)));<br>
> +  EXPECT_EQ("WOOF", Ctx->getOriginalText(at(4, 10)).getValue());<br>
><br>
> -  EXPECT_EQ("", *Ctx->getExpandedText(at(4, 18)));<br>
> -  EXPECT_EQ("EMPTY", *Ctx->getOriginalText(at(4, 18)));<br>
> +  EXPECT_EQ("", Ctx->getExpandedText(at(4, 18)).getValue());<br>
> +  EXPECT_EQ("EMPTY", Ctx->getOriginalText(at(4, 18)).getValue());<br>
>  }<br>
><br>
>  TEST_F(MacroExpansionContextTest, MacroFunctions) {<br>
> @@ -219,17 +219,17 @@ TEST_F(MacroExpansionContextTest, MacroFunctions) {<br>
>    //  WOOF( ) ) ) 1<br>
>    //  bar barr( ) ) ) 1( ) ) ) 1),,),')<br>
><br>
> -  EXPECT_EQ("$$ ef ()))1", *Ctx->getExpandedText(at(4, 10)));<br>
> -  EXPECT_EQ("WOOF($$ ef)", *Ctx->getOriginalText(at(4, 10)));<br>
> +  EXPECT_EQ("$$ ef ()))1", Ctx->getExpandedText(at(4, 10)).getValue());<br>
> +  EXPECT_EQ("WOOF($$ ef)", Ctx->getOriginalText(at(4, 10)).getValue());<br>
><br>
> -  EXPECT_EQ("", Ctx->getExpandedText(at(4, 22)).value());<br>
> -  EXPECT_EQ("EMPTY", Ctx->getOriginalText(at(4, 22)).value());<br>
> +  EXPECT_EQ("", Ctx->getExpandedText(at(4, 22)).getValue());<br>
> +  EXPECT_EQ("EMPTY", Ctx->getOriginalText(at(4, 22)).getValue());<br>
><br>
> -  EXPECT_EQ("WOOF ()))1", Ctx->getExpandedText(at(5, 3)).value());<br>
> -  EXPECT_EQ("WOOF(WOOF)", Ctx->getOriginalText(at(5, 3)).value());<br>
> +  EXPECT_EQ("WOOF ()))1", Ctx->getExpandedText(at(5, 3)).getValue());<br>
> +  EXPECT_EQ("WOOF(WOOF)", Ctx->getOriginalText(at(5, 3)).getValue());<br>
><br>
> -  EXPECT_EQ("bar barr ()))1()))1", Ctx->getExpandedText(at(6, 3)).value());<br>
> -  EXPECT_EQ("WOOF(WOOF(bar barr))", Ctx->getOriginalText(at(6, 3)).value());<br>
> +  EXPECT_EQ("bar barr ()))1()))1", Ctx->getExpandedText(at(6, 3)).getValue());<br>
> +  EXPECT_EQ("WOOF(WOOF(bar barr))", Ctx->getOriginalText(at(6, 3)).getValue());<br>
>  }<br>
><br>
>  TEST_F(MacroExpansionContextTest, VariadicMacros) {<br>
> @@ -251,23 +251,24 @@ TEST_F(MacroExpansionContextTest, VariadicMacros) {<br>
>    //  fprintf (stderr, "success!\n" );<br>
><br>
>    EXPECT_EQ(R"(fprintf (stderr ,"success!\n",))",<br>
> -            Ctx->getExpandedText(at(3, 3)).value());<br>
> +            Ctx->getExpandedText(at(3, 3)).getValue());<br>
>    EXPECT_EQ(R"(eprintf("success!\n", ))",<br>
> -            Ctx->getOriginalText(at(3, 3)).value());<br>
> +            Ctx->getOriginalText(at(3, 3)).getValue());<br>
><br>
>    EXPECT_EQ(R"(fprintf (stderr ,"success!\n",))",<br>
> -            Ctx->getExpandedText(at(4, 3)).value());<br>
> -  EXPECT_EQ(R"(eprintf("success!\n"))", Ctx->getOriginalText(at(4, 3)).value());<br>
> +            Ctx->getExpandedText(at(4, 3)).getValue());<br>
> +  EXPECT_EQ(R"(eprintf("success!\n"))",<br>
> +            Ctx->getOriginalText(at(4, 3)).getValue());<br>
><br>
>    EXPECT_EQ(R"(fprintf (stderr ,"success!\n"))",<br>
> -            Ctx->getExpandedText(at(8, 3)).value());<br>
> +            Ctx->getExpandedText(at(8, 3)).getValue());<br>
>    EXPECT_EQ(R"(eprintf2("success!\n", ))",<br>
> -            Ctx->getOriginalText(at(8, 3)).value());<br>
> +            Ctx->getOriginalText(at(8, 3)).getValue());<br>
><br>
>    EXPECT_EQ(R"(fprintf (stderr ,"success!\n"))",<br>
> -            Ctx->getExpandedText(at(9, 3)).value());<br>
> +            Ctx->getExpandedText(at(9, 3)).getValue());<br>
>    EXPECT_EQ(R"(eprintf2("success!\n"))",<br>
> -            Ctx->getOriginalText(at(9, 3)).value());<br>
> +            Ctx->getOriginalText(at(9, 3)).getValue());<br>
>  }<br>
><br>
>  TEST_F(MacroExpansionContextTest, ConcatenationMacros) {<br>
> @@ -285,12 +286,12 @@ TEST_F(MacroExpansionContextTest, ConcatenationMacros) {<br>
>    //  };<br>
><br>
>    EXPECT_EQ(R"({"quit",quit_command })",<br>
> -            Ctx->getExpandedText(at(4, 5)).value());<br>
> -  EXPECT_EQ("COMMAND(quit)", Ctx->getOriginalText(at(4, 5)).value());<br>
> +            Ctx->getExpandedText(at(4, 5)).getValue());<br>
> +  EXPECT_EQ("COMMAND(quit)", Ctx->getOriginalText(at(4, 5)).getValue());<br>
><br>
>    EXPECT_EQ(R"({"help",help_command })",<br>
> -            Ctx->getExpandedText(at(5, 5)).value());<br>
> -  EXPECT_EQ("COMMAND(help)", Ctx->getOriginalText(at(5, 5)).value());<br>
> +            Ctx->getExpandedText(at(5, 5)).getValue());<br>
> +  EXPECT_EQ("COMMAND(help)", Ctx->getOriginalText(at(5, 5)).getValue());<br>
>  }<br>
><br>
>  TEST_F(MacroExpansionContextTest, StringizingMacros) {<br>
> @@ -315,14 +316,14 @@ TEST_F(MacroExpansionContextTest, StringizingMacros) {<br>
><br>
>    EXPECT_EQ(<br>
>        R"(do {if (x ==0)fprintf (stderr ,"Warning: ""x == 0""\n");}while (0))",<br>
> -      Ctx->getExpandedText(at(6, 3)).value());<br>
> -  EXPECT_EQ("WARN_IF (x == 0)", Ctx->getOriginalText(at(6, 3)).value());<br>
> +      Ctx->getExpandedText(at(6, 3)).getValue());<br>
> +  EXPECT_EQ("WARN_IF (x == 0)", Ctx->getOriginalText(at(6, 3)).getValue());<br>
><br>
> -  EXPECT_EQ(R"("foo")", Ctx->getExpandedText(at(11, 3)).value());<br>
> -  EXPECT_EQ("str (foo)", Ctx->getOriginalText(at(11, 3)).value());<br>
> +  EXPECT_EQ(R"("foo")", Ctx->getExpandedText(at(11, 3)).getValue());<br>
> +  EXPECT_EQ("str (foo)", Ctx->getOriginalText(at(11, 3)).getValue());<br>
><br>
> -  EXPECT_EQ(R"("4")", Ctx->getExpandedText(at(12, 3)).value());<br>
> -  EXPECT_EQ("xstr (foo)", Ctx->getOriginalText(at(12, 3)).value());<br>
> +  EXPECT_EQ(R"("4")", Ctx->getExpandedText(at(12, 3)).getValue());<br>
> +  EXPECT_EQ("xstr (foo)", Ctx->getOriginalText(at(12, 3)).getValue());<br>
>  }<br>
><br>
>  TEST_F(MacroExpansionContextTest, StringizingVariadicMacros) {<br>
> @@ -351,18 +352,18 @@ TEST_F(MacroExpansionContextTest, StringizingVariadicMacros) {<br>
><br>
>    EXPECT_EQ("zz !apple !x *apple !x !**y (apple )zz !apple !x *apple !x !**y "<br>
>              "(appleapple ))))",<br>
> -            Ctx->getExpandedText(at(11, 3)).value());<br>
> -  EXPECT_EQ("q(g)", Ctx->getOriginalText(at(11, 3)).value());<br>
> +            Ctx->getExpandedText(at(11, 3)).getValue());<br>
> +  EXPECT_EQ("q(g)", Ctx->getOriginalText(at(11, 3)).getValue());<br>
><br>
>    EXPECT_EQ(R"res("apple"(apple )"apple"(appleapple )))))res",<br>
> -            Ctx->getExpandedText(at(12, 3)).value());<br>
> -  EXPECT_EQ("q(xstr)", Ctx->getOriginalText(at(12, 3)).value());<br>
> +            Ctx->getExpandedText(at(12, 3)).getValue());<br>
> +  EXPECT_EQ("q(xstr)", Ctx->getOriginalText(at(12, 3)).getValue());<br>
><br>
> -  EXPECT_EQ("zz !*)!x )!**y ", Ctx->getExpandedText(at(13, 3)).value());<br>
> -  EXPECT_EQ("g(RParen2x)", Ctx->getOriginalText(at(13, 3)).value());<br>
> +  EXPECT_EQ("zz !*)!x )!**y ", Ctx->getExpandedText(at(13, 3)).getValue());<br>
> +  EXPECT_EQ("g(RParen2x)", Ctx->getOriginalText(at(13, 3)).getValue());<br>
><br>
> -  EXPECT_EQ("!))*))", Ctx->getExpandedText(at(14, 3)).value());<br>
> -  EXPECT_EQ("f( RParen2x )", Ctx->getOriginalText(at(14, 3)).value());<br>
> +  EXPECT_EQ("!))*))", Ctx->getExpandedText(at(14, 3)).getValue());<br>
> +  EXPECT_EQ("f( RParen2x )", Ctx->getOriginalText(at(14, 3)).getValue());<br>
>  }<br>
><br>
>  TEST_F(MacroExpansionContextTest, RedefUndef) {<br>
> @@ -380,15 +381,15 @@ TEST_F(MacroExpansionContextTest, RedefUndef) {<br>
>    //  Hi(Hi)<br>
><br>
>    // FIXME: Extra space follows every identifier.<br>
> -  EXPECT_EQ("Welcome Adam ", Ctx->getExpandedText(at(3, 3)).value());<br>
> -  EXPECT_EQ("Hi(Adam)", Ctx->getOriginalText(at(3, 3)).value());<br>
> +  EXPECT_EQ("Welcome Adam ", Ctx->getExpandedText(at(3, 3)).getValue());<br>
> +  EXPECT_EQ("Hi(Adam)", Ctx->getOriginalText(at(3, 3)).getValue());<br>
><br>
> -  EXPECT_EQ("Willkommen ", Ctx->getExpandedText(at(5, 3)).value());<br>
> -  EXPECT_EQ("Hi", Ctx->getOriginalText(at(5, 3)).value());<br>
> +  EXPECT_EQ("Willkommen ", Ctx->getExpandedText(at(5, 3)).getValue());<br>
> +  EXPECT_EQ("Hi", Ctx->getOriginalText(at(5, 3)).getValue());<br>
><br>
>    // There was no macro expansion at 7:3, we should expect None.<br>
> -  EXPECT_FALSE(Ctx->getExpandedText(at(7, 3)).has_value());<br>
> -  EXPECT_FALSE(Ctx->getOriginalText(at(7, 3)).has_value());<br>
> +  EXPECT_FALSE(Ctx->getExpandedText(at(7, 3)).hasValue());<br>
> +  EXPECT_FALSE(Ctx->getOriginalText(at(7, 3)).hasValue());<br>
>  }<br>
><br>
>  TEST_F(MacroExpansionContextTest, UnbalacedParenthesis) {<br>
> @@ -410,11 +411,12 @@ TEST_F(MacroExpansionContextTest, UnbalacedParenthesis) {<br>
>    //  fun();<br>
>    //  int x = ((1, fun(), 1, fun(), 1 ));<br>
><br>
> -  EXPECT_EQ("fun ()", Ctx->getExpandedText(at(8, 3)).value());<br>
> -  EXPECT_EQ("applyInt )", Ctx->getOriginalText(at(8, 3)).value());<br>
> +  EXPECT_EQ("fun ()", Ctx->getExpandedText(at(8, 3)).getValue());<br>
> +  EXPECT_EQ("applyInt )", Ctx->getOriginalText(at(8, 3)).getValue());<br>
><br>
> -  EXPECT_EQ("((1,fun (),1,fun (),1", Ctx->getExpandedText(at(13, 12)).value());<br>
> -  EXPECT_EQ("f(f(1))", Ctx->getOriginalText(at(13, 12)).value());<br>
> +  EXPECT_EQ("((1,fun (),1,fun (),1",<br>
> +            Ctx->getExpandedText(at(13, 12)).getValue());<br>
> +  EXPECT_EQ("f(f(1))", Ctx->getOriginalText(at(13, 12)).getValue());<br>
>  }<br>
><br>
>  } // namespace<br>
><br>
> diff  --git a/clang/unittests/Basic/DarwinSDKInfoTest.cpp b/clang/unittests/Basic/DarwinSDKInfoTest.cpp<br>
> index d56e13d839162..8d720c2e0a6f0 100644<br>
> --- a/clang/unittests/Basic/DarwinSDKInfoTest.cpp<br>
> +++ b/clang/unittests/Basic/DarwinSDKInfoTest.cpp<br>
> @@ -64,14 +64,14 @@ TEST(DarwinSDKInfo, VersionMappingParseEmpty) {<br>
>    llvm::json::Object Obj({});<br>
>    EXPECT_FALSE(<br>
>        DarwinSDKInfo::RelatedTargetVersionMapping::parseJSON(Obj, VersionTuple())<br>
> -          .has_value());<br>
> +          .hasValue());<br>
>  }<br>
><br>
>  TEST(DarwinSDKInfo, VersionMappingParseError) {<br>
>    llvm::json::Object Obj({{"test", "1.2"}});<br>
>    EXPECT_FALSE(<br>
>        DarwinSDKInfo::RelatedTargetVersionMapping::parseJSON(Obj, VersionTuple())<br>
> -          .has_value());<br>
> +          .hasValue());<br>
>  }<br>
><br>
>  TEST(DarwinSDKInfoTest, ParseAndTestMappingMacCatalyst) {<br>
><br>
> diff  --git a/clang/unittests/DirectoryWatcher/DirectoryWatcherTest.cpp b/clang/unittests/DirectoryWatcher/DirectoryWatcherTest.cpp<br>
> index d9c12450c6189..5b76480d3b869 100644<br>
> --- a/clang/unittests/DirectoryWatcher/DirectoryWatcherTest.cpp<br>
> +++ b/clang/unittests/DirectoryWatcher/DirectoryWatcherTest.cpp<br>
> @@ -258,12 +258,12 @@ void checkEventualResultWithTimeout(VerifyingConsumer &TestConsumer) {<br>
>                std::future_status::ready)<br>
>        << "The expected result state wasn't reached before the time-out.";<br>
>    std::unique_lock<std::mutex> L(TestConsumer.Mtx);<br>
> -  EXPECT_TRUE(TestConsumer.result().has_value());<br>
> -  if (TestConsumer.result()) {<br>
> +  EXPECT_TRUE(TestConsumer.result().hasValue());<br>
> +  if (TestConsumer.result().hasValue()) {<br>
>      EXPECT_TRUE(*TestConsumer.result());<br>
>    }<br>
> -  if ((TestConsumer.result() && !*TestConsumer.result()) ||<br>
> -      !TestConsumer.result())<br>
> +  if ((TestConsumer.result().hasValue() && !TestConsumer.result().getValue()) ||<br>
> +      !TestConsumer.result().hasValue())<br>
>      TestConsumer.printUnmetExpectations(llvm::outs());<br>
>  }<br>
>  } // namespace<br>
><br>
> diff  --git a/clang/unittests/Lex/HeaderSearchTest.cpp b/clang/unittests/Lex/HeaderSearchTest.cpp<br>
> index bd9d31da1cf7f..87d1c01650987 100644<br>
> --- a/clang/unittests/Lex/HeaderSearchTest.cpp<br>
> +++ b/clang/unittests/Lex/HeaderSearchTest.cpp<br>
> @@ -200,9 +200,9 @@ TEST_F(HeaderSearchTest, HeaderFrameworkLookup) {<br>
>        /*RelativePath=*/nullptr, /*RequestingModule=*/nullptr,<br>
>        /*SuggestedModule=*/nullptr, /*IsMapped=*/nullptr, &IsFrameworkFound);<br>
><br>
> -  EXPECT_TRUE(FoundFile.has_value());<br>
> +  EXPECT_TRUE(FoundFile.hasValue());<br>
>    EXPECT_TRUE(IsFrameworkFound);<br>
> -  auto &FE = *FoundFile;<br>
> +  auto &FE = FoundFile.getValue();<br>
>    auto FI = Search.getExistingFileInfo(FE);<br>
>    EXPECT_TRUE(FI);<br>
>    EXPECT_TRUE(FI->IsValid);<br>
> @@ -269,9 +269,9 @@ TEST_F(HeaderSearchTest, HeaderMapFrameworkLookup) {<br>
>        /*SuggestedModule=*/nullptr, &IsMapped,<br>
>        /*IsFrameworkFound=*/nullptr);<br>
><br>
> -  EXPECT_TRUE(FoundFile.has_value());<br>
> +  EXPECT_TRUE(FoundFile.hasValue());<br>
>    EXPECT_TRUE(IsMapped);<br>
> -  auto &FE = *FoundFile;<br>
> +  auto &FE = FoundFile.getValue();<br>
>    auto FI = Search.getExistingFileInfo(FE);<br>
>    EXPECT_TRUE(FI);<br>
>    EXPECT_TRUE(FI->IsValid);<br>
><br>
> diff  --git a/clang/unittests/StaticAnalyzer/SValTest.cpp b/clang/unittests/StaticAnalyzer/SValTest.cpp<br>
> index c41a501b07f8f..1a41faf098996 100644<br>
> --- a/clang/unittests/StaticAnalyzer/SValTest.cpp<br>
> +++ b/clang/unittests/StaticAnalyzer/SValTest.cpp<br>
> @@ -305,13 +305,13 @@ void foo(int x) {<br>
>    EXPECT_EQ("TestUnion", CRecordType->getDecl()->getName());<br>
><br>
>    auto D = getByName("d").getAs<nonloc::CompoundVal>();<br>
> -  ASSERT_TRUE(D.has_value());<br>
> +  ASSERT_TRUE(D.hasValue());<br>
>    auto Begin = D->begin();<br>
>    ASSERT_NE(D->end(), Begin);<br>
>    ++Begin;<br>
>    ASSERT_EQ(D->end(), Begin);<br>
>    auto LD = D->begin()->getAs<nonloc::LazyCompoundVal>();<br>
> -  ASSERT_TRUE(LD.has_value());<br>
> +  ASSERT_TRUE(LD.hasValue());<br>
>    auto LDT = LD->getType(Context);<br>
>    ASSERT_FALSE(LDT.isNull());<br>
>    const auto *DRecordType = dyn_cast<RecordType>(LDT);<br>
><br>
> diff  --git a/clang/unittests/Tooling/RefactoringTest.cpp b/clang/unittests/Tooling/RefactoringTest.cpp<br>
> index f0edff6052c9a..c71a7243396a1 100644<br>
> --- a/clang/unittests/Tooling/RefactoringTest.cpp<br>
> +++ b/clang/unittests/Tooling/RefactoringTest.cpp<br>
> @@ -118,18 +118,18 @@ static bool checkReplacementError(llvm::Error &&Error,<br>
>        OS << "Unexpected error code: " << int(RE.get()) << "\n";<br>
>      if (ExpectedExisting != RE.getExistingReplacement()) {<br>
>        OS << "Expected Existing != Actual Existing.\n";<br>
> -      if (ExpectedExisting)<br>
> +      if (ExpectedExisting.hasValue())<br>
>          OS << "Expected existing replacement: " << ExpectedExisting->toString()<br>
>             << "\n";<br>
> -      if (RE.getExistingReplacement())<br>
> +      if (RE.getExistingReplacement().hasValue())<br>
>          OS << "Actual existing replacement: "<br>
>             << RE.getExistingReplacement()->toString() << "\n";<br>
>      }<br>
>      if (ExpectedNew != RE.getNewReplacement()) {<br>
>        OS << "Expected New != Actual New.\n";<br>
> -      if (ExpectedNew)<br>
> +      if (ExpectedNew.hasValue())<br>
>          OS << "Expected new replacement: " << ExpectedNew->toString() << "\n";<br>
> -      if (RE.getNewReplacement())<br>
> +      if (RE.getNewReplacement().hasValue())<br>
>          OS << "Actual new replacement: " << RE.getNewReplacement()->toString()<br>
>             << "\n";<br>
>      }<br>
><br>
> diff  --git a/clang/utils/TableGen/RISCVVEmitter.cpp b/clang/utils/TableGen/RISCVVEmitter.cpp<br>
> index f6678cc611d34..7987d8954eb17 100644<br>
> --- a/clang/utils/TableGen/RISCVVEmitter.cpp<br>
> +++ b/clang/utils/TableGen/RISCVVEmitter.cpp<br>
> @@ -217,22 +217,22 @@ void RVVEmitter::createHeader(raw_ostream &OS) {<br>
>    for (int Log2LMUL : Log2LMULs) {<br>
>      auto T = RVVType::computeType(BasicType::Int8, Log2LMUL,<br>
>                                    PrototypeDescriptor::Mask);<br>
> -    if (T)<br>
> -      printType(*T);<br>
> +    if (T.hasValue())<br>
> +      printType(T.getValue());<br>
>    }<br>
>    // Print RVV int/float types.<br>
>    for (char I : StringRef("csil")) {<br>
>      BasicType BT = ParseBasicType(I);<br>
>      for (int Log2LMUL : Log2LMULs) {<br>
>        auto T = RVVType::computeType(BT, Log2LMUL, PrototypeDescriptor::Vector);<br>
> -      if (T) {<br>
> -        printType(*T);<br>
> +      if (T.hasValue()) {<br>
> +        printType(T.getValue());<br>
>          auto UT = RVVType::computeType(<br>
>              BT, Log2LMUL,<br>
>              PrototypeDescriptor(BaseTypeModifier::Vector,<br>
>                                  VectorTypeModifier::NoModifier,<br>
>                                  TypeModifier::UnsignedInteger));<br>
> -        printType(*UT);<br>
> +        printType(UT.getValue());<br>
>        }<br>
>      }<br>
>    }<br>
> @@ -240,8 +240,8 @@ void RVVEmitter::createHeader(raw_ostream &OS) {<br>
>    for (int Log2LMUL : Log2LMULs) {<br>
>      auto T = RVVType::computeType(BasicType::Float16, Log2LMUL,<br>
>                                    PrototypeDescriptor::Vector);<br>
> -    if (T)<br>
> -      printType(*T);<br>
> +    if (T.hasValue())<br>
> +      printType(T.getValue());<br>
>    }<br>
>    OS << "#endif\n";<br>
><br>
> @@ -249,8 +249,8 @@ void RVVEmitter::createHeader(raw_ostream &OS) {<br>
>    for (int Log2LMUL : Log2LMULs) {<br>
>      auto T = RVVType::computeType(BasicType::Float32, Log2LMUL,<br>
>                                    PrototypeDescriptor::Vector);<br>
> -    if (T)<br>
> -      printType(*T);<br>
> +    if (T.hasValue())<br>
> +      printType(T.getValue());<br>
>    }<br>
>    OS << "#endif\n";<br>
><br>
> @@ -258,8 +258,8 @@ void RVVEmitter::createHeader(raw_ostream &OS) {<br>
>    for (int Log2LMUL : Log2LMULs) {<br>
>      auto T = RVVType::computeType(BasicType::Float64, Log2LMUL,<br>
>                                    PrototypeDescriptor::Vector);<br>
> -    if (T)<br>
> -      printType(*T);<br>
> +    if (T.hasValue())<br>
> +      printType(T.getValue());<br>
>    }<br>
>    OS << "#endif\n\n";<br>
><br>
><br>
> diff  --git a/flang/include/flang/Lower/IterationSpace.h b/flang/include/flang/Lower/IterationSpace.h<br>
> index ed906e922b31b..055882c5770d1 100644<br>
> --- a/flang/include/flang/Lower/IterationSpace.h<br>
> +++ b/flang/include/flang/Lower/IterationSpace.h<br>
> @@ -446,9 +446,7 @@ class ExplicitIterSpace {<br>
>    /// `load` must be a LHS array_load. Returns `llvm::None` on error.<br>
>    llvm::Optional<size_t> findArgPosition(fir::ArrayLoadOp load);<br>
><br>
> -  bool isLHS(fir::ArrayLoadOp load) {<br>
> -    return findArgPosition(load).has_value();<br>
> -  }<br>
> +  bool isLHS(fir::ArrayLoadOp load) { return findArgPosition(load).hasValue(); }<br>
><br>
>    /// `load` must be a LHS array_load. Determine the threaded inner argument<br>
>    /// corresponding to this load.<br>
> @@ -467,15 +465,15 @@ class ExplicitIterSpace {<br>
><br>
>    llvm::Optional<fir::ArrayLoadOp> getLhsLoad(size_t i) {<br>
>      assert(i < lhsBases.size());<br>
> -    if (lhsBases[counter])<br>
> -      return findBinding(*lhsBases[counter]);<br>
> +    if (lhsBases[counter].hasValue())<br>
> +      return findBinding(lhsBases[counter].getValue());<br>
>      return llvm::None;<br>
>    }<br>
><br>
>    /// Return the outermost loop in this FORALL nest.<br>
>    fir::DoLoopOp getOuterLoop() {<br>
> -    assert(outerLoop);<br>
> -    return *outerLoop;<br>
> +    assert(outerLoop.hasValue());<br>
> +    return outerLoop.getValue();<br>
>    }<br>
><br>
>    /// Return the statement context for the entire, outermost FORALL construct.<br>
><br>
> diff  --git a/flang/lib/Lower/Bridge.cpp b/flang/lib/Lower/Bridge.cpp<br>
> index 745a7d497e263..b7d180ed73207 100644<br>
> --- a/flang/lib/Lower/Bridge.cpp<br>
> +++ b/flang/lib/Lower/Bridge.cpp<br>
> @@ -2227,10 +2227,10 @@ class FirConverter : public Fortran::lower::AbstractConverter {<br>
>                  llvm_unreachable("unknown category");<br>
>                }<br>
>                if (lhsIsWholeAllocatable)<br>
> -                fir::factory::finalizeRealloc(*builder, loc, *lhsMutableBox,<br>
> -                                              /*lbounds=*/llvm::None,<br>
> -                                              /*takeLboundsIfRealloc=*/false,<br>
> -                                              *lhsRealloc);<br>
> +                fir::factory::finalizeRealloc(<br>
> +                    *builder, loc, lhsMutableBox.getValue(),<br>
> +                    /*lbounds=*/llvm::None, /*takeLboundsIfRealloc=*/false,<br>
> +                    lhsRealloc.getValue());<br>
>              },<br>
><br>
>              // [2] User defined assignment. If the context is a scalar<br>
><br>
> diff  --git a/flang/lib/Lower/ConvertExpr.cpp b/flang/lib/Lower/ConvertExpr.cpp<br>
> index 0558a10c23fb6..07eceb74e400a 100644<br>
> --- a/flang/lib/Lower/ConvertExpr.cpp<br>
> +++ b/flang/lib/Lower/ConvertExpr.cpp<br>
> @@ -2607,9 +2607,9 @@ class ScalarExprLowering {<br>
>                                              funcSymbolAttr, operands);<br>
><br>
>      if (caller.mustSaveResult())<br>
> -      builder.create<fir::SaveResultOp>(loc, call.getResult(0),<br>
> -                                        fir::getBase(*allocatedResult),<br>
> -                                        arrayResultShape, resultLengths);<br>
> +      builder.create<fir::SaveResultOp>(<br>
> +          loc, call.getResult(0), fir::getBase(allocatedResult.getValue()),<br>
> +          arrayResultShape, resultLengths);<br>
><br>
>      if (allocatedResult) {<br>
>        allocatedResult->match(<br>
> @@ -4110,10 +4110,10 @@ class ArrayExprLowering {<br>
>                                             mlir::Value{});<br>
>        }<br>
>      } else if (isBoundsRemap()) {<br>
> -      auto lbs = *lbounds;<br>
> +      auto lbs = lbounds.getValue();<br>
>        if (lbs.size() > 0) {<br>
>          // Rebox the value with user-specified shift and shape.<br>
> -        auto shapeShiftArgs = flatZip(lbs, *ubounds);<br>
> +        auto shapeShiftArgs = flatZip(lbs, ubounds.getValue());<br>
>          auto shapeTy = fir::ShapeShiftType::get(eleTy.getContext(), lbs.size());<br>
>          mlir::Value shapeShift =<br>
>              builder.create<fir::ShapeShiftOp>(loc, shapeTy, shapeShiftArgs);<br>
> @@ -4185,8 +4185,8 @@ class ArrayExprLowering {<br>
>      auto [iterSpace, insPt] = genIterSpace(resultTy);<br>
>      auto exv = f(iterSpace);<br>
>      iterSpace.setElement(std::move(exv));<br>
> -    auto lambda = ccStoreToDest<br>
> -                      ? *ccStoreToDest<br>
> +    auto lambda = ccStoreToDest.hasValue()<br>
> +                      ? ccStoreToDest.getValue()<br>
>                        : defaultStoreToDestination(/*substring=*/nullptr);<br>
>      mlir::Value updVal = fir::getBase(lambda(iterSpace));<br>
>      finalizeElementCtx();<br>
> @@ -4522,8 +4522,8 @@ class ArrayExprLowering {<br>
>      }<br>
><br>
>      // Generate the lazy mask allocation, if one was given.<br>
> -    if (ccPrelude)<br>
> -      ccPrelude.value()(shape);<br>
> +    if (ccPrelude.hasValue())<br>
> +      ccPrelude.getValue()(shape);<br>
><br>
>      // Now handle the implicit loops.<br>
>      mlir::Value inner = explicitSpaceIsActive()<br>
> @@ -4582,8 +4582,8 @@ class ArrayExprLowering {<br>
>    fir::ArrayLoadOp<br>
>    createAndLoadSomeArrayTemp(mlir::Type type,<br>
>                               llvm::ArrayRef<mlir::Value> shape) {<br>
> -    if (ccLoadDest)<br>
> -      return ccLoadDest.value()(shape);<br>
> +    if (ccLoadDest.hasValue())<br>
> +      return ccLoadDest.getValue()(shape);<br>
>      auto seqTy = type.dyn_cast<fir::SequenceType>();<br>
>      assert(seqTy && "must be an array");<br>
>      mlir::Location loc = getLoc();<br>
> @@ -5810,8 +5810,8 @@ class ArrayExprLowering {<br>
>        // always loaded at the beginning of the statement and merged at the<br>
>        // end.<br>
>        destination = arrLoad;<br>
> -      auto lambda = ccStoreToDest<br>
> -                        ? ccStoreToDest.value()<br>
> +      auto lambda = ccStoreToDest.hasValue()<br>
> +                        ? ccStoreToDest.getValue()<br>
>                          : defaultStoreToDestination(components.substring);<br>
>        return [=](IterSpace iters) -> ExtValue { return lambda(iters); };<br>
>      }<br>
> @@ -6464,8 +6464,8 @@ class ArrayExprLowering {<br>
><br>
>      // Return the continuation.<br>
>      if (fir::isa_char(seqTy.getEleTy())) {<br>
> -      if (charLen) {<br>
> -        auto len = builder.create<fir::LoadOp>(loc, charLen.value());<br>
> +      if (charLen.hasValue()) {<br>
> +        auto len = builder.create<fir::LoadOp>(loc, charLen.getValue());<br>
>          return genarr(fir::CharArrayBoxValue{mem, len, extents});<br>
>        }<br>
>        return genarr(fir::CharArrayBoxValue{mem, zero, extents});<br>
> @@ -7181,14 +7181,14 @@ class ArrayExprLowering {<br>
><br>
>    void setUnordered(bool b) { unordered = b; }<br>
><br>
> -  inline bool isPointerAssignment() const { return lbounds.has_value(); }<br>
> +  inline bool isPointerAssignment() const { return lbounds.hasValue(); }<br>
><br>
>    inline bool isBoundsSpec() const {<br>
> -    return isPointerAssignment() && !ubounds.has_value();<br>
> +    return isPointerAssignment() && !ubounds.hasValue();<br>
>    }<br>
><br>
>    inline bool isBoundsRemap() const {<br>
> -    return isPointerAssignment() && ubounds.has_value();<br>
> +    return isPointerAssignment() && ubounds.hasValue();<br>
>    }<br>
><br>
>    void setPointerAssignmentBounds(<br>
> @@ -7515,8 +7515,8 @@ void Fortran::lower::createArrayLoads(<br>
>    auto genLoad = [&](const auto *x) -> fir::ArrayLoadOp {<br>
>      return genArrayLoad(loc, converter, builder, x, symMap, stmtCtx);<br>
>    };<br>
> -  if (esp.lhsBases[counter]) {<br>
> -    auto &base = *esp.lhsBases[counter];<br>
> +  if (esp.lhsBases[counter].hasValue()) {<br>
> +    auto &base = esp.lhsBases[counter].getValue();<br>
>      auto load = std::visit(genLoad, base);<br>
>      esp.initialArgs.push_back(load);<br>
>      esp.resetInnerArgs();<br>
> @@ -7535,13 +7535,13 @@ void Fortran::lower::createArrayMergeStores(<br>
>    // Gen the fir.array_merge_store ops for all LHS arrays.<br>
>    for (auto i : llvm::enumerate(esp.getOuterLoop().getResults()))<br>
>      if (llvm::Optional<fir::ArrayLoadOp> ldOpt = esp.getLhsLoad(i.index())) {<br>
> -      fir::ArrayLoadOp load = *ldOpt;<br>
> +      fir::ArrayLoadOp load = ldOpt.getValue();<br>
>        builder.create<fir::ArrayMergeStoreOp>(loc, load, i.value(),<br>
>                                               load.getMemref(), load.getSlice(),<br>
>                                               load.getTypeparams());<br>
>      }<br>
> -  if (esp.loopCleanup) {<br>
> -    esp.loopCleanup.value()(builder);<br>
> +  if (esp.loopCleanup.hasValue()) {<br>
> +    esp.loopCleanup.getValue()(builder);<br>
>      esp.loopCleanup = llvm::None;<br>
>    }<br>
>    esp.initialArgs.clear();<br>
><br>
> diff  --git a/flang/lib/Lower/CustomIntrinsicCall.cpp b/flang/lib/Lower/CustomIntrinsicCall.cpp<br>
> index 9548045a174b0..1127e2841b04f 100644<br>
> --- a/flang/lib/Lower/CustomIntrinsicCall.cpp<br>
> +++ b/flang/lib/Lower/CustomIntrinsicCall.cpp<br>
> @@ -195,12 +195,12 @@ lowerIshftc(fir::FirOpBuilder &builder, mlir::Location loc,<br>
>           isPresentCheck(2) &&<br>
>           "only ISHFTC SIZE arg is expected to be dynamically optional here");<br>
>    assert(retTy && "ISFHTC must have a return type");<br>
> -  mlir::Type resultType = *retTy;<br>
> +  mlir::Type resultType = retTy.getValue();<br>
>    llvm::SmallVector<fir::ExtendedValue> args;<br>
>    args.push_back(getOperand(0));<br>
>    args.push_back(getOperand(1));<br>
>    args.push_back(builder<br>
> -                     .genIfOp(loc, {resultType}, *isPresentCheck(2),<br>
> +                     .genIfOp(loc, {resultType}, isPresentCheck(2).getValue(),<br>
>                                /*withElseRegion=*/true)<br>
>                       .genThen([&]() {<br>
>                         fir::ExtendedValue sizeExv = getOperand(2);<br>
><br>
> diff  --git a/flang/lib/Lower/IterationSpace.cpp b/flang/lib/Lower/IterationSpace.cpp<br>
> index 4458086a50ec8..4d7a7f8cda0f8 100644<br>
> --- a/flang/lib/Lower/IterationSpace.cpp<br>
> +++ b/flang/lib/Lower/IterationSpace.cpp<br>
> @@ -862,12 +862,12 @@ void Fortran::lower::ExplicitIterSpace::conditionalCleanup() {<br>
><br>
>  llvm::Optional<size_t><br>
>  Fortran::lower::ExplicitIterSpace::findArgPosition(fir::ArrayLoadOp load) {<br>
> -  if (lhsBases[counter]) {<br>
> -    auto ld = loadBindings.find(*lhsBases[counter]);<br>
> +  if (lhsBases[counter].hasValue()) {<br>
> +    auto ld = loadBindings.find(lhsBases[counter].getValue());<br>
>      llvm::Optional<size_t> optPos;<br>
>      if (ld != loadBindings.end() && ld->second == load)<br>
>        optPos = static_cast<size_t>(0u);<br>
> -    assert(optPos && "load does not correspond to lhs");<br>
> +    assert(optPos.hasValue() && "load does not correspond to lhs");<br>
>      return optPos;<br>
>    }<br>
>    return llvm::None;<br>
> @@ -919,8 +919,8 @@ Fortran::lower::operator<<(llvm::raw_ostream &s,<br>
>    s << "LHS bases:\n";<br>
>    for (const llvm::Optional<Fortran::lower::ExplicitIterSpace::ArrayBases> &u :<br>
>         e.lhsBases)<br>
> -    if (u)<br>
> -      dump(*u);<br>
> +    if (u.hasValue())<br>
> +      dump(u.getValue());<br>
>    s << "RHS bases:\n";<br>
>    for (const llvm::SmallVector<Fortran::lower::ExplicitIterSpace::ArrayBases><br>
>             &bases : e.rhsBases) {<br>
><br>
> diff  --git a/flang/lib/Optimizer/CodeGen/BoxedProcedure.cpp b/flang/lib/Optimizer/CodeGen/BoxedProcedure.cpp<br>
> index 4cb1cf808fd4b..e652ca75f207f 100644<br>
> --- a/flang/lib/Optimizer/CodeGen/BoxedProcedure.cpp<br>
> +++ b/flang/lib/Optimizer/CodeGen/BoxedProcedure.cpp<br>
> @@ -252,11 +252,11 @@ class BoxedProcedurePass : public BoxedProcedurePassBase<BoxedProcedurePass> {<br>
>              auto toTy = typeConverter.convertType(unwrapRefType(ty));<br>
>              bool isPinned = mem.getPinned();<br>
>              llvm::StringRef uniqName;<br>
> -            if (mem.getUniqName())<br>
> -              uniqName = mem.getUniqName().value();<br>
> +            if (mem.getUniqName().hasValue())<br>
> +              uniqName = mem.getUniqName().getValue();<br>
>              llvm::StringRef bindcName;<br>
> -            if (mem.getBindcName())<br>
> -              bindcName = mem.getBindcName().value();<br>
> +            if (mem.getBindcName().hasValue())<br>
> +              bindcName = mem.getBindcName().getValue();<br>
>              rewriter.replaceOpWithNewOp<AllocaOp>(<br>
>                  mem, toTy, uniqName, bindcName, isPinned, mem.getTypeparams(),<br>
>                  mem.getShape());<br>
> @@ -267,11 +267,11 @@ class BoxedProcedurePass : public BoxedProcedurePassBase<BoxedProcedurePass> {<br>
>              rewriter.setInsertionPoint(mem);<br>
>              auto toTy = typeConverter.convertType(unwrapRefType(ty));<br>
>              llvm::StringRef uniqName;<br>
> -            if (mem.getUniqName())<br>
> -              uniqName = mem.getUniqName().value();<br>
> +            if (mem.getUniqName().hasValue())<br>
> +              uniqName = mem.getUniqName().getValue();<br>
>              llvm::StringRef bindcName;<br>
> -            if (mem.getBindcName())<br>
> -              bindcName = mem.getBindcName().value();<br>
> +            if (mem.getBindcName().hasValue())<br>
> +              bindcName = mem.getBindcName().getValue();<br>
>              rewriter.replaceOpWithNewOp<AllocMemOp>(<br>
>                  mem, toTy, uniqName, bindcName, mem.getTypeparams(),<br>
>                  mem.getShape());<br>
><br>
> diff  --git a/flang/lib/Optimizer/CodeGen/CodeGen.cpp b/flang/lib/Optimizer/CodeGen/CodeGen.cpp<br>
> index 5fc2e1760e511..ad59bd734fd05 100644<br>
> --- a/flang/lib/Optimizer/CodeGen/CodeGen.cpp<br>
> +++ b/flang/lib/Optimizer/CodeGen/CodeGen.cpp<br>
> @@ -2636,9 +2636,9 @@ struct GlobalOpConversion : public FIROpConversion<fir::GlobalOp> {<br>
>      auto loc = global.getLoc();<br>
>      mlir::Attribute initAttr;<br>
>      if (global.getInitVal())<br>
> -      initAttr = *global.getInitVal();<br>
> +      initAttr = global.getInitVal().getValue();<br>
>      auto linkage = convertLinkage(global.getLinkName());<br>
> -    auto isConst = global.getConstant().has_value();<br>
> +    auto isConst = global.getConstant().hasValue();<br>
>      auto g = rewriter.create<mlir::LLVM::GlobalOp>(<br>
>          loc, tyAttr, isConst, linkage, global.getSymName(), initAttr);<br>
>      auto &gr = g.getInitializerRegion();<br>
> @@ -2692,8 +2692,8 @@ struct GlobalOpConversion : public FIROpConversion<fir::GlobalOp> {<br>
>    // enumeration.<br>
>    mlir::LLVM::Linkage<br>
>    convertLinkage(llvm::Optional<llvm::StringRef> optLinkage) const {<br>
> -    if (optLinkage) {<br>
> -      auto name = *optLinkage;<br>
> +    if (optLinkage.hasValue()) {<br>
> +      auto name = optLinkage.getValue();<br>
>        if (name == "internal")<br>
>          return mlir::LLVM::Linkage::Internal;<br>
>        if (name == "linkonce")<br>
> @@ -2749,9 +2749,9 @@ static void genCondBrOp(mlir::Location loc, mlir::Value cmp, mlir::Block *dest,<br>
>                          llvm::Optional<mlir::ValueRange> destOps,<br>
>                          mlir::ConversionPatternRewriter &rewriter,<br>
>                          mlir::Block *newBlock) {<br>
> -  if (destOps)<br>
> -    rewriter.create<mlir::LLVM::CondBrOp>(loc, cmp, dest, *destOps, newBlock,<br>
> -                                          mlir::ValueRange());<br>
> +  if (destOps.hasValue())<br>
> +    rewriter.create<mlir::LLVM::CondBrOp>(loc, cmp, dest, destOps.getValue(),<br>
> +                                          newBlock, mlir::ValueRange());<br>
>    else<br>
>      rewriter.create<mlir::LLVM::CondBrOp>(loc, cmp, dest, newBlock);<br>
>  }<br>
> @@ -2759,8 +2759,9 @@ static void genCondBrOp(mlir::Location loc, mlir::Value cmp, mlir::Block *dest,<br>
>  template <typename A, typename B><br>
>  static void genBrOp(A caseOp, mlir::Block *dest, llvm::Optional<B> destOps,<br>
>                      mlir::ConversionPatternRewriter &rewriter) {<br>
> -  if (destOps)<br>
> -    rewriter.replaceOpWithNewOp<mlir::LLVM::BrOp>(caseOp, *destOps, dest);<br>
> +  if (destOps.hasValue())<br>
> +    rewriter.replaceOpWithNewOp<mlir::LLVM::BrOp>(caseOp, destOps.getValue(),<br>
> +                                                  dest);<br>
>    else<br>
>      rewriter.replaceOpWithNewOp<mlir::LLVM::BrOp>(caseOp, llvm::None, dest);<br>
>  }<br>
> @@ -2883,14 +2884,15 @@ static void selectMatchAndRewrite(fir::LLVMTypeConverter &lowering, OP select,<br>
>      const mlir::Attribute &attr = cases[t];<br>
>      if (auto intAttr = attr.template dyn_cast<mlir::IntegerAttr>()) {<br>
>        destinations.push_back(dest);<br>
> -      destinationsOperands.push_back(destOps ? *destOps : mlir::ValueRange{});<br>
> +      destinationsOperands.push_back(destOps.hasValue() ? *destOps<br>
> +                                                        : mlir::ValueRange{});<br>
>        caseValues.push_back(intAttr.getInt());<br>
>        continue;<br>
>      }<br>
>      assert(attr.template dyn_cast_or_null<mlir::UnitAttr>());<br>
>      assert((t + 1 == conds) && "unit must be last");<br>
>      defaultDestination = dest;<br>
> -    defaultOperands = destOps ? *destOps : mlir::ValueRange{};<br>
> +    defaultOperands = destOps.hasValue() ? *destOps : mlir::ValueRange{};<br>
>    }<br>
><br>
>    // LLVM::SwitchOp takes a i32 type for the selector.<br>
><br>
> diff  --git a/flang/lib/Optimizer/CodeGen/TargetRewrite.cpp b/flang/lib/Optimizer/CodeGen/TargetRewrite.cpp<br>
> index 9b744fe6ec54c..f1e58d42779ea 100644<br>
> --- a/flang/lib/Optimizer/CodeGen/TargetRewrite.cpp<br>
> +++ b/flang/lib/Optimizer/CodeGen/TargetRewrite.cpp<br>
> @@ -316,9 +316,9 @@ class TargetRewrite : public fir::TargetRewriteBase<TargetRewrite> {<br>
>      newOpers.insert(newOpers.end(), trailingOpers.begin(), trailingOpers.end());<br>
>      if constexpr (std::is_same_v<std::decay_t<A>, fir::CallOp>) {<br>
>        fir::CallOp newCall;<br>
> -      if (callOp.getCallee()) {<br>
> -        newCall =<br>
> -            rewriter->create<A>(loc, *callOp.getCallee(), newResTys, newOpers);<br>
> +      if (callOp.getCallee().hasValue()) {<br>
> +        newCall = rewriter->create<A>(loc, callOp.getCallee().getValue(),<br>
> +                                      newResTys, newOpers);<br>
>        } else {<br>
>          // Force new type on the input operand.<br>
>          newOpers[0].setType(mlir::FunctionType::get(<br>
><br>
> diff  --git a/flang/lib/Optimizer/Dialect/FIROps.cpp b/flang/lib/Optimizer/Dialect/FIROps.cpp<br>
> index 7a6da508b535c..6443d5c6eca42 100644<br>
> --- a/flang/lib/Optimizer/Dialect/FIROps.cpp<br>
> +++ b/flang/lib/Optimizer/Dialect/FIROps.cpp<br>
> @@ -616,10 +616,10 @@ mlir::FunctionType fir::CallOp::getFunctionType() {<br>
>  }<br>
><br>
>  void fir::CallOp::print(mlir::OpAsmPrinter &p) {<br>
> -  bool isDirect = getCallee().has_value();<br>
> +  bool isDirect = getCallee().hasValue();<br>
>    p << ' ';<br>
>    if (isDirect)<br>
> -    p << *getCallee();<br>
> +    p << getCallee().getValue();<br>
>    else<br>
>      p << getOperand(0);<br>
>    p << '(' << (*this)->getOperands().drop_front(isDirect ? 0 : 1) << ')';<br>
> @@ -700,8 +700,9 @@ static void printCmpOp(mlir::OpAsmPrinter &p, OPTY op) {<br>
>        op->template getAttrOfType<mlir::IntegerAttr>(<br>
>              OPTY::getPredicateAttrName())<br>
>            .getInt());<br>
> -  assert(predSym && "invalid symbol value for predicate");<br>
> -  p << '"' << mlir::arith::stringifyCmpFPredicate(*predSym) << '"' << ", ";<br>
> +  assert(predSym.hasValue() && "invalid symbol value for predicate");<br>
> +  p << '"' << mlir::arith::stringifyCmpFPredicate(predSym.getValue()) << '"'<br>
> +    << ", ";<br>
>    p.printOperand(op.getLhs());<br>
>    p << ", ";<br>
>    p.printOperand(op.getRhs());<br>
> @@ -776,8 +777,8 @@ void fir::buildCmpCOp(mlir::OpBuilder &builder, mlir::OperationState &result,<br>
>  mlir::arith::CmpFPredicate<br>
>  fir::CmpcOp::getPredicateByName(llvm::StringRef name) {<br>
>    auto pred = mlir::arith::symbolizeCmpFPredicate(name);<br>
> -  assert(pred && "invalid predicate name");<br>
> -  return *pred;<br>
> +  assert(pred.hasValue() && "invalid predicate name");<br>
> +  return pred.getValue();<br>
>  }<br>
><br>
>  void fir::CmpcOp::print(mlir::OpAsmPrinter &p) { printCmpOp(p, *this); }<br>
> @@ -1073,7 +1074,7 @@ mlir::ParseResult fir::DispatchTableOp::parse(mlir::OpAsmParser &parser,<br>
>    // Parse the optional table body.<br>
>    mlir::Region *body = result.addRegion();<br>
>    mlir::OptionalParseResult parseResult = parser.parseOptionalRegion(*body);<br>
> -  if (parseResult.has_value() && failed(*parseResult))<br>
> +  if (parseResult.hasValue() && failed(*parseResult))<br>
>      return mlir::failure();<br>
><br>
>    fir::DispatchTableOp::ensureTerminator(*body, parser.getBuilder(),<br>
> @@ -1255,15 +1256,15 @@ mlir::ParseResult fir::GlobalOp::parse(mlir::OpAsmParser &parser,<br>
>      // Parse the optional initializer body.<br>
>      auto parseResult =<br>
>          parser.parseOptionalRegion(*result.addRegion(), /*arguments=*/{});<br>
> -    if (parseResult.has_value() && mlir::failed(*parseResult))<br>
> +    if (parseResult.hasValue() && mlir::failed(*parseResult))<br>
>        return mlir::failure();<br>
>    }<br>
>    return mlir::success();<br>
>  }<br>
><br>
>  void fir::GlobalOp::print(mlir::OpAsmPrinter &p) {<br>
> -  if (getLinkName())<br>
> -    p << ' ' << *getLinkName();<br>
> +  if (getLinkName().hasValue())<br>
> +    p << ' ' << getLinkName().getValue();<br>
>    p << ' ';<br>
>    p.printAttributeWithoutType(getSymrefAttr());<br>
>    if (auto val = getValueOrNull())<br>
><br>
> diff  --git a/flang/lib/Optimizer/Dialect/FIRType.cpp b/flang/lib/Optimizer/Dialect/FIRType.cpp<br>
> index 5347d8556facf..3293cad6177a2 100644<br>
> --- a/flang/lib/Optimizer/Dialect/FIRType.cpp<br>
> +++ b/flang/lib/Optimizer/Dialect/FIRType.cpp<br>
> @@ -120,7 +120,7 @@ mlir::Type fir::parseFirType(FIROpsDialect *dialect,<br>
>      return {};<br>
>    mlir::Type genType;<br>
>    auto parseResult = generatedTypeParser(parser, typeTag, genType);<br>
> -  if (parseResult.has_value())<br>
> +  if (parseResult.hasValue())<br>
>      return genType;<br>
>    parser.emitError(parser.getNameLoc(), "unknown fir type: ") << typeTag;<br>
>    return {};<br>
><br>
> diff  --git a/flang/lib/Optimizer/Support/InternalNames.cpp b/flang/lib/Optimizer/Support/InternalNames.cpp<br>
> index 19a2740a51a88..8e37df2f7df0c 100644<br>
> --- a/flang/lib/Optimizer/Support/InternalNames.cpp<br>
> +++ b/flang/lib/Optimizer/Support/InternalNames.cpp<br>
> @@ -51,8 +51,8 @@ convertToStringRef(llvm::ArrayRef<std::string> from) {<br>
>  inline llvm::Optional<llvm::StringRef><br>
>  convertToStringRef(const llvm::Optional<std::string> &from) {<br>
>    llvm::Optional<llvm::StringRef> to;<br>
> -  if (from)<br>
> -    to = *from;<br>
> +  if (from.hasValue())<br>
> +    to = from.getValue();<br>
>    return to;<br>
>  }<br>
><br>
><br>
> diff  --git a/flang/lib/Optimizer/Transforms/AbstractResult.cpp b/flang/lib/Optimizer/Transforms/AbstractResult.cpp<br>
> index 68f3247401f01..7dd821474698f 100644<br>
> --- a/flang/lib/Optimizer/Transforms/AbstractResult.cpp<br>
> +++ b/flang/lib/Optimizer/Transforms/AbstractResult.cpp<br>
> @@ -101,7 +101,7 @@ class CallOpConversion : public mlir::OpRewritePattern<fir::CallOp> {<br>
>        llvm::SmallVector<mlir::Value> newOperands = {arg};<br>
>        newOperands.append(callOp.getOperands().begin(),<br>
>                           callOp.getOperands().end());<br>
> -      rewriter.create<fir::CallOp>(loc, callOp.getCallee().value(),<br>
> +      rewriter.create<fir::CallOp>(loc, callOp.getCallee().getValue(),<br>
>                                     newResultTypes, newOperands);<br>
>      } else {<br>
>        // Indirect calls.<br>
><br>
> diff  --git a/flang/lib/Optimizer/Transforms/AffinePromotion.cpp b/flang/lib/Optimizer/Transforms/AffinePromotion.cpp<br>
> index dd7b2591bf3fc..3890721cea25a 100644<br>
> --- a/flang/lib/Optimizer/Transforms/AffinePromotion.cpp<br>
> +++ b/flang/lib/Optimizer/Transforms/AffinePromotion.cpp<br>
> @@ -171,11 +171,11 @@ struct AffineIfCondition {<br>
>        fromCmpIOp(condDef);<br>
>    }<br>
><br>
> -  bool hasIntegerSet() const { return integerSet.has_value(); }<br>
> +  bool hasIntegerSet() const { return integerSet.hasValue(); }<br>
><br>
>    mlir::IntegerSet getIntegerSet() const {<br>
>      assert(hasIntegerSet() && "integer set is missing");<br>
> -    return *integerSet;<br>
> +    return integerSet.getValue();<br>
>    }<br>
><br>
>    mlir::ValueRange getAffineArgs() const { return affineArgs; }<br>
> @@ -188,8 +188,8 @@ struct AffineIfCondition {<br>
><br>
>    MaybeAffineExpr affineBinaryOp(mlir::AffineExprKind kind, MaybeAffineExpr lhs,<br>
>                                   MaybeAffineExpr rhs) {<br>
> -    if (lhs && rhs)<br>
> -      return mlir::getAffineBinaryOpExpr(kind, *lhs, *rhs);<br>
> +    if (lhs.hasValue() && rhs.hasValue())<br>
> +      return mlir::getAffineBinaryOpExpr(kind, lhs.getValue(), rhs.getValue());<br>
>      return {};<br>
>    }<br>
><br>
> @@ -233,14 +233,15 @@ struct AffineIfCondition {<br>
>    void fromCmpIOp(mlir::arith::CmpIOp cmpOp) {<br>
>      auto lhsAffine = toAffineExpr(cmpOp.getLhs());<br>
>      auto rhsAffine = toAffineExpr(cmpOp.getRhs());<br>
> -    if (!lhsAffine || !rhsAffine)<br>
> +    if (!lhsAffine.hasValue() || !rhsAffine.hasValue())<br>
>        return;<br>
> -    auto constraintPair =<br>
> -        constraint(cmpOp.getPredicate(), *rhsAffine - *lhsAffine);<br>
> +    auto constraintPair = constraint(<br>
> +        cmpOp.getPredicate(), rhsAffine.getValue() - lhsAffine.getValue());<br>
>      if (!constraintPair)<br>
>        return;<br>
> -    integerSet = mlir::IntegerSet::get(<br>
> -        dimCount, symCount, {constraintPair->first}, {constraintPair->second});<br>
> +    integerSet = mlir::IntegerSet::get(dimCount, symCount,<br>
> +                                       {constraintPair.getValue().first},<br>
> +                                       {constraintPair.getValue().second});<br>
>      return;<br>
>    }<br>
><br>
> @@ -483,8 +484,8 @@ class AffineLoopConversion : public mlir::OpRewritePattern<fir::DoLoopOp> {<br>
>    std::pair<mlir::AffineForOp, mlir::Value><br>
>    createAffineFor(fir::DoLoopOp op, mlir::PatternRewriter &rewriter) const {<br>
>      if (auto constantStep = constantIntegerLike(op.getStep()))<br>
> -      if (*constantStep > 0)<br>
> -        return positiveConstantStep(op, *constantStep, rewriter);<br>
> +      if (constantStep.getValue() > 0)<br>
> +        return positiveConstantStep(op, constantStep.getValue(), rewriter);<br>
>      return genericBounds(op, rewriter);<br>
>    }<br>
><br>
><br>
> diff  --git a/flang/lib/Optimizer/Transforms/ExternalNameConversion.cpp b/flang/lib/Optimizer/Transforms/ExternalNameConversion.cpp<br>
> index 42260ad2826ac..6170556c24ac9 100644<br>
> --- a/flang/lib/Optimizer/Transforms/ExternalNameConversion.cpp<br>
> +++ b/flang/lib/Optimizer/Transforms/ExternalNameConversion.cpp<br>
> @@ -49,9 +49,9 @@ class MangleNameOnCallOp : public mlir::OpRewritePattern<fir::CallOp> {<br>
>                    mlir::PatternRewriter &rewriter) const override {<br>
>      rewriter.startRootUpdate(op);<br>
>      auto callee = op.getCallee();<br>
> -    if (callee) {<br>
> -      auto result =<br>
> -          fir::NameUniquer::deconstruct(callee->getRootReference().getValue());<br>
> +    if (callee.hasValue()) {<br>
> +      auto result = fir::NameUniquer::deconstruct(<br>
> +          callee.getValue().getRootReference().getValue());<br>
>        if (fir::NameUniquer::isExternalFacingUniquedName(result))<br>
>          op.setCalleeAttr(<br>
>              SymbolRefAttr::get(op.getContext(), mangleExternalName(result)));<br>
> @@ -137,9 +137,9 @@ void ExternalNameConversionPass::runOnOperation() {<br>
>                           acc::OpenACCDialect, omp::OpenMPDialect>();<br>
><br>
>    target.addDynamicallyLegalOp<fir::CallOp>([](fir::CallOp op) {<br>
> -    if (op.getCallee())<br>
> +    if (op.getCallee().hasValue())<br>
>        return !fir::NameUniquer::needExternalNameMangling(<br>
> -          op.getCallee()->getRootReference().getValue());<br>
> +          op.getCallee().getValue().getRootReference().getValue());<br>
>      return true;<br>
>    });<br>
><br>
><br>
> diff  --git a/flang/unittests/Optimizer/Builder/FIRBuilderTest.cpp b/flang/unittests/Optimizer/Builder/FIRBuilderTest.cpp<br>
> index 3172844cfe23b..3997d8fd50fe6 100644<br>
> --- a/flang/unittests/Optimizer/Builder/FIRBuilderTest.cpp<br>
> +++ b/flang/unittests/Optimizer/Builder/FIRBuilderTest.cpp<br>
> @@ -189,12 +189,12 @@ TEST_F(FIRBuilderTest, createGlobal1) {<br>
>        loc, i64Type, "global1", builder.createInternalLinkage(), {}, true);<br>
>    EXPECT_TRUE(mlir::isa<fir::GlobalOp>(global));<br>
>    EXPECT_EQ("global1", global.getSymName());<br>
> -  EXPECT_TRUE(global.getConstant().has_value());<br>
> +  EXPECT_TRUE(global.getConstant().hasValue());<br>
>    EXPECT_EQ(i64Type, global.getType());<br>
> -  EXPECT_TRUE(global.getLinkName().has_value());<br>
> -  EXPECT_EQ(<br>
> -      builder.createInternalLinkage().getValue(), global.getLinkName().value());<br>
> -  EXPECT_FALSE(global.getInitVal().has_value());<br>
> +  EXPECT_TRUE(global.getLinkName().hasValue());<br>
> +  EXPECT_EQ(builder.createInternalLinkage().getValue(),<br>
> +      global.getLinkName().getValue());<br>
> +  EXPECT_FALSE(global.getInitVal().hasValue());<br>
><br>
>    auto g1 = builder.getNamedGlobal("global1");<br>
>    EXPECT_EQ(global, g1);<br>
> @@ -213,14 +213,15 @@ TEST_F(FIRBuilderTest, createGlobal2) {<br>
>        loc, i32Type, "global2", builder.createLinkOnceLinkage(), attr, false);<br>
>    EXPECT_TRUE(mlir::isa<fir::GlobalOp>(global));<br>
>    EXPECT_EQ("global2", global.getSymName());<br>
> -  EXPECT_FALSE(global.getConstant().has_value());<br>
> +  EXPECT_FALSE(global.getConstant().hasValue());<br>
>    EXPECT_EQ(i32Type, global.getType());<br>
> -  EXPECT_TRUE(global.getInitVal().has_value());<br>
> -  EXPECT_TRUE(global.getInitVal()->isa<mlir::IntegerAttr>());<br>
> -  EXPECT_EQ(16, global.getInitVal()->cast<mlir::IntegerAttr>().getValue());<br>
> -  EXPECT_TRUE(global.getLinkName().has_value());<br>
> +  EXPECT_TRUE(global.getInitVal().hasValue());<br>
> +  EXPECT_TRUE(global.getInitVal().getValue().isa<mlir::IntegerAttr>());<br>
>    EXPECT_EQ(<br>
> -      builder.createLinkOnceLinkage().getValue(), global.getLinkName().value());<br>
> +      16, global.getInitVal().getValue().cast<mlir::IntegerAttr>().getValue());<br>
> +  EXPECT_TRUE(global.getLinkName().hasValue());<br>
> +  EXPECT_EQ(builder.createLinkOnceLinkage().getValue(),<br>
> +      global.getLinkName().getValue());<br>
>  }<br>
><br>
>  TEST_F(FIRBuilderTest, uniqueCFIdent) {<br>
> @@ -309,8 +310,8 @@ TEST_F(FIRBuilderTest, createStringLiteral) {<br>
>    auto addrOp = dyn_cast<fir::AddrOfOp>(addr.getDefiningOp());<br>
>    auto symbol = addrOp.getSymbol().getRootReference().getValue();<br>
>    auto global = builder.getNamedGlobal(symbol);<br>
> -  EXPECT_EQ(<br>
> -      builder.createLinkOnceLinkage().getValue(), global.getLinkName().value());<br>
> +  EXPECT_EQ(builder.createLinkOnceLinkage().getValue(),<br>
> +      global.getLinkName().getValue());<br>
>    EXPECT_EQ(fir::CharacterType::get(builder.getContext(), 1, strValue.size()),<br>
>        global.getType());<br>
><br>
> @@ -332,9 +333,9 @@ TEST_F(FIRBuilderTest, allocateLocal) {<br>
>    EXPECT_TRUE(mlir::isa<fir::AllocaOp>(var.getDefiningOp()));<br>
>    auto allocaOp = dyn_cast<fir::AllocaOp>(var.getDefiningOp());<br>
>    EXPECT_EQ(builder.getI64Type(), allocaOp.getInType());<br>
> -  EXPECT_TRUE(allocaOp.getBindcName().has_value());<br>
> -  EXPECT_EQ(varName, allocaOp.getBindcName().value());<br>
> -  EXPECT_FALSE(allocaOp.getUniqName().has_value());<br>
> +  EXPECT_TRUE(allocaOp.getBindcName().hasValue());<br>
> +  EXPECT_EQ(varName, allocaOp.getBindcName().getValue());<br>
> +  EXPECT_FALSE(allocaOp.getUniqName().hasValue());<br>
>    EXPECT_FALSE(allocaOp.getPinned());<br>
>    EXPECT_EQ(0u, allocaOp.getTypeparams().size());<br>
>    EXPECT_EQ(0u, allocaOp.getShape().size());<br>
><br>
> diff  --git a/flang/unittests/Optimizer/Builder/Runtime/RuntimeCallTestBase.h b/flang/unittests/Optimizer/Builder/Runtime/RuntimeCallTestBase.h<br>
> index 4b7c9f18543a8..8d549c54a0530 100644<br>
> --- a/flang/unittests/Optimizer/Builder/Runtime/RuntimeCallTestBase.h<br>
> +++ b/flang/unittests/Optimizer/Builder/Runtime/RuntimeCallTestBase.h<br>
> @@ -87,7 +87,7 @@ static inline void checkCallOp(mlir::Operation *op, llvm::StringRef fctName,<br>
>      unsigned nbArgs, bool addLocArgs = true) {<br>
>    EXPECT_TRUE(mlir::isa<fir::CallOp>(*op));<br>
>    auto callOp = mlir::dyn_cast<fir::CallOp>(*op);<br>
> -  EXPECT_TRUE(callOp.getCallee().has_value());<br>
> +  EXPECT_TRUE(callOp.getCallee().hasValue());<br>
>    mlir::SymbolRefAttr callee = *callOp.getCallee();<br>
>    EXPECT_EQ(fctName, callee.getRootReference().getValue());<br>
>    // sourceFile and sourceLine are added arguments.<br>
><br>
> diff  --git a/lld/ELF/InputFiles.cpp b/lld/ELF/InputFiles.cpp<br>
> index a9b00b73caf20..926400d047ece 100644<br>
> --- a/lld/ELF/InputFiles.cpp<br>
> +++ b/lld/ELF/InputFiles.cpp<br>
> @@ -744,9 +744,9 @@ static void updateARMVFPArgs(const ARMAttributeParser &attributes,<br>
>  static void updateSupportedARMFeatures(const ARMAttributeParser &attributes) {<br>
>    Optional<unsigned> attr =<br>
>        attributes.getAttributeValue(ARMBuildAttrs::CPU_arch);<br>
> -  if (!attr)<br>
> +  if (!attr.hasValue())<br>
>      return;<br>
> -  auto arch = *attr;<br>
> +  auto arch = attr.getValue();<br>
>    switch (arch) {<br>
>    case ARMBuildAttrs::Pre_v4:<br>
>    case ARMBuildAttrs::v4:<br>
><br>
> diff  --git a/lld/MachO/SectionPriorities.cpp b/lld/MachO/SectionPriorities.cpp<br>
> index 0794217b66fd8..cdabd3e9ef465 100644<br>
> --- a/lld/MachO/SectionPriorities.cpp<br>
> +++ b/lld/MachO/SectionPriorities.cpp<br>
> @@ -367,10 +367,10 @@ macho::PriorityBuilder::buildInputSectionPriorities() {<br>
><br>
>    auto addSym = [&](const Defined *sym) {<br>
>      Optional<size_t> symbolPriority = getSymbolPriority(sym);<br>
> -    if (!symbolPriority)<br>
> +    if (!symbolPriority.hasValue())<br>
>        return;<br>
>      size_t &priority = sectionPriorities[sym->isec];<br>
> -    priority = std::max(priority, *symbolPriority);<br>
> +    priority = std::max(priority, symbolPriority.getValue());<br>
>    };<br>
><br>
>    // TODO: Make sure this handles weak symbols correctly.<br>
><br>
> diff  --git a/lld/wasm/InputChunks.h b/lld/wasm/InputChunks.h<br>
> index 066ca623866d1..f9626160976ce 100644<br>
> --- a/lld/wasm/InputChunks.h<br>
> +++ b/lld/wasm/InputChunks.h<br>
> @@ -249,9 +249,9 @@ class InputFunction : public InputChunk {<br>
>  public:<br>
>    InputFunction(const WasmSignature &s, const WasmFunction *func, ObjFile *f)<br>
>        : InputChunk(f, InputChunk::Function, func->SymbolName), signature(s),<br>
> -        function(func),<br>
> -        exportName(func && func->ExportName ? (*func->ExportName).str()<br>
> -                                            : llvm::Optional<std::string>()) {<br>
> +        function(func), exportName(func && func->ExportName.hasValue()<br>
> +                                       ? (*func->ExportName).str()<br>
> +                                       : llvm::Optional<std::string>()) {<br>
>      inputSectionOffset = function->CodeSectionOffset;<br>
>      rawData =<br>
>          file->codeSection->Content.slice(inputSectionOffset, function->Size);<br>
> @@ -268,17 +268,17 @@ class InputFunction : public InputChunk {<br>
>    }<br>
><br>
>    llvm::Optional<StringRef> getExportName() const {<br>
> -    return exportName ? llvm::Optional<StringRef>(*exportName)<br>
> -                      : llvm::Optional<StringRef>();<br>
> +    return exportName.hasValue() ? llvm::Optional<StringRef>(*exportName)<br>
> +                                 : llvm::Optional<StringRef>();<br>
>    }<br>
>    void setExportName(std::string exportName) { this->exportName = exportName; }<br>
>    uint32_t getFunctionInputOffset() const { return getInputSectionOffset(); }<br>
>    uint32_t getFunctionCodeOffset() const { return function->CodeOffset; }<br>
> -  uint32_t getFunctionIndex() const { return *functionIndex; }<br>
> -  bool hasFunctionIndex() const { return functionIndex.has_value(); }<br>
> +  uint32_t getFunctionIndex() const { return functionIndex.getValue(); }<br>
> +  bool hasFunctionIndex() const { return functionIndex.hasValue(); }<br>
>    void setFunctionIndex(uint32_t index);<br>
> -  uint32_t getTableIndex() const { return *tableIndex; }<br>
> -  bool hasTableIndex() const { return tableIndex.has_value(); }<br>
> +  uint32_t getTableIndex() const { return tableIndex.getValue(); }<br>
> +  bool hasTableIndex() const { return tableIndex.hasValue(); }<br>
>    void setTableIndex(uint32_t index);<br>
>    void writeCompressed(uint8_t *buf) const;<br>
><br>
><br>
> diff  --git a/lld/wasm/InputElement.h b/lld/wasm/InputElement.h<br>
> index 0d4e9b388b31d..9bea90b87640c 100644<br>
> --- a/lld/wasm/InputElement.h<br>
> +++ b/lld/wasm/InputElement.h<br>
> @@ -27,8 +27,8 @@ class InputElement {<br>
><br>
>  public:<br>
>    StringRef getName() const { return name; }<br>
> -  uint32_t getAssignedIndex() const { return *assignedIndex; }<br>
> -  bool hasAssignedIndex() const { return assignedIndex.has_value(); }<br>
> +  uint32_t getAssignedIndex() const { return assignedIndex.getValue(); }<br>
> +  bool hasAssignedIndex() const { return assignedIndex.hasValue(); }<br>
>    void assignIndex(uint32_t index) {<br>
>      assert(!hasAssignedIndex());<br>
>      assignedIndex = index;<br>
><br>
> diff  --git a/lld/wasm/Writer.cpp b/lld/wasm/Writer.cpp<br>
> index 2de43abb3faa4..fa9802d477d55 100644<br>
> --- a/lld/wasm/Writer.cpp<br>
> +++ b/lld/wasm/Writer.cpp<br>
> @@ -446,10 +446,10 @@ void Writer::populateTargetFeatures() {<br>
>    }<br>
><br>
>    // Only infer used features if user did not specify features<br>
> -  bool inferFeatures = !config->features.has_value();<br>
> +  bool inferFeatures = !config->features.hasValue();<br>
><br>
>    if (!inferFeatures) {<br>
> -    auto &explicitFeatures = config->features.value();<br>
> +    auto &explicitFeatures = config->features.getValue();<br>
>      allowed.insert(explicitFeatures.begin(), explicitFeatures.end());<br>
>      if (!config->checkFeatures)<br>
>        goto done;<br>
><br>
> diff  --git a/lldb/include/lldb/Target/MemoryRegionInfo.h b/lldb/include/lldb/Target/MemoryRegionInfo.h<br>
> index 8df790452506c..acca66e838337 100644<br>
> --- a/lldb/include/lldb/Target/MemoryRegionInfo.h<br>
> +++ b/lldb/include/lldb/Target/MemoryRegionInfo.h<br>
> @@ -124,8 +124,8 @@ class MemoryRegionInfo {<br>
>    void SetPageSize(int pagesize) { m_pagesize = pagesize; }<br>
><br>
>    void SetDirtyPageList(std::vector<lldb::addr_t> pagelist) {<br>
> -    if (m_dirty_pages)<br>
> -      m_dirty_pages->clear();<br>
> +    if (m_dirty_pages.hasValue())<br>
> +      m_dirty_pages.getValue().clear();<br>
>      m_dirty_pages = std::move(pagelist);<br>
>    }<br>
><br>
><br>
> diff  --git a/lldb/source/API/SBMemoryRegionInfo.cpp b/lldb/source/API/SBMemoryRegionInfo.cpp<br>
> index f4d78cf095468..d0f74374476e0 100644<br>
> --- a/lldb/source/API/SBMemoryRegionInfo.cpp<br>
> +++ b/lldb/source/API/SBMemoryRegionInfo.cpp<br>
> @@ -135,8 +135,8 @@ uint32_t SBMemoryRegionInfo::GetNumDirtyPages() {<br>
>    uint32_t num_dirty_pages = 0;<br>
>    const llvm::Optional<std::vector<addr_t>> &dirty_page_list =<br>
>        m_opaque_up->GetDirtyPageList();<br>
> -  if (dirty_page_list)<br>
> -    num_dirty_pages = dirty_page_list->size();<br>
> +  if (dirty_page_list.hasValue())<br>
> +    num_dirty_pages = dirty_page_list.getValue().size();<br>
><br>
>    return num_dirty_pages;<br>
>  }<br>
> @@ -147,8 +147,8 @@ addr_t SBMemoryRegionInfo::GetDirtyPageAddressAtIndex(uint32_t idx) {<br>
>    addr_t dirty_page_addr = LLDB_INVALID_ADDRESS;<br>
>    const llvm::Optional<std::vector<addr_t>> &dirty_page_list =<br>
>        m_opaque_up->GetDirtyPageList();<br>
> -  if (dirty_page_list && idx < dirty_page_list->size())<br>
> -    dirty_page_addr = dirty_page_list.value()[idx];<br>
> +  if (dirty_page_list.hasValue() && idx < dirty_page_list.getValue().size())<br>
> +    dirty_page_addr = dirty_page_list.getValue()[idx];<br>
><br>
>    return dirty_page_addr;<br>
>  }<br>
><br>
> diff  --git a/lldb/source/Breakpoint/BreakpointIDList.cpp b/lldb/source/Breakpoint/BreakpointIDList.cpp<br>
> index 20f75662ce5ae..b434056993640 100644<br>
> --- a/lldb/source/Breakpoint/BreakpointIDList.cpp<br>
> +++ b/lldb/source/Breakpoint/BreakpointIDList.cpp<br>
> @@ -192,14 +192,16 @@ void BreakpointIDList::FindAndReplaceIDRanges(Args &old_args, Target *target,<br>
>      auto start_bp = BreakpointID::ParseCanonicalReference(range_from);<br>
>      auto end_bp = BreakpointID::ParseCanonicalReference(range_to);<br>
><br>
> -    if (!start_bp || !target->GetBreakpointByID(start_bp->GetBreakpointID())) {<br>
> +    if (!start_bp.hasValue() ||<br>
> +        !target->GetBreakpointByID(start_bp->GetBreakpointID())) {<br>
>        new_args.Clear();<br>
>        result.AppendErrorWithFormat("'%s' is not a valid breakpoint ID.\n",<br>
>                                     range_from.str().c_str());<br>
>        return;<br>
>      }<br>
><br>
> -    if (!end_bp || !target->GetBreakpointByID(end_bp->GetBreakpointID())) {<br>
> +    if (!end_bp.hasValue() ||<br>
> +        !target->GetBreakpointByID(end_bp->GetBreakpointID())) {<br>
>        new_args.Clear();<br>
>        result.AppendErrorWithFormat("'%s' is not a valid breakpoint ID.\n",<br>
>                                     range_to.str().c_str());<br>
><br>
> diff  --git a/lldb/source/Commands/CommandObjectFrame.cpp b/lldb/source/Commands/CommandObjectFrame.cpp<br>
> index dfe1e14515fa7..4081e87f2ddb9 100644<br>
> --- a/lldb/source/Commands/CommandObjectFrame.cpp<br>
> +++ b/lldb/source/Commands/CommandObjectFrame.cpp<br>
> @@ -137,16 +137,16 @@ class CommandObjectFrameDiagnose : public CommandObjectParsed {<br>
><br>
>      ValueObjectSP valobj_sp;<br>
><br>
> -    if (m_options.address) {<br>
> -      if (m_options.reg || m_options.offset) {<br>
> +    if (m_options.address.hasValue()) {<br>
> +      if (m_options.reg.hasValue() || m_options.offset.hasValue()) {<br>
>          result.AppendError(<br>
>              "`frame diagnose --address` is incompatible with other arguments.");<br>
>          return false;<br>
>        }<br>
> -      valobj_sp = frame_sp->GuessValueForAddress(*m_options.address);<br>
> -    } else if (m_options.reg) {<br>
> +      valobj_sp = frame_sp->GuessValueForAddress(m_options.address.getValue());<br>
> +    } else if (m_options.reg.hasValue()) {<br>
>        valobj_sp = frame_sp->GuessValueForRegisterAndOffset(<br>
> -          m_options.reg.value(), m_options.offset.value_or(0));<br>
> +          m_options.reg.getValue(), m_options.offset.value_or(0));<br>
>      } else {<br>
>        StopInfoSP stop_info_sp = thread->GetStopInfo();<br>
>        if (!stop_info_sp) {<br>
><br>
> diff  --git a/lldb/source/Commands/CommandObjectMemory.cpp b/lldb/source/Commands/CommandObjectMemory.cpp<br>
> index be887f17e589a..117b5f468d4d7 100644<br>
> --- a/lldb/source/Commands/CommandObjectMemory.cpp<br>
> +++ b/lldb/source/Commands/CommandObjectMemory.cpp<br>
> @@ -1737,8 +1737,8 @@ class CommandObjectMemoryRegion : public CommandObjectParsed {<br>
><br>
>      const llvm::Optional<std::vector<addr_t>> &dirty_page_list =<br>
>          range_info.GetDirtyPageList();<br>
> -    if (dirty_page_list) {<br>
> -      const size_t page_count = dirty_page_list->size();<br>
> +    if (dirty_page_list.hasValue()) {<br>
> +      const size_t page_count = dirty_page_list.getValue().size();<br>
>        result.AppendMessageWithFormat(<br>
>            "Modified memory (dirty) page list provided, %zu entries.\n",<br>
>            page_count);<br>
><br>
> diff  --git a/lldb/source/Core/DataFileCache.cpp b/lldb/source/Core/DataFileCache.cpp<br>
> index b38adfda169aa..5f8568fdb54f2 100644<br>
> --- a/lldb/source/Core/DataFileCache.cpp<br>
> +++ b/lldb/source/Core/DataFileCache.cpp<br>
> @@ -203,17 +203,17 @@ bool CacheSignature::Encode(DataEncoder &encoder) const {<br>
>    if (!IsValid())<br>
>      return false; // Invalid signature, return false!<br>
><br>
> -  if (m_uuid) {<br>
> +  if (m_uuid.hasValue()) {<br>
>      llvm::ArrayRef<uint8_t> uuid_bytes = m_uuid->GetBytes();<br>
>      encoder.AppendU8(eSignatureUUID);<br>
>      encoder.AppendU8(uuid_bytes.size());<br>
>      encoder.AppendData(uuid_bytes);<br>
>    }<br>
> -  if (m_mod_time) {<br>
> +  if (m_mod_time.hasValue()) {<br>
>      encoder.AppendU8(eSignatureModTime);<br>
>      encoder.AppendU32(*m_mod_time);<br>
>    }<br>
> -  if (m_obj_mod_time) {<br>
> +  if (m_obj_mod_time.hasValue()) {<br>
>      encoder.AppendU8(eSignatureObjectModTime);<br>
>      encoder.AppendU32(*m_obj_mod_time);<br>
>    }<br>
><br>
> diff  --git a/lldb/source/Core/DumpDataExtractor.cpp b/lldb/source/Core/DumpDataExtractor.cpp<br>
> index f96c2328f1dcf..211e16a2e0337 100644<br>
> --- a/lldb/source/Core/DumpDataExtractor.cpp<br>
> +++ b/lldb/source/Core/DumpDataExtractor.cpp<br>
> @@ -118,8 +118,8 @@ static lldb::offset_t DumpAPInt(Stream *s, const DataExtractor &data,<br>
>                                  lldb::offset_t offset, lldb::offset_t byte_size,<br>
>                                  bool is_signed, unsigned radix) {<br>
>    llvm::Optional<llvm::APInt> apint = GetAPInt(data, &offset, byte_size);<br>
> -  if (apint) {<br>
> -    std::string apint_str = toString(*apint, radix, is_signed);<br>
> +  if (apint.hasValue()) {<br>
> +    std::string apint_str = toString(apint.getValue(), radix, is_signed);<br>
>      switch (radix) {<br>
>      case 2:<br>
>        s->Write("0b", 2);<br>
> @@ -670,8 +670,8 @@ lldb::offset_t lldb_private::DumpDataExtractor(<br>
>                (llvm::APFloat::getSizeInBits(semantics) + 7) / 8;<br>
>            llvm::Optional<llvm::APInt> apint =<br>
>                GetAPInt(DE, &offset, semantics_byte_size);<br>
> -          if (apint) {<br>
> -            llvm::APFloat apfloat(semantics, *apint);<br>
> +          if (apint.hasValue()) {<br>
> +            llvm::APFloat apfloat(semantics, apint.getValue());<br>
>              apfloat.toString(sv, format_precision, format_max_padding);<br>
>              if (!sv.empty()) {<br>
>                s->Printf("%*.*s", (int)sv.size(), (int)sv.size(), sv.data());<br>
><br>
> diff  --git a/lldb/source/Core/ValueObjectChild.cpp b/lldb/source/Core/ValueObjectChild.cpp<br>
> index f0c91e48ac564..a2beeb0bcdebe 100644<br>
> --- a/lldb/source/Core/ValueObjectChild.cpp<br>
> +++ b/lldb/source/Core/ValueObjectChild.cpp<br>
> @@ -82,8 +82,8 @@ ConstString ValueObjectChild::GetDisplayTypeName() {<br>
>  }<br>
><br>
>  LazyBool ValueObjectChild::CanUpdateWithInvalidExecutionContext() {<br>
> -  if (m_can_update_with_invalid_exe_ctx)<br>
> -    return *m_can_update_with_invalid_exe_ctx;<br>
> +  if (m_can_update_with_invalid_exe_ctx.hasValue())<br>
> +    return m_can_update_with_invalid_exe_ctx.getValue();<br>
>    if (m_parent) {<br>
>      ValueObject *opinionated_parent =<br>
>          m_parent->FollowParentChain([](ValueObject *valobj) -> bool {<br>
> @@ -93,11 +93,11 @@ LazyBool ValueObjectChild::CanUpdateWithInvalidExecutionContext() {<br>
>      if (opinionated_parent)<br>
>        return (m_can_update_with_invalid_exe_ctx =<br>
>                    opinionated_parent->CanUpdateWithInvalidExecutionContext())<br>
> -          .value();<br>
> +          .getValue();<br>
>    }<br>
>    return (m_can_update_with_invalid_exe_ctx =<br>
>                this->ValueObject::CanUpdateWithInvalidExecutionContext())<br>
> -      .value();<br>
> +      .getValue();<br>
>  }<br>
><br>
>  bool ValueObjectChild::UpdateValue() {<br>
><br>
> diff  --git a/lldb/source/Host/common/File.cpp b/lldb/source/Host/common/File.cpp<br>
> index 476ab23b45c34..760fb98fb496e 100644<br>
> --- a/lldb/source/Host/common/File.cpp<br>
> +++ b/lldb/source/Host/common/File.cpp<br>
> @@ -833,19 +833,22 @@ SerialPort::Create(int fd, OpenOptions options, Options serial_options,<br>
>    if (llvm::Error error = term.SetRaw())<br>
>      return std::move(error);<br>
>    if (serial_options.BaudRate) {<br>
> -    if (llvm::Error error = term.SetBaudRate(*serial_options.BaudRate))<br>
> +    if (llvm::Error error =<br>
> +            term.SetBaudRate(serial_options.BaudRate.getValue()))<br>
>        return std::move(error);<br>
>    }<br>
>    if (serial_options.Parity) {<br>
> -    if (llvm::Error error = term.SetParity(*serial_options.Parity))<br>
> +    if (llvm::Error error = term.SetParity(serial_options.Parity.getValue()))<br>
>        return std::move(error);<br>
>    }<br>
>    if (serial_options.ParityCheck) {<br>
> -    if (llvm::Error error = term.SetParityCheck(*serial_options.ParityCheck))<br>
> +    if (llvm::Error error =<br>
> +            term.SetParityCheck(serial_options.ParityCheck.getValue()))<br>
>        return std::move(error);<br>
>    }<br>
>    if (serial_options.StopBits) {<br>
> -    if (llvm::Error error = term.SetStopBits(*serial_options.StopBits))<br>
> +    if (llvm::Error error =<br>
> +            term.SetStopBits(serial_options.StopBits.getValue()))<br>
>        return std::move(error);<br>
>    }<br>
><br>
><br>
> diff  --git a/lldb/source/Host/common/Terminal.cpp b/lldb/source/Host/common/Terminal.cpp<br>
> index 6eb7332d336ad..831e9dff4eb18 100644<br>
> --- a/lldb/source/Host/common/Terminal.cpp<br>
> +++ b/lldb/source/Host/common/Terminal.cpp<br>
> @@ -281,11 +281,11 @@ llvm::Error Terminal::SetBaudRate(unsigned int baud_rate) {<br>
>      return llvm::createStringError(llvm::inconvertibleErrorCode(),<br>
>                                     "baud rate %d unsupported by the platform",<br>
>                                     baud_rate);<br>
> -  if (::cfsetispeed(&fd_termios, *val) != 0)<br>
> +  if (::cfsetispeed(&fd_termios, val.getValue()) != 0)<br>
>      return llvm::createStringError(<br>
>          std::error_code(errno, std::generic_category()),<br>
>          "setting input baud rate failed");<br>
> -  if (::cfsetospeed(&fd_termios, *val) != 0)<br>
> +  if (::cfsetospeed(&fd_termios, val.getValue()) != 0)<br>
>      return llvm::createStringError(<br>
>          std::error_code(errno, std::generic_category()),<br>
>          "setting output baud rate failed");<br>
><br>
> diff  --git a/lldb/source/Plugins/ABI/X86/ABIX86.cpp b/lldb/source/Plugins/ABI/X86/ABIX86.cpp<br>
> index 64c5d5a1174f6..2cd653fe2c5e8 100644<br>
> --- a/lldb/source/Plugins/ABI/X86/ABIX86.cpp<br>
> +++ b/lldb/source/Plugins/ABI/X86/ABIX86.cpp<br>
> @@ -100,8 +100,8 @@ addCombinedRegisters(std::vector<DynamicRegisterInfo::Register> &regs,<br>
>      if (regdata1->subreg_name != regdata2->subreg_name)<br>
>        continue;<br>
><br>
> -    uint32_t base_index1 = *regdata1->base_index;<br>
> -    uint32_t base_index2 = *regdata2->base_index;<br>
> +    uint32_t base_index1 = regdata1->base_index.getValue();<br>
> +    uint32_t base_index2 = regdata2->base_index.getValue();<br>
>      if (regs[base_index1].byte_size != base_size ||<br>
>          regs[base_index2].byte_size != base_size)<br>
>        continue;<br>
><br>
> diff  --git a/lldb/source/Plugins/Disassembler/LLVMC/DisassemblerLLVMC.cpp b/lldb/source/Plugins/Disassembler/LLVMC/DisassemblerLLVMC.cpp<br>
> index 1f5addca9e704..e4c7e8fa3b83b 100644<br>
> --- a/lldb/source/Plugins/Disassembler/LLVMC/DisassemblerLLVMC.cpp<br>
> +++ b/lldb/source/Plugins/Disassembler/LLVMC/DisassemblerLLVMC.cpp<br>
> @@ -1382,14 +1382,14 @@ const char *DisassemblerLLVMC::SymbolLookup(uint64_t value, uint64_t *type_ptr,<br>
>          // the ADRP's register and this ADD's register are the same,<br>
>          // then this is a pc-relative address calculation.<br>
>          if (*type_ptr == LLVMDisassembler_ReferenceType_In_ARM64_ADDXri &&<br>
> -            m_adrp_insn && m_adrp_address == pc - 4 &&<br>
> -            (*m_adrp_insn & 0x1f) == ((value >> 5) & 0x1f)) {<br>
> +            m_adrp_insn.hasValue() && m_adrp_address == pc - 4 &&<br>
> +            (m_adrp_insn.getValue() & 0x1f) == ((value >> 5) & 0x1f)) {<br>
>            uint32_t addxri_inst;<br>
>            uint64_t adrp_imm, addxri_imm;<br>
>            // Get immlo and immhi bits, OR them together to get the ADRP imm<br>
>            // value.<br>
> -          adrp_imm =<br>
> -              ((*m_adrp_insn & 0x00ffffe0) >> 3) | ((*m_adrp_insn >> 29) & 0x3);<br>
> +          adrp_imm = ((m_adrp_insn.getValue() & 0x00ffffe0) >> 3) |<br>
> +                     ((m_adrp_insn.getValue() >> 29) & 0x3);<br>
>            // if high bit of immhi after right-shifting set, sign extend<br>
>            if (adrp_imm & (1ULL << 20))<br>
>              adrp_imm |= ~((1ULL << 21) - 1);<br>
><br>
> diff  --git a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp<br>
> index 4f23ff4437d9a..82f825871593d 100644<br>
> --- a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp<br>
> +++ b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp<br>
> @@ -218,10 +218,10 @@ void CPlusPlusLanguage::MethodName::Parse() {<br>
>      } else {<br>
>        CPlusPlusNameParser parser(m_full.GetStringRef());<br>
>        if (auto function = parser.ParseAsFunctionDefinition()) {<br>
> -        m_basename = function->name.basename;<br>
> -        m_context = function->name.context;<br>
> -        m_arguments = function->arguments;<br>
> -        m_qualifiers = function->qualifiers;<br>
> +        m_basename = function.getValue().name.basename;<br>
> +        m_context = function.getValue().name.context;<br>
> +        m_arguments = function.getValue().arguments;<br>
> +        m_qualifiers = function.getValue().qualifiers;<br>
>          m_parse_error = false;<br>
>        } else {<br>
>          m_parse_error = true;<br>
> @@ -329,8 +329,8 @@ bool CPlusPlusLanguage::ExtractContextAndIdentifier(<br>
><br>
>    CPlusPlusNameParser parser(name);<br>
>    if (auto full_name = parser.ParseAsFullName()) {<br>
> -    identifier = full_name->basename;<br>
> -    context = full_name->context;<br>
> +    identifier = full_name.getValue().basename;<br>
> +    context = full_name.getValue().context;<br>
>      return true;<br>
>    }<br>
>    return false;<br>
><br>
> diff  --git a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusNameParser.cpp b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusNameParser.cpp<br>
> index 3a1fde28c65cc..eca36fff18f83 100644<br>
> --- a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusNameParser.cpp<br>
> +++ b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusNameParser.cpp<br>
> @@ -55,8 +55,8 @@ Optional<ParsedName> CPlusPlusNameParser::ParseAsFullName() {<br>
>    if (HasMoreTokens())<br>
>      return None;<br>
>    ParsedName result;<br>
> -  result.basename = GetTextForRange(name_ranges->basename_range);<br>
> -  result.context = GetTextForRange(name_ranges->context_range);<br>
> +  result.basename = GetTextForRange(name_ranges.getValue().basename_range);<br>
> +  result.context = GetTextForRange(name_ranges.getValue().context_range);<br>
>    return result;<br>
>  }<br>
><br>
> @@ -125,8 +125,8 @@ CPlusPlusNameParser::ParseFunctionImpl(bool expect_return_type) {<br>
>    size_t end_position = GetCurrentPosition();<br>
><br>
>    ParsedFunction result;<br>
> -  result.name.basename = GetTextForRange(maybe_name->basename_range);<br>
> -  result.name.context = GetTextForRange(maybe_name->context_range);<br>
> +  result.name.basename = GetTextForRange(maybe_name.getValue().basename_range);<br>
> +  result.name.context = GetTextForRange(maybe_name.getValue().context_range);<br>
>    result.arguments = GetTextForRange(Range(argument_start, qualifiers_start));<br>
>    result.qualifiers = GetTextForRange(Range(qualifiers_start, end_position));<br>
>    start_position.Remove();<br>
> @@ -616,10 +616,10 @@ CPlusPlusNameParser::ParseFullNameImpl() {<br>
>        state == State::AfterTemplate) {<br>
>      ParsedNameRanges result;<br>
>      if (last_coloncolon_position) {<br>
> -      result.context_range =<br>
> -          Range(start_position.GetSavedPosition(), *last_coloncolon_position);<br>
> +      result.context_range = Range(start_position.GetSavedPosition(),<br>
> +                                   last_coloncolon_position.getValue());<br>
>        result.basename_range =<br>
> -          Range(*last_coloncolon_position + 1, GetCurrentPosition());<br>
> +          Range(last_coloncolon_position.getValue() + 1, GetCurrentPosition());<br>
>      } else {<br>
>        result.basename_range =<br>
>            Range(start_position.GetSavedPosition(), GetCurrentPosition());<br>
><br>
> diff  --git a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp<br>
> index 045bdd4e2808f..fdebfcd388ff9 100644<br>
> --- a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp<br>
> +++ b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp<br>
> @@ -6516,8 +6516,8 @@ bool ObjectFileMachO::SaveCore(const lldb::ProcessSP &process_sp,<br>
>              addr_t pagesize = range_info.GetPageSize();<br>
>              const llvm::Optional<std::vector<addr_t>> &dirty_page_list =<br>
>                  range_info.GetDirtyPageList();<br>
> -            if (dirty_pages_only && dirty_page_list) {<br>
> -              for (addr_t dirtypage : *dirty_page_list) {<br>
> +            if (dirty_pages_only && dirty_page_list.hasValue()) {<br>
> +              for (addr_t dirtypage : dirty_page_list.getValue()) {<br>
>                  page_object obj;<br>
>                  obj.addr = dirtypage;<br>
>                  obj.size = pagesize;<br>
><br>
> diff  --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp<br>
> index c44ace96dd55c..9f159f6188997 100644<br>
> --- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp<br>
> +++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp<br>
> @@ -2722,12 +2722,12 @@ bool GDBRemoteCommunicationClient::SetCurrentThread(uint64_t tid,<br>
>      return true;<br>
><br>
>    llvm::Optional<PidTid> ret = SendSetCurrentThreadPacket(tid, pid, 'g');<br>
> -  if (ret) {<br>
> +  if (ret.hasValue()) {<br>
>      if (ret->pid != LLDB_INVALID_PROCESS_ID)<br>
>        m_curr_pid = ret->pid;<br>
>      m_curr_tid = ret->tid;<br>
>    }<br>
> -  return ret.has_value();<br>
> +  return ret.hasValue();<br>
>  }<br>
><br>
>  bool GDBRemoteCommunicationClient::SetCurrentThreadForRun(uint64_t tid,<br>
> @@ -2737,12 +2737,12 @@ bool GDBRemoteCommunicationClient::SetCurrentThreadForRun(uint64_t tid,<br>
>      return true;<br>
><br>
>    llvm::Optional<PidTid> ret = SendSetCurrentThreadPacket(tid, pid, 'c');<br>
> -  if (ret) {<br>
> +  if (ret.hasValue()) {<br>
>      if (ret->pid != LLDB_INVALID_PROCESS_ID)<br>
>        m_curr_pid_run = ret->pid;<br>
>      m_curr_tid_run = ret->tid;<br>
>    }<br>
> -  return ret.has_value();<br>
> +  return ret.hasValue();<br>
>  }<br>
><br>
>  bool GDBRemoteCommunicationClient::GetStopReply(<br>
><br>
> diff  --git a/lldb/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.cpp b/lldb/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.cpp<br>
> index b5615c358b959..11175a410aa92 100644<br>
> --- a/lldb/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.cpp<br>
> +++ b/lldb/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.cpp<br>
> @@ -674,9 +674,9 @@ SymbolFileBreakpad::ParseCFIUnwindPlan(const Bookmark &bookmark,<br>
>    plan_sp->AppendRow(row_sp);<br>
>    for (++It; It != End; ++It) {<br>
>      llvm::Optional<StackCFIRecord> record = StackCFIRecord::parse(*It);<br>
> -    if (!record)<br>
> +    if (!record.hasValue())<br>
>        return nullptr;<br>
> -    if (record->Size)<br>
> +    if (record->Size.hasValue())<br>
>        break;<br>
><br>
>      row_sp = std::make_shared<UnwindPlan::Row>(*row_sp);<br>
><br>
> diff  --git a/lldb/source/Target/Thread.cpp b/lldb/source/Target/Thread.cpp<br>
> index 247913c5b615f..3803748be2971 100644<br>
> --- a/lldb/source/Target/Thread.cpp<br>
> +++ b/lldb/source/Target/Thread.cpp<br>
> @@ -2022,8 +2022,7 @@ lldb::ValueObjectSP Thread::GetSiginfoValue() {<br>
><br>
>    llvm::Optional<uint64_t> type_size = type.GetByteSize(nullptr);<br>
>    assert(type_size);<br>
> -  llvm::Expected<std::unique_ptr<llvm::MemoryBuffer>> data =<br>
> -      GetSiginfo(*type_size);<br>
> +  llvm::Expected<std::unique_ptr<llvm::MemoryBuffer>> data = GetSiginfo(type_size.getValue());<br>
>    if (!data)<br>
>      return ValueObjectConstResult::Create(&target, Status(data.takeError()));<br>
><br>
><br>
> diff  --git a/lldb/source/Target/UnixSignals.cpp b/lldb/source/Target/UnixSignals.cpp<br>
> index a92138ad2514f..de1fdb8cc4202 100644<br>
> --- a/lldb/source/Target/UnixSignals.cpp<br>
> +++ b/lldb/source/Target/UnixSignals.cpp<br>
> @@ -300,13 +300,14 @@ UnixSignals::GetFilteredSignals(llvm::Optional<bool> should_suppress,<br>
><br>
>      // If any of filtering conditions are not met, we move on to the next<br>
>      // signal.<br>
> -    if (should_suppress && signal_suppress != *should_suppress)<br>
> +    if (should_suppress.hasValue() &&<br>
> +        signal_suppress != should_suppress.getValue())<br>
>        continue;<br>
><br>
> -    if (should_stop && signal_stop != *should_stop)<br>
> +    if (should_stop.hasValue() && signal_stop != should_stop.getValue())<br>
>        continue;<br>
><br>
> -    if (should_notify && signal_notify != *should_notify)<br>
> +    if (should_notify.hasValue() && signal_notify != should_notify.getValue())<br>
>        continue;<br>
><br>
>      result.push_back(signo);<br>
><br>
> diff  --git a/lldb/source/Utility/SelectHelper.cpp b/lldb/source/Utility/SelectHelper.cpp<br>
> index 69b2abf1bc17c..eee6895296be6 100644<br>
> --- a/lldb/source/Utility/SelectHelper.cpp<br>
> +++ b/lldb/source/Utility/SelectHelper.cpp<br>
> @@ -161,15 +161,15 @@ lldb_private::Status SelectHelper::Select() {<br>
>    fd_set write_fdset;<br>
>    fd_set error_fdset;<br>
><br>
> -  if (max_read_fd) {<br>
> +  if (max_read_fd.hasValue()) {<br>
>      FD_ZERO(&read_fdset);<br>
>      read_fdset_ptr = &read_fdset;<br>
>    }<br>
> -  if (max_write_fd) {<br>
> +  if (max_write_fd.hasValue()) {<br>
>      FD_ZERO(&write_fdset);<br>
>      write_fdset_ptr = &write_fdset;<br>
>    }<br>
> -  if (max_error_fd) {<br>
> +  if (max_error_fd.hasValue()) {<br>
>      FD_ZERO(&error_fdset);<br>
>      error_fdset_ptr = &error_fdset;<br>
>    }<br>
> @@ -195,10 +195,10 @@ lldb_private::Status SelectHelper::Select() {<br>
>    while (true) {<br>
>      using namespace std::chrono;<br>
>      // Setup out relative timeout based on the end time if we have one<br>
> -    if (m_end_time) {<br>
> +    if (m_end_time.hasValue()) {<br>
>        tv_ptr = &tv;<br>
> -      const auto remaining_dur =<br>
> -          duration_cast<microseconds>(*m_end_time - steady_clock::now());<br>
> +      const auto remaining_dur = duration_cast<microseconds>(<br>
> +          m_end_time.getValue() - steady_clock::now());<br>
>        if (remaining_dur.count() > 0) {<br>
>          // Wait for a specific amount of time<br>
>          const auto dur_secs = duration_cast<seconds>(remaining_dur);<br>
><br>
> diff  --git a/lldb/unittests/Host/ConnectionFileDescriptorTest.cpp b/lldb/unittests/Host/ConnectionFileDescriptorTest.cpp<br>
> index 14a0d17255908..eb4b824c6c147 100644<br>
> --- a/lldb/unittests/Host/ConnectionFileDescriptorTest.cpp<br>
> +++ b/lldb/unittests/Host/ConnectionFileDescriptorTest.cpp<br>
> @@ -28,7 +28,7 @@ class ConnectionFileDescriptorTest : public testing::Test {<br>
><br>
>      std::string uri(connection_file_descriptor.GetURI());<br>
>      EXPECT_EQ((URI{"connect", ip, socket->GetRemotePortNumber(), "/"}),<br>
> -              *URI::Parse(uri));<br>
> +              URI::Parse(uri).getValue());<br>
>    }<br>
>  };<br>
><br>
><br>
> diff  --git a/lldb/unittests/Process/gdb-remote/GDBRemoteCommunicationClientTest.cpp b/lldb/unittests/Process/gdb-remote/GDBRemoteCommunicationClientTest.cpp<br>
> index b80c44dfae828..d15b85204b555 100644<br>
> --- a/lldb/unittests/Process/gdb-remote/GDBRemoteCommunicationClientTest.cpp<br>
> +++ b/lldb/unittests/Process/gdb-remote/GDBRemoteCommunicationClientTest.cpp<br>
> @@ -190,14 +190,14 @@ TEST_F(GDBRemoteCommunicationClientTest, GetModulesInfo) {<br>
>        R"("file_path":"/foo/bar.so","file_offset":0,"file_size":1234}]])");<br>
><br>
>    auto result = async_result.get();<br>
> -  ASSERT_TRUE(result.has_value());<br>
> +  ASSERT_TRUE(result.hasValue());<br>
>    ASSERT_EQ(1u, result->size());<br>
> -  EXPECT_EQ("/foo/bar.so", result.value()[0].GetFileSpec().GetPath());<br>
> -  EXPECT_EQ(triple, result.value()[0].GetArchitecture().GetTriple());<br>
> +  EXPECT_EQ("/foo/bar.so", result.getValue()[0].GetFileSpec().GetPath());<br>
> +  EXPECT_EQ(triple, result.getValue()[0].GetArchitecture().GetTriple());<br>
>    EXPECT_EQ(UUID::fromData("@ABCDEFGHIJKLMNO", 16),<br>
> -            result.value()[0].GetUUID());<br>
> -  EXPECT_EQ(0u, result.value()[0].GetObjectOffset());<br>
> -  EXPECT_EQ(1234u, result.value()[0].GetObjectSize());<br>
> +            result.getValue()[0].GetUUID());<br>
> +  EXPECT_EQ(0u, result.getValue()[0].GetObjectOffset());<br>
> +  EXPECT_EQ(1234u, result.getValue()[0].GetObjectSize());<br>
>  }<br>
><br>
>  TEST_F(GDBRemoteCommunicationClientTest, GetModulesInfo_UUID20) {<br>
> @@ -215,14 +215,14 @@ TEST_F(GDBRemoteCommunicationClientTest, GetModulesInfo_UUID20) {<br>
>        R"("file_path":"/foo/bar.so","file_offset":0,"file_size":1234}]])");<br>
><br>
>    auto result = async_result.get();<br>
> -  ASSERT_TRUE(result.has_value());<br>
> +  ASSERT_TRUE(result.hasValue());<br>
>    ASSERT_EQ(1u, result->size());<br>
> -  EXPECT_EQ("/foo/bar.so", result.value()[0].GetFileSpec().GetPath());<br>
> -  EXPECT_EQ(triple, result.value()[0].GetArchitecture().GetTriple());<br>
> +  EXPECT_EQ("/foo/bar.so", result.getValue()[0].GetFileSpec().GetPath());<br>
> +  EXPECT_EQ(triple, result.getValue()[0].GetArchitecture().GetTriple());<br>
>    EXPECT_EQ(UUID::fromData("@ABCDEFGHIJKLMNOPQRS", 20),<br>
> -            result.value()[0].GetUUID());<br>
> -  EXPECT_EQ(0u, result.value()[0].GetObjectOffset());<br>
> -  EXPECT_EQ(1234u, result.value()[0].GetObjectSize());<br>
> +            result.getValue()[0].GetUUID());<br>
> +  EXPECT_EQ(0u, result.getValue()[0].GetObjectOffset());<br>
> +  EXPECT_EQ(1234u, result.getValue()[0].GetObjectSize());<br>
>  }<br>
><br>
>  TEST_F(GDBRemoteCommunicationClientTest, GetModulesInfoInvalidResponse) {<br>
><br>
> diff  --git a/lldb/unittests/Process/minidump/MinidumpParserTest.cpp b/lldb/unittests/Process/minidump/MinidumpParserTest.cpp<br>
> index 85a15b84ecddb..95e2cf30b3dae 100644<br>
> --- a/lldb/unittests/Process/minidump/MinidumpParserTest.cpp<br>
> +++ b/lldb/unittests/Process/minidump/MinidumpParserTest.cpp<br>
> @@ -183,7 +183,7 @@ TEST_F(MinidumpParserTest, GetLinuxProcStatus) {<br>
>  )"),<br>
>                      llvm::Succeeded());<br>
>    llvm::Optional<LinuxProcStatus> proc_status = parser->GetLinuxProcStatus();<br>
> -  ASSERT_TRUE(proc_status.has_value());<br>
> +  ASSERT_TRUE(proc_status.hasValue());<br>
>    lldb::pid_t pid = proc_status->GetPid();<br>
>    ASSERT_EQ(16001UL, pid);<br>
>  }<br>
> @@ -218,8 +218,8 @@ TEST_F(MinidumpParserTest, GetPid) {<br>
>  )"),<br>
>                      llvm::Succeeded());<br>
>    llvm::Optional<lldb::pid_t> pid = parser->GetPid();<br>
> -  ASSERT_TRUE(pid.has_value());<br>
> -  ASSERT_EQ(16001UL, *pid);<br>
> +  ASSERT_TRUE(pid.hasValue());<br>
> +  ASSERT_EQ(16001UL, pid.getValue());<br>
>  }<br>
><br>
>  TEST_F(MinidumpParserTest, GetFilteredModuleList) {<br>
> @@ -260,7 +260,7 @@ TEST_F(MinidumpParserTest, GetExceptionStream) {<br>
>  void check_mem_range_exists(MinidumpParser &parser, const uint64_t range_start,<br>
>                              const uint64_t range_size) {<br>
>    llvm::Optional<minidump::Range> range = parser.FindMemoryRange(range_start);<br>
> -  ASSERT_TRUE(range.has_value()) << "There is no range containing this address";<br>
> +  ASSERT_TRUE(range.hasValue()) << "There is no range containing this address";<br>
>    EXPECT_EQ(range_start, range->start);<br>
>    EXPECT_EQ(range_start + range_size, range->start + range->range_ref.size());<br>
>  }<br>
> @@ -321,14 +321,14 @@ TEST_F(MinidumpParserTest, FindMemoryRangeWithFullMemoryMinidump) {<br>
>    SetUpData("fizzbuzz_wow64.dmp");<br>
><br>
>    // There are a lot of ranges in the file, just testing with some of them<br>
> -  EXPECT_FALSE(parser->FindMemoryRange(0x00).has_value());<br>
> -  EXPECT_FALSE(parser->FindMemoryRange(0x2a).has_value());<br>
> +  EXPECT_FALSE(parser->FindMemoryRange(0x00).hasValue());<br>
> +  EXPECT_FALSE(parser->FindMemoryRange(0x2a).hasValue());<br>
>    check_mem_range_exists(*parser, 0x10000, 65536); // first range<br>
>    check_mem_range_exists(*parser, 0x40000, 4096);<br>
> -  EXPECT_FALSE(parser->FindMemoryRange(0x40000 + 4096).has_value());<br>
> +  EXPECT_FALSE(parser->FindMemoryRange(0x40000 + 4096).hasValue());<br>
>    check_mem_range_exists(*parser, 0x77c12000, 8192);<br>
>    check_mem_range_exists(*parser, 0x7ffe0000, 4096); // last range<br>
> -  EXPECT_FALSE(parser->FindMemoryRange(0x7ffe0000 + 4096).has_value());<br>
> +  EXPECT_FALSE(parser->FindMemoryRange(0x7ffe0000 + 4096).hasValue());<br>
>  }<br>
><br>
>  constexpr auto yes = MemoryRegionInfo::eYes;<br>
> @@ -544,23 +544,23 @@ TEST_F(MinidumpParserTest, GetMiscInfoWindows) {<br>
>    const MinidumpMiscInfo *misc_info = parser->GetMiscInfo();<br>
>    ASSERT_NE(nullptr, misc_info);<br>
>    llvm::Optional<lldb::pid_t> pid = misc_info->GetPid();<br>
> -  ASSERT_TRUE(pid.has_value());<br>
> -  ASSERT_EQ(4440UL, *pid);<br>
> +  ASSERT_TRUE(pid.hasValue());<br>
> +  ASSERT_EQ(4440UL, pid.getValue());<br>
>  }<br>
><br>
>  TEST_F(MinidumpParserTest, GetPidWindows) {<br>
>    SetUpData("fizzbuzz_no_heap.dmp");<br>
>    llvm::Optional<lldb::pid_t> pid = parser->GetPid();<br>
> -  ASSERT_TRUE(pid.has_value());<br>
> -  ASSERT_EQ(4440UL, *pid);<br>
> +  ASSERT_TRUE(pid.hasValue());<br>
> +  ASSERT_EQ(4440UL, pid.getValue());<br>
>  }<br>
><br>
>  // wow64<br>
>  TEST_F(MinidumpParserTest, GetPidWow64) {<br>
>    SetUpData("fizzbuzz_wow64.dmp");<br>
>    llvm::Optional<lldb::pid_t> pid = parser->GetPid();<br>
> -  ASSERT_TRUE(pid.has_value());<br>
> -  ASSERT_EQ(7836UL, *pid);<br>
> +  ASSERT_TRUE(pid.hasValue());<br>
> +  ASSERT_EQ(7836UL, pid.getValue());<br>
>  }<br>
><br>
>  // Register tests<br>
><br>
> diff  --git a/lldb/unittests/Target/FindFileTest.cpp b/lldb/unittests/Target/FindFileTest.cpp<br>
> index 6715c347b77c6..77d374d1f498d 100644<br>
> --- a/lldb/unittests/Target/FindFileTest.cpp<br>
> +++ b/lldb/unittests/Target/FindFileTest.cpp<br>
> @@ -56,7 +56,7 @@ static void TestFileFindings(const PathMappingList &map,<br>
>      llvm::Optional<FileSpec> remapped;<br>
><br>
>      EXPECT_TRUE(bool(remapped = map.FindFile(match.original)));<br>
> -    EXPECT_TRUE(FileSpec(*remapped).GetPath() ==<br>
> +    EXPECT_TRUE(FileSpec(remapped.getValue()).GetPath() ==<br>
>                  ConstString(match.remapped).GetStringRef());<br>
>    }<br>
>  }<br>
><br>
> diff  --git a/lldb/unittests/Utility/StringExtractorGDBRemoteTest.cpp b/lldb/unittests/Utility/StringExtractorGDBRemoteTest.cpp<br>
> index 922167c342d90..88362c028a9db 100644<br>
> --- a/lldb/unittests/Utility/StringExtractorGDBRemoteTest.cpp<br>
> +++ b/lldb/unittests/Utility/StringExtractorGDBRemoteTest.cpp<br>
> @@ -109,77 +109,77 @@ TEST(StringExtractorGDBRemoteTest, GetPidTid) {<br>
>    // pure thread id<br>
><br>
>    ex.Reset("-1");<br>
> -  EXPECT_THAT(ex.GetPidTid(100).value(),<br>
> +  EXPECT_THAT(ex.GetPidTid(100).getValue(),<br>
>                ::testing::Pair(100, StringExtractorGDBRemote::AllThreads));<br>
><br>
>    ex.Reset("1234");<br>
> -  EXPECT_THAT(ex.GetPidTid(100).value(), ::testing::Pair(100, 0x1234ULL));<br>
> +  EXPECT_THAT(ex.GetPidTid(100).getValue(), ::testing::Pair(100, 0x1234ULL));<br>
><br>
>    ex.Reset("123456789ABCDEF0");<br>
> -  EXPECT_THAT(ex.GetPidTid(100).value(),<br>
> +  EXPECT_THAT(ex.GetPidTid(100).getValue(),<br>
>                ::testing::Pair(100, 0x123456789ABCDEF0ULL));<br>
><br>
>    // pure process id<br>
><br>
>    ex.Reset("p-1");<br>
> -  EXPECT_THAT(ex.GetPidTid(100).value(),<br>
> +  EXPECT_THAT(ex.GetPidTid(100).getValue(),<br>
>                ::testing::Pair(StringExtractorGDBRemote::AllProcesses,<br>
>                                StringExtractorGDBRemote::AllThreads));<br>
><br>
>    ex.Reset("p1234");<br>
> -  EXPECT_THAT(ex.GetPidTid(100).value(),<br>
> +  EXPECT_THAT(ex.GetPidTid(100).getValue(),<br>
>                ::testing::Pair(0x1234ULL, StringExtractorGDBRemote::AllThreads));<br>
><br>
>    ex.Reset("p123456789ABCDEF0");<br>
> -  EXPECT_THAT(ex.GetPidTid(100).value(),<br>
> +  EXPECT_THAT(ex.GetPidTid(100).getValue(),<br>
>                ::testing::Pair(0x123456789ABCDEF0ULL,<br>
>                                StringExtractorGDBRemote::AllThreads));<br>
><br>
>    ex.Reset("pFFFFFFFFFFFFFFFF");<br>
> -  EXPECT_THAT(ex.GetPidTid(100).value(),<br>
> +  EXPECT_THAT(ex.GetPidTid(100).getValue(),<br>
>                ::testing::Pair(StringExtractorGDBRemote::AllProcesses,<br>
>                                StringExtractorGDBRemote::AllThreads));<br>
><br>
>    // combined thread id + process id<br>
><br>
>    ex.Reset("p-1.-1");<br>
> -  EXPECT_THAT(ex.GetPidTid(100).value(),<br>
> +  EXPECT_THAT(ex.GetPidTid(100).getValue(),<br>
>                ::testing::Pair(StringExtractorGDBRemote::AllProcesses,<br>
>                                StringExtractorGDBRemote::AllThreads));<br>
><br>
>    ex.Reset("p1234.-1");<br>
> -  EXPECT_THAT(ex.GetPidTid(100).value(),<br>
> +  EXPECT_THAT(ex.GetPidTid(100).getValue(),<br>
>                ::testing::Pair(0x1234ULL, StringExtractorGDBRemote::AllThreads));<br>
><br>
>    ex.Reset("p1234.123456789ABCDEF0");<br>
> -  EXPECT_THAT(ex.GetPidTid(100).value(),<br>
> +  EXPECT_THAT(ex.GetPidTid(100).getValue(),<br>
>                ::testing::Pair(0x1234ULL, 0x123456789ABCDEF0ULL));<br>
><br>
>    ex.Reset("p123456789ABCDEF0.-1");<br>
> -  EXPECT_THAT(ex.GetPidTid(100).value(),<br>
> +  EXPECT_THAT(ex.GetPidTid(100).getValue(),<br>
>                ::testing::Pair(0x123456789ABCDEF0ULL,<br>
>                                StringExtractorGDBRemote::AllThreads));<br>
><br>
>    ex.Reset("p123456789ABCDEF0.1234");<br>
> -  EXPECT_THAT(ex.GetPidTid(100).value(),<br>
> +  EXPECT_THAT(ex.GetPidTid(100).getValue(),<br>
>                ::testing::Pair(0x123456789ABCDEF0ULL, 0x1234ULL));<br>
><br>
>    ex.Reset("p123456789ABCDEF0.123456789ABCDEF0");<br>
> -  EXPECT_THAT(ex.GetPidTid(100).value(),<br>
> +  EXPECT_THAT(ex.GetPidTid(100).getValue(),<br>
>                ::testing::Pair(0x123456789ABCDEF0ULL, 0x123456789ABCDEF0ULL));<br>
><br>
>    ex.Reset("p123456789ABCDEF0.123456789ABCDEF0");<br>
> -  EXPECT_THAT(ex.GetPidTid(100).value(),<br>
> +  EXPECT_THAT(ex.GetPidTid(100).getValue(),<br>
>                ::testing::Pair(0x123456789ABCDEF0ULL, 0x123456789ABCDEF0ULL));<br>
>  }<br>
><br>
>  TEST(StringExtractorGDBRemoteTest, GetPidTidMultipleValues) {<br>
>    StringExtractorGDBRemote ex("1234;p12;p1234.-1");<br>
> -  ASSERT_THAT(ex.GetPidTid(100).value(), ::testing::Pair(100, 0x1234ULL));<br>
> +  ASSERT_THAT(ex.GetPidTid(100).getValue(), ::testing::Pair(100, 0x1234ULL));<br>
>    ASSERT_EQ(ex.GetChar(), ';');<br>
> -  ASSERT_THAT(ex.GetPidTid(100).value(),<br>
> +  ASSERT_THAT(ex.GetPidTid(100).getValue(),<br>
>                ::testing::Pair(0x12ULL, StringExtractorGDBRemote::AllThreads));<br>
>    ASSERT_EQ(ex.GetChar(), ';');<br>
> -  ASSERT_THAT(ex.GetPidTid(100).value(),<br>
> +  ASSERT_THAT(ex.GetPidTid(100).getValue(),<br>
>                ::testing::Pair(0x1234ULL, StringExtractorGDBRemote::AllThreads));<br>
>  }<br>
><br>
> diff  --git a/lldb/unittests/tools/lldb-server/tests/TestClient.cpp b/lldb/unittests/tools/lldb-server/tests/TestClient.cpp<br>
> index f65c33e8c5c31..463dd226825eb 100644<br>
> --- a/lldb/unittests/tools/lldb-server/tests/TestClient.cpp<br>
> +++ b/lldb/unittests/tools/lldb-server/tests/TestClient.cpp<br>
> @@ -251,7 +251,7 @@ Error TestClient::queryProcess() {<br>
>  }<br>
><br>
>  Error TestClient::Continue(StringRef message) {<br>
> -  assert(m_process_info.has_value());<br>
> +  assert(m_process_info.hasValue());<br>
><br>
>    auto StopReplyOr = SendMessage<StopReply>(<br>
>        message, m_process_info->GetEndian(), m_register_infos);<br>
><br>
> diff  --git a/llvm/include/llvm/ADT/Optional.h b/llvm/include/llvm/ADT/Optional.h<br>
> index b2ebd17ce90fe..d1615d903e98d 100644<br>
> --- a/llvm/include/llvm/ADT/Optional.h<br>
> +++ b/llvm/include/llvm/ADT/Optional.h<br>
> @@ -92,40 +92,32 @@ class OptionalStorage {<br>
>    }<br>
><br>
>    constexpr bool has_value() const noexcept { return hasVal; }<br>
> -#if 0<br>
>    constexpr bool hasValue() const noexcept { return hasVal; }<br>
> -#endif<br>
><br>
>    T &value() &noexcept {<br>
>      assert(hasVal);<br>
>      return val;<br>
>    }<br>
> -#if 0<br>
>    T &getValue() &noexcept {<br>
>      assert(hasVal);<br>
>      return val;<br>
>    }<br>
> -#endif<br>
>    constexpr T const &value() const &noexcept {<br>
>      assert(hasVal);<br>
>      return val;<br>
>    }<br>
> -#if 0<br>
>    constexpr T const &getValue() const &noexcept {<br>
>      assert(hasVal);<br>
>      return val;<br>
>    }<br>
> -#endif<br>
>    T &&value() &&noexcept {<br>
>      assert(hasVal);<br>
>      return std::move(val);<br>
>    }<br>
> -#if 0<br>
>    T &&getValue() &&noexcept {<br>
>      assert(hasVal);<br>
>      return std::move(val);<br>
>    }<br>
> -#endif<br>
><br>
>    template <class... Args> void emplace(Args &&...args) {<br>
>      reset();<br>
> @@ -211,40 +203,32 @@ template <typename T> class OptionalStorage<T, true> {<br>
>    }<br>
><br>
>    constexpr bool has_value() const noexcept { return hasVal; }<br>
> -#if 0<br>
>    constexpr bool hasValue() const noexcept { return hasVal; }<br>
> -#endif<br>
><br>
>    T &value() &noexcept {<br>
>      assert(hasVal);<br>
>      return val;<br>
>    }<br>
> -#if 0<br>
>    T &getValue() &noexcept {<br>
>      assert(hasVal);<br>
>      return val;<br>
>    }<br>
> -#endif<br>
>    constexpr T const &value() const &noexcept {<br>
>      assert(hasVal);<br>
>      return val;<br>
>    }<br>
> -#if 0<br>
>    constexpr T const &getValue() const &noexcept {<br>
>      assert(hasVal);<br>
>      return val;<br>
>    }<br>
> -#endif<br>
>    T &&value() &&noexcept {<br>
>      assert(hasVal);<br>
>      return std::move(val);<br>
>    }<br>
> -#if 0<br>
>    T &&getValue() &&noexcept {<br>
>      assert(hasVal);<br>
>      return std::move(val);<br>
>    }<br>
> -#endif<br>
><br>
>    template <class... Args> void emplace(Args &&...args) {<br>
>      reset();<br>
> @@ -319,19 +303,13 @@ template <typename T> class Optional {<br>
>    constexpr const T *getPointer() const { return &Storage.value(); }<br>
>    T *getPointer() { return &Storage.value(); }<br>
>    constexpr const T &value() const & { return Storage.value(); }<br>
> -#if 0<br>
>    constexpr const T &getValue() const & { return Storage.value(); }<br>
> -#endif<br>
>    T &value() & { return Storage.value(); }<br>
> -#if 0<br>
>    T &getValue() & { return Storage.value(); }<br>
> -#endif<br>
><br>
>    constexpr explicit operator bool() const { return has_value(); }<br>
>    constexpr bool has_value() const { return Storage.has_value(); }<br>
> -#if 0<br>
>    constexpr bool hasValue() const { return Storage.has_value(); }<br>
> -#endif<br>
>    constexpr const T *operator->() const { return getPointer(); }<br>
>    T *operator->() { return getPointer(); }<br>
>    constexpr const T &operator*() const & { return value(); }<br>
> @@ -353,9 +331,7 @@ template <typename T> class Optional {<br>
>    }<br>
><br>
>    T &&value() && { return std::move(Storage.value()); }<br>
> -#if 0<br>
>    T &&getValue() && { return std::move(Storage.value()); }<br>
> -#endif<br>
>    T &&operator*() && { return std::move(Storage.value()); }<br>
><br>
>    template <typename U> T value_or(U &&alt) && {<br>
><br>
> diff  --git a/llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h b/llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h<br>
> index 7208f11f26a30..d8e524d7cb806 100644<br>
> --- a/llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h<br>
> +++ b/llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h<br>
> @@ -1277,10 +1277,10 @@ bool BlockFrequencyInfoImpl<BT>::computeMassInLoop(LoopData &Loop) {<br>
>          continue;<br>
>        }<br>
>        LLVM_DEBUG(dbgs() << getBlockName(HeaderNode)<br>
> -                        << " has irr loop header weight " << *HeaderWeight<br>
> -                        << "\n");<br>
> +                        << " has irr loop header weight "<br>
> +                        << HeaderWeight.getValue() << "\n");<br>
>        NumHeadersWithWeight++;<br>
> -      uint64_t HeaderWeightValue = *HeaderWeight;<br>
> +      uint64_t HeaderWeightValue = HeaderWeight.getValue();<br>
>        if (!MinHeaderWeight || HeaderWeightValue < MinHeaderWeight)<br>
>          MinHeaderWeight = HeaderWeightValue;<br>
>        if (HeaderWeightValue) {<br>
> @@ -1732,10 +1732,10 @@ raw_ostream &BlockFrequencyInfoImpl<BT>::print(raw_ostream &OS) const {<br>
>      if (Optional<uint64_t> ProfileCount =<br>
>          BlockFrequencyInfoImplBase::getBlockProfileCount(<br>
>              F->getFunction(), getNode(&BB)))<br>
> -      OS << ", count = " << *ProfileCount;<br>
> +      OS << ", count = " << ProfileCount.getValue();<br>
>      if (Optional<uint64_t> IrrLoopHeaderWeight =<br>
>          BB.getIrrLoopHeaderWeight())<br>
> -      OS << ", irr_loop_header_weight = " << *IrrLoopHeaderWeight;<br>
> +      OS << ", irr_loop_header_weight = " << IrrLoopHeaderWeight.getValue();<br>
>      OS << "\n";<br>
>    }<br>
><br>
><br>
> diff  --git a/llvm/include/llvm/Analysis/VectorUtils.h b/llvm/include/llvm/Analysis/VectorUtils.h<br>
> index 6e4c468ed64bc..df460cb49aeeb 100644<br>
> --- a/llvm/include/llvm/Analysis/VectorUtils.h<br>
> +++ b/llvm/include/llvm/Analysis/VectorUtils.h<br>
> @@ -236,10 +236,10 @@ class VFDatabase {<br>
>        // ensuring that the variant described in the attribute has a<br>
>        // corresponding definition or declaration of the vector<br>
>        // function in the Module M.<br>
> -      if (Shape && (Shape->ScalarName == ScalarName)) {<br>
> -        assert(CI.getModule()->getFunction(Shape->VectorName) &&<br>
> +      if (Shape.hasValue() && (Shape.getValue().ScalarName == ScalarName)) {<br>
> +        assert(CI.getModule()->getFunction(Shape.getValue().VectorName) &&<br>
>                 "Vector function is missing.");<br>
> -        Mappings.push_back(*Shape);<br>
> +        Mappings.push_back(Shape.getValue());<br>
>        }<br>
>      }<br>
>    }<br>
><br>
> diff  --git a/llvm/include/llvm/Bitstream/BitstreamWriter.h b/llvm/include/llvm/Bitstream/BitstreamWriter.h<br>
> index 3660ce56ded82..be6bab5532bdf 100644<br>
> --- a/llvm/include/llvm/Bitstream/BitstreamWriter.h<br>
> +++ b/llvm/include/llvm/Bitstream/BitstreamWriter.h<br>
> @@ -386,12 +386,12 @@ class BitstreamWriter {<br>
>        const BitCodeAbbrevOp &Op = Abbv->getOperandInfo(i++);<br>
><br>
>        if (Op.isLiteral())<br>
> -        EmitAbbreviatedLiteral(Op, *Code);<br>
> +        EmitAbbreviatedLiteral(Op, Code.getValue());<br>
>        else {<br>
>          assert(Op.getEncoding() != BitCodeAbbrevOp::Array &&<br>
>                 Op.getEncoding() != BitCodeAbbrevOp::Blob &&<br>
>                 "Expected literal or scalar");<br>
> -        EmitAbbreviatedField(Op, *Code);<br>
> +        EmitAbbreviatedField(Op, Code.getValue());<br>
>        }<br>
>      }<br>
><br>
><br>
> diff  --git a/llvm/include/llvm/CodeGen/GlobalISel/InstructionSelectorImpl.h b/llvm/include/llvm/CodeGen/GlobalISel/InstructionSelectorImpl.h<br>
> index 9e9fd654bfbcd..fa6f904e33a1c 100644<br>
> --- a/llvm/include/llvm/CodeGen/GlobalISel/InstructionSelectorImpl.h<br>
> +++ b/llvm/include/llvm/CodeGen/GlobalISel/InstructionSelectorImpl.h<br>
> @@ -674,8 +674,8 @@ bool InstructionSelector::executeMatchTable(<br>
>        ComplexRendererFns Renderer =<br>
>            (ISel.*ISelInfo.ComplexPredicates[ComplexPredicateID])(<br>
>                State.MIs[InsnID]->getOperand(OpIdx));<br>
> -      if (Renderer)<br>
> -        State.Renderers[RendererID] = *Renderer;<br>
> +      if (Renderer.hasValue())<br>
> +        State.Renderers[RendererID] = Renderer.getValue();<br>
>        else<br>
>          if (handleReject() == RejectAndGiveUp)<br>
>            return false;<br>
><br>
> diff  --git a/llvm/include/llvm/DebugInfo/GSYM/FunctionInfo.h b/llvm/include/llvm/DebugInfo/GSYM/FunctionInfo.h<br>
> index fb48f7f9a93c6..a41b2fe2a6e76 100644<br>
> --- a/llvm/include/llvm/DebugInfo/GSYM/FunctionInfo.h<br>
> +++ b/llvm/include/llvm/DebugInfo/GSYM/FunctionInfo.h<br>
> @@ -198,8 +198,8 @@ inline bool operator<(const FunctionInfo &LHS, const FunctionInfo &RHS) {<br>
>      return LHS.Range < RHS.Range;<br>
><br>
>    // Then sort by inline<br>
> -  if (LHS.Inline.has_value() != RHS.Inline.has_value())<br>
> -    return RHS.Inline.has_value();<br>
> +  if (LHS.Inline.hasValue() != RHS.Inline.hasValue())<br>
> +    return RHS.Inline.hasValue();<br>
><br>
>    return LHS.OptLineTable < RHS.OptLineTable;<br>
>  }<br>
><br>
> diff  --git a/llvm/include/llvm/IR/IRBuilder.h b/llvm/include/llvm/IR/IRBuilder.h<br>
> index 1747826ecacef..2b387db47ed25 100644<br>
> --- a/llvm/include/llvm/IR/IRBuilder.h<br>
> +++ b/llvm/include/llvm/IR/IRBuilder.h<br>
> @@ -1168,12 +1168,12 @@ class IRBuilderBase {<br>
>    Value *getConstrainedFPRounding(Optional<RoundingMode> Rounding) {<br>
>      RoundingMode UseRounding = DefaultConstrainedRounding;<br>
><br>
> -    if (Rounding)<br>
> -      UseRounding = *Rounding;<br>
> +    if (Rounding.hasValue())<br>
> +      UseRounding = Rounding.getValue();<br>
><br>
>      Optional<StringRef> RoundingStr = convertRoundingModeToStr(UseRounding);<br>
> -    assert(RoundingStr && "Garbage strict rounding mode!");<br>
> -    auto *RoundingMDS = MDString::get(Context, *RoundingStr);<br>
> +    assert(RoundingStr.hasValue() && "Garbage strict rounding mode!");<br>
> +    auto *RoundingMDS = MDString::get(Context, RoundingStr.getValue());<br>
><br>
>      return MetadataAsValue::get(Context, RoundingMDS);<br>
>    }<br>
> @@ -1181,12 +1181,12 @@ class IRBuilderBase {<br>
>    Value *getConstrainedFPExcept(Optional<fp::ExceptionBehavior> Except) {<br>
>      fp::ExceptionBehavior UseExcept = DefaultConstrainedExcept;<br>
><br>
> -    if (Except)<br>
> -      UseExcept = *Except;<br>
> +    if (Except.hasValue())<br>
> +      UseExcept = Except.getValue();<br>
><br>
>      Optional<StringRef> ExceptStr = convertExceptionBehaviorToStr(UseExcept);<br>
> -    assert(ExceptStr && "Garbage strict exception behavior!");<br>
> -    auto *ExceptMDS = MDString::get(Context, *ExceptStr);<br>
> +    assert(ExceptStr.hasValue() && "Garbage strict exception behavior!");<br>
> +    auto *ExceptMDS = MDString::get(Context, ExceptStr.getValue());<br>
><br>
>      return MetadataAsValue::get(Context, ExceptMDS);<br>
>    }<br>
><br>
> diff  --git a/llvm/include/llvm/MC/MCDwarf.h b/llvm/include/llvm/MC/MCDwarf.h<br>
> index 8b2ae84749b4f..d0eb06eb592bc 100644<br>
> --- a/llvm/include/llvm/MC/MCDwarf.h<br>
> +++ b/llvm/include/llvm/MC/MCDwarf.h<br>
> @@ -296,8 +296,8 @@ struct MCDwarfLineTableHeader {<br>
>      RootFile.DirIndex = 0;<br>
>      RootFile.Checksum = Checksum;<br>
>      RootFile.Source = Source;<br>
> -    trackMD5Usage(Checksum.has_value());<br>
> -    HasSource = Source.has_value();<br>
> +    trackMD5Usage(Checksum.hasValue());<br>
> +    HasSource = Source.hasValue();<br>
>    }<br>
><br>
>    void resetFileTable() {<br>
> @@ -374,8 +374,8 @@ class MCDwarfLineTable {<br>
>      Header.RootFile.DirIndex = 0;<br>
>      Header.RootFile.Checksum = Checksum;<br>
>      Header.RootFile.Source = Source;<br>
> -    Header.trackMD5Usage(Checksum.has_value());<br>
> -    Header.HasSource = Source.has_value();<br>
> +    Header.trackMD5Usage(Checksum.hasValue());<br>
> +    Header.HasSource = Source.hasValue();<br>
>    }<br>
><br>
>    void resetFileTable() { Header.resetFileTable(); }<br>
><br>
> diff  --git a/llvm/include/llvm/MC/MCSectionXCOFF.h b/llvm/include/llvm/MC/MCSectionXCOFF.h<br>
> index 1b68d2726c74f..77f0b28c1d0a3 100644<br>
> --- a/llvm/include/llvm/MC/MCSectionXCOFF.h<br>
> +++ b/llvm/include/llvm/MC/MCSectionXCOFF.h<br>
> @@ -111,8 +111,8 @@ class MCSectionXCOFF final : public MCSection {<br>
>    bool isVirtualSection() const override;<br>
>    StringRef getSymbolTableName() const { return SymbolTableName; }<br>
>    bool isMultiSymbolsAllowed() const { return MultiSymbolsAllowed; }<br>
> -  bool isCsect() const { return CsectProp.has_value(); }<br>
> -  bool isDwarfSect() const { return DwarfSubtypeFlags.has_value(); }<br>
> +  bool isCsect() const { return CsectProp.hasValue(); }<br>
> +  bool isDwarfSect() const { return DwarfSubtypeFlags.hasValue(); }<br>
>    Optional<XCOFF::DwarfSectionSubtypeFlags> getDwarfSubtypeFlags() const {<br>
>      return DwarfSubtypeFlags;<br>
>    }<br>
><br>
> diff  --git a/llvm/include/llvm/MC/MCSymbolWasm.h b/llvm/include/llvm/MC/MCSymbolWasm.h<br>
> index 6d086850e4c6f..5a4852e0e8955 100644<br>
> --- a/llvm/include/llvm/MC/MCSymbolWasm.h<br>
> +++ b/llvm/include/llvm/MC/MCSymbolWasm.h<br>
> @@ -86,10 +86,10 @@ class MCSymbolWasm : public MCSymbol {<br>
>    bool omitFromLinkingSection() const { return OmitFromLinkingSection; }<br>
>    void setOmitFromLinkingSection() { OmitFromLinkingSection = true; }<br>
><br>
> -  bool hasImportModule() const { return ImportModule.has_value(); }<br>
> +  bool hasImportModule() const { return ImportModule.hasValue(); }<br>
>    StringRef getImportModule() const {<br>
> -    if (ImportModule)<br>
> -      return *ImportModule;<br>
> +    if (ImportModule.hasValue())<br>
> +      return ImportModule.getValue();<br>
>      // Use a default module name of "env" for now, for compatibility with<br>
>      // existing tools.<br>
>      // TODO(sbc): Find a way to specify a default value in the object format<br>
> @@ -98,16 +98,16 @@ class MCSymbolWasm : public MCSymbol {<br>
>    }<br>
>    void setImportModule(StringRef Name) { ImportModule = Name; }<br>
><br>
> -  bool hasImportName() const { return ImportName.has_value(); }<br>
> +  bool hasImportName() const { return ImportName.hasValue(); }<br>
>    StringRef getImportName() const {<br>
> -    if (ImportName)<br>
> -      return *ImportName;<br>
> +    if (ImportName.hasValue())<br>
> +      return ImportName.getValue();<br>
>      return getName();<br>
>    }<br>
>    void setImportName(StringRef Name) { ImportName = Name; }<br>
><br>
> -  bool hasExportName() const { return ExportName.has_value(); }<br>
> -  StringRef getExportName() const { return *ExportName; }<br>
> +  bool hasExportName() const { return ExportName.hasValue(); }<br>
> +  StringRef getExportName() const { return ExportName.getValue(); }<br>
>    void setExportName(StringRef Name) { ExportName = Name; }<br>
><br>
>    bool isFunctionTable() const {<br>
> @@ -129,15 +129,15 @@ class MCSymbolWasm : public MCSymbol {<br>
>    void setSignature(wasm::WasmSignature *Sig) { Signature = Sig; }<br>
><br>
>    const wasm::WasmGlobalType &getGlobalType() const {<br>
> -    assert(GlobalType.has_value());<br>
> -    return *GlobalType;<br>
> +    assert(GlobalType.hasValue());<br>
> +    return GlobalType.getValue();<br>
>    }<br>
>    void setGlobalType(wasm::WasmGlobalType GT) { GlobalType = GT; }<br>
><br>
> -  bool hasTableType() const { return TableType.has_value(); }<br>
> +  bool hasTableType() const { return TableType.hasValue(); }<br>
>    const wasm::WasmTableType &getTableType() const {<br>
>      assert(hasTableType());<br>
> -    return *TableType;<br>
> +    return TableType.getValue();<br>
>    }<br>
>    void setTableType(wasm::WasmTableType TT) { TableType = TT; }<br>
>    void setTableType(wasm::ValType VT) {<br>
><br>
> diff  --git a/llvm/include/llvm/MC/MCSymbolXCOFF.h b/llvm/include/llvm/MC/MCSymbolXCOFF.h<br>
> index 4e21d397b9685..752e1e7bba0f2 100644<br>
> --- a/llvm/include/llvm/MC/MCSymbolXCOFF.h<br>
> +++ b/llvm/include/llvm/MC/MCSymbolXCOFF.h<br>
> @@ -39,8 +39,9 @@ class MCSymbolXCOFF : public MCSymbol {<br>
>    };<br>
><br>
>    XCOFF::StorageClass getStorageClass() const {<br>
> -    assert(StorageClass && "StorageClass not set on XCOFF MCSymbol.");<br>
> -    return *StorageClass;<br>
> +    assert(StorageClass.hasValue() &&<br>
> +           "StorageClass not set on XCOFF MCSymbol.");<br>
> +    return StorageClass.getValue();<br>
>    }<br>
><br>
>    StringRef getUnqualifiedName() const { return getUnqualifiedName(getName()); }<br>
><br>
> diff  --git a/llvm/include/llvm/ObjectYAML/ELFYAML.h b/llvm/include/llvm/ObjectYAML/ELFYAML.h<br>
> index 95bf5237869a7..faff482c9b29c 100644<br>
> --- a/llvm/include/llvm/ObjectYAML/ELFYAML.h<br>
> +++ b/llvm/include/llvm/ObjectYAML/ELFYAML.h<br>
> @@ -433,10 +433,10 @@ struct GnuHashSection : Section {<br>
>    GnuHashSection() : Section(ChunkKind::GnuHash) {}<br>
><br>
>    std::vector<std::pair<StringRef, bool>> getEntries() const override {<br>
> -    return {{"Header", Header.has_value()},<br>
> -            {"BloomFilter", BloomFilter.has_value()},<br>
> -            {"HashBuckets", HashBuckets.has_value()},<br>
> -            {"HashValues", HashValues.has_value()}};<br>
> +    return {{"Header", Header.hasValue()},<br>
> +            {"BloomFilter", BloomFilter.hasValue()},<br>
> +            {"HashBuckets", HashBuckets.hasValue()},<br>
> +            {"HashValues", HashValues.hasValue()}};<br>
>    };<br>
><br>
>    static bool classof(const Chunk *S) { return S->Kind == ChunkKind::GnuHash; }<br>
><br>
> diff  --git a/llvm/include/llvm/Support/Casting.h b/llvm/include/llvm/Support/Casting.h<br>
> index 7037cbf49fccf..21c981ad3255e 100644<br>
> --- a/llvm/include/llvm/Support/Casting.h<br>
> +++ b/llvm/include/llvm/Support/Casting.h<br>
> @@ -637,8 +637,10 @@ template <typename T, typename Enable = void> struct ValueIsPresent {<br>
>  // Optional provides its own way to check if something is present.<br>
>  template <typename T> struct ValueIsPresent<Optional<T>> {<br>
>    using UnwrappedType = T;<br>
> -  static inline bool isPresent(const Optional<T> &t) { return t.has_value(); }<br>
> -  static inline decltype(auto) unwrapValue(Optional<T> &t) { return *t; }<br>
> +  static inline bool isPresent(const Optional<T> &t) { return t.hasValue(); }<br>
> +  static inline decltype(auto) unwrapValue(Optional<T> &t) {<br>
> +    return t.getValue();<br>
> +  }<br>
>  };<br>
><br>
>  // If something is "nullable" then we just compare it to nullptr to see if it<br>
><br>
> diff  --git a/llvm/include/llvm/Support/Error.h b/llvm/include/llvm/Support/Error.h<br>
> index 316e5dcf14412..80a5212b8f076 100644<br>
> --- a/llvm/include/llvm/Support/Error.h<br>
> +++ b/llvm/include/llvm/Support/Error.h<br>
> @@ -1269,8 +1269,8 @@ class FileError final : public ErrorInfo<FileError> {<br>
>    void log(raw_ostream &OS) const override {<br>
>      assert(Err && "Trying to log after takeError().");<br>
>      OS << "'" << FileName << "': ";<br>
> -    if (Line)<br>
> -      OS << "line " << *Line << ": ";<br>
> +    if (Line.hasValue())<br>
> +      OS << "line " << Line.getValue() << ": ";<br>
>      Err->log(OS);<br>
>    }<br>
><br>
><br>
> diff  --git a/llvm/include/llvm/Support/YAMLTraits.h b/llvm/include/llvm/Support/YAMLTraits.h<br>
> index 8ade9b15642b5..dfe9b1b0d9397 100644<br>
> --- a/llvm/include/llvm/Support/YAMLTraits.h<br>
> +++ b/llvm/include/llvm/Support/YAMLTraits.h<br>
> @@ -1668,13 +1668,14 @@ template <typename T, typename Context><br>
>  void IO::processKeyWithDefault(const char *Key, Optional<T> &Val,<br>
>                                 const Optional<T> &DefaultValue, bool Required,<br>
>                                 Context &Ctx) {<br>
> -  assert(!DefaultValue && "Optional<T> shouldn't have a value!");<br>
> +  assert(DefaultValue.hasValue() == false &&<br>
> +         "Optional<T> shouldn't have a value!");<br>
>    void *SaveInfo;<br>
>    bool UseDefault = true;<br>
> -  const bool sameAsDefault = outputting() && !Val;<br>
> -  if (!outputting() && !Val)<br>
> +  const bool sameAsDefault = outputting() && !Val.hasValue();<br>
> +  if (!outputting() && !Val.hasValue())<br>
>      Val = T();<br>
> -  if (Val &&<br>
> +  if (Val.hasValue() &&<br>
>        this->preflightKey(Key, Required, sameAsDefault, UseDefault, SaveInfo)) {<br>
><br>
>      // When reading an Optional<X> key from a YAML description, we allow the<br>
><br>
> diff  --git a/llvm/include/llvm/Transforms/IPO/Attributor.h b/llvm/include/llvm/Transforms/IPO/Attributor.h<br>
> index 17e29695ab739..6aa19b00e0f6b 100644<br>
> --- a/llvm/include/llvm/Transforms/IPO/Attributor.h<br>
> +++ b/llvm/include/llvm/Transforms/IPO/Attributor.h<br>
> @@ -4884,10 +4884,12 @@ struct AAPointerInfo : public AbstractAttribute {<br>
>      Instruction *getRemoteInst() const { return RemoteI; }<br>
><br>
>      /// Return true if the value written is not known yet.<br>
> -    bool isWrittenValueYetUndetermined() const { return !Content; }<br>
> +    bool isWrittenValueYetUndetermined() const { return !Content.hasValue(); }<br>
><br>
>      /// Return true if the value written cannot be determined at all.<br>
> -    bool isWrittenValueUnknown() const { return Content && !*Content; }<br>
> +    bool isWrittenValueUnknown() const {<br>
> +      return Content.hasValue() && !*Content;<br>
> +    }<br>
><br>
>      /// Return the type associated with the access, if known.<br>
>      Type *getType() const { return Ty; }<br>
><br>
> diff  --git a/llvm/lib/Analysis/BranchProbabilityInfo.cpp b/llvm/lib/Analysis/BranchProbabilityInfo.cpp<br>
> index 2bca424e3da3b..1d880424e55c9 100644<br>
> --- a/llvm/lib/Analysis/BranchProbabilityInfo.cpp<br>
> +++ b/llvm/lib/Analysis/BranchProbabilityInfo.cpp<br>
> @@ -826,8 +826,9 @@ void BranchProbabilityInfo::computeEestimateBlockWeight(<br>
>      if (auto BBWeight = getInitialEstimatedBlockWeight(BB))<br>
>        // If we were able to find estimated weight for the block set it to this<br>
>        // block and propagate up the IR.<br>
> -      propagateEstimatedBlockWeight(getLoopBlock(BB), DT, PDT, *BBWeight,<br>
> -                                    BlockWorkList, LoopWorkList);<br>
> +      propagateEstimatedBlockWeight(getLoopBlock(BB), DT, PDT,<br>
> +                                    BBWeight.getValue(), BlockWorkList,<br>
> +                                    LoopWorkList);<br>
><br>
>    // BlockWorklist/LoopWorkList contains blocks/loops with at least one<br>
>    // successor/exit having estimated weight. Try to propagate weight to such<br>
><br>
> diff  --git a/llvm/lib/Analysis/CFLAndersAliasAnalysis.cpp b/llvm/lib/Analysis/CFLAndersAliasAnalysis.cpp<br>
> index 602a01867f3b5..1216d03e448b1 100644<br>
> --- a/llvm/lib/Analysis/CFLAndersAliasAnalysis.cpp<br>
> +++ b/llvm/lib/Analysis/CFLAndersAliasAnalysis.cpp<br>
> @@ -831,14 +831,14 @@ CFLAndersAAResult::ensureCached(const Function &Fn) {<br>
>      scan(Fn);<br>
>      Iter = Cache.find(&Fn);<br>
>      assert(Iter != Cache.end());<br>
> -    assert(Iter->second);<br>
> +    assert(Iter->second.hasValue());<br>
>    }<br>
>    return Iter->second;<br>
>  }<br>
><br>
>  const AliasSummary *CFLAndersAAResult::getAliasSummary(const Function &Fn) {<br>
>    auto &FunInfo = ensureCached(Fn);<br>
> -  if (FunInfo)<br>
> +  if (FunInfo.hasValue())<br>
>      return &FunInfo->getAliasSummary();<br>
>    else<br>
>      return nullptr;<br>
><br>
> diff  --git a/llvm/lib/Analysis/CFLSteensAliasAnalysis.cpp b/llvm/lib/Analysis/CFLSteensAliasAnalysis.cpp<br>
> index f92869c2ec636..b831a599cc091 100644<br>
> --- a/llvm/lib/Analysis/CFLSteensAliasAnalysis.cpp<br>
> +++ b/llvm/lib/Analysis/CFLSteensAliasAnalysis.cpp<br>
> @@ -250,14 +250,14 @@ CFLSteensAAResult::ensureCached(Function *Fn) {<br>
>      scan(Fn);<br>
>      Iter = Cache.find(Fn);<br>
>      assert(Iter != Cache.end());<br>
> -    assert(Iter->second);<br>
> +    assert(Iter->second.hasValue());<br>
>    }<br>
>    return Iter->second;<br>
>  }<br>
><br>
>  const AliasSummary *CFLSteensAAResult::getAliasSummary(Function &Fn) {<br>
>    auto &FunInfo = ensureCached(&Fn);<br>
> -  if (FunInfo)<br>
> +  if (FunInfo.hasValue())<br>
>      return &FunInfo->getAliasSummary();<br>
>    else<br>
>      return nullptr;<br>
> @@ -293,15 +293,15 @@ AliasResult CFLSteensAAResult::query(const MemoryLocation &LocA,<br>
><br>
>    assert(Fn != nullptr);<br>
>    auto &MaybeInfo = ensureCached(Fn);<br>
> -  assert(MaybeInfo);<br>
> +  assert(MaybeInfo.hasValue());<br>
><br>
>    auto &Sets = MaybeInfo->getStratifiedSets();<br>
>    auto MaybeA = Sets.find(InstantiatedValue{ValA, 0});<br>
> -  if (!MaybeA)<br>
> +  if (!MaybeA.hasValue())<br>
>      return AliasResult::MayAlias;<br>
><br>
>    auto MaybeB = Sets.find(InstantiatedValue{ValB, 0});<br>
> -  if (!MaybeB)<br>
> +  if (!MaybeB.hasValue())<br>
>      return AliasResult::MayAlias;<br>
><br>
>    auto SetA = *MaybeA;<br>
><br>
> diff  --git a/llvm/lib/Analysis/IRSimilarityIdentifier.cpp b/llvm/lib/Analysis/IRSimilarityIdentifier.cpp<br>
> index 81aa85436a671..c9450506d46c2 100644<br>
> --- a/llvm/lib/Analysis/IRSimilarityIdentifier.cpp<br>
> +++ b/llvm/lib/Analysis/IRSimilarityIdentifier.cpp<br>
> @@ -183,9 +183,9 @@ CmpInst::Predicate IRInstructionData::getPredicate() const {<br>
>    assert(isa<CmpInst>(Inst) &&<br>
>           "Can only get a predicate from a compare instruction");<br>
><br>
> -  if (RevisedPredicate)<br>
> -    return *RevisedPredicate;<br>
> -<br>
> +  if (RevisedPredicate.hasValue())<br>
> +    return RevisedPredicate.getValue();<br>
> +<br>
>    return cast<CmpInst>(Inst)->getPredicate();<br>
>  }<br>
><br>
><br>
> diff  --git a/llvm/lib/Analysis/InlineCost.cpp b/llvm/lib/Analysis/InlineCost.cpp<br>
> index f2dcaa84332be..63fe651bb5718 100644<br>
> --- a/llvm/lib/Analysis/InlineCost.cpp<br>
> +++ b/llvm/lib/Analysis/InlineCost.cpp<br>
> @@ -703,8 +703,8 @@ class InlineCostCallAnalyzer final : public CallAnalyzer {<br>
>        BlockFrequencyInfo *BFI = &(GetBFI(F));<br>
>        assert(BFI && "BFI must be available");<br>
>        auto ProfileCount = BFI->getBlockProfileCount(BB);<br>
> -      assert(ProfileCount);<br>
> -      if (*ProfileCount == 0)<br>
> +      assert(ProfileCount.hasValue());<br>
> +      if (ProfileCount.getValue() == 0)<br>
>          ColdSize += Cost - CostAtBBStart;<br>
>      }<br>
><br>
> @@ -828,14 +828,14 @@ class InlineCostCallAnalyzer final : public CallAnalyzer {<br>
>        }<br>
><br>
>        auto ProfileCount = CalleeBFI->getBlockProfileCount(&BB);<br>
> -      assert(ProfileCount);<br>
> -      CurrentSavings *= *ProfileCount;<br>
> +      assert(ProfileCount.hasValue());<br>
> +      CurrentSavings *= ProfileCount.getValue();<br>
>        CycleSavings += CurrentSavings;<br>
>      }<br>
><br>
>      // Compute the cycle savings per call.<br>
>      auto EntryProfileCount = F.getEntryCount();<br>
> -    assert(EntryProfileCount && EntryProfileCount->getCount());<br>
> +    assert(EntryProfileCount.hasValue() && EntryProfileCount->getCount());<br>
>      auto EntryCount = EntryProfileCount->getCount();<br>
>      CycleSavings += EntryCount / 2;<br>
>      CycleSavings = CycleSavings.udiv(EntryCount);<br>
> @@ -1800,12 +1800,12 @@ void InlineCostCallAnalyzer::updateThreshold(CallBase &Call, Function &Callee) {<br>
><br>
>    // return min(A, B) if B is valid.<br>
>    auto MinIfValid = [](int A, Optional<int> B) {<br>
> -    return B ? std::min(A, *B) : A;<br>
> +    return B ? std::min(A, B.getValue()) : A;<br>
>    };<br>
><br>
>    // return max(A, B) if B is valid.<br>
>    auto MaxIfValid = [](int A, Optional<int> B) {<br>
> -    return B ? std::max(A, *B) : A;<br>
> +    return B ? std::max(A, B.getValue()) : A;<br>
>    };<br>
><br>
>    // Various bonus percentages. These are multiplied by Threshold to get the<br>
><br>
> diff  --git a/llvm/lib/Analysis/InstructionSimplify.cpp b/llvm/lib/Analysis/InstructionSimplify.cpp<br>
> index a7aec39b65e02..07e3392c226e6 100644<br>
> --- a/llvm/lib/Analysis/InstructionSimplify.cpp<br>
> +++ b/llvm/lib/Analysis/InstructionSimplify.cpp<br>
> @@ -6123,9 +6123,9 @@ static Value *simplifyIntrinsic(CallBase *Call, const SimplifyQuery &Q) {<br>
>      Value *Op1 = Call->getArgOperand(1);<br>
>      Value *Op2 = Call->getArgOperand(2);<br>
>      auto *FPI = cast<ConstrainedFPIntrinsic>(Call);<br>
> -    if (Value *V =<br>
> -            simplifyFPOp({Op0, Op1, Op2}, {}, Q, *FPI->getExceptionBehavior(),<br>
> -                         *FPI->getRoundingMode()))<br>
> +    if (Value *V = simplifyFPOp({Op0, Op1, Op2}, {}, Q,<br>
> +                                FPI->getExceptionBehavior().getValue(),<br>
> +                                FPI->getRoundingMode().getValue()))<br>
>        return V;<br>
>      return nullptr;<br>
>    }<br>
> @@ -6189,33 +6189,38 @@ static Value *simplifyIntrinsic(CallBase *Call, const SimplifyQuery &Q) {<br>
>    }<br>
>    case Intrinsic::experimental_constrained_fadd: {<br>
>      auto *FPI = cast<ConstrainedFPIntrinsic>(Call);<br>
> -    return simplifyFAddInst(<br>
> -        FPI->getArgOperand(0), FPI->getArgOperand(1), FPI->getFastMathFlags(),<br>
> -        Q, *FPI->getExceptionBehavior(), *FPI->getRoundingMode());<br>
> +    return simplifyFAddInst(FPI->getArgOperand(0), FPI->getArgOperand(1),<br>
> +                            FPI->getFastMathFlags(), Q,<br>
> +                            FPI->getExceptionBehavior().getValue(),<br>
> +                            FPI->getRoundingMode().getValue());<br>
>    }<br>
>    case Intrinsic::experimental_constrained_fsub: {<br>
>      auto *FPI = cast<ConstrainedFPIntrinsic>(Call);<br>
> -    return simplifyFSubInst(<br>
> -        FPI->getArgOperand(0), FPI->getArgOperand(1), FPI->getFastMathFlags(),<br>
> -        Q, *FPI->getExceptionBehavior(), *FPI->getRoundingMode());<br>
> +    return simplifyFSubInst(FPI->getArgOperand(0), FPI->getArgOperand(1),<br>
> +                            FPI->getFastMathFlags(), Q,<br>
> +                            FPI->getExceptionBehavior().getValue(),<br>
> +                            FPI->getRoundingMode().getValue());<br>
>    }<br>
>    case Intrinsic::experimental_constrained_fmul: {<br>
>      auto *FPI = cast<ConstrainedFPIntrinsic>(Call);<br>
> -    return simplifyFMulInst(<br>
> -        FPI->getArgOperand(0), FPI->getArgOperand(1), FPI->getFastMathFlags(),<br>
> -        Q, *FPI->getExceptionBehavior(), *FPI->getRoundingMode());<br>
> +    return simplifyFMulInst(FPI->getArgOperand(0), FPI->getArgOperand(1),<br>
> +                            FPI->getFastMathFlags(), Q,<br>
> +                            FPI->getExceptionBehavior().getValue(),<br>
> +                            FPI->getRoundingMode().getValue());<br>
>    }<br>
>    case Intrinsic::experimental_constrained_fdiv: {<br>
>      auto *FPI = cast<ConstrainedFPIntrinsic>(Call);<br>
> -    return simplifyFDivInst(<br>
> -        FPI->getArgOperand(0), FPI->getArgOperand(1), FPI->getFastMathFlags(),<br>
> -        Q, *FPI->getExceptionBehavior(), *FPI->getRoundingMode());<br>
> +    return simplifyFDivInst(FPI->getArgOperand(0), FPI->getArgOperand(1),<br>
> +                            FPI->getFastMathFlags(), Q,<br>
> +                            FPI->getExceptionBehavior().getValue(),<br>
> +                            FPI->getRoundingMode().getValue());<br>
>    }<br>
>    case Intrinsic::experimental_constrained_frem: {<br>
>      auto *FPI = cast<ConstrainedFPIntrinsic>(Call);<br>
> -    return simplifyFRemInst(<br>
> -        FPI->getArgOperand(0), FPI->getArgOperand(1), FPI->getFastMathFlags(),<br>
> -        Q, *FPI->getExceptionBehavior(), *FPI->getRoundingMode());<br>
> +    return simplifyFRemInst(FPI->getArgOperand(0), FPI->getArgOperand(1),<br>
> +                            FPI->getFastMathFlags(), Q,<br>
> +                            FPI->getExceptionBehavior().getValue(),<br>
> +                            FPI->getRoundingMode().getValue());<br>
>    }<br>
>    default:<br>
>      return nullptr;<br>
><br>
> diff  --git a/llvm/lib/Analysis/LazyValueInfo.cpp b/llvm/lib/Analysis/LazyValueInfo.cpp<br>
> index e82c3aeed5776..5803c3d7f50d4 100644<br>
> --- a/llvm/lib/Analysis/LazyValueInfo.cpp<br>
> +++ b/llvm/lib/Analysis/LazyValueInfo.cpp<br>
> @@ -918,10 +918,10 @@ Optional<ValueLatticeElement> LazyValueInfoImpl::solveBlockValueCast(<br>
>    // transfer rule on the full set since we may be able to locally infer<br>
>    // interesting facts.<br>
>    Optional<ConstantRange> LHSRes = getRangeFor(CI->getOperand(0), CI, BB);<br>
> -  if (!LHSRes)<br>
> +  if (!LHSRes.hasValue())<br>
>      // More work to do before applying this transfer rule.<br>
>      return None;<br>
> -  const ConstantRange &LHSRange = *LHSRes;<br>
> +  const ConstantRange &LHSRange = LHSRes.getValue();<br>
><br>
>    const unsigned ResultBitWidth = CI->getType()->getIntegerBitWidth();<br>
><br>
> @@ -946,8 +946,8 @@ Optional<ValueLatticeElement> LazyValueInfoImpl::solveBlockValueBinaryOpImpl(<br>
>      // More work to do before applying this transfer rule.<br>
>      return None;<br>
><br>
> -  const ConstantRange &LHSRange = *LHSRes;<br>
> -  const ConstantRange &RHSRange = *RHSRes;<br>
> +  const ConstantRange &LHSRange = LHSRes.getValue();<br>
> +  const ConstantRange &RHSRange = RHSRes.getValue();<br>
>    return ValueLatticeElement::getRange(OpFn(LHSRange, RHSRange));<br>
>  }<br>
><br>
><br>
> diff  --git a/llvm/lib/Analysis/LoopCacheAnalysis.cpp b/llvm/lib/Analysis/LoopCacheAnalysis.cpp<br>
> index 2cbf1f7f2d28e..002e993028034 100644<br>
> --- a/llvm/lib/Analysis/LoopCacheAnalysis.cpp<br>
> +++ b/llvm/lib/Analysis/LoopCacheAnalysis.cpp<br>
> @@ -645,8 +645,8 @@ bool CacheCost::populateReferenceGroups(ReferenceGroupsTy &RefGroups) const {<br>
>          Optional<bool> HasSpacialReuse =<br>
>              R->hasSpacialReuse(Representative, CLS, AA);<br>
><br>
> -        if ((HasTemporalReuse && *HasTemporalReuse) ||<br>
> -            (HasSpacialReuse && *HasSpacialReuse)) {<br>
> +        if ((HasTemporalReuse.hasValue() && *HasTemporalReuse) ||<br>
> +            (HasSpacialReuse.hasValue() && *HasSpacialReuse)) {<br>
>            RefGroup.push_back(std::move(R));<br>
>            Added = true;<br>
>            break;<br>
><br>
> diff  --git a/llvm/lib/Analysis/MemoryBuiltins.cpp b/llvm/lib/Analysis/MemoryBuiltins.cpp<br>
> index ff303ceab8d4e..3c0e494bf1da7 100644<br>
> --- a/llvm/lib/Analysis/MemoryBuiltins.cpp<br>
> +++ b/llvm/lib/Analysis/MemoryBuiltins.cpp<br>
> @@ -270,53 +270,54 @@ static Optional<AllocFnsTy> getAllocationSize(const Value *V,<br>
>  /// allocates or reallocates memory (either malloc, calloc, realloc, or strdup<br>
>  /// like).<br>
>  bool llvm::isAllocationFn(const Value *V, const TargetLibraryInfo *TLI) {<br>
> -  return getAllocationData(V, AnyAlloc, TLI).has_value();<br>
> +  return getAllocationData(V, AnyAlloc, TLI).hasValue();<br>
>  }<br>
>  bool llvm::isAllocationFn(<br>
>      const Value *V, function_ref<const TargetLibraryInfo &(Function &)> GetTLI) {<br>
> -  return getAllocationData(V, AnyAlloc, GetTLI).has_value();<br>
> +  return getAllocationData(V, AnyAlloc, GetTLI).hasValue();<br>
>  }<br>
><br>
>  /// Tests if a value is a call or invoke to a library function that<br>
>  /// allocates uninitialized memory (such as malloc).<br>
>  static bool isMallocLikeFn(const Value *V, const TargetLibraryInfo *TLI) {<br>
> -  return getAllocationData(V, MallocOrOpNewLike, TLI).has_value();<br>
> +  return getAllocationData(V, MallocOrOpNewLike, TLI).hasValue();<br>
>  }<br>
><br>
>  /// Tests if a value is a call or invoke to a library function that<br>
>  /// allocates uninitialized memory with alignment (such as aligned_alloc).<br>
>  static bool isAlignedAllocLikeFn(const Value *V, const TargetLibraryInfo *TLI) {<br>
> -  return getAllocationData(V, AlignedAllocLike, TLI).has_value();<br>
> +  return getAllocationData(V, AlignedAllocLike, TLI)<br>
> +      .hasValue();<br>
>  }<br>
><br>
>  /// Tests if a value is a call or invoke to a library function that<br>
>  /// allocates zero-filled memory (such as calloc).<br>
>  static bool isCallocLikeFn(const Value *V, const TargetLibraryInfo *TLI) {<br>
> -  return getAllocationData(V, CallocLike, TLI).has_value();<br>
> +  return getAllocationData(V, CallocLike, TLI).hasValue();<br>
>  }<br>
><br>
>  /// Tests if a value is a call or invoke to a library function that<br>
>  /// allocates memory similar to malloc or calloc.<br>
>  bool llvm::isMallocOrCallocLikeFn(const Value *V, const TargetLibraryInfo *TLI) {<br>
> -  return getAllocationData(V, MallocOrCallocLike, TLI).has_value();<br>
> +  return getAllocationData(V, MallocOrCallocLike, TLI).hasValue();<br>
>  }<br>
><br>
>  /// Tests if a value is a call or invoke to a library function that<br>
>  /// allocates memory (either malloc, calloc, or strdup like).<br>
>  bool llvm::isAllocLikeFn(const Value *V, const TargetLibraryInfo *TLI) {<br>
> -  return getAllocationData(V, AllocLike, TLI).has_value();<br>
> +  return getAllocationData(V, AllocLike, TLI).hasValue();<br>
>  }<br>
><br>
>  /// Tests if a value is a call or invoke to a library function that<br>
>  /// reallocates memory (e.g., realloc).<br>
>  bool llvm::isReallocLikeFn(const Value *V, const TargetLibraryInfo *TLI) {<br>
> -  return getAllocationData(V, ReallocLike, TLI).has_value();<br>
> +  return getAllocationData(V, ReallocLike, TLI).hasValue();<br>
>  }<br>
><br>
>  /// Tests if a functions is a call or invoke to a library function that<br>
>  /// reallocates memory (e.g., realloc).<br>
>  bool llvm::isReallocLikeFn(const Function *F, const TargetLibraryInfo *TLI) {<br>
> -  return getAllocationDataForFunction(F, ReallocLike, TLI).has_value();<br>
> +  return getAllocationDataForFunction(F, ReallocLike, TLI).hasValue();<br>
>  }<br>
><br>
>  bool llvm::isAllocRemovable(const CallBase *CB, const TargetLibraryInfo *TLI) {<br>
> @@ -500,18 +501,18 @@ Optional<StringRef> llvm::getAllocationFamily(const Value *I,<br>
>    if (!TLI || !TLI->getLibFunc(*Callee, TLIFn) || !TLI->has(TLIFn))<br>
>      return None;<br>
>    const auto AllocData = getAllocationDataForFunction(Callee, AnyAlloc, TLI);<br>
> -  if (AllocData)<br>
> -    return mangledNameForMallocFamily(AllocData->Family);<br>
> +  if (AllocData.hasValue())<br>
> +    return mangledNameForMallocFamily(AllocData.getValue().Family);<br>
>    const auto FreeData = getFreeFunctionDataForFunction(Callee, TLIFn);<br>
> -  if (FreeData)<br>
> -    return mangledNameForMallocFamily(FreeData->Family);<br>
> +  if (FreeData.hasValue())<br>
> +    return mangledNameForMallocFamily(FreeData.getValue().Family);<br>
>    return None;<br>
>  }<br>
><br>
>  /// isLibFreeFunction - Returns true if the function is a builtin free()<br>
>  bool llvm::isLibFreeFunction(const Function *F, const LibFunc TLIFn) {<br>
>    Optional<FreeFnsTy> FnData = getFreeFunctionDataForFunction(F, TLIFn);<br>
> -  if (!FnData)<br>
> +  if (!FnData.hasValue())<br>
>      return false;<br>
><br>
>    // Check free prototype.<br>
><br>
> diff  --git a/llvm/lib/Analysis/MemorySSA.cpp b/llvm/lib/Analysis/MemorySSA.cpp<br>
> index 76371b88812e9..f63898be31735 100644<br>
> --- a/llvm/lib/Analysis/MemorySSA.cpp<br>
> +++ b/llvm/lib/Analysis/MemorySSA.cpp<br>
> @@ -749,9 +749,9 @@ template <class AliasAnalysisType> class ClobberWalker {<br>
>      }<br>
><br>
>      bool operator==(const generic_def_path_iterator &O) const {<br>
> -      if (N.has_value() != O.N.has_value())<br>
> +      if (N.hasValue() != O.N.hasValue())<br>
>          return false;<br>
> -      return !N || *N == *O.N;<br>
> +      return !N.hasValue() || *N == *O.N;<br>
>      }<br>
><br>
>    private:<br>
><br>
> diff  --git a/llvm/lib/Analysis/MustExecute.cpp b/llvm/lib/Analysis/MustExecute.cpp<br>
> index 8dbce2669f25d..c785b500e760c 100644<br>
> --- a/llvm/lib/Analysis/MustExecute.cpp<br>
> +++ b/llvm/lib/Analysis/MustExecute.cpp<br>
> @@ -491,9 +491,9 @@ template <typename K, typename V, typename FnTy, typename... ArgsTy><br>
>  static V getOrCreateCachedOptional(K Key, DenseMap<K, Optional<V>> &Map,<br>
>                                     FnTy &&Fn, ArgsTy&&... args) {<br>
>    Optional<V> &OptVal = Map[Key];<br>
> -  if (!OptVal)<br>
> +  if (!OptVal.hasValue())<br>
>      OptVal = Fn(std::forward<ArgsTy>(args)...);<br>
> -  return *OptVal;<br>
> +  return OptVal.getValue();<br>
>  }<br>
><br>
>  const BasicBlock *<br>
><br>
> diff  --git a/llvm/lib/Analysis/ProfileSummaryInfo.cpp b/llvm/lib/Analysis/ProfileSummaryInfo.cpp<br>
> index b564dbea8924b..9d5fa6d0a41b1 100644<br>
> --- a/llvm/lib/Analysis/ProfileSummaryInfo.cpp<br>
> +++ b/llvm/lib/Analysis/ProfileSummaryInfo.cpp<br>
> @@ -279,19 +279,19 @@ ProfileSummaryInfo::computeThreshold(int PercentileCutoff) const {<br>
>  }<br>
><br>
>  bool ProfileSummaryInfo::hasHugeWorkingSetSize() const {<br>
> -  return HasHugeWorkingSetSize && *HasHugeWorkingSetSize;<br>
> +  return HasHugeWorkingSetSize && HasHugeWorkingSetSize.getValue();<br>
>  }<br>
><br>
>  bool ProfileSummaryInfo::hasLargeWorkingSetSize() const {<br>
> -  return HasLargeWorkingSetSize && *HasLargeWorkingSetSize;<br>
> +  return HasLargeWorkingSetSize && HasLargeWorkingSetSize.getValue();<br>
>  }<br>
><br>
>  bool ProfileSummaryInfo::isHotCount(uint64_t C) const {<br>
> -  return HotCountThreshold && C >= *HotCountThreshold;<br>
> +  return HotCountThreshold && C >= HotCountThreshold.getValue();<br>
>  }<br>
><br>
>  bool ProfileSummaryInfo::isColdCount(uint64_t C) const {<br>
> -  return ColdCountThreshold && C <= *ColdCountThreshold;<br>
> +  return ColdCountThreshold && C <= ColdCountThreshold.getValue();<br>
>  }<br>
><br>
>  template <bool isHot><br>
> @@ -299,9 +299,9 @@ bool ProfileSummaryInfo::isHotOrColdCountNthPercentile(int PercentileCutoff,<br>
>                                                         uint64_t C) const {<br>
>    auto CountThreshold = computeThreshold(PercentileCutoff);<br>
>    if (isHot)<br>
> -    return CountThreshold && C >= *CountThreshold;<br>
> +    return CountThreshold && C >= CountThreshold.getValue();<br>
>    else<br>
> -    return CountThreshold && C <= *CountThreshold;<br>
> +    return CountThreshold && C <= CountThreshold.getValue();<br>
>  }<br>
><br>
>  bool ProfileSummaryInfo::isHotCountNthPercentile(int PercentileCutoff,<br>
><br>
> diff  --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp<br>
> index 795118053d6b1..5eb5c6b7c594a 100644<br>
> --- a/llvm/lib/Analysis/ScalarEvolution.cpp<br>
> +++ b/llvm/lib/Analysis/ScalarEvolution.cpp<br>
> @@ -4847,16 +4847,16 @@ class SCEVBackedgeConditionFolder<br>
>          SelectInst *SI = cast<SelectInst>(I);<br>
>          Optional<const SCEV *> Res =<br>
>              compareWithBackedgeCondition(SI->getCondition());<br>
> -        if (Res) {<br>
> -          bool IsOne = cast<SCEVConstant>(*Res)->getValue()->isOne();<br>
> +        if (Res.hasValue()) {<br>
> +          bool IsOne = cast<SCEVConstant>(Res.getValue())->getValue()->isOne();<br>
>            Result = SE.getSCEV(IsOne ? SI->getTrueValue() : SI->getFalseValue());<br>
>          }<br>
>          break;<br>
>        }<br>
>        default: {<br>
>          Optional<const SCEV *> Res = compareWithBackedgeCondition(I);<br>
> -        if (Res)<br>
> -          Result = *Res;<br>
> +        if (Res.hasValue())<br>
> +          Result = Res.getValue();<br>
>          break;<br>
>        }<br>
>        }<br>
> @@ -6596,9 +6596,9 @@ ScalarEvolution::getRangeRef(const SCEV *S,<br>
><br>
>      // Check if the IR explicitly contains !range metadata.<br>
>      Optional<ConstantRange> MDRange = GetRangeFromMetadata(U->getValue());<br>
> -    if (MDRange)<br>
> -      ConservativeResult =<br>
> -          ConservativeResult.intersectWith(*MDRange, RangeType);<br>
> +    if (MDRange.hasValue())<br>
> +      ConservativeResult = ConservativeResult.intersectWith(MDRange.getValue(),<br>
> +                                                            RangeType);<br>
><br>
>      // Use facts about recurrences in the underlying IR.  Note that add<br>
>      // recurrences are AddRecExprs and thus don't hit this path.  This<br>
> @@ -9710,15 +9710,15 @@ GetQuadraticEquation(const SCEVAddRecExpr *AddRec) {<br>
>  /// (b) if neither X nor Y exist, return None,<br>
>  /// (c) if exactly one of X and Y exists, return that value.<br>
>  static Optional<APInt> MinOptional(Optional<APInt> X, Optional<APInt> Y) {<br>
> -  if (X && Y) {<br>
> +  if (X.hasValue() && Y.hasValue()) {<br>
>      unsigned W = std::max(X->getBitWidth(), Y->getBitWidth());<br>
>      APInt XW = X->sext(W);<br>
>      APInt YW = Y->sext(W);<br>
>      return XW.slt(YW) ? *X : *Y;<br>
>    }<br>
> -  if (!X && !Y)<br>
> +  if (!X.hasValue() && !Y.hasValue())<br>
>      return None;<br>
> -  return X ? *X : *Y;<br>
> +  return X.hasValue() ? *X : *Y;<br>
>  }<br>
><br>
>  /// Helper function to truncate an optional APInt to a given BitWidth.<br>
> @@ -9760,13 +9760,13 @@ SolveQuadraticAddRecExact(const SCEVAddRecExpr *AddRec, ScalarEvolution &SE) {<br>
>    APInt A, B, C, M;<br>
>    unsigned BitWidth;<br>
>    auto T = GetQuadraticEquation(AddRec);<br>
> -  if (!T)<br>
> +  if (!T.hasValue())<br>
>      return None;<br>
><br>
>    std::tie(A, B, C, M, BitWidth) = *T;<br>
>    LLVM_DEBUG(dbgs() << __func__ << ": solving for unsigned overflow\n");<br>
>    Optional<APInt> X = APIntOps::SolveQuadraticEquationWrap(A, B, C, BitWidth+1);<br>
> -  if (!X)<br>
> +  if (!X.hasValue())<br>
>      return None;<br>
><br>
>    ConstantInt *CX = ConstantInt::get(SE.getContext(), *X);<br>
> @@ -10471,8 +10471,8 @@ ScalarEvolution::getMonotonicPredicateType(const SCEVAddRecExpr *LHS,<br>
>      auto ResultSwapped =<br>
>          getMonotonicPredicateTypeImpl(LHS, ICmpInst::getSwappedPredicate(Pred));<br>
><br>
> -    assert(ResultSwapped && "should be able to analyze both!");<br>
> -    assert(*ResultSwapped != *Result &&<br>
> +    assert(ResultSwapped.hasValue() && "should be able to analyze both!");<br>
> +    assert(ResultSwapped.getValue() != Result.getValue() &&<br>
>             "monotonicity should flip as we flip the predicate");<br>
>    }<br>
>  #endif<br>
><br>
> diff  --git a/llvm/lib/Analysis/StratifiedSets.h b/llvm/lib/Analysis/StratifiedSets.h<br>
> index 883ebd24efdcc..8468f2b0d1040 100644<br>
> --- a/llvm/lib/Analysis/StratifiedSets.h<br>
> +++ b/llvm/lib/Analysis/StratifiedSets.h<br>
> @@ -340,10 +340,10 @@ template <typename T> class StratifiedSetsBuilder {<br>
>      return StratifiedSets<T>(std::move(Values), std::move(StratLinks));<br>
>    }<br>
><br>
> -  bool has(const T &Elem) const { return get(Elem).has_value(); }<br>
> +  bool has(const T &Elem) const { return get(Elem).hasValue(); }<br>
><br>
>    bool add(const T &Main) {<br>
> -    if (get(Main))<br>
> +    if (get(Main).hasValue())<br>
>        return false;<br>
><br>
>      auto NewIndex = getNewUnlinkedIndex();<br>
><br>
> diff  --git a/llvm/lib/Analysis/VectorUtils.cpp b/llvm/lib/Analysis/VectorUtils.cpp<br>
> index 56a5983242b1c..beb14c456da8a 100644<br>
> --- a/llvm/lib/Analysis/VectorUtils.cpp<br>
> +++ b/llvm/lib/Analysis/VectorUtils.cpp<br>
> @@ -1501,8 +1501,8 @@ void VFABI::getVectorVariantNames(<br>
>  #ifndef NDEBUG<br>
>      LLVM_DEBUG(dbgs() << "VFABI: adding mapping '" << S << "'\n");<br>
>      Optional<VFInfo> Info = VFABI::tryDemangleForVFABI(S, *(CI.getModule()));<br>
> -    assert(Info && "Invalid name for a VFABI variant.");<br>
> -    assert(CI.getModule()->getFunction(Info->VectorName) &&<br>
> +    assert(Info.hasValue() && "Invalid name for a VFABI variant.");<br>
> +    assert(CI.getModule()->getFunction(Info.getValue().VectorName) &&<br>
>             "Vector function is missing.");<br>
>  #endif<br>
>      VariantMappings.push_back(std::string(S));<br>
><br>
> diff  --git a/llvm/lib/CodeGen/BasicBlockSections.cpp b/llvm/lib/CodeGen/BasicBlockSections.cpp<br>
> index b6b018cca8ae8..e6f4e396fa472 100644<br>
> --- a/llvm/lib/CodeGen/BasicBlockSections.cpp<br>
> +++ b/llvm/lib/CodeGen/BasicBlockSections.cpp<br>
> @@ -234,8 +234,9 @@ assignSections(MachineFunction &MF,<br>
>        // If we already have one cluster containing eh_pads, this must be updated<br>
>        // to ExceptionSectionID. Otherwise, we set it equal to the current<br>
>        // section ID.<br>
> -      EHPadsSectionID = EHPadsSectionID ? MBBSectionID::ExceptionSectionID<br>
> -                                        : MBB.getSectionID();<br>
> +      EHPadsSectionID = EHPadsSectionID.hasValue()<br>
> +                            ? MBBSectionID::ExceptionSectionID<br>
> +                            : MBB.getSectionID();<br>
>      }<br>
>    }<br>
><br>
><br>
> diff  --git a/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp b/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp<br>
> index 2c94f87804ac9..674649c5f386e 100644<br>
> --- a/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp<br>
> +++ b/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp<br>
> @@ -1291,12 +1291,12 @@ bool CombinerHelper::matchCombineConstantFoldFpUnary(MachineInstr &MI,<br>
>    Register SrcReg = MI.getOperand(1).getReg();<br>
>    LLT DstTy = MRI.getType(DstReg);<br>
>    Cst = constantFoldFpUnary(MI.getOpcode(), DstTy, SrcReg, MRI);<br>
> -  return Cst.has_value();<br>
> +  return Cst.hasValue();<br>
>  }<br>
><br>
>  void CombinerHelper::applyCombineConstantFoldFpUnary(MachineInstr &MI,<br>
>                                                       Optional<APFloat> &Cst) {<br>
> -  assert(Cst && "Optional is unexpectedly empty!");<br>
> +  assert(Cst.hasValue() && "Optional is unexpectedly empty!");<br>
>    Builder.setInstrAndDebugLoc(MI);<br>
>    MachineFunction &MF = Builder.getMF();<br>
>    auto *FPVal = ConstantFP::get(MF.getFunction().getContext(), *Cst);<br>
><br>
> diff  --git a/llvm/lib/CodeGen/MIRParser/MIParser.cpp b/llvm/lib/CodeGen/MIRParser/MIParser.cpp<br>
> index 5ddfc697b3997..879ec00b3d63c 100644<br>
> --- a/llvm/lib/CodeGen/MIRParser/MIParser.cpp<br>
> +++ b/llvm/lib/CodeGen/MIRParser/MIParser.cpp<br>
> @@ -741,8 +741,8 @@ bool MIParser::parseBasicBlockDefinition(<br>
>    MBB->setIsEHPad(IsLandingPad);<br>
>    MBB->setIsInlineAsmBrIndirectTarget(IsInlineAsmBrIndirectTarget);<br>
>    MBB->setIsEHFuncletEntry(IsEHFuncletEntry);<br>
> -  if (SectionID) {<br>
> -    MBB->setSectionID(*SectionID);<br>
> +  if (SectionID.hasValue()) {<br>
> +    MBB->setSectionID(SectionID.getValue());<br>
>      MF.setBBSectionsType(BasicBlockSection::List);<br>
>    }<br>
>    return false;<br>
><br>
> diff  --git a/llvm/lib/CodeGen/MachineBasicBlock.cpp b/llvm/lib/CodeGen/MachineBasicBlock.cpp<br>
> index a50e188afa240..c186d0ba99695 100644<br>
> --- a/llvm/lib/CodeGen/MachineBasicBlock.cpp<br>
> +++ b/llvm/lib/CodeGen/MachineBasicBlock.cpp<br>
> @@ -450,8 +450,8 @@ void MachineBasicBlock::print(raw_ostream &OS, ModuleSlotTracker &MST,<br>
><br>
>    if (IrrLoopHeaderWeight && IsStandalone) {<br>
>      if (Indexes) OS << '\t';<br>
> -    OS.indent(2) << "; Irreducible loop header weight: " << *IrrLoopHeaderWeight<br>
> -                 << '\n';<br>
> +    OS.indent(2) << "; Irreducible loop header weight: "<br>
> +                 << IrrLoopHeaderWeight.getValue() << '\n';<br>
>    }<br>
>  }<br>
><br>
><br>
> diff  --git a/llvm/lib/CodeGen/MachineFunctionSplitter.cpp b/llvm/lib/CodeGen/MachineFunctionSplitter.cpp<br>
> index 3f55a82170c1c..7d0f294ca5523 100644<br>
> --- a/llvm/lib/CodeGen/MachineFunctionSplitter.cpp<br>
> +++ b/llvm/lib/CodeGen/MachineFunctionSplitter.cpp<br>
> @@ -106,8 +106,9 @@ bool MachineFunctionSplitter::runOnMachineFunction(MachineFunction &MF) {<br>
>    // We don't want to proceed further for cold functions<br>
>    // or functions of unknown hotness. Lukewarm functions have no prefix.<br>
>    Optional<StringRef> SectionPrefix = MF.getFunction().getSectionPrefix();<br>
> -  if (SectionPrefix &&<br>
> -      (SectionPrefix->equals("unlikely") || SectionPrefix->equals("unknown"))) {<br>
> +  if (SectionPrefix.hasValue() &&<br>
> +      (SectionPrefix.getValue().equals("unlikely") ||<br>
> +       SectionPrefix.getValue().equals("unknown"))) {<br>
>      return false;<br>
>    }<br>
><br>
><br>
> diff  --git a/llvm/lib/CodeGen/ModuloSchedule.cpp b/llvm/lib/CodeGen/ModuloSchedule.cpp<br>
> index 37b851f19ccf0..8e8cdb24452d9 100644<br>
> --- a/llvm/lib/CodeGen/ModuloSchedule.cpp<br>
> +++ b/llvm/lib/CodeGen/ModuloSchedule.cpp<br>
> @@ -1447,8 +1447,8 @@ Register KernelRewriter::remapUse(Register Reg, MachineInstr &MI) {<br>
>  Register KernelRewriter::phi(Register LoopReg, Optional<Register> InitReg,<br>
>                               const TargetRegisterClass *RC) {<br>
>    // If the init register is not undef, try and find an existing phi.<br>
> -  if (InitReg) {<br>
> -    auto I = Phis.find({LoopReg, *InitReg});<br>
> +  if (InitReg.hasValue()) {<br>
> +    auto I = Phis.find({LoopReg, InitReg.getValue()});<br>
>      if (I != Phis.end())<br>
>        return I->second;<br>
>    } else {<br>
> @@ -1469,10 +1469,10 @@ Register KernelRewriter::phi(Register LoopReg, Optional<Register> InitReg,<br>
>        return R;<br>
>      // Found a phi taking undef as input, so rewrite it to take InitReg.<br>
>      MachineInstr *MI = MRI.getVRegDef(R);<br>
> -    MI->getOperand(1).setReg(*InitReg);<br>
> -    Phis.insert({{LoopReg, *InitReg}, R});<br>
> +    MI->getOperand(1).setReg(InitReg.getValue());<br>
> +    Phis.insert({{LoopReg, InitReg.getValue()}, R});<br>
>      const TargetRegisterClass *ConstrainRegClass =<br>
> -        MRI.constrainRegClass(R, MRI.getRegClass(*InitReg));<br>
> +        MRI.constrainRegClass(R, MRI.getRegClass(InitReg.getValue()));<br>
>      assert(ConstrainRegClass && "Expected a valid constrained register class!");<br>
>      (void)ConstrainRegClass;<br>
>      UndefPhis.erase(I);<br>
> @@ -1483,18 +1483,18 @@ Register KernelRewriter::phi(Register LoopReg, Optional<Register> InitReg,<br>
>    if (!RC)<br>
>      RC = MRI.getRegClass(LoopReg);<br>
>    Register R = MRI.createVirtualRegister(RC);<br>
> -  if (InitReg) {<br>
> +  if (InitReg.hasValue()) {<br>
>      const TargetRegisterClass *ConstrainRegClass =<br>
>          MRI.constrainRegClass(R, MRI.getRegClass(*InitReg));<br>
>      assert(ConstrainRegClass && "Expected a valid constrained register class!");<br>
>      (void)ConstrainRegClass;<br>
>    }<br>
>    BuildMI(*BB, BB->getFirstNonPHI(), DebugLoc(), TII->get(TargetOpcode::PHI), R)<br>
> -      .addReg(InitReg ? *InitReg : undef(RC))<br>
> +      .addReg(InitReg.hasValue() ? *InitReg : undef(RC))<br>
>        .addMBB(PreheaderBB)<br>
>        .addReg(LoopReg)<br>
>        .addMBB(BB);<br>
> -  if (!InitReg)<br>
> +  if (!InitReg.hasValue())<br>
>      UndefPhis[LoopReg] = R;<br>
>    else<br>
>      Phis[{LoopReg, *InitReg}] = R;<br>
><br>
> diff  --git a/llvm/lib/CodeGen/SelectOptimize.cpp b/llvm/lib/CodeGen/SelectOptimize.cpp<br>
> index 403222794dfe7..c199b6a6cca85 100644<br>
> --- a/llvm/lib/CodeGen/SelectOptimize.cpp<br>
> +++ b/llvm/lib/CodeGen/SelectOptimize.cpp<br>
> @@ -870,8 +870,8 @@ bool SelectOptimize::computeLoopCosts(<br>
>            ORE->emit(ORmissL);<br>
>            return false;<br>
>          }<br>
> -        IPredCost += Scaled64::get(*ILatency);<br>
> -        INonPredCost += Scaled64::get(*ILatency);<br>
> +        IPredCost += Scaled64::get(ILatency.getValue());<br>
> +        INonPredCost += Scaled64::get(ILatency.getValue());<br>
><br>
>          // For a select that can be converted to branch,<br>
>          // compute its cost as a branch (non-predicated cost).<br>
><br>
> diff  --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp<br>
> index aa688d9dda3c6..38f440acc1a66 100644<br>
> --- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp<br>
> +++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp<br>
> @@ -24514,8 +24514,9 @@ bool DAGCombiner::mayAlias(SDNode *Op0, SDNode *Op1) const {<br>
>    auto &Size0 = MUC0.NumBytes;<br>
>    auto &Size1 = MUC1.NumBytes;<br>
>    if (OrigAlignment0 == OrigAlignment1 && SrcValOffset0 != SrcValOffset1 &&<br>
> -      Size0 && Size1 && *Size0 == *Size1 && OrigAlignment0 > *Size0 &&<br>
> -      SrcValOffset0 % *Size0 == 0 && SrcValOffset1 % *Size1 == 0) {<br>
> +      Size0.hasValue() && Size1.hasValue() && *Size0 == *Size1 &&<br>
> +      OrigAlignment0 > *Size0 && SrcValOffset0 % *Size0 == 0 &&<br>
> +      SrcValOffset1 % *Size1 == 0) {<br>
>      int64_t OffAlign0 = SrcValOffset0 % OrigAlignment0.value();<br>
>      int64_t OffAlign1 = SrcValOffset1 % OrigAlignment1.value();<br>
><br>
> @@ -24534,8 +24535,8 @@ bool DAGCombiner::mayAlias(SDNode *Op0, SDNode *Op1) const {<br>
>      UseAA = false;<br>
>  #endif<br>
><br>
> -  if (UseAA && AA && MUC0.MMO->getValue() && MUC1.MMO->getValue() && Size0 &&<br>
> -      Size1) {<br>
> +  if (UseAA && AA && MUC0.MMO->getValue() && MUC1.MMO->getValue() &&<br>
> +      Size0.hasValue() && Size1.hasValue()) {<br>
>      // Use alias analysis information.<br>
>      int64_t MinOffset = std::min(SrcValOffset0, SrcValOffset1);<br>
>      int64_t Overlap0 = *Size0 + SrcValOffset0 - MinOffset;<br>
><br>
> diff  --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp<br>
> index 103da92dc63dc..15455ebbfee89 100644<br>
> --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp<br>
> +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp<br>
> @@ -703,8 +703,8 @@ static void getCopyToPartsVector(SelectionDAG &DAG, const SDLoc &DL,<br>
>    unsigned NumRegs;<br>
>    if (IsABIRegCopy) {<br>
>      NumRegs = TLI.getVectorTypeBreakdownForCallingConv(<br>
> -        *DAG.getContext(), *CallConv, ValueVT, IntermediateVT, NumIntermediates,<br>
> -        RegisterVT);<br>
> +        *DAG.getContext(), CallConv.getValue(), ValueVT, IntermediateVT,<br>
> +        NumIntermediates, RegisterVT);<br>
>    } else {<br>
>      NumRegs =<br>
>          TLI.getVectorTypeBreakdown(*DAG.getContext(), ValueVT, IntermediateVT,<br>
> @@ -800,11 +800,11 @@ RegsForValue::RegsForValue(LLVMContext &Context, const TargetLowering &TLI,<br>
>    for (EVT ValueVT : ValueVTs) {<br>
>      unsigned NumRegs =<br>
>          isABIMangled()<br>
> -            ? TLI.getNumRegistersForCallingConv(Context, *CC, ValueVT)<br>
> +            ? TLI.getNumRegistersForCallingConv(Context, CC.getValue(), ValueVT)<br>
>              : TLI.getNumRegisters(Context, ValueVT);<br>
>      MVT RegisterVT =<br>
>          isABIMangled()<br>
> -            ? TLI.getRegisterTypeForCallingConv(Context, *CC, ValueVT)<br>
> +            ? TLI.getRegisterTypeForCallingConv(Context, CC.getValue(), ValueVT)<br>
>              : TLI.getRegisterType(Context, ValueVT);<br>
>      for (unsigned i = 0; i != NumRegs; ++i)<br>
>        Regs.push_back(Reg + i);<br>
> @@ -831,10 +831,10 @@ SDValue RegsForValue::getCopyFromRegs(SelectionDAG &DAG,<br>
>      // Copy the legal parts from the registers.<br>
>      EVT ValueVT = ValueVTs[Value];<br>
>      unsigned NumRegs = RegCount[Value];<br>
> -    MVT RegisterVT = isABIMangled()<br>
> -                         ? TLI.getRegisterTypeForCallingConv(<br>
> -                               *DAG.getContext(), *CallConv, RegVTs[Value])<br>
> -                         : RegVTs[Value];<br>
> +    MVT RegisterVT = isABIMangled() ? TLI.getRegisterTypeForCallingConv(<br>
> +                                          *DAG.getContext(),<br>
> +                                          CallConv.getValue(), RegVTs[Value])<br>
> +                                    : RegVTs[Value];<br>
><br>
>      Parts.resize(NumRegs);<br>
>      for (unsigned i = 0; i != NumRegs; ++i) {<br>
> @@ -914,10 +914,10 @@ void RegsForValue::getCopyToRegs(SDValue Val, SelectionDAG &DAG,<br>
>    for (unsigned Value = 0, Part = 0, e = ValueVTs.size(); Value != e; ++Value) {<br>
>      unsigned NumParts = RegCount[Value];<br>
><br>
> -    MVT RegisterVT = isABIMangled()<br>
> -                         ? TLI.getRegisterTypeForCallingConv(<br>
> -                               *DAG.getContext(), *CallConv, RegVTs[Value])<br>
> -                         : RegVTs[Value];<br>
> +    MVT RegisterVT = isABIMangled() ? TLI.getRegisterTypeForCallingConv(<br>
> +                                          *DAG.getContext(),<br>
> +                                          CallConv.getValue(), RegVTs[Value])<br>
> +                                    : RegVTs[Value];<br>
><br>
>      if (ExtendKind == ISD::ANY_EXTEND && TLI.isZExtFree(Val, RegisterVT))<br>
>        ExtendKind = ISD::ZERO_EXTEND;<br>
> @@ -8867,10 +8867,10 @@ void SelectionDAGBuilder::visitInlineAsm(const CallBase &Call,<br>
>              : OpInfo;<br>
>      const auto RegError =<br>
>          getRegistersForValue(DAG, getCurSDLoc(), OpInfo, RefOpInfo);<br>
> -    if (RegError) {<br>
> +    if (RegError.hasValue()) {<br>
>        const MachineFunction &MF = DAG.getMachineFunction();<br>
>        const TargetRegisterInfo &TRI = *MF.getSubtarget().getRegisterInfo();<br>
> -      const char *RegName = TRI.getName(*RegError);<br>
> +      const char *RegName = TRI.getName(RegError.getValue());<br>
>        emitInlineAsmError(Call, "register '" + Twine(RegName) +<br>
>                                     "' allocated for constraint '" +<br>
>                                     Twine(OpInfo.ConstraintCode) +<br>
><br>
> diff  --git a/llvm/lib/CodeGen/SelectionDAG/StatepointLowering.cpp b/llvm/lib/CodeGen/SelectionDAG/StatepointLowering.cpp<br>
> index 68c53fd552945..b318c2ae76623 100644<br>
> --- a/llvm/lib/CodeGen/SelectionDAG/StatepointLowering.cpp<br>
> +++ b/llvm/lib/CodeGen/SelectionDAG/StatepointLowering.cpp<br>
> @@ -196,10 +196,10 @@ static Optional<int> findPreviousSpillSlot(const Value *Val,<br>
>      for (auto &IncomingValue : Phi->incoming_values()) {<br>
>        Optional<int> SpillSlot =<br>
>            findPreviousSpillSlot(IncomingValue, Builder, LookUpDepth - 1);<br>
> -      if (!SpillSlot)<br>
> +      if (!SpillSlot.hasValue())<br>
>          return None;<br>
><br>
> -      if (MergedResult && *MergedResult != *SpillSlot)<br>
> +      if (MergedResult.hasValue() && *MergedResult != *SpillSlot)<br>
>          return None;<br>
><br>
>        MergedResult = SpillSlot;<br>
> @@ -530,14 +530,16 @@ lowerStatepointMetaArgs(SmallVectorImpl<SDValue> &Ops,<br>
>      GCStrategy &S = GFI->getStrategy();<br>
>      for (const Value *V : SI.Bases) {<br>
>        auto Opt = S.isGCManagedPointer(V->getType()->getScalarType());<br>
> -      if (Opt) {<br>
> -        assert(*Opt && "non gc managed base pointer found in statepoint");<br>
> +      if (Opt.hasValue()) {<br>
> +        assert(Opt.getValue() &&<br>
> +               "non gc managed base pointer found in statepoint");<br>
>        }<br>
>      }<br>
>      for (const Value *V : SI.Ptrs) {<br>
>        auto Opt = S.isGCManagedPointer(V->getType()->getScalarType());<br>
> -      if (Opt) {<br>
> -        assert(*Opt && "non gc managed derived pointer found in statepoint");<br>
> +      if (Opt.hasValue()) {<br>
> +        assert(Opt.getValue() &&<br>
> +               "non gc managed derived pointer found in statepoint");<br>
>        }<br>
>      }<br>
>      assert(SI.Bases.size() == SI.Ptrs.size() && "Pointer without base!");<br>
><br>
> diff  --git a/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp b/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp<br>
> index c286d211b6f5d..a6b471ea22b78 100644<br>
> --- a/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp<br>
> +++ b/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp<br>
> @@ -1972,9 +1972,9 @@ bool TargetLowering::SimplifyDemandedBits(<br>
>      KnownBits Known1 = TLO.DAG.computeKnownBits(Op1, DemandedElts, Depth + 1);<br>
>      Known = KnownBits::umin(Known0, Known1);<br>
>      if (Optional<bool> IsULE = KnownBits::ule(Known0, Known1))<br>
> -      return TLO.CombineTo(Op, *IsULE ? Op0 : Op1);<br>
> +      return TLO.CombineTo(Op, IsULE.getValue() ? Op0 : Op1);<br>
>      if (Optional<bool> IsULT = KnownBits::ult(Known0, Known1))<br>
> -      return TLO.CombineTo(Op, *IsULT ? Op0 : Op1);<br>
> +      return TLO.CombineTo(Op, IsULT.getValue() ? Op0 : Op1);<br>
>      break;<br>
>    }<br>
>    case ISD::UMAX: {<br>
> @@ -1985,9 +1985,9 @@ bool TargetLowering::SimplifyDemandedBits(<br>
>      KnownBits Known1 = TLO.DAG.computeKnownBits(Op1, DemandedElts, Depth + 1);<br>
>      Known = KnownBits::umax(Known0, Known1);<br>
>      if (Optional<bool> IsUGE = KnownBits::uge(Known0, Known1))<br>
> -      return TLO.CombineTo(Op, *IsUGE ? Op0 : Op1);<br>
> +      return TLO.CombineTo(Op, IsUGE.getValue() ? Op0 : Op1);<br>
>      if (Optional<bool> IsUGT = KnownBits::ugt(Known0, Known1))<br>
> -      return TLO.CombineTo(Op, *IsUGT ? Op0 : Op1);<br>
> +      return TLO.CombineTo(Op, IsUGT.getValue() ? Op0 : Op1);<br>
>      break;<br>
>    }<br>
>    case ISD::BITREVERSE: {<br>
><br>
> diff  --git a/llvm/lib/DebugInfo/CodeView/CodeViewRecordIO.cpp b/llvm/lib/DebugInfo/CodeView/CodeViewRecordIO.cpp<br>
> index a66f9af988358..c49c2e5e1d32f 100644<br>
> --- a/llvm/lib/DebugInfo/CodeView/CodeViewRecordIO.cpp<br>
> +++ b/llvm/lib/DebugInfo/CodeView/CodeViewRecordIO.cpp<br>
> @@ -70,10 +70,10 @@ uint32_t CodeViewRecordIO::maxFieldLength() const {<br>
>    Optional<uint32_t> Min = Limits.front().bytesRemaining(Offset);<br>
>    for (auto X : makeArrayRef(Limits).drop_front()) {<br>
>      Optional<uint32_t> ThisMin = X.bytesRemaining(Offset);<br>
> -    if (ThisMin)<br>
> -      Min = Min ? std::min(*Min, *ThisMin) : *ThisMin;<br>
> +    if (ThisMin.hasValue())<br>
> +      Min = (Min.hasValue()) ? std::min(*Min, *ThisMin) : *ThisMin;<br>
>    }<br>
> -  assert(Min && "Every field must have a maximum length!");<br>
> +  assert(Min.hasValue() && "Every field must have a maximum length!");<br>
><br>
>    return *Min;<br>
>  }<br>
><br>
> diff  --git a/llvm/lib/DebugInfo/CodeView/TypeRecordMapping.cpp b/llvm/lib/DebugInfo/CodeView/TypeRecordMapping.cpp<br>
> index 27f63b9edcd03..9b35b23739650 100644<br>
> --- a/llvm/lib/DebugInfo/CodeView/TypeRecordMapping.cpp<br>
> +++ b/llvm/lib/DebugInfo/CodeView/TypeRecordMapping.cpp<br>
> @@ -228,8 +228,8 @@ static Error mapNameAndUniqueName(CodeViewRecordIO &IO, StringRef &Name,<br>
>  }<br>
><br>
>  Error TypeRecordMapping::visitTypeBegin(CVType &CVR) {<br>
> -  assert(!TypeKind && "Already in a type mapping!");<br>
> -  assert(!MemberKind && "Already in a member mapping!");<br>
> +  assert(!TypeKind.hasValue() && "Already in a type mapping!");<br>
> +  assert(!MemberKind.hasValue() && "Already in a member mapping!");<br>
><br>
>    // FieldList and MethodList records can be any length because they can be<br>
>    // split with continuation records.  All other record types cannot be<br>
> @@ -260,8 +260,8 @@ Error TypeRecordMapping::visitTypeBegin(CVType &CVR, TypeIndex Index) {<br>
>  }<br>
><br>
>  Error TypeRecordMapping::visitTypeEnd(CVType &Record) {<br>
> -  assert(TypeKind && "Not in a type mapping!");<br>
> -  assert(!MemberKind && "Still in a member mapping!");<br>
> +  assert(TypeKind.hasValue() && "Not in a type mapping!");<br>
> +  assert(!MemberKind.hasValue() && "Still in a member mapping!");<br>
><br>
>    error(IO.endRecord());<br>
><br>
> @@ -270,8 +270,8 @@ Error TypeRecordMapping::visitTypeEnd(CVType &Record) {<br>
>  }<br>
><br>
>  Error TypeRecordMapping::visitMemberBegin(CVMemberRecord &Record) {<br>
> -  assert(TypeKind && "Not in a type mapping!");<br>
> -  assert(!MemberKind && "Already in a member mapping!");<br>
> +  assert(TypeKind.hasValue() && "Not in a type mapping!");<br>
> +  assert(!MemberKind.hasValue() && "Already in a member mapping!");<br>
><br>
>    // The largest possible subrecord is one in which there is a record prefix,<br>
>    // followed by the subrecord, followed by a continuation, and that entire<br>
> @@ -296,8 +296,8 @@ Error TypeRecordMapping::visitMemberBegin(CVMemberRecord &Record) {<br>
>  }<br>
><br>
>  Error TypeRecordMapping::visitMemberEnd(CVMemberRecord &Record) {<br>
> -  assert(TypeKind && "Not in a type mapping!");<br>
> -  assert(MemberKind && "Not in a member mapping!");<br>
> +  assert(TypeKind.hasValue() && "Not in a type mapping!");<br>
> +  assert(MemberKind.hasValue() && "Not in a member mapping!");<br>
><br>
>    if (IO.isReading()) {<br>
>      if (auto EC = IO.skipPadding())<br>
><br>
> diff  --git a/llvm/lib/DebugInfo/DWARF/DWARFContext.cpp b/llvm/lib/DebugInfo/DWARF/DWARFContext.cpp<br>
> index dd49ef8194304..c785026f8461b 100644<br>
> --- a/llvm/lib/DebugInfo/DWARF/DWARFContext.cpp<br>
> +++ b/llvm/lib/DebugInfo/DWARF/DWARFContext.cpp<br>
> @@ -1205,12 +1205,13 @@ void DWARFContext::addLocalsForDie(DWARFCompileUnit *CU, DWARFDie Subprogram,<br>
>      if (auto DeclFileAttr = Die.find(DW_AT_decl_file)) {<br>
>        if (const auto *LT = CU->getContext().getLineTableForUnit(CU))<br>
>          LT->getFileNameByIndex(<br>
> -            *DeclFileAttr->getAsUnsignedConstant(), CU->getCompilationDir(),<br>
> +            DeclFileAttr->getAsUnsignedConstant().getValue(),<br>
> +            CU->getCompilationDir(),<br>
>              DILineInfoSpecifier::FileLineInfoKind::AbsoluteFilePath,<br>
>              Local.DeclFile);<br>
>      }<br>
>      if (auto DeclLineAttr = Die.find(DW_AT_decl_line))<br>
> -      Local.DeclLine = *DeclLineAttr->getAsUnsignedConstant();<br>
> +      Local.DeclLine = DeclLineAttr->getAsUnsignedConstant().getValue();<br>
><br>
>      Result.push_back(Local);<br>
>      return;<br>
><br>
> diff  --git a/llvm/lib/DebugInfo/DWARF/DWARFDebugLine.cpp b/llvm/lib/DebugInfo/DWARF/DWARFDebugLine.cpp<br>
> index 25d0b9f84005f..2e0780e249aa4 100644<br>
> --- a/llvm/lib/DebugInfo/DWARF/DWARFDebugLine.cpp<br>
> +++ b/llvm/lib/DebugInfo/DWARF/DWARFDebugLine.cpp<br>
> @@ -327,20 +327,20 @@ parseV5DirFileTables(const DWARFDataExtractor &DebugLineData,<br>
>          FileEntry.Source = Value;<br>
>          break;<br>
>        case DW_LNCT_directory_index:<br>
> -        FileEntry.DirIdx = *Value.getAsUnsignedConstant();<br>
> +        FileEntry.DirIdx = Value.getAsUnsignedConstant().getValue();<br>
>          break;<br>
>        case DW_LNCT_timestamp:<br>
> -        FileEntry.ModTime = *Value.getAsUnsignedConstant();<br>
> +        FileEntry.ModTime = Value.getAsUnsignedConstant().getValue();<br>
>          break;<br>
>        case DW_LNCT_size:<br>
> -        FileEntry.Length = *Value.getAsUnsignedConstant();<br>
> +        FileEntry.Length = Value.getAsUnsignedConstant().getValue();<br>
>          break;<br>
>        case DW_LNCT_MD5:<br>
> -        if (!Value.getAsBlock() || Value.getAsBlock()->size() != 16)<br>
> +        if (!Value.getAsBlock() || Value.getAsBlock().getValue().size() != 16)<br>
>            return createStringError(<br>
>                errc::invalid_argument,<br>
>                "failed to parse file entry because the MD5 hash is invalid");<br>
> -        std::uninitialized_copy_n(Value.getAsBlock()->begin(), 16,<br>
> +        std::uninitialized_copy_n(Value.getAsBlock().getValue().begin(), 16,<br>
>                                    FileEntry.Checksum.begin());<br>
>          break;<br>
>        default:<br>
><br>
> diff  --git a/llvm/lib/DebugInfo/PDB/Native/DbiStreamBuilder.cpp b/llvm/lib/DebugInfo/PDB/Native/DbiStreamBuilder.cpp<br>
> index 3a719bd07c8a3..1cb332c5fd00a 100644<br>
> --- a/llvm/lib/DebugInfo/PDB/Native/DbiStreamBuilder.cpp<br>
> +++ b/llvm/lib/DebugInfo/PDB/Native/DbiStreamBuilder.cpp<br>
> @@ -427,14 +427,14 @@ Error DbiStreamBuilder::commit(const msf::MSFLayout &Layout,<br>
><br>
>    for (auto &Stream : DbgStreams) {<br>
>      uint16_t StreamNumber = kInvalidStreamIndex;<br>
> -    if (Stream)<br>
> +    if (Stream.hasValue())<br>
>        StreamNumber = Stream->StreamNumber;<br>
>      if (auto EC = Writer.writeInteger(StreamNumber))<br>
>        return EC;<br>
>    }<br>
><br>
>    for (auto &Stream : DbgStreams) {<br>
> -    if (!Stream)<br>
> +    if (!Stream.hasValue())<br>
>        continue;<br>
>      assert(Stream->StreamNumber != kInvalidStreamIndex);<br>
><br>
><br>
> diff  --git a/llvm/lib/Frontend/OpenMP/OMPContext.cpp b/llvm/lib/Frontend/OpenMP/OMPContext.cpp<br>
> index 017548f83e372..eea08b23db9c1 100644<br>
> --- a/llvm/lib/Frontend/OpenMP/OMPContext.cpp<br>
> +++ b/llvm/lib/Frontend/OpenMP/OMPContext.cpp<br>
> @@ -212,8 +212,9 @@ static int isVariantApplicableInContextHelper(<br>
>          return Ctx.matchesISATrait(RawString);<br>
>        });<br>
><br>
> -    if (Optional<bool> Result = HandleTrait(Property, IsActiveTrait))<br>
> -      return *Result;<br>
> +    Optional<bool> Result = HandleTrait(Property, IsActiveTrait);<br>
> +    if (Result.hasValue())<br>
> +      return Result.getValue();<br>
>    }<br>
><br>
>    if (!DeviceSetOnly) {<br>
> @@ -232,8 +233,9 @@ static int isVariantApplicableInContextHelper(<br>
>        if (ConstructMatches)<br>
>          ConstructMatches->push_back(ConstructIdx - 1);<br>
><br>
> -      if (Optional<bool> Result = HandleTrait(Property, FoundInOrder))<br>
> -        return *Result;<br>
> +      Optional<bool> Result = HandleTrait(Property, FoundInOrder);<br>
> +      if (Result.hasValue())<br>
> +        return Result.getValue();<br>
><br>
>        if (!FoundInOrder) {<br>
>          LLVM_DEBUG(dbgs() << "[" << DEBUG_TYPE << "] Construct property "<br>
><br>
> diff  --git a/llvm/lib/IR/Instructions.cpp b/llvm/lib/IR/Instructions.cpp<br>
> index 7e718ac5300a4..22e8ca70c0a6a 100644<br>
> --- a/llvm/lib/IR/Instructions.cpp<br>
> +++ b/llvm/lib/IR/Instructions.cpp<br>
> @@ -4423,9 +4423,10 @@ MDNode *SwitchInstProfUpdateWrapper::buildProfBranchWeightsMD() {<br>
>    assert(SI.getNumSuccessors() == Weights->size() &&<br>
>           "num of prof branch_weights must accord with num of successors");<br>
><br>
> -  bool AllZeroes = all_of(*Weights, [](uint32_t W) { return W == 0; });<br>
> +  bool AllZeroes =<br>
> +      all_of(Weights.getValue(), [](uint32_t W) { return W == 0; });<br>
><br>
> -  if (AllZeroes || Weights->size() < 2)<br>
> +  if (AllZeroes || Weights.getValue().size() < 2)<br>
>      return nullptr;<br>
><br>
>    return MDBuilder(SI.getParent()->getContext()).createBranchWeights(*Weights);<br>
> @@ -4459,8 +4460,8 @@ SwitchInstProfUpdateWrapper::removeCase(SwitchInst::CaseIt I) {<br>
>      // Copy the last case to the place of the removed one and shrink.<br>
>      // This is tightly coupled with the way SwitchInst::removeCase() removes<br>
>      // the cases in SwitchInst::removeCase(CaseIt).<br>
> -    Weights.value()[I->getCaseIndex() + 1] = Weights->back();<br>
> -    Weights->pop_back();<br>
> +    Weights.getValue()[I->getCaseIndex() + 1] = Weights.getValue().back();<br>
> +    Weights.getValue().pop_back();<br>
>    }<br>
>    return SI.removeCase(I);<br>
>  }<br>
> @@ -4473,10 +4474,10 @@ void SwitchInstProfUpdateWrapper::addCase(<br>
>    if (!Weights && W && *W) {<br>
>      Changed = true;<br>
>      Weights = SmallVector<uint32_t, 8>(SI.getNumSuccessors(), 0);<br>
> -    Weights.value()[SI.getNumSuccessors() - 1] = *W;<br>
> +    Weights.getValue()[SI.getNumSuccessors() - 1] = *W;<br>
>    } else if (Weights) {<br>
>      Changed = true;<br>
> -    Weights->push_back(W.value_or(0));<br>
> +    Weights.getValue().push_back(W.value_or(0));<br>
>    }<br>
>    if (Weights)<br>
>      assert(SI.getNumSuccessors() == Weights->size() &&<br>
><br>
> diff  --git a/llvm/lib/IR/IntrinsicInst.cpp b/llvm/lib/IR/IntrinsicInst.cpp<br>
> index 953090fdb2ca4..ac03b1493dd7a 100644<br>
> --- a/llvm/lib/IR/IntrinsicInst.cpp<br>
> +++ b/llvm/lib/IR/IntrinsicInst.cpp<br>
> @@ -223,13 +223,13 @@ ConstrainedFPIntrinsic::getExceptionBehavior() const {<br>
>  bool ConstrainedFPIntrinsic::isDefaultFPEnvironment() const {<br>
>    Optional<fp::ExceptionBehavior> Except = getExceptionBehavior();<br>
>    if (Except) {<br>
> -    if (*Except != fp::ebIgnore)<br>
> +    if (Except.getValue() != fp::ebIgnore)<br>
>        return false;<br>
>    }<br>
><br>
>    Optional<RoundingMode> Rounding = getRoundingMode();<br>
>    if (Rounding) {<br>
> -    if (*Rounding != RoundingMode::NearestTiesToEven)<br>
> +    if (Rounding.getValue() != RoundingMode::NearestTiesToEven)<br>
>        return false;<br>
>    }<br>
><br>
> @@ -363,14 +363,14 @@ VPIntrinsic::getVectorLengthParamPos(Intrinsic::ID IntrinsicID) {<br>
>  /// scatter.<br>
>  MaybeAlign VPIntrinsic::getPointerAlignment() const {<br>
>    Optional<unsigned> PtrParamOpt = getMemoryPointerParamPos(getIntrinsicID());<br>
> -  assert(PtrParamOpt && "no pointer argument!");<br>
> -  return getParamAlign(*PtrParamOpt);<br>
> +  assert(PtrParamOpt.hasValue() && "no pointer argument!");<br>
> +  return getParamAlign(PtrParamOpt.getValue());<br>
>  }<br>
><br>
>  /// \return The pointer operand of this load,store, gather or scatter.<br>
>  Value *VPIntrinsic::getMemoryPointerParam() const {<br>
>    if (auto PtrParamOpt = getMemoryPointerParamPos(getIntrinsicID()))<br>
> -    return getArgOperand(*PtrParamOpt);<br>
> +    return getArgOperand(PtrParamOpt.getValue());<br>
>    return nullptr;<br>
>  }<br>
><br>
> @@ -388,9 +388,10 @@ Optional<unsigned> VPIntrinsic::getMemoryPointerParamPos(Intrinsic::ID VPID) {<br>
><br>
>  /// \return The data (payload) operand of this store or scatter.<br>
>  Value *VPIntrinsic::getMemoryDataParam() const {<br>
> -  if (auto DataParamOpt = getMemoryDataParamPos(getIntrinsicID()))<br>
> -    return getArgOperand(*DataParamOpt);<br>
> -  return nullptr;<br>
> +  auto DataParamOpt = getMemoryDataParamPos(getIntrinsicID());<br>
> +  if (!DataParamOpt.hasValue())<br>
> +    return nullptr;<br>
> +  return getArgOperand(DataParamOpt.getValue());<br>
>  }<br>
><br>
>  Optional<unsigned> VPIntrinsic::getMemoryDataParamPos(Intrinsic::ID VPID) {<br>
><br>
> diff  --git a/llvm/lib/IR/LLVMContextImpl.cpp b/llvm/lib/IR/LLVMContextImpl.cpp<br>
> index 7e005b39860f2..dc44a34ea9101 100644<br>
> --- a/llvm/lib/IR/LLVMContextImpl.cpp<br>
> +++ b/llvm/lib/IR/LLVMContextImpl.cpp<br>
> @@ -250,17 +250,17 @@ void LLVMContextImpl::setOptPassGate(OptPassGate& OPG) {<br>
>  }<br>
><br>
>  bool LLVMContextImpl::hasOpaquePointersValue() {<br>
> -  return OpaquePointers.has_value();<br>
> +  return OpaquePointers.hasValue();<br>
>  }<br>
><br>
>  bool LLVMContextImpl::getOpaquePointers() {<br>
> -  if (LLVM_UNLIKELY(!OpaquePointers))<br>
> +  if (LLVM_UNLIKELY(!(OpaquePointers.hasValue())))<br>
>      OpaquePointers = OpaquePointersCL;<br>
>    return *OpaquePointers;<br>
>  }<br>
><br>
>  void LLVMContextImpl::setOpaquePointers(bool OP) {<br>
> -  assert((!OpaquePointers || *OpaquePointers == OP) &&<br>
> +  assert((!OpaquePointers.hasValue() || OpaquePointers.getValue() == OP) &&<br>
>           "Cannot change opaque pointers mode once set");<br>
>    OpaquePointers = OP;<br>
>  }<br>
><br>
> diff  --git a/llvm/lib/IR/VectorBuilder.cpp b/llvm/lib/IR/VectorBuilder.cpp<br>
> index e7be7a98a593c..82995ce3d05c4 100644<br>
> --- a/llvm/lib/IR/VectorBuilder.cpp<br>
> +++ b/llvm/lib/IR/VectorBuilder.cpp<br>
> @@ -90,9 +90,9 @@ Value *VectorBuilder::createVectorInstruction(unsigned Opcode, Type *ReturnTy,<br>
>      }<br>
>    }<br>
><br>
> -  if (MaskPosOpt)<br>
> +  if (MaskPosOpt.hasValue())<br>
>      IntrinParams[*MaskPosOpt] = &requestMask();<br>
> -  if (VLenPosOpt)<br>
> +  if (VLenPosOpt.hasValue())<br>
>      IntrinParams[*VLenPosOpt] = &requestEVL();<br>
><br>
>    auto *VPDecl = VPIntrinsic::getDeclarationForParams(&getModule(), VPID,<br>
><br>
> diff  --git a/llvm/lib/IR/Verifier.cpp b/llvm/lib/IR/Verifier.cpp<br>
> index cbdf1d1899585..8f857933ada60 100644<br>
> --- a/llvm/lib/IR/Verifier.cpp<br>
> +++ b/llvm/lib/IR/Verifier.cpp<br>
> @@ -5844,10 +5844,10 @@ void Verifier::visitConstrainedFPIntrinsic(ConstrainedFPIntrinsic &FPI) {<br>
>    // match the specification in the intrinsic call table. Thus, no<br>
>    // argument type check is needed here.<br>
><br>
> -  Check(FPI.getExceptionBehavior().has_value(),<br>
> +  Check(FPI.getExceptionBehavior().hasValue(),<br>
>          "invalid exception behavior argument", &FPI);<br>
>    if (HasRoundingMD) {<br>
> -    Check(FPI.getRoundingMode().has_value(), "invalid rounding mode argument",<br>
> +    Check(FPI.getRoundingMode().hasValue(), "invalid rounding mode argument",<br>
>            &FPI);<br>
>    }<br>
>  }<br>
><br>
> diff  --git a/llvm/lib/InterfaceStub/IFSHandler.cpp b/llvm/lib/InterfaceStub/IFSHandler.cpp<br>
> index c9993874dfc6b..71189e79360e1 100644<br>
> --- a/llvm/lib/InterfaceStub/IFSHandler.cpp<br>
> +++ b/llvm/lib/InterfaceStub/IFSHandler.cpp<br>
> @@ -202,8 +202,8 @@ Error ifs::writeIFSToOutputStream(raw_ostream &OS, const IFSStub &Stub) {<br>
>    yaml::Output YamlOut(OS, nullptr, /*WrapColumn =*/0);<br>
>    std::unique_ptr<IFSStubTriple> CopyStub(new IFSStubTriple(Stub));<br>
>    if (Stub.Target.Arch) {<br>
> -    CopyStub->Target.ArchString =<br>
> -        std::string(ELF::convertEMachineToArchName(*Stub.Target.Arch));<br>
> +    CopyStub->Target.ArchString = std::string(<br>
> +        ELF::convertEMachineToArchName(Stub.Target.Arch.getValue()));<br>
>    }<br>
>    IFSTarget Target = Stub.Target;<br>
><br>
> @@ -222,33 +222,36 @@ Error ifs::overrideIFSTarget(IFSStub &Stub, Optional<IFSArch> OverrideArch,<br>
>                               Optional<std::string> OverrideTriple) {<br>
>    std::error_code OverrideEC(1, std::generic_category());<br>
>    if (OverrideArch) {<br>
> -    if (Stub.Target.Arch && *Stub.Target.Arch != *OverrideArch) {<br>
> +    if (Stub.Target.Arch &&<br>
> +        Stub.Target.Arch.getValue() != OverrideArch.getValue()) {<br>
>        return make_error<StringError>(<br>
>            "Supplied Arch conflicts with the text stub", OverrideEC);<br>
>      }<br>
> -    Stub.Target.Arch = *OverrideArch;<br>
> +    Stub.Target.Arch = OverrideArch.getValue();<br>
>    }<br>
>    if (OverrideEndianness) {<br>
>      if (Stub.Target.Endianness &&<br>
> -        *Stub.Target.Endianness != *OverrideEndianness) {<br>
> +        Stub.Target.Endianness.getValue() != OverrideEndianness.getValue()) {<br>
>        return make_error<StringError>(<br>
>            "Supplied Endianness conflicts with the text stub", OverrideEC);<br>
>      }<br>
> -    Stub.Target.Endianness = *OverrideEndianness;<br>
> +    Stub.Target.Endianness = OverrideEndianness.getValue();<br>
>    }<br>
>    if (OverrideBitWidth) {<br>
> -    if (Stub.Target.BitWidth && *Stub.Target.BitWidth != *OverrideBitWidth) {<br>
> +    if (Stub.Target.BitWidth &&<br>
> +        Stub.Target.BitWidth.getValue() != OverrideBitWidth.getValue()) {<br>
>        return make_error<StringError>(<br>
>            "Supplied BitWidth conflicts with the text stub", OverrideEC);<br>
>      }<br>
> -    Stub.Target.BitWidth = *OverrideBitWidth;<br>
> +    Stub.Target.BitWidth = OverrideBitWidth.getValue();<br>
>    }<br>
>    if (OverrideTriple) {<br>
> -    if (Stub.Target.Triple && *Stub.Target.Triple != *OverrideTriple) {<br>
> +    if (Stub.Target.Triple &&<br>
> +        Stub.Target.Triple.getValue() != OverrideTriple.getValue()) {<br>
>        return make_error<StringError>(<br>
>            "Supplied Triple conflicts with the text stub", OverrideEC);<br>
>      }<br>
> -    Stub.Target.Triple = *OverrideTriple;<br>
> +    Stub.Target.Triple = OverrideTriple.getValue();<br>
>    }<br>
>    return Error::success();<br>
>  }<br>
><br>
> diff  --git a/llvm/lib/MC/MCContext.cpp b/llvm/lib/MC/MCContext.cpp<br>
> index e8f0987e8e102..1c0c711a4e3a0 100644<br>
> --- a/llvm/lib/MC/MCContext.cpp<br>
> +++ b/llvm/lib/MC/MCContext.cpp<br>
> @@ -767,13 +767,14 @@ MCSectionXCOFF *MCContext::getXCOFFSection(<br>
>      Optional<XCOFF::CsectProperties> CsectProp, bool MultiSymbolsAllowed,<br>
>      const char *BeginSymName,<br>
>      Optional<XCOFF::DwarfSectionSubtypeFlags> DwarfSectionSubtypeFlags) {<br>
> -  bool IsDwarfSec = DwarfSectionSubtypeFlags.has_value();<br>
> -  assert((IsDwarfSec != CsectProp.has_value()) && "Invalid XCOFF section!");<br>
> +  bool IsDwarfSec = DwarfSectionSubtypeFlags.hasValue();<br>
> +  assert((IsDwarfSec != CsectProp.hasValue()) && "Invalid XCOFF section!");<br>
><br>
>    // Do the lookup. If we have a hit, return it.<br>
>    auto IterBool = XCOFFUniquingMap.insert(std::make_pair(<br>
> -      IsDwarfSec ? XCOFFSectionKey(Section.str(), *DwarfSectionSubtypeFlags)<br>
> -                 : XCOFFSectionKey(Section.str(), CsectProp->MappingClass),<br>
> +      IsDwarfSec<br>
> +          ? XCOFFSectionKey(Section.str(), DwarfSectionSubtypeFlags.getValue())<br>
> +          : XCOFFSectionKey(Section.str(), CsectProp->MappingClass),<br>
>        nullptr));<br>
>    auto &Entry = *IterBool.first;<br>
>    if (!IterBool.second) {<br>
> @@ -803,9 +804,10 @@ MCSectionXCOFF *MCContext::getXCOFFSection(<br>
>    // CachedName contains invalid character(s) such as '$' for an XCOFF symbol.<br>
>    MCSectionXCOFF *Result = nullptr;<br>
>    if (IsDwarfSec)<br>
> -    Result = new (XCOFFAllocator.Allocate()) MCSectionXCOFF(<br>
> -        QualName->getUnqualifiedName(), Kind, QualName,<br>
> -        *DwarfSectionSubtypeFlags, Begin, CachedName, MultiSymbolsAllowed);<br>
> +    Result = new (XCOFFAllocator.Allocate())<br>
> +        MCSectionXCOFF(QualName->getUnqualifiedName(), Kind, QualName,<br>
> +                       DwarfSectionSubtypeFlags.getValue(), Begin, CachedName,<br>
> +                       MultiSymbolsAllowed);<br>
>    else<br>
>      Result = new (XCOFFAllocator.Allocate())<br>
>          MCSectionXCOFF(QualName->getUnqualifiedName(), CsectProp->MappingClass,<br>
><br>
> diff  --git a/llvm/lib/MC/MCDisassembler/MCDisassembler.cpp b/llvm/lib/MC/MCDisassembler/MCDisassembler.cpp<br>
> index af52c34b7c292..c6035dca4ce19 100644<br>
> --- a/llvm/lib/MC/MCDisassembler/MCDisassembler.cpp<br>
> +++ b/llvm/lib/MC/MCDisassembler/MCDisassembler.cpp<br>
> @@ -83,13 +83,12 @@ bool XCOFFSymbolInfo::operator<(const XCOFFSymbolInfo &SymInfo) const {<br>
>      return SymInfo.IsLabel;<br>
><br>
>    // Symbols with a StorageMappingClass have higher priority than those without.<br>
> -  if (StorageMappingClass.has_value() !=<br>
> -      SymInfo.StorageMappingClass.has_value())<br>
> -    return SymInfo.StorageMappingClass.has_value();<br>
> +  if (StorageMappingClass.hasValue() != SymInfo.StorageMappingClass.hasValue())<br>
> +    return SymInfo.StorageMappingClass.hasValue();<br>
><br>
> -  if (StorageMappingClass) {<br>
> -    return getSMCPriority(*StorageMappingClass) <<br>
> -           getSMCPriority(*SymInfo.StorageMappingClass);<br>
> +  if (StorageMappingClass.hasValue()) {<br>
> +    return getSMCPriority(StorageMappingClass.getValue()) <<br>
> +           getSMCPriority(SymInfo.StorageMappingClass.getValue());<br>
>    }<br>
><br>
>    return false;<br>
><br>
> diff  --git a/llvm/lib/MC/MCParser/MasmParser.cpp b/llvm/lib/MC/MCParser/MasmParser.cpp<br>
> index c4240cac6c00a..7ed37b02f460d 100644<br>
> --- a/llvm/lib/MC/MCParser/MasmParser.cpp<br>
> +++ b/llvm/lib/MC/MCParser/MasmParser.cpp<br>
> @@ -4239,9 +4239,10 @@ bool MasmParser::parseStructInitializer(const StructInfo &Structure,<br>
><br>
>    auto &FieldInitializers = Initializer.FieldInitializers;<br>
>    size_t FieldIndex = 0;<br>
> -  if (EndToken) {<br>
> +  if (EndToken.hasValue()) {<br>
>      // Initialize all fields with given initializers.<br>
> -    while (getTok().isNot(*EndToken) && FieldIndex < Structure.Fields.size()) {<br>
> +    while (getTok().isNot(EndToken.getValue()) &&<br>
> +           FieldIndex < Structure.Fields.size()) {<br>
>        const FieldInfo &Field = Structure.Fields[FieldIndex++];<br>
>        if (parseOptionalToken(AsmToken::Comma)) {<br>
>          // Empty initializer; use the default and continue. (Also, allow line<br>
> @@ -4271,11 +4272,11 @@ bool MasmParser::parseStructInitializer(const StructInfo &Structure,<br>
>      FieldInitializers.push_back(Field.Contents);<br>
>    }<br>
><br>
> -  if (EndToken) {<br>
> -    if (*EndToken == AsmToken::Greater)<br>
> +  if (EndToken.hasValue()) {<br>
> +    if (EndToken.getValue() == AsmToken::Greater)<br>
>        return parseAngleBracketClose();<br>
><br>
> -    return parseToken(*EndToken);<br>
> +    return parseToken(EndToken.getValue());<br>
>    }<br>
><br>
>    return false;<br>
><br>
> diff  --git a/llvm/lib/MC/MCSchedule.cpp b/llvm/lib/MC/MCSchedule.cpp<br>
> index dd1ecce365b61..db08e20441137 100644<br>
> --- a/llvm/lib/MC/MCSchedule.cpp<br>
> +++ b/llvm/lib/MC/MCSchedule.cpp<br>
> @@ -96,10 +96,10 @@ MCSchedModel::getReciprocalThroughput(const MCSubtargetInfo &STI,<br>
>        continue;<br>
>      unsigned NumUnits = SM.getProcResource(I->ProcResourceIdx)->NumUnits;<br>
>      double Temp = NumUnits * 1.0 / I->Cycles;<br>
> -    Throughput = Throughput ? std::min(*Throughput, Temp) : Temp;<br>
> +    Throughput = Throughput ? std::min(Throughput.getValue(), Temp) : Temp;<br>
>    }<br>
> -  if (Throughput)<br>
> -    return 1.0 / *Throughput;<br>
> +  if (Throughput.hasValue())<br>
> +    return 1.0 / Throughput.getValue();<br>
><br>
>    // If no throughput value was calculated, assume that we can execute at the<br>
>    // maximum issue width scaled by number of micro-ops for the schedule class.<br>
> @@ -140,10 +140,10 @@ MCSchedModel::getReciprocalThroughput(unsigned SchedClass,<br>
>      if (!I->getCycles())<br>
>        continue;<br>
>      double Temp = countPopulation(I->getUnits()) * 1.0 / I->getCycles();<br>
> -    Throughput = Throughput ? std::min(*Throughput, Temp) : Temp;<br>
> +    Throughput = Throughput ? std::min(Throughput.getValue(), Temp) : Temp;<br>
>    }<br>
> -  if (Throughput)<br>
> -    return 1.0 / *Throughput;<br>
> +  if (Throughput.hasValue())<br>
> +    return 1.0 / Throughput.getValue();<br>
><br>
>    // If there are no execution resources specified for this class, then assume<br>
>    // that it can execute at the maximum default issue width.<br>
><br>
> diff  --git a/llvm/lib/MC/MCSectionXCOFF.cpp b/llvm/lib/MC/MCSectionXCOFF.cpp<br>
> index 0f6d5d5ad0806..ee8fa04c421ff 100644<br>
> --- a/llvm/lib/MC/MCSectionXCOFF.cpp<br>
> +++ b/llvm/lib/MC/MCSectionXCOFF.cpp<br>
> @@ -110,8 +110,8 @@ void MCSectionXCOFF::printSwitchToSection(const MCAsmInfo &MAI, const Triple &T,<br>
><br>
>    // XCOFF debug sections.<br>
>    if (getKind().isMetadata() && isDwarfSect()) {<br>
> -    OS << "\n\t.dwsect " << format("0x%" PRIx32, *getDwarfSubtypeFlags())<br>
> -       << '\n';<br>
> +    OS << "\n\t.dwsect "<br>
> +       << format("0x%" PRIx32, getDwarfSubtypeFlags().getValue()) << '\n';<br>
>      OS << MAI.getPrivateLabelPrefix() << getName() << ':' << '\n';<br>
>      return;<br>
>    }<br>
><br>
> diff  --git a/llvm/lib/ObjCopy/ELF/ELFObjcopy.cpp b/llvm/lib/ObjCopy/ELF/ELFObjcopy.cpp<br>
> index 01c0ae7596bbd..a7b7a47e49ca4 100644<br>
> --- a/llvm/lib/ObjCopy/ELF/ELFObjcopy.cpp<br>
> +++ b/llvm/lib/ObjCopy/ELF/ELFObjcopy.cpp<br>
> @@ -601,8 +601,8 @@ handleUserSection(const NewSectionInfo &NewSection,<br>
>  static Error handleArgs(const CommonConfig &Config, const ELFConfig &ELFConfig,<br>
>                          Object &Obj) {<br>
>    if (Config.OutputArch) {<br>
> -    Obj.Machine = Config.OutputArch->EMachine;<br>
> -    Obj.OSABI = Config.OutputArch->OSABI;<br>
> +    Obj.Machine = Config.OutputArch.getValue().EMachine;<br>
> +    Obj.OSABI = Config.OutputArch.getValue().OSABI;<br>
>    }<br>
><br>
>    if (!Config.SplitDWO.empty() && Config.ExtractDWO) {<br>
> @@ -639,8 +639,8 @@ static Error handleArgs(const CommonConfig &Config, const ELFConfig &ELFConfig,<br>
>        if (Iter != Config.SectionsToRename.end()) {<br>
>          const SectionRename &SR = Iter->second;<br>
>          Sec.Name = std::string(SR.NewName);<br>
> -        if (SR.NewFlags)<br>
> -          setSectionFlagsAndType(Sec, *SR.NewFlags);<br>
> +        if (SR.NewFlags.hasValue())<br>
> +          setSectionFlagsAndType(Sec, SR.NewFlags.getValue());<br>
>          RenamedSections.insert(&Sec);<br>
>        } else if (RelocSec && !(Sec.Flags & SHF_ALLOC))<br>
>          // Postpone processing relocation sections which are not specified in<br>
> @@ -808,9 +808,9 @@ Error objcopy::elf::executeObjcopyOnBinary(const CommonConfig &Config,<br>
>    if (!Obj)<br>
>      return Obj.takeError();<br>
>    // Prefer OutputArch (-O<format>) if set, otherwise infer it from the input.<br>
> -  const ElfType OutputElfType = Config.OutputArch<br>
> -                                    ? getOutputElfType(*Config.OutputArch)<br>
> -                                    : getOutputElfType(In);<br>
> +  const ElfType OutputElfType =<br>
> +      Config.OutputArch ? getOutputElfType(Config.OutputArch.getValue())<br>
> +                        : getOutputElfType(In);<br>
><br>
>    if (Error E = handleArgs(Config, ELFConfig, **Obj))<br>
>      return createFileError(Config.InputFilename, std::move(E));<br>
><br>
> diff  --git a/llvm/lib/Object/ELFObjectFile.cpp b/llvm/lib/Object/ELFObjectFile.cpp<br>
> index 9ab03578914e6..9bac454602abb 100644<br>
> --- a/llvm/lib/Object/ELFObjectFile.cpp<br>
> +++ b/llvm/lib/Object/ELFObjectFile.cpp<br>
> @@ -167,12 +167,12 @@ SubtargetFeatures ELFObjectFileBase::getARMFeatures() const {<br>
>    bool isV7 = false;<br>
>    Optional<unsigned> Attr =<br>
>        Attributes.getAttributeValue(ARMBuildAttrs::CPU_arch);<br>
> -  if (Attr)<br>
> -    isV7 = *Attr == ARMBuildAttrs::v7;<br>
> +  if (Attr.hasValue())<br>
> +    isV7 = Attr.getValue() == ARMBuildAttrs::v7;<br>
><br>
>    Attr = Attributes.getAttributeValue(ARMBuildAttrs::CPU_arch_profile);<br>
> -  if (Attr) {<br>
> -    switch (*Attr) {<br>
> +  if (Attr.hasValue()) {<br>
> +    switch (Attr.getValue()) {<br>
>      case ARMBuildAttrs::ApplicationProfile:<br>
>        Features.AddFeature("aclass");<br>
>        break;<br>
> @@ -190,8 +190,8 @@ SubtargetFeatures ELFObjectFileBase::getARMFeatures() const {<br>
>    }<br>
><br>
>    Attr = Attributes.getAttributeValue(ARMBuildAttrs::THUMB_ISA_use);<br>
> -  if (Attr) {<br>
> -    switch (*Attr) {<br>
> +  if (Attr.hasValue()) {<br>
> +    switch (Attr.getValue()) {<br>
>      default:<br>
>        break;<br>
>      case ARMBuildAttrs::Not_Allowed:<br>
> @@ -205,8 +205,8 @@ SubtargetFeatures ELFObjectFileBase::getARMFeatures() const {<br>
>    }<br>
><br>
>    Attr = Attributes.getAttributeValue(ARMBuildAttrs::FP_arch);<br>
> -  if (Attr) {<br>
> -    switch (*Attr) {<br>
> +  if (Attr.hasValue()) {<br>
> +    switch (Attr.getValue()) {<br>
>      default:<br>
>        break;<br>
>      case ARMBuildAttrs::Not_Allowed:<br>
> @@ -229,8 +229,8 @@ SubtargetFeatures ELFObjectFileBase::getARMFeatures() const {<br>
>    }<br>
><br>
>    Attr = Attributes.getAttributeValue(ARMBuildAttrs::Advanced_SIMD_arch);<br>
> -  if (Attr) {<br>
> -    switch (*Attr) {<br>
> +  if (Attr.hasValue()) {<br>
> +    switch (Attr.getValue()) {<br>
>      default:<br>
>        break;<br>
>      case ARMBuildAttrs::Not_Allowed:<br>
> @@ -248,8 +248,8 @@ SubtargetFeatures ELFObjectFileBase::getARMFeatures() const {<br>
>    }<br>
><br>
>    Attr = Attributes.getAttributeValue(ARMBuildAttrs::MVE_arch);<br>
> -  if (Attr) {<br>
> -    switch (*Attr) {<br>
> +  if (Attr.hasValue()) {<br>
> +    switch (Attr.getValue()) {<br>
>      default:<br>
>        break;<br>
>      case ARMBuildAttrs::Not_Allowed:<br>
> @@ -267,8 +267,8 @@ SubtargetFeatures ELFObjectFileBase::getARMFeatures() const {<br>
>    }<br>
><br>
>    Attr = Attributes.getAttributeValue(ARMBuildAttrs::DIV_use);<br>
> -  if (Attr) {<br>
> -    switch (*Attr) {<br>
> +  if (Attr.hasValue()) {<br>
> +    switch (Attr.getValue()) {<br>
>      default:<br>
>        break;<br>
>      case ARMBuildAttrs::DisallowDIV:<br>
> @@ -521,8 +521,8 @@ void ELFObjectFileBase::setARMSubArch(Triple &TheTriple) const {<br>
><br>
>    Optional<unsigned> Attr =<br>
>        Attributes.getAttributeValue(ARMBuildAttrs::CPU_arch);<br>
> -  if (Attr) {<br>
> -    switch (*Attr) {<br>
> +  if (Attr.hasValue()) {<br>
> +    switch (Attr.getValue()) {<br>
>      case ARMBuildAttrs::v4:<br>
>        Triple += "v4";<br>
>        break;<br>
> @@ -553,8 +553,8 @@ void ELFObjectFileBase::setARMSubArch(Triple &TheTriple) const {<br>
>      case ARMBuildAttrs::v7: {<br>
>        Optional<unsigned> ArchProfileAttr =<br>
>            Attributes.getAttributeValue(ARMBuildAttrs::CPU_arch_profile);<br>
> -      if (ArchProfileAttr &&<br>
> -          *ArchProfileAttr == ARMBuildAttrs::MicroControllerProfile)<br>
> +      if (ArchProfileAttr.hasValue() &&<br>
> +          ArchProfileAttr.getValue() == ARMBuildAttrs::MicroControllerProfile)<br>
>          Triple += "v7m";<br>
>        else<br>
>          Triple += "v7";<br>
><br>
> diff  --git a/llvm/lib/ObjectYAML/DXContainerEmitter.cpp b/llvm/lib/ObjectYAML/DXContainerEmitter.cpp<br>
> index d51120b3ab5a1..9834b036de903 100644<br>
> --- a/llvm/lib/ObjectYAML/DXContainerEmitter.cpp<br>
> +++ b/llvm/lib/ObjectYAML/DXContainerEmitter.cpp<br>
> @@ -133,17 +133,17 @@ void DXContainerWriter::writeParts(raw_ostream &OS) {<br>
><br>
>        // Compute the optional fields if needed...<br>
>        if (P.Program->DXILOffset)<br>
> -        Header.Bitcode.Offset = *P.Program->DXILOffset;<br>
> +        Header.Bitcode.Offset = P.Program->DXILOffset.getValue();<br>
>        else<br>
>          Header.Bitcode.Offset = sizeof(dxbc::BitcodeHeader);<br>
><br>
>        if (P.Program->DXILSize)<br>
> -        Header.Bitcode.Size = *P.Program->DXILSize;<br>
> +        Header.Bitcode.Size = P.Program->DXILSize.getValue();<br>
>        else<br>
>          Header.Bitcode.Size = P.Program->DXIL ? P.Program->DXIL->size() : 0;<br>
><br>
>        if (P.Program->Size)<br>
> -        Header.Size = *P.Program->Size;<br>
> +        Header.Size = P.Program->Size.getValue();<br>
>        else<br>
>          Header.Size = sizeof(dxbc::ProgramHeader) + Header.Bitcode.Size;<br>
><br>
><br>
> diff  --git a/llvm/lib/Support/Process.cpp b/llvm/lib/Support/Process.cpp<br>
> index d93b7de619cb6..547b3b73eec2d 100644<br>
> --- a/llvm/lib/Support/Process.cpp<br>
> +++ b/llvm/lib/Support/Process.cpp<br>
> @@ -42,12 +42,12 @@ Optional<std::string> Process::FindInEnvPath(StringRef EnvName,<br>
>    assert(!path::is_absolute(FileName));<br>
>    Optional<std::string> FoundPath;<br>
>    Optional<std::string> OptPath = Process::GetEnv(EnvName);<br>
> -  if (!OptPath)<br>
> +  if (!OptPath.hasValue())<br>
>      return FoundPath;<br>
><br>
>    const char EnvPathSeparatorStr[] = {Separator, '\0'};<br>
>    SmallVector<StringRef, 8> Dirs;<br>
> -  SplitString(*OptPath, Dirs, EnvPathSeparatorStr);<br>
> +  SplitString(OptPath.getValue(), Dirs, EnvPathSeparatorStr);<br>
><br>
>    for (StringRef Dir : Dirs) {<br>
>      if (Dir.empty())<br>
><br>
> diff  --git a/llvm/lib/Support/VirtualFileSystem.cpp b/llvm/lib/Support/VirtualFileSystem.cpp<br>
> index 9f6ad7e7ca097..9c6a0c071755d 100644<br>
> --- a/llvm/lib/Support/VirtualFileSystem.cpp<br>
> +++ b/llvm/lib/Support/VirtualFileSystem.cpp<br>
> @@ -2667,15 +2667,15 @@ void JSONWriter::write(ArrayRef<YAMLVFSEntry> Entries,<br>
><br>
>    OS << "{\n"<br>
>          "  'version': 0,\n";<br>
> -  if (IsCaseSensitive)<br>
> -    OS << "  'case-sensitive': '" << (*IsCaseSensitive ? "true" : "false")<br>
> -       << "',\n";<br>
> -  if (UseExternalNames)<br>
> -    OS << "  'use-external-names': '" << (*UseExternalNames ? "true" : "false")<br>
> -       << "',\n";<br>
> +  if (IsCaseSensitive.hasValue())<br>
> +    OS << "  'case-sensitive': '"<br>
> +       << (IsCaseSensitive.getValue() ? "true" : "false") << "',\n";<br>
> +  if (UseExternalNames.hasValue())<br>
> +    OS << "  'use-external-names': '"<br>
> +       << (UseExternalNames.getValue() ? "true" : "false") << "',\n";<br>
>    bool UseOverlayRelative = false;<br>
> -  if (IsOverlayRelative) {<br>
> -    UseOverlayRelative = *IsOverlayRelative;<br>
> +  if (IsOverlayRelative.hasValue()) {<br>
> +    UseOverlayRelative = IsOverlayRelative.getValue();<br>
>      OS << "  'overlay-relative': '" << (UseOverlayRelative ? "true" : "false")<br>
>         << "',\n";<br>
>    }<br>
><br>
> diff  --git a/llvm/lib/Support/raw_ostream.cpp b/llvm/lib/Support/raw_ostream.cpp<br>
> index 0c83259fbff33..7648dac005986 100644<br>
> --- a/llvm/lib/Support/raw_ostream.cpp<br>
> +++ b/llvm/lib/Support/raw_ostream.cpp<br>
> @@ -428,8 +428,8 @@ raw_ostream &raw_ostream::operator<<(const FormattedBytes &FB) {<br>
>    while (!Bytes.empty()) {<br>
>      indent(FB.IndentLevel);<br>
><br>
> -    if (FB.FirstByteOffset) {<br>
> -      uint64_t Offset = *FB.FirstByteOffset;<br>
> +    if (FB.FirstByteOffset.hasValue()) {<br>
> +      uint64_t Offset = FB.FirstByteOffset.getValue();<br>
>        llvm::write_hex(*this, Offset + LineIndex, HPS, OffsetWidth);<br>
>        *this << ": ";<br>
>      }<br>
><br>
> diff  --git a/llvm/lib/TableGen/Record.cpp b/llvm/lib/TableGen/Record.cpp<br>
> index 64f0953324717..e100251fbfcd5 100644<br>
> --- a/llvm/lib/TableGen/Record.cpp<br>
> +++ b/llvm/lib/TableGen/Record.cpp<br>
> @@ -2598,10 +2598,10 @@ Init *Record::getValueInit(StringRef FieldName) const {<br>
><br>
>  StringRef Record::getValueAsString(StringRef FieldName) const {<br>
>    llvm::Optional<StringRef> S = getValueAsOptionalString(FieldName);<br>
> -  if (!S)<br>
> +  if (!S.hasValue())<br>
>      PrintFatalError(getLoc(), "Record `" + getName() +<br>
>        "' does not have a field named `" + FieldName + "'!\n");<br>
> -  return *S;<br>
> +  return S.getValue();<br>
>  }<br>
><br>
>  llvm::Optional<StringRef><br>
><br>
> diff  --git a/llvm/lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp b/llvm/lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp<br>
> index 4e2dfc6407a55..76a39d011569b 100644<br>
> --- a/llvm/lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp<br>
> +++ b/llvm/lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp<br>
> @@ -1171,8 +1171,8 @@ bool AMDGPUInstructionSelector::selectBallot(MachineInstr &I) const {<br>
>    Optional<ValueAndVReg> Arg =<br>
>        getIConstantVRegValWithLookThrough(I.getOperand(2).getReg(), *MRI);<br>
><br>
> -  if (Arg) {<br>
> -    const int64_t Value = Arg->Value.getSExtValue();<br>
> +  if (Arg.hasValue()) {<br>
> +    const int64_t Value = Arg.getValue().Value.getSExtValue();<br>
>      if (Value == 0) {<br>
>        unsigned Opcode = Is64 ? AMDGPU::S_MOV_B64 : AMDGPU::S_MOV_B32;<br>
>        BuildMI(*BB, &I, DL, TII.get(Opcode), DstReg).addImm(0);<br>
> @@ -4201,8 +4201,8 @@ AMDGPUInstructionSelector::selectMUBUFScratchOffen(MachineOperand &Root) const {<br>
>               MIB.addReg(Info->getScratchRSrcReg());<br>
>             },<br>
>             [=](MachineInstrBuilder &MIB) { // vaddr<br>
> -             if (FI)<br>
> -               MIB.addFrameIndex(*FI);<br>
> +             if (FI.hasValue())<br>
> +               MIB.addFrameIndex(FI.getValue());<br>
>               else<br>
>                 MIB.addReg(VAddr);<br>
>             },<br>
><br>
> diff  --git a/llvm/lib/Target/AMDGPU/AMDGPUMachineModuleInfo.h b/llvm/lib/Target/AMDGPU/AMDGPUMachineModuleInfo.h<br>
> index 2572b042b5d16..1b513c4563077 100644<br>
> --- a/llvm/lib/Target/AMDGPU/AMDGPUMachineModuleInfo.h<br>
> +++ b/llvm/lib/Target/AMDGPU/AMDGPUMachineModuleInfo.h<br>
> @@ -131,8 +131,8 @@ class AMDGPUMachineModuleInfo final : public MachineModuleInfoELF {<br>
>      bool IsAOneAddressSpace = isOneAddressSpace(A);<br>
>      bool IsBOneAddressSpace = isOneAddressSpace(B);<br>
><br>
> -    return *AIO >= *BIO &&<br>
> -           (IsAOneAddressSpace == IsBOneAddressSpace || !IsAOneAddressSpace);<br>
> +    return AIO.getValue() >= BIO.getValue() &&<br>
> +        (IsAOneAddressSpace == IsBOneAddressSpace || !IsAOneAddressSpace);<br>
>    }<br>
>  };<br>
><br>
><br>
> diff  --git a/llvm/lib/Target/AMDGPU/SIMemoryLegalizer.cpp b/llvm/lib/Target/AMDGPU/SIMemoryLegalizer.cpp<br>
> index 19989a3b99dfc..8a66213931ffb 100644<br>
> --- a/llvm/lib/Target/AMDGPU/SIMemoryLegalizer.cpp<br>
> +++ b/llvm/lib/Target/AMDGPU/SIMemoryLegalizer.cpp<br>
> @@ -2329,13 +2329,13 @@ bool SIMemoryLegalizer::runOnMachineFunction(MachineFunction &MF) {<br>
>          continue;<br>
><br>
>        if (const auto &MOI = MOA.getLoadInfo(MI))<br>
> -        Changed |= expandLoad(*MOI, MI);<br>
> +        Changed |= expandLoad(MOI.getValue(), MI);<br>
>        else if (const auto &MOI = MOA.getStoreInfo(MI))<br>
> -        Changed |= expandStore(*MOI, MI);<br>
> +        Changed |= expandStore(MOI.getValue(), MI);<br>
>        else if (const auto &MOI = MOA.getAtomicFenceInfo(MI))<br>
> -        Changed |= expandAtomicFence(*MOI, MI);<br>
> +        Changed |= expandAtomicFence(MOI.getValue(), MI);<br>
>        else if (const auto &MOI = MOA.getAtomicCmpxchgOrRmwInfo(MI))<br>
> -        Changed |= expandAtomicCmpxchgOrRmw(*MOI, MI);<br>
> +        Changed |= expandAtomicCmpxchgOrRmw(MOI.getValue(), MI);<br>
>      }<br>
>    }<br>
><br>
><br>
> diff  --git a/llvm/lib/Target/ARM/MVEGatherScatterLowering.cpp b/llvm/lib/Target/ARM/MVEGatherScatterLowering.cpp<br>
> index 310d3ede3f7a1..30785340ef129 100644<br>
> --- a/llvm/lib/Target/ARM/MVEGatherScatterLowering.cpp<br>
> +++ b/llvm/lib/Target/ARM/MVEGatherScatterLowering.cpp<br>
> @@ -351,13 +351,13 @@ Optional<int64_t> MVEGatherScatterLowering::getIfConst(const Value *V) {<br>
>      if (!Op0 || !Op1)<br>
>        return Optional<int64_t>{};<br>
>      if (I->getOpcode() == Instruction::Add)<br>
> -      return Optional<int64_t>{*Op0 + *Op1};<br>
> +      return Optional<int64_t>{Op0.getValue() + Op1.getValue()};<br>
>      if (I->getOpcode() == Instruction::Mul)<br>
> -      return Optional<int64_t>{*Op0 * *Op1};<br>
> +      return Optional<int64_t>{Op0.getValue() * Op1.getValue()};<br>
>      if (I->getOpcode() == Instruction::Shl)<br>
> -      return Optional<int64_t>{*Op0 << *Op1};<br>
> +      return Optional<int64_t>{Op0.getValue() << Op1.getValue()};<br>
>      if (I->getOpcode() == Instruction::Or)<br>
> -      return Optional<int64_t>{*Op0 | *Op1};<br>
> +      return Optional<int64_t>{Op0.getValue() | Op1.getValue()};<br>
>    }<br>
>    return Optional<int64_t>{};<br>
>  }<br>
><br>
> diff  --git a/llvm/lib/Target/Hexagon/HexagonFrameLowering.cpp b/llvm/lib/Target/Hexagon/HexagonFrameLowering.cpp<br>
> index 9641791552f24..56d471af8e208 100644<br>
> --- a/llvm/lib/Target/Hexagon/HexagonFrameLowering.cpp<br>
> +++ b/llvm/lib/Target/Hexagon/HexagonFrameLowering.cpp<br>
> @@ -1021,9 +1021,11 @@ findCFILocation(MachineBasicBlock &B) {<br>
>  }<br>
><br>
>  void HexagonFrameLowering::insertCFIInstructions(MachineFunction &MF) const {<br>
> -  for (auto &B : MF)<br>
> -    if (auto At = findCFILocation(B))<br>
> -      insertCFIInstructionsAt(B, *At);<br>
> +  for (auto &B : MF) {<br>
> +    auto At = findCFILocation(B);<br>
> +    if (At.hasValue())<br>
> +      insertCFIInstructionsAt(B, At.getValue());<br>
> +  }<br>
>  }<br>
><br>
>  void HexagonFrameLowering::insertCFIInstructionsAt(MachineBasicBlock &MBB,<br>
><br>
> diff  --git a/llvm/lib/Target/Lanai/AsmParser/LanaiAsmParser.cpp b/llvm/lib/Target/Lanai/AsmParser/LanaiAsmParser.cpp<br>
> index 5ef28cc006e5d..660215ca74353 100644<br>
> --- a/llvm/lib/Target/Lanai/AsmParser/LanaiAsmParser.cpp<br>
> +++ b/llvm/lib/Target/Lanai/AsmParser/LanaiAsmParser.cpp<br>
> @@ -704,15 +704,15 @@ LanaiAsmParser::parseRegister(bool RestoreOnFailure) {<br>
>    if (Lexer.getKind() == AsmToken::Identifier) {<br>
>      RegNum = MatchRegisterName(Lexer.getTok().getIdentifier());<br>
>      if (RegNum == 0) {<br>
> -      if (PercentTok && RestoreOnFailure)<br>
> -        Lexer.UnLex(*PercentTok);<br>
> +      if (PercentTok.hasValue() && RestoreOnFailure)<br>
> +        Lexer.UnLex(PercentTok.getValue());<br>
>        return nullptr;<br>
>      }<br>
>      Parser.Lex(); // Eat identifier token<br>
>      return LanaiOperand::createReg(RegNum, Start, End);<br>
>    }<br>
> -  if (PercentTok && RestoreOnFailure)<br>
> -    Lexer.UnLex(*PercentTok);<br>
> +  if (PercentTok.hasValue() && RestoreOnFailure)<br>
> +    Lexer.UnLex(PercentTok.getValue());<br>
>    return nullptr;<br>
>  }<br>
><br>
><br>
> diff  --git a/llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp b/llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp<br>
> index 312ab0a37fb7b..e52b49e3e8322 100644<br>
> --- a/llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp<br>
> +++ b/llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp<br>
> @@ -1860,8 +1860,8 @@ SDValue NVPTXTargetLowering::LowerCall(TargetLowering::CallLoweringInfo &CLI,<br>
>      Chain = Ret.getValue(1);<br>
>      InFlag = Ret.getValue(2);<br>
><br>
> -    if (ProxyRegTruncates[i]) {<br>
> -      Ret = DAG.getNode(ISD::TRUNCATE, dl, *ProxyRegTruncates[i], Ret);<br>
> +    if (ProxyRegTruncates[i].hasValue()) {<br>
> +      Ret = DAG.getNode(ISD::TRUNCATE, dl, ProxyRegTruncates[i].getValue(), Ret);<br>
>      }<br>
><br>
>      InVals.push_back(Ret);<br>
><br>
> diff  --git a/llvm/lib/Target/PowerPC/PPCMacroFusion.cpp b/llvm/lib/Target/PowerPC/PPCMacroFusion.cpp<br>
> index 58b74c6b8c7ab..caf14576fd446 100644<br>
> --- a/llvm/lib/Target/PowerPC/PPCMacroFusion.cpp<br>
> +++ b/llvm/lib/Target/PowerPC/PPCMacroFusion.cpp<br>
> @@ -267,13 +267,13 @@ static bool shouldScheduleAdjacent(const TargetInstrInfo &TII,<br>
>          continue;<br>
><br>
>        auto DepOpIdx = Feature.depOpIdx();<br>
> -      if (DepOpIdx) {<br>
> +      if (DepOpIdx.hasValue()) {<br>
>          // Checking if the result of the FirstMI is the desired operand of the<br>
>          // SecondMI if the DepOpIdx is set. Otherwise, ignore it.<br>
>          if (!matchingRegOps(*FirstMI, 0, SecondMI, *DepOpIdx))<br>
>            return false;<br>
>        }<br>
> -<br>
> +<br>
>        // Checking more on the instruction operands.<br>
>        if (checkOpConstraints(Feature.getKind(), *FirstMI, SecondMI))<br>
>          return true;<br>
><br>
> diff  --git a/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp b/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp<br>
> index fe396cbfc011d..dd7a9fe917c7b 100644<br>
> --- a/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp<br>
> +++ b/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp<br>
> @@ -246,10 +246,10 @@ static PPCTargetMachine::PPCABI computeTargetABI(const Triple &TT,<br>
><br>
>  static Reloc::Model getEffectiveRelocModel(const Triple &TT,<br>
>                                             Optional<Reloc::Model> RM) {<br>
> -  assert((!TT.isOSAIX() || !RM || *RM == Reloc::PIC_) &&<br>
> +  assert((!TT.isOSAIX() || !RM.hasValue() || *RM == Reloc::PIC_) &&<br>
>           "Invalid relocation model for AIX.");<br>
><br>
> -  if (RM)<br>
> +  if (RM.hasValue())<br>
>      return *RM;<br>
><br>
>    // Big Endian PPC and AIX default to PIC.<br>
><br>
> diff  --git a/llvm/lib/Target/VE/VVPISelLowering.cpp b/llvm/lib/Target/VE/VVPISelLowering.cpp<br>
> index e4c35dafff565..cd67a0fb40f26 100644<br>
> --- a/llvm/lib/Target/VE/VVPISelLowering.cpp<br>
> +++ b/llvm/lib/Target/VE/VVPISelLowering.cpp<br>
> @@ -39,9 +39,9 @@ SDValue VETargetLowering::lowerToVVP(SDValue Op, SelectionDAG &DAG) const {<br>
>    // Can we represent this as a VVP node.<br>
>    const unsigned Opcode = Op->getOpcode();<br>
>    auto VVPOpcodeOpt = getVVPOpcode(Opcode);<br>
> -  if (!VVPOpcodeOpt)<br>
> +  if (!VVPOpcodeOpt.hasValue())<br>
>      return SDValue();<br>
> -  unsigned VVPOpcode = *VVPOpcodeOpt;<br>
> +  unsigned VVPOpcode = VVPOpcodeOpt.getValue();<br>
>    const bool FromVP = ISD::isVPOpcode(Opcode);<br>
><br>
>    // The representative and legalized vector type of this operation.<br>
><br>
> diff  --git a/llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmTypeCheck.cpp b/llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmTypeCheck.cpp<br>
> index abc6115c0453b..61097e115a1c4 100644<br>
> --- a/llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmTypeCheck.cpp<br>
> +++ b/llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmTypeCheck.cpp<br>
> @@ -86,15 +86,18 @@ bool WebAssemblyAsmTypeCheck::popType(SMLoc ErrorLoc,<br>
>                                        Optional<wasm::ValType> EVT) {<br>
>    if (Stack.empty()) {<br>
>      return typeError(ErrorLoc,<br>
> -                     EVT ? StringRef("empty stack while popping ") +<br>
> -                               WebAssembly::typeToString(*EVT)<br>
> -                         : StringRef("empty stack while popping value"));<br>
> +                      EVT.hasValue()<br>
> +                          ? StringRef("empty stack while popping ") +<br>
> +                                WebAssembly::typeToString(EVT.getValue())<br>
> +                          : StringRef(<br>
> +                                    "empty stack while popping value"));<br>
>    }<br>
>    auto PVT = Stack.pop_back_val();<br>
> -  if (EVT && *EVT != PVT) {<br>
> -    return typeError(ErrorLoc,<br>
> -                     StringRef("popped ") + WebAssembly::typeToString(PVT) +<br>
> -                         ", expected " + WebAssembly::typeToString(*EVT));<br>
> +  if (EVT.hasValue() && EVT.getValue() != PVT) {<br>
> +    return typeError(<br>
> +        ErrorLoc, StringRef("popped ") + WebAssembly::typeToString(PVT) +<br>
> +                                    ", expected " +<br>
> +                                    WebAssembly::typeToString(EVT.getValue()));<br>
>    }<br>
>    return false;<br>
>  }<br>
><br>
> diff  --git a/llvm/lib/Target/WebAssembly/WebAssemblyLowerEmscriptenEHSjLj.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyLowerEmscriptenEHSjLj.cpp<br>
> index 65aa709bb349a..f09758a0d1033 100644<br>
> --- a/llvm/lib/Target/WebAssembly/WebAssemblyLowerEmscriptenEHSjLj.cpp<br>
> +++ b/llvm/lib/Target/WebAssembly/WebAssemblyLowerEmscriptenEHSjLj.cpp<br>
> @@ -552,8 +552,8 @@ Value *WebAssemblyLowerEmscriptenEHSjLj::wrapInvoke(CallBase *CI) {<br>
>      Optional<unsigned> NEltArg;<br>
>      std::tie(SizeArg, NEltArg) = FnAttrs.getAllocSizeArgs();<br>
>      SizeArg += 1;<br>
> -    if (NEltArg)<br>
> -      NEltArg = *NEltArg + 1;<br>
> +    if (NEltArg.hasValue())<br>
> +      NEltArg = NEltArg.getValue() + 1;<br>
>      FnAttrs.addAllocSizeAttr(SizeArg, NEltArg);<br>
>    }<br>
>    // In case the callee has 'noreturn' attribute, We need to remove it, because<br>
><br>
> diff  --git a/llvm/lib/Transforms/IPO/Attributor.cpp b/llvm/lib/Transforms/IPO/Attributor.cpp<br>
> index 284b9b34d76cb..769d79b97517a 100644<br>
> --- a/llvm/lib/Transforms/IPO/Attributor.cpp<br>
> +++ b/llvm/lib/Transforms/IPO/Attributor.cpp<br>
> @@ -297,11 +297,11 @@ AA::combineOptionalValuesInAAValueLatice(const Optional<Value *> &A,<br>
>                                           const Optional<Value *> &B, Type *Ty) {<br>
>    if (A == B)<br>
>      return A;<br>
> -  if (!B)<br>
> +  if (!B.hasValue())<br>
>      return A;<br>
>    if (*B == nullptr)<br>
>      return nullptr;<br>
> -  if (!A)<br>
> +  if (!A.hasValue())<br>
>      return Ty ? getWithType(**B, *Ty) : nullptr;<br>
>    if (*A == nullptr)<br>
>      return nullptr;<br>
> @@ -718,8 +718,8 @@ Argument *IRPosition::getAssociatedArgument() const {<br>
>    }<br>
><br>
>    // If we found a unique callback candidate argument, return it.<br>
> -  if (CBCandidateArg && *CBCandidateArg)<br>
> -    return *CBCandidateArg;<br>
> +  if (CBCandidateArg.hasValue() && CBCandidateArg.getValue())<br>
> +    return CBCandidateArg.getValue();<br>
><br>
>    // If no callbacks were found, or none used the underlying call site operand<br>
>    // exclusively, use the direct callee argument if available.<br>
> @@ -1048,11 +1048,11 @@ Attributor::getAssumedConstant(const IRPosition &IRP,<br>
>      recordDependence(ValueSimplifyAA, AA, DepClassTy::OPTIONAL);<br>
>      return llvm::None;<br>
>    }<br>
> -  if (isa_and_nonnull<UndefValue>(*SimplifiedV)) {<br>
> +  if (isa_and_nonnull<UndefValue>(SimplifiedV.getValue())) {<br>
>      recordDependence(ValueSimplifyAA, AA, DepClassTy::OPTIONAL);<br>
>      return UndefValue::get(IRP.getAssociatedType());<br>
>    }<br>
> -  Constant *CI = dyn_cast_or_null<Constant>(*SimplifiedV);<br>
> +  Constant *CI = dyn_cast_or_null<Constant>(SimplifiedV.getValue());<br>
>    if (CI)<br>
>      CI = dyn_cast_or_null<Constant>(<br>
>          AA::getWithType(*CI, *IRP.getAssociatedType()));<br>
> @@ -2695,10 +2695,10 @@ void InformationCache::initializeInformationCache(const Function &CF,<br>
>      while (!Worklist.empty()) {<br>
>        const Instruction *I = Worklist.pop_back_val();<br>
>        Optional<short> &NumUses = AssumeUsesMap[I];<br>
> -      if (!NumUses)<br>
> +      if (!NumUses.hasValue())<br>
>          NumUses = I->getNumUses();<br>
> -      NumUses = *NumUses - /* this assume */ 1;<br>
> -      if (*NumUses != 0)<br>
> +      NumUses = NumUses.getValue() - /* this assume */ 1;<br>
> +      if (NumUses.getValue() != 0)<br>
>          continue;<br>
>        AssumeOnlyValues.insert(I);<br>
>        for (const Value *Op : I->operands())<br>
><br>
> diff  --git a/llvm/lib/Transforms/IPO/AttributorAttributes.cpp b/llvm/lib/Transforms/IPO/AttributorAttributes.cpp<br>
> index 5483e42b5fbc2..b36c712cdd6c8 100644<br>
> --- a/llvm/lib/Transforms/IPO/AttributorAttributes.cpp<br>
> +++ b/llvm/lib/Transforms/IPO/AttributorAttributes.cpp<br>
> @@ -395,9 +395,9 @@ static bool genericValueTraversal(<br>
>      if (UseValueSimplify && !isa<Constant>(V)) {<br>
>        Optional<Value *> SimpleV =<br>
>            A.getAssumedSimplified(*V, QueryingAA, UsedAssumedInformation);<br>
> -      if (!SimpleV)<br>
> +      if (!SimpleV.hasValue())<br>
>          continue;<br>
> -      Value *NewV = *SimpleV;<br>
> +      Value *NewV = SimpleV.getValue();<br>
>        if (NewV && NewV != V) {<br>
>          if ((VS & AA::Interprocedural) || !CtxI ||<br>
>              AA::isValidInScope(*NewV, CtxI->getFunction())) {<br>
> @@ -1851,14 +1851,14 @@ ChangeStatus AAReturnedValuesImpl::manifest(Attributor &A) {<br>
>    // Check if we have an assumed unique return value that we could manifest.<br>
>    Optional<Value *> UniqueRV = getAssumedUniqueReturnValue(A);<br>
><br>
> -  if (!UniqueRV || !*UniqueRV)<br>
> +  if (!UniqueRV.hasValue() || !UniqueRV.getValue())<br>
>      return Changed;<br>
><br>
>    // Bookkeeping.<br>
>    STATS_DECLTRACK(UniqueReturnValue, FunctionReturn,<br>
>                    "Number of function with unique return");<br>
>    // If the assumed unique return value is an argument, annotate it.<br>
> -  if (auto *UniqueRVArg = dyn_cast<Argument>(*UniqueRV)) {<br>
> +  if (auto *UniqueRVArg = dyn_cast<Argument>(UniqueRV.getValue())) {<br>
>      if (UniqueRVArg->getType()->canLosslesslyBitCastTo(<br>
>              getAssociatedFunction()->getReturnType())) {<br>
>        getIRPosition() = IRPosition::argument(*UniqueRVArg);<br>
> @@ -2626,9 +2626,9 @@ struct AAUndefinedBehaviorImpl : public AAUndefinedBehavior {<br>
>        // Either we stopped and the appropriate action was taken,<br>
>        // or we got back a simplified value to continue.<br>
>        Optional<Value *> SimplifiedPtrOp = stopOnUndefOrAssumed(A, PtrOp, &I);<br>
> -      if (!SimplifiedPtrOp || !*SimplifiedPtrOp)<br>
> +      if (!SimplifiedPtrOp.hasValue() || !SimplifiedPtrOp.getValue())<br>
>          return true;<br>
> -      const Value *PtrOpVal = *SimplifiedPtrOp;<br>
> +      const Value *PtrOpVal = SimplifiedPtrOp.getValue();<br>
><br>
>        // A memory access through a pointer is considered UB<br>
>        // only if the pointer has constant null value.<br>
> @@ -2717,14 +2717,15 @@ struct AAUndefinedBehaviorImpl : public AAUndefinedBehavior {<br>
>              IRPosition::value(*ArgVal), *this, UsedAssumedInformation);<br>
>          if (UsedAssumedInformation)<br>
>            continue;<br>
> -        if (SimplifiedVal && !*SimplifiedVal)<br>
> +        if (SimplifiedVal.hasValue() && !SimplifiedVal.getValue())<br>
>            return true;<br>
> -        if (!SimplifiedVal || isa<UndefValue>(**SimplifiedVal)) {<br>
> +        if (!SimplifiedVal.hasValue() ||<br>
> +            isa<UndefValue>(*SimplifiedVal.getValue())) {<br>
>            KnownUBInsts.insert(&I);<br>
>            continue;<br>
>          }<br>
>          if (!ArgVal->getType()->isPointerTy() ||<br>
> -            !isa<ConstantPointerNull>(**SimplifiedVal))<br>
> +            !isa<ConstantPointerNull>(*SimplifiedVal.getValue()))<br>
>            continue;<br>
>          auto &NonNullAA =<br>
>              A.getAAFor<AANonNull>(*this, CalleeArgumentIRP, DepClassTy::NONE);<br>
> @@ -4061,11 +4062,11 @@ identifyAliveSuccessors(Attributor &A, const SwitchInst &SI,<br>
>    bool UsedAssumedInformation = false;<br>
>    Optional<Constant *> C =<br>
>        A.getAssumedConstant(*SI.getCondition(), AA, UsedAssumedInformation);<br>
> -  if (!C || isa_and_nonnull<UndefValue>(*C)) {<br>
> +  if (!C.hasValue() || isa_and_nonnull<UndefValue>(C.getValue())) {<br>
>      // No value yet, assume all edges are dead.<br>
> -  } else if (isa_and_nonnull<ConstantInt>(*C)) {<br>
> +  } else if (isa_and_nonnull<ConstantInt>(C.getValue())) {<br>
>      for (auto &CaseIt : SI.cases()) {<br>
> -      if (CaseIt.getCaseValue() == *C) {<br>
> +      if (CaseIt.getCaseValue() == C.getValue()) {<br>
>          AliveSuccessors.push_back(&CaseIt.getCaseSuccessor()->front());<br>
>          return UsedAssumedInformation;<br>
>        }<br>
> @@ -5480,11 +5481,11 @@ struct AAValueSimplifyImpl : AAValueSimplify {<br>
>      bool UsedAssumedInformation = false;<br>
>      Optional<Value *> SimpleV =<br>
>          A.getAssumedSimplified(V, QueryingAA, UsedAssumedInformation);<br>
> -    if (!SimpleV)<br>
> +    if (!SimpleV.hasValue())<br>
>        return PoisonValue::get(&Ty);<br>
>      Value *EffectiveV = &V;<br>
> -    if (*SimpleV)<br>
> -      EffectiveV = *SimpleV;<br>
> +    if (SimpleV.getValue())<br>
> +      EffectiveV = SimpleV.getValue();<br>
>      if (auto *C = dyn_cast<Constant>(EffectiveV))<br>
>        if (!C->canTrap())<br>
>          return C;<br>
> @@ -5500,8 +5501,8 @@ struct AAValueSimplifyImpl : AAValueSimplify {<br>
>    /// Return a value we can use as replacement for the associated one, or<br>
>    /// nullptr if we don't have one that makes sense.<br>
>    Value *manifestReplacementValue(Attributor &A, Instruction *CtxI) const {<br>
> -    Value *NewV = SimplifiedAssociatedValue<br>
> -                      ? *SimplifiedAssociatedValue<br>
> +    Value *NewV = SimplifiedAssociatedValue.hasValue()<br>
> +                      ? SimplifiedAssociatedValue.getValue()<br>
>                        : UndefValue::get(getAssociatedType());<br>
>      if (NewV && NewV != &getAssociatedValue()) {<br>
>        ValueToValueMapTy VMap;<br>
> @@ -5630,9 +5631,9 @@ struct AAValueSimplifyArgument final : AAValueSimplifyImpl {<br>
>        bool UsedAssumedInformation = false;<br>
>        Optional<Constant *> SimpleArgOp =<br>
>            A.getAssumedConstant(ACSArgPos, *this, UsedAssumedInformation);<br>
> -      if (!SimpleArgOp)<br>
> +      if (!SimpleArgOp.hasValue())<br>
>          return true;<br>
> -      if (!*SimpleArgOp)<br>
> +      if (!SimpleArgOp.getValue())<br>
>          return false;<br>
>        if (!AA::isDynamicallyUnique(A, *this, **SimpleArgOp))<br>
>          return false;<br>
> @@ -5745,18 +5746,18 @@ struct AAValueSimplifyFloating : AAValueSimplifyImpl {<br>
>      const auto &SimplifiedLHS =<br>
>          A.getAssumedSimplified(IRPosition::value(*LHS, getCallBaseContext()),<br>
>                                 *this, UsedAssumedInformation);<br>
> -    if (!SimplifiedLHS)<br>
> +    if (!SimplifiedLHS.hasValue())<br>
>        return true;<br>
> -    if (!*SimplifiedLHS)<br>
> +    if (!SimplifiedLHS.getValue())<br>
>        return false;<br>
>      LHS = *SimplifiedLHS;<br>
><br>
>      const auto &SimplifiedRHS =<br>
>          A.getAssumedSimplified(IRPosition::value(*RHS, getCallBaseContext()),<br>
>                                 *this, UsedAssumedInformation);<br>
> -    if (!SimplifiedRHS)<br>
> +    if (!SimplifiedRHS.hasValue())<br>
>        return true;<br>
> -    if (!*SimplifiedRHS)<br>
> +    if (!SimplifiedRHS.getValue())<br>
>        return false;<br>
>      RHS = *SimplifiedRHS;<br>
><br>
> @@ -5825,11 +5826,11 @@ struct AAValueSimplifyFloating : AAValueSimplifyImpl {<br>
>                                   *this, UsedAssumedInformation);<br>
>        // If we are not sure about any operand we are not sure about the entire<br>
>        // instruction, we'll wait.<br>
> -      if (!SimplifiedOp)<br>
> +      if (!SimplifiedOp.hasValue())<br>
>          return true;<br>
><br>
> -      if (*SimplifiedOp)<br>
> -        NewOps[Idx] = *SimplifiedOp;<br>
> +      if (SimplifiedOp.getValue())<br>
> +        NewOps[Idx] = SimplifiedOp.getValue();<br>
>        else<br>
>          NewOps[Idx] = Op;<br>
><br>
> @@ -6248,10 +6249,11 @@ struct AAHeapToStackFunction final : public AAHeapToStack {<br>
>          Alignment = std::max(Alignment, *RetAlign);<br>
>        if (Value *Align = getAllocAlignment(AI.CB, TLI)) {<br>
>          Optional<APInt> AlignmentAPI = getAPInt(A, *this, *Align);<br>
> -        assert(AlignmentAPI && AlignmentAPI->getZExtValue() > 0 &&<br>
> +        assert(AlignmentAPI.hasValue() &&<br>
> +               AlignmentAPI.getValue().getZExtValue() > 0 &&<br>
>                 "Expected an alignment during manifest!");<br>
> -        Alignment =<br>
> -            std::max(Alignment, assumeAligned(AlignmentAPI->getZExtValue()));<br>
> +        Alignment = std::max(<br>
> +            Alignment, assumeAligned(AlignmentAPI.getValue().getZExtValue()));<br>
>        }<br>
><br>
>        // TODO: Hoist the alloca towards the function entry.<br>
> @@ -6297,9 +6299,9 @@ struct AAHeapToStackFunction final : public AAHeapToStack {<br>
>      bool UsedAssumedInformation = false;<br>
>      Optional<Constant *> SimpleV =<br>
>          A.getAssumedConstant(V, AA, UsedAssumedInformation);<br>
> -    if (!SimpleV)<br>
> +    if (!SimpleV.hasValue())<br>
>        return APInt(64, 0);<br>
> -    if (auto *CI = dyn_cast_or_null<ConstantInt>(*SimpleV))<br>
> +    if (auto *CI = dyn_cast_or_null<ConstantInt>(SimpleV.getValue()))<br>
>        return CI->getValue();<br>
>      return llvm::None;<br>
>    }<br>
> @@ -6576,9 +6578,9 @@ ChangeStatus AAHeapToStackFunction::updateImpl(Attributor &A) {<br>
><br>
>      if (MaxHeapToStackSize != -1) {<br>
>        Optional<APInt> Size = getSize(A, *this, AI);<br>
> -      if (!Size || Size->ugt(MaxHeapToStackSize)) {<br>
> +      if (!Size.hasValue() || Size.getValue().ugt(MaxHeapToStackSize)) {<br>
>          LLVM_DEBUG({<br>
> -          if (!Size)<br>
> +          if (!Size.hasValue())<br>
>              dbgs() << "[H2S] Unknown allocation size: " << *AI.CB << "\n";<br>
>            else<br>
>              dbgs() << "[H2S] Allocation size too large: " << *AI.CB << " vs. "<br>
> @@ -6631,9 +6633,9 @@ struct AAPrivatizablePtrImpl : public AAPrivatizablePtr {<br>
>    /// Return a privatizable type that encloses both T0 and T1.<br>
>    /// TODO: This is merely a stub for now as we should manage a mapping as well.<br>
>    Optional<Type *> combineTypes(Optional<Type *> T0, Optional<Type *> T1) {<br>
> -    if (!T0)<br>
> +    if (!T0.hasValue())<br>
>        return T1;<br>
> -    if (!T1)<br>
> +    if (!T1.hasValue())<br>
>        return T0;<br>
>      if (T0 == T1)<br>
>        return T0;<br>
> @@ -6693,9 +6695,9 @@ struct AAPrivatizablePtrArgument final : public AAPrivatizablePtrImpl {<br>
><br>
>        LLVM_DEBUG({<br>
>          dbgs() << "[AAPrivatizablePtr] ACSPos: " << ACSArgPos << ", CSTy: ";<br>
> -        if (CSTy && *CSTy)<br>
> -          CSTy.value()->print(dbgs());<br>
> -        else if (CSTy)<br>
> +        if (CSTy.hasValue() && CSTy.getValue())<br>
> +          CSTy.getValue()->print(dbgs());<br>
> +        else if (CSTy.hasValue())<br>
>            dbgs() << "<nullptr>";<br>
>          else<br>
>            dbgs() << "<none>";<br>
> @@ -6705,16 +6707,16 @@ struct AAPrivatizablePtrArgument final : public AAPrivatizablePtrImpl {<br>
><br>
>        LLVM_DEBUG({<br>
>          dbgs() << " : New Type: ";<br>
> -        if (Ty && *Ty)<br>
> -          (*Ty)->print(dbgs());<br>
> -        else if (Ty)<br>
> +        if (Ty.hasValue() && Ty.getValue())<br>
> +          Ty.getValue()->print(dbgs());<br>
> +        else if (Ty.hasValue())<br>
>            dbgs() << "<nullptr>";<br>
>          else<br>
>            dbgs() << "<none>";<br>
>          dbgs() << "\n";<br>
>        });<br>
><br>
> -      return !Ty || *Ty;<br>
> +      return !Ty.hasValue() || Ty.getValue();<br>
>      };<br>
><br>
>      if (!A.checkForAllCallSites(CallSiteCheck, *this, true,<br>
> @@ -6726,9 +6728,9 @@ struct AAPrivatizablePtrArgument final : public AAPrivatizablePtrImpl {<br>
>    /// See AbstractAttribute::updateImpl(...).<br>
>    ChangeStatus updateImpl(Attributor &A) override {<br>
>      PrivatizableType = identifyPrivatizableType(A);<br>
> -    if (!PrivatizableType)<br>
> +    if (!PrivatizableType.hasValue())<br>
>        return ChangeStatus::UNCHANGED;<br>
> -    if (!*PrivatizableType)<br>
> +    if (!PrivatizableType.getValue())<br>
>        return indicatePessimisticFixpoint();<br>
><br>
>      // The dependence is optional so we don't give up once we give up on the<br>
> @@ -6815,9 +6817,9 @@ struct AAPrivatizablePtrArgument final : public AAPrivatizablePtrImpl {<br>
>                *this, IRPosition::argument(CBArg), DepClassTy::REQUIRED);<br>
>            if (CBArgPrivAA.isValidState()) {<br>
>              auto CBArgPrivTy = CBArgPrivAA.getPrivatizableType();<br>
> -            if (!CBArgPrivTy)<br>
> +            if (!CBArgPrivTy.hasValue())<br>
>                continue;<br>
> -            if (*CBArgPrivTy == PrivatizableType)<br>
> +            if (CBArgPrivTy.getValue() == PrivatizableType)<br>
>                continue;<br>
>            }<br>
><br>
> @@ -6862,9 +6864,9 @@ struct AAPrivatizablePtrArgument final : public AAPrivatizablePtrImpl {<br>
>              DepClassTy::REQUIRED);<br>
>          if (DCArgPrivAA.isValidState()) {<br>
>            auto DCArgPrivTy = DCArgPrivAA.getPrivatizableType();<br>
> -          if (!DCArgPrivTy)<br>
> +          if (!DCArgPrivTy.hasValue())<br>
>              return true;<br>
> -          if (*DCArgPrivTy == PrivatizableType)<br>
> +          if (DCArgPrivTy.getValue() == PrivatizableType)<br>
>              return true;<br>
>          }<br>
>        }<br>
> @@ -7004,9 +7006,9 @@ struct AAPrivatizablePtrArgument final : public AAPrivatizablePtrImpl {<br>
><br>
>    /// See AbstractAttribute::manifest(...)<br>
>    ChangeStatus manifest(Attributor &A) override {<br>
> -    if (!PrivatizableType)<br>
> +    if (!PrivatizableType.hasValue())<br>
>        return ChangeStatus::UNCHANGED;<br>
> -    assert(*PrivatizableType && "Expected privatizable type!");<br>
> +    assert(PrivatizableType.getValue() && "Expected privatizable type!");<br>
><br>
>      // Collect all tail calls in the function as we cannot allow new allocas to<br>
>      // escape into tail recursion.<br>
> @@ -7039,9 +7041,9 @@ struct AAPrivatizablePtrArgument final : public AAPrivatizablePtrImpl {<br>
>            Instruction *IP = &*EntryBB.getFirstInsertionPt();<br>
>            const DataLayout &DL = IP->getModule()->getDataLayout();<br>
>            unsigned AS = DL.getAllocaAddrSpace();<br>
> -          Instruction *AI = new AllocaInst(*PrivatizableType, AS,<br>
> +          Instruction *AI = new AllocaInst(PrivatizableType.getValue(), AS,<br>
>                                             Arg->getName() + ".priv", IP);<br>
> -          createInitialization(*PrivatizableType, *AI, ReplacementFn,<br>
> +          createInitialization(PrivatizableType.getValue(), *AI, ReplacementFn,<br>
>                                 ArgIt->getArgNo(), *IP);<br>
><br>
>            if (AI->getType() != Arg->getType())<br>
> @@ -7147,9 +7149,9 @@ struct AAPrivatizablePtrCallSiteArgument final<br>
>    /// See AbstractAttribute::updateImpl(...).<br>
>    ChangeStatus updateImpl(Attributor &A) override {<br>
>      PrivatizableType = identifyPrivatizableType(A);<br>
> -    if (!PrivatizableType)<br>
> +    if (!PrivatizableType.hasValue())<br>
>        return ChangeStatus::UNCHANGED;<br>
> -    if (!*PrivatizableType)<br>
> +    if (!PrivatizableType.getValue())<br>
>        return indicatePessimisticFixpoint();<br>
><br>
>      const IRPosition &IRP = getIRPosition();<br>
> @@ -8608,18 +8610,18 @@ struct AAValueConstantRangeFloating : AAValueConstantRangeImpl {<br>
>      const auto &SimplifiedLHS =<br>
>          A.getAssumedSimplified(IRPosition::value(*LHS, getCallBaseContext()),<br>
>                                 *this, UsedAssumedInformation);<br>
> -    if (!SimplifiedLHS)<br>
> +    if (!SimplifiedLHS.hasValue())<br>
>        return true;<br>
> -    if (!*SimplifiedLHS)<br>
> +    if (!SimplifiedLHS.getValue())<br>
>        return false;<br>
>      LHS = *SimplifiedLHS;<br>
><br>
>      const auto &SimplifiedRHS =<br>
>          A.getAssumedSimplified(IRPosition::value(*RHS, getCallBaseContext()),<br>
>                                 *this, UsedAssumedInformation);<br>
> -    if (!SimplifiedRHS)<br>
> +    if (!SimplifiedRHS.hasValue())<br>
>        return true;<br>
> -    if (!*SimplifiedRHS)<br>
> +    if (!SimplifiedRHS.getValue())<br>
>        return false;<br>
>      RHS = *SimplifiedRHS;<br>
><br>
> @@ -8661,9 +8663,9 @@ struct AAValueConstantRangeFloating : AAValueConstantRangeImpl {<br>
>      const auto &SimplifiedOpV =<br>
>          A.getAssumedSimplified(IRPosition::value(*OpV, getCallBaseContext()),<br>
>                                 *this, UsedAssumedInformation);<br>
> -    if (!SimplifiedOpV)<br>
> +    if (!SimplifiedOpV.hasValue())<br>
>        return true;<br>
> -    if (!*SimplifiedOpV)<br>
> +    if (!SimplifiedOpV.getValue())<br>
>        return false;<br>
>      OpV = *SimplifiedOpV;<br>
><br>
> @@ -8691,18 +8693,18 @@ struct AAValueConstantRangeFloating : AAValueConstantRangeImpl {<br>
>      const auto &SimplifiedLHS =<br>
>          A.getAssumedSimplified(IRPosition::value(*LHS, getCallBaseContext()),<br>
>                                 *this, UsedAssumedInformation);<br>
> -    if (!SimplifiedLHS)<br>
> +    if (!SimplifiedLHS.hasValue())<br>
>        return true;<br>
> -    if (!*SimplifiedLHS)<br>
> +    if (!SimplifiedLHS.getValue())<br>
>        return false;<br>
>      LHS = *SimplifiedLHS;<br>
><br>
>      const auto &SimplifiedRHS =<br>
>          A.getAssumedSimplified(IRPosition::value(*RHS, getCallBaseContext()),<br>
>                                 *this, UsedAssumedInformation);<br>
> -    if (!SimplifiedRHS)<br>
> +    if (!SimplifiedRHS.hasValue())<br>
>        return true;<br>
> -    if (!*SimplifiedRHS)<br>
> +    if (!SimplifiedRHS.getValue())<br>
>        return false;<br>
>      RHS = *SimplifiedRHS;<br>
><br>
> @@ -8765,9 +8767,9 @@ struct AAValueConstantRangeFloating : AAValueConstantRangeImpl {<br>
>          const auto &SimplifiedOpV =<br>
>              A.getAssumedSimplified(IRPosition::value(V, getCallBaseContext()),<br>
>                                     *this, UsedAssumedInformation);<br>
> -        if (!SimplifiedOpV)<br>
> +        if (!SimplifiedOpV.hasValue())<br>
>            return true;<br>
> -        if (!*SimplifiedOpV)<br>
> +        if (!SimplifiedOpV.getValue())<br>
>            return false;<br>
>          Value *VPtr = *SimplifiedOpV;<br>
><br>
> @@ -9126,18 +9128,18 @@ struct AAPotentialConstantValuesFloating : AAPotentialConstantValuesImpl {<br>
>      const auto &SimplifiedLHS =<br>
>          A.getAssumedSimplified(IRPosition::value(*LHS, getCallBaseContext()),<br>
>                                 *this, UsedAssumedInformation);<br>
> -    if (!SimplifiedLHS)<br>
> +    if (!SimplifiedLHS.hasValue())<br>
>        return ChangeStatus::UNCHANGED;<br>
> -    if (!*SimplifiedLHS)<br>
> +    if (!SimplifiedLHS.getValue())<br>
>        return indicatePessimisticFixpoint();<br>
>      LHS = *SimplifiedLHS;<br>
><br>
>      const auto &SimplifiedRHS =<br>
>          A.getAssumedSimplified(IRPosition::value(*RHS, getCallBaseContext()),<br>
>                                 *this, UsedAssumedInformation);<br>
> -    if (!SimplifiedRHS)<br>
> +    if (!SimplifiedRHS.hasValue())<br>
>        return ChangeStatus::UNCHANGED;<br>
> -    if (!*SimplifiedRHS)<br>
> +    if (!SimplifiedRHS.getValue())<br>
>        return indicatePessimisticFixpoint();<br>
>      RHS = *SimplifiedRHS;<br>
><br>
> @@ -9209,18 +9211,18 @@ struct AAPotentialConstantValuesFloating : AAPotentialConstantValuesImpl {<br>
>      const auto &SimplifiedLHS =<br>
>          A.getAssumedSimplified(IRPosition::value(*LHS, getCallBaseContext()),<br>
>                                 *this, UsedAssumedInformation);<br>
> -    if (!SimplifiedLHS)<br>
> +    if (!SimplifiedLHS.hasValue())<br>
>        return ChangeStatus::UNCHANGED;<br>
> -    if (!*SimplifiedLHS)<br>
> +    if (!SimplifiedLHS.getValue())<br>
>        return indicatePessimisticFixpoint();<br>
>      LHS = *SimplifiedLHS;<br>
><br>
>      const auto &SimplifiedRHS =<br>
>          A.getAssumedSimplified(IRPosition::value(*RHS, getCallBaseContext()),<br>
>                                 *this, UsedAssumedInformation);<br>
> -    if (!SimplifiedRHS)<br>
> +    if (!SimplifiedRHS.hasValue())<br>
>        return ChangeStatus::UNCHANGED;<br>
> -    if (!*SimplifiedRHS)<br>
> +    if (!SimplifiedRHS.getValue())<br>
>        return indicatePessimisticFixpoint();<br>
>      RHS = *SimplifiedRHS;<br>
><br>
> @@ -9232,9 +9234,9 @@ struct AAPotentialConstantValuesFloating : AAPotentialConstantValuesImpl {<br>
><br>
>      // Check if we only need one operand.<br>
>      bool OnlyLeft = false, OnlyRight = false;<br>
> -    if (C && *C && (*C)->isOneValue())<br>
> +    if (C.hasValue() && *C && (*C)->isOneValue())<br>
>        OnlyLeft = true;<br>
> -    else if (C && *C && (*C)->isZeroValue())<br>
> +    else if (C.hasValue() && *C && (*C)->isZeroValue())<br>
>        OnlyRight = true;<br>
><br>
>      const AAPotentialConstantValues *LHSAA = nullptr, *RHSAA = nullptr;<br>
> @@ -9284,9 +9286,9 @@ struct AAPotentialConstantValuesFloating : AAPotentialConstantValuesImpl {<br>
>      const auto &SimplifiedSrc =<br>
>          A.getAssumedSimplified(IRPosition::value(*Src, getCallBaseContext()),<br>
>                                 *this, UsedAssumedInformation);<br>
> -    if (!SimplifiedSrc)<br>
> +    if (!SimplifiedSrc.hasValue())<br>
>        return ChangeStatus::UNCHANGED;<br>
> -    if (!*SimplifiedSrc)<br>
> +    if (!SimplifiedSrc.getValue())<br>
>        return indicatePessimisticFixpoint();<br>
>      Src = *SimplifiedSrc;<br>
><br>
> @@ -9317,18 +9319,18 @@ struct AAPotentialConstantValuesFloating : AAPotentialConstantValuesImpl {<br>
>      const auto &SimplifiedLHS =<br>
>          A.getAssumedSimplified(IRPosition::value(*LHS, getCallBaseContext()),<br>
>                                 *this, UsedAssumedInformation);<br>
> -    if (!SimplifiedLHS)<br>
> +    if (!SimplifiedLHS.hasValue())<br>
>        return ChangeStatus::UNCHANGED;<br>
> -    if (!*SimplifiedLHS)<br>
> +    if (!SimplifiedLHS.getValue())<br>
>        return indicatePessimisticFixpoint();<br>
>      LHS = *SimplifiedLHS;<br>
><br>
>      const auto &SimplifiedRHS =<br>
>          A.getAssumedSimplified(IRPosition::value(*RHS, getCallBaseContext()),<br>
>                                 *this, UsedAssumedInformation);<br>
> -    if (!SimplifiedRHS)<br>
> +    if (!SimplifiedRHS.hasValue())<br>
>        return ChangeStatus::UNCHANGED;<br>
> -    if (!*SimplifiedRHS)<br>
> +    if (!SimplifiedRHS.getValue())<br>
>        return indicatePessimisticFixpoint();<br>
>      RHS = *SimplifiedRHS;<br>
><br>
> @@ -9385,9 +9387,9 @@ struct AAPotentialConstantValuesFloating : AAPotentialConstantValuesImpl {<br>
>        const auto &SimplifiedIncomingValue = A.getAssumedSimplified(<br>
>            IRPosition::value(*IncomingValue, getCallBaseContext()), *this,<br>
>            UsedAssumedInformation);<br>
> -      if (!SimplifiedIncomingValue)<br>
> +      if (!SimplifiedIncomingValue.hasValue())<br>
>          continue;<br>
> -      if (!*SimplifiedIncomingValue)<br>
> +      if (!SimplifiedIncomingValue.getValue())<br>
>          return indicatePessimisticFixpoint();<br>
>        IncomingValue = *SimplifiedIncomingValue;<br>
><br>
> @@ -9874,8 +9876,9 @@ struct AAFunctionReachabilityFunction : public AAFunctionReachability {<br>
>      bool isReachable(Attributor &A, AAFunctionReachability &AA,<br>
>                       ArrayRef<const AACallEdges *> AAEdgesList,<br>
>                       const Function &Fn) {<br>
> -      if (Optional<bool> Cached = isCachedReachable(Fn))<br>
> -        return *Cached;<br>
> +      Optional<bool> Cached = isCachedReachable(Fn);<br>
> +      if (Cached.hasValue())<br>
> +        return Cached.getValue();<br>
><br>
>        // The query was not cached, thus it is new. We need to request an update<br>
>        // explicitly to make sure this the information is properly run to a<br>
><br>
> diff  --git a/llvm/lib/Transforms/IPO/IROutliner.cpp b/llvm/lib/Transforms/IPO/IROutliner.cpp<br>
> index 9ed21deea6be5..89ae575603e56 100644<br>
> --- a/llvm/lib/Transforms/IPO/IROutliner.cpp<br>
> +++ b/llvm/lib/Transforms/IPO/IROutliner.cpp<br>
> @@ -554,8 +554,8 @@ collectRegionsConstants(OutlinableRegion &Region,<br>
>      // the the number has been found to be not the same value in each instance.<br>
>      for (Value *V : ID.OperVals) {<br>
>        Optional<unsigned> GVNOpt = C.getGVN(V);<br>
> -      assert(GVNOpt && "Expected a GVN for operand?");<br>
> -      unsigned GVN = *GVNOpt;<br>
> +      assert(GVNOpt.hasValue() && "Expected a GVN for operand?");<br>
> +      unsigned GVN = GVNOpt.getValue();<br>
><br>
>        // Check if this global value has been found to not be the same already.<br>
>        if (NotSame.contains(GVN)) {<br>
> @@ -569,8 +569,8 @@ collectRegionsConstants(OutlinableRegion &Region,<br>
>        // global value number.  If the global value does not map to a Constant,<br>
>        // it is considered to not be the same value.<br>
>        Optional<bool> ConstantMatches = constantMatches(V, GVN, GVNToConstant);<br>
> -      if (ConstantMatches) {<br>
> -        if (*ConstantMatches)<br>
> +      if (ConstantMatches.hasValue()) {<br>
> +        if (ConstantMatches.getValue())<br>
>            continue;<br>
>          else<br>
>            ConstantsTheSame = false;<br>
> @@ -650,8 +650,8 @@ Function *IROutliner::createFunction(Module &M, OutlinableGroup &Group,<br>
>        "outlined_ir_func_" + std::to_string(FunctionNameSuffix), M);<br>
><br>
>    // Transfer the swifterr attribute to the correct function parameter.<br>
> -  if (Group.SwiftErrorArgument)<br>
> -    Group.OutlinedFunction->addParamAttr(*Group.SwiftErrorArgument,<br>
> +  if (Group.SwiftErrorArgument.hasValue())<br>
> +    Group.OutlinedFunction->addParamAttr(Group.SwiftErrorArgument.getValue(),<br>
>                                           Attribute::SwiftError);<br>
><br>
>    Group.OutlinedFunction->addFnAttr(Attribute::OptimizeForSize);<br>
> @@ -808,8 +808,9 @@ static void mapInputsToGVNs(IRSimilarityCandidate &C,<br>
>      assert(Input && "Have a nullptr as an input");<br>
>      if (OutputMappings.find(Input) != OutputMappings.end())<br>
>        Input = OutputMappings.find(Input)->second;<br>
> -    assert(C.getGVN(Input) && "Could not find a numbering for the given input");<br>
> -    EndInputNumbers.push_back(*C.getGVN(Input));<br>
> +    assert(C.getGVN(Input).hasValue() &&<br>
> +           "Could not find a numbering for the given input");<br>
> +    EndInputNumbers.push_back(C.getGVN(Input).getValue());<br>
>    }<br>
>  }<br>
><br>
> @@ -947,12 +948,12 @@ findExtractedInputToOverallInputMapping(OutlinableRegion &Region,<br>
>    // numbering overrides any discovered location for the extracted code.<br>
>    for (unsigned InputVal : InputGVNs) {<br>
>      Optional<unsigned> CanonicalNumberOpt = C.getCanonicalNum(InputVal);<br>
> -    assert(CanonicalNumberOpt && "Canonical number not found?");<br>
> -    unsigned CanonicalNumber = *CanonicalNumberOpt;<br>
> +    assert(CanonicalNumberOpt.hasValue() && "Canonical number not found?");<br>
> +    unsigned CanonicalNumber = CanonicalNumberOpt.getValue();<br>
><br>
>      Optional<Value *> InputOpt = C.fromGVN(InputVal);<br>
> -    assert(InputOpt && "Global value number not found?");<br>
> -    Value *Input = *InputOpt;<br>
> +    assert(InputOpt.hasValue() && "Global value number not found?");<br>
> +    Value *Input = InputOpt.getValue();<br>
><br>
>      DenseMap<unsigned, unsigned>::iterator AggArgIt =<br>
>          Group.CanonicalNumberToAggArg.find(CanonicalNumber);<br>
> @@ -1234,15 +1235,16 @@ static Optional<unsigned> getGVNForPHINode(OutlinableRegion &Region,<br>
>    DenseMap<hash_code, unsigned>::iterator GVNToPHIIt;<br>
>    DenseMap<unsigned, PHINodeData>::iterator PHIToGVNIt;<br>
>    Optional<unsigned> BBGVN = Cand.getGVN(PHIBB);<br>
> -  assert(BBGVN && "Could not find GVN for the incoming block!");<br>
> +  assert(BBGVN.hasValue() && "Could not find GVN for the incoming block!");<br>
><br>
> -  BBGVN = Cand.getCanonicalNum(*BBGVN);<br>
> -  assert(BBGVN && "Could not find canonical number for the incoming block!");<br>
> +  BBGVN = Cand.getCanonicalNum(BBGVN.getValue());<br>
> +  assert(BBGVN.hasValue() &&<br>
> +         "Could not find canonical number for the incoming block!");<br>
>    // Create a pair of the exit block canonical value, and the aggregate<br>
>    // argument location, connected to the canonical numbers stored in the<br>
>    // PHINode.<br>
>    PHINodeData TemporaryPair =<br>
> -      std::make_pair(std::make_pair(*BBGVN, AggArgIdx), PHIGVNs);<br>
> +      std::make_pair(std::make_pair(BBGVN.getValue(), AggArgIdx), PHIGVNs);<br>
>    hash_code PHINodeDataHash = encodePHINodeData(TemporaryPair);<br>
><br>
>    // Look for and create a new entry in our connection between canonical<br>
> @@ -1515,8 +1517,9 @@ CallInst *replaceCalledFunction(Module &M, OutlinableRegion &Region) {<br>
><br>
>    // Make sure that the argument in the new function has the SwiftError<br>
>    // argument.<br>
> -  if (Group.SwiftErrorArgument)<br>
> -    Call->addParamAttr(*Group.SwiftErrorArgument, Attribute::SwiftError);<br>
> +  if (Group.SwiftErrorArgument.hasValue())<br>
> +    Call->addParamAttr(Group.SwiftErrorArgument.getValue(),<br>
> +                       Attribute::SwiftError);<br>
><br>
>    return Call;<br>
>  }<br>
> @@ -1647,9 +1650,9 @@ static void findCanonNumsForPHI(<br>
><br>
>      // Find and add the canonical number for the incoming value.<br>
>      Optional<unsigned> GVN = Region.Candidate->getGVN(IVal);<br>
> -    assert(GVN && "No GVN for incoming value");<br>
> +    assert(GVN.hasValue() && "No GVN for incoming value");<br>
>      Optional<unsigned> CanonNum = Region.Candidate->getCanonicalNum(*GVN);<br>
> -    assert(CanonNum && "No Canonical Number for GVN");<br>
> +    assert(CanonNum.hasValue() && "No Canonical Number for GVN");<br>
>      CanonNums.push_back(std::make_pair(*CanonNum, IBlock));<br>
>    }<br>
>  }<br>
> @@ -2078,11 +2081,12 @@ static void alignOutputBlockWithAggFunc(<br>
><br>
>    // If there is, we remove the new output blocks.  If it does not,<br>
>    // we add it to our list of sets of output blocks.<br>
> -  if (MatchingBB) {<br>
> +  if (MatchingBB.hasValue()) {<br>
>      LLVM_DEBUG(dbgs() << "Set output block for region in function"<br>
> -                      << Region.ExtractedFunction << " to " << *MatchingBB);<br>
> +                      << Region.ExtractedFunction << " to "<br>
> +                      << MatchingBB.getValue());<br>
><br>
> -    Region.OutputBlockNum = *MatchingBB;<br>
> +    Region.OutputBlockNum = MatchingBB.getValue();<br>
>      for (std::pair<Value *, BasicBlock *> &VtoBB : OutputBBs)<br>
>        VtoBB.second->eraseFromParent();<br>
>      return;<br>
> @@ -2500,9 +2504,9 @@ static Value *findOutputValueInRegion(OutlinableRegion &Region,<br>
>      OutputCanon = *It->second.second.begin();<br>
>    }<br>
>    Optional<unsigned> OGVN = Region.Candidate->fromCanonicalNum(OutputCanon);<br>
> -  assert(OGVN && "Could not find GVN for Canonical Number?");<br>
> +  assert(OGVN.hasValue() && "Could not find GVN for Canonical Number?");<br>
>    Optional<Value *> OV = Region.Candidate->fromGVN(*OGVN);<br>
> -  assert(OV && "Could not find value for GVN?");<br>
> +  assert(OV.hasValue() && "Could not find value for GVN?");<br>
>    return *OV;<br>
>  }<br>
><br>
> @@ -2677,14 +2681,15 @@ void IROutliner::updateOutputMapping(OutlinableRegion &Region,<br>
>    if (!OutputIdx)<br>
>      return;<br>
><br>
> -  if (OutputMappings.find(Outputs[*OutputIdx]) == OutputMappings.end()) {<br>
> +  if (OutputMappings.find(Outputs[OutputIdx.getValue()]) ==<br>
> +      OutputMappings.end()) {<br>
>      LLVM_DEBUG(dbgs() << "Mapping extracted output " << *LI << " to "<br>
> -                      << *Outputs[*OutputIdx] << "\n");<br>
> -    OutputMappings.insert(std::make_pair(LI, Outputs[OutputIdx.value()]));<br>
> +                      << *Outputs[OutputIdx.getValue()] << "\n");<br>
> +    OutputMappings.insert(std::make_pair(LI, Outputs[OutputIdx.getValue()]));<br>
>    } else {<br>
> -    Value *Orig = OutputMappings.find(Outputs[OutputIdx.value()])->second;<br>
> +    Value *Orig = OutputMappings.find(Outputs[OutputIdx.getValue()])->second;<br>
>      LLVM_DEBUG(dbgs() << "Mapping extracted output " << *Orig << " to "<br>
> -                      << *Outputs[*OutputIdx] << "\n");<br>
> +                      << *Outputs[OutputIdx.getValue()] << "\n");<br>
>      OutputMappings.insert(std::make_pair(LI, Orig));<br>
>    }<br>
>  }<br>
><br>
> diff  --git a/llvm/lib/Transforms/IPO/OpenMPOpt.cpp b/llvm/lib/Transforms/IPO/OpenMPOpt.cpp<br>
> index 20555afd67c12..f458afafa6984 100644<br>
> --- a/llvm/lib/Transforms/IPO/OpenMPOpt.cpp<br>
> +++ b/llvm/lib/Transforms/IPO/OpenMPOpt.cpp<br>
> @@ -2514,13 +2514,13 @@ struct AAICVTrackerFunction : public AAICVTracker {<br>
>          if (ValuesMap.count(CurrInst)) {<br>
>            Optional<Value *> NewReplVal = ValuesMap.lookup(CurrInst);<br>
>            // Unknown value, track new.<br>
> -          if (!ReplVal) {<br>
> +          if (!ReplVal.hasValue()) {<br>
>              ReplVal = NewReplVal;<br>
>              break;<br>
>            }<br>
><br>
>            // If we found a new value, we can't know the icv value anymore.<br>
> -          if (NewReplVal)<br>
> +          if (NewReplVal.hasValue())<br>
>              if (ReplVal != NewReplVal)<br>
>                return nullptr;<br>
><br>
> @@ -2528,11 +2528,11 @@ struct AAICVTrackerFunction : public AAICVTracker {<br>
>          }<br>
><br>
>          Optional<Value *> NewReplVal = getValueForCall(A, *CurrInst, ICV);<br>
> -        if (!NewReplVal)<br>
> +        if (!NewReplVal.hasValue())<br>
>            continue;<br>
><br>
>          // Unknown value, track new.<br>
> -        if (!ReplVal) {<br>
> +        if (!ReplVal.hasValue()) {<br>
>            ReplVal = NewReplVal;<br>
>            break;<br>
>          }<br>
> @@ -4422,13 +4422,13 @@ struct AAFoldRuntimeCallCallSiteReturned : AAFoldRuntimeCall {<br>
><br>
>      std::string Str("simplified value: ");<br>
><br>
> -    if (!SimplifiedValue)<br>
> +    if (!SimplifiedValue.hasValue())<br>
>        return Str + std::string("none");<br>
><br>
> -    if (!SimplifiedValue.value())<br>
> +    if (!SimplifiedValue.getValue())<br>
>        return Str + std::string("nullptr");<br>
><br>
> -    if (ConstantInt *CI = dyn_cast<ConstantInt>(SimplifiedValue.value()))<br>
> +    if (ConstantInt *CI = dyn_cast<ConstantInt>(SimplifiedValue.getValue()))<br>
>        return Str + std::to_string(CI->getSExtValue());<br>
><br>
>      return Str + std::string("unknown");<br>
> @@ -4452,8 +4452,8 @@ struct AAFoldRuntimeCallCallSiteReturned : AAFoldRuntimeCall {<br>
>          IRPosition::callsite_returned(CB),<br>
>          [&](const IRPosition &IRP, const AbstractAttribute *AA,<br>
>              bool &UsedAssumedInformation) -> Optional<Value *> {<br>
> -          assert((isValidState() ||<br>
> -                  (SimplifiedValue && *SimplifiedValue == nullptr)) &&<br>
> +          assert((isValidState() || (SimplifiedValue.hasValue() &&<br>
> +                                     SimplifiedValue.getValue() == nullptr)) &&<br>
>                   "Unexpected invalid state!");<br>
><br>
>            if (!isAtFixpoint()) {<br>
><br>
> diff  --git a/llvm/lib/Transforms/IPO/SampleContextTracker.cpp b/llvm/lib/Transforms/IPO/SampleContextTracker.cpp<br>
> index caeddae5c2051..9cb558bd2b156 100644<br>
> --- a/llvm/lib/Transforms/IPO/SampleContextTracker.cpp<br>
> +++ b/llvm/lib/Transforms/IPO/SampleContextTracker.cpp<br>
> @@ -132,10 +132,10 @@ void ContextTrieNode::setFunctionSamples(FunctionSamples *FSamples) {<br>
>  Optional<uint32_t> ContextTrieNode::getFunctionSize() const { return FuncSize; }<br>
><br>
>  void ContextTrieNode::addFunctionSize(uint32_t FSize) {<br>
> -  if (!FuncSize)<br>
> +  if (!FuncSize.hasValue())<br>
>      FuncSize = 0;<br>
><br>
> -  FuncSize = *FuncSize + FSize;<br>
> +  FuncSize = FuncSize.getValue() + FSize;<br>
>  }<br>
><br>
>  LineLocation ContextTrieNode::getCallSiteLoc() const { return CallSiteLoc; }<br>
><br>
> diff  --git a/llvm/lib/Transforms/IPO/SampleProfile.cpp b/llvm/lib/Transforms/IPO/SampleProfile.cpp<br>
> index e5d6e2602179a..8e4534723517c 100644<br>
> --- a/llvm/lib/Transforms/IPO/SampleProfile.cpp<br>
> +++ b/llvm/lib/Transforms/IPO/SampleProfile.cpp<br>
> @@ -1351,14 +1351,14 @@ SampleProfileLoader::getExternalInlineAdvisorCost(CallBase &CB) {<br>
><br>
>  bool SampleProfileLoader::getExternalInlineAdvisorShouldInline(CallBase &CB) {<br>
>    Optional<InlineCost> Cost = getExternalInlineAdvisorCost(CB);<br>
> -  return Cost ? !!*Cost : false;<br>
> +  return Cost ? !!Cost.getValue() : false;<br>
>  }<br>
><br>
>  InlineCost<br>
>  SampleProfileLoader::shouldInlineCandidate(InlineCandidate &Candidate) {<br>
>    if (Optional<InlineCost> ReplayCost =<br>
>            getExternalInlineAdvisorCost(*Candidate.CallInstr))<br>
> -    return *ReplayCost;<br>
> +    return ReplayCost.getValue();<br>
>    // Adjust threshold based on call site hotness, only do this for callsite<br>
>    // prioritized inliner because otherwise cost-benefit check is done earlier.<br>
>    int SampleThreshold = SampleColdCallSiteThreshold;<br>
><br>
> diff  --git a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp<br>
> index 120f9918de7bd..449c0f178bf42 100644<br>
> --- a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp<br>
> +++ b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp<br>
> @@ -2677,8 +2677,9 @@ Instruction *InstCombinerImpl::visitCallInst(CallInst &CI) {<br>
>    }<br>
>    default: {<br>
>      // Handle target specific intrinsics<br>
> -    if (Optional<Instruction *> V = targetInstCombineIntrinsic(*II))<br>
> -      return *V;<br>
> +    Optional<Instruction *> V = targetInstCombineIntrinsic(*II);<br>
> +    if (V.hasValue())<br>
> +      return V.getValue();<br>
>      break;<br>
>    }<br>
>    }<br>
><br>
> diff  --git a/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp b/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp<br>
> index d8a2a960449ec..d801f4d509645 100644<br>
> --- a/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp<br>
> +++ b/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp<br>
> @@ -924,8 +924,8 @@ Value *InstCombinerImpl::SimplifyDemandedUseBits(Value *V, APInt DemandedMask,<br>
>          // Handle target specific intrinsics<br>
>          Optional<Value *> V = targetSimplifyDemandedUseBitsIntrinsic(<br>
>              *II, DemandedMask, Known, KnownBitsComputed);<br>
> -        if (V)<br>
> -          return *V;<br>
> +        if (V.hasValue())<br>
> +          return V.getValue();<br>
>          break;<br>
>        }<br>
>        }<br>
> @@ -1635,8 +1635,8 @@ Value *InstCombinerImpl::SimplifyDemandedVectorElts(Value *V,<br>
>        Optional<Value *> V = targetSimplifyDemandedVectorEltsIntrinsic(<br>
>            *II, DemandedElts, UndefElts, UndefElts2, UndefElts3,<br>
>            simplifyAndSetOp);<br>
> -      if (V)<br>
> -        return *V;<br>
> +      if (V.hasValue())<br>
> +        return V.getValue();<br>
>        break;<br>
>      }<br>
>      } // switch on IntrinsicID<br>
><br>
> diff  --git a/llvm/lib/Transforms/Instrumentation/ThreadSanitizer.cpp b/llvm/lib/Transforms/Instrumentation/ThreadSanitizer.cpp<br>
> index 284a4c2662ec2..5cc5804dcbc59 100644<br>
> --- a/llvm/lib/Transforms/Instrumentation/ThreadSanitizer.cpp<br>
> +++ b/llvm/lib/Transforms/Instrumentation/ThreadSanitizer.cpp<br>
> @@ -483,10 +483,10 @@ void ThreadSanitizer::chooseInstructionsToInstrument(<br>
>  static bool isTsanAtomic(const Instruction *I) {<br>
>    // TODO: Ask TTI whether synchronization scope is between threads.<br>
>    auto SSID = getAtomicSyncScopeID(I);<br>
> -  if (!SSID)<br>
> +  if (!SSID.hasValue())<br>
>      return false;<br>
>    if (isa<LoadInst>(I) || isa<StoreInst>(I))<br>
> -    return *SSID != SyncScope::SingleThread;<br>
> +    return SSID.getValue() != SyncScope::SingleThread;<br>
>    return true;<br>
>  }<br>
><br>
><br>
> diff  --git a/llvm/lib/Transforms/Scalar/ConstantHoisting.cpp b/llvm/lib/Transforms/Scalar/ConstantHoisting.cpp<br>
> index b698503d74300..8a1761505d590 100644<br>
> --- a/llvm/lib/Transforms/Scalar/ConstantHoisting.cpp<br>
> +++ b/llvm/lib/Transforms/Scalar/ConstantHoisting.cpp<br>
> @@ -611,9 +611,9 @@ ConstantHoistingPass::maximizeConstantsInRange(ConstCandVecType::iterator S,<br>
>                                     ConstCand->ConstInt->getValue());<br>
>          if (Diff) {<br>
>            const InstructionCost ImmCosts =<br>
> -              TTI->getIntImmCodeSizeCost(Opcode, OpndIdx, *Diff, Ty);<br>
> +              TTI->getIntImmCodeSizeCost(Opcode, OpndIdx, Diff.getValue(), Ty);<br>
>            Cost -= ImmCosts;<br>
> -          LLVM_DEBUG(dbgs() << "Offset " << *Diff << " "<br>
> +          LLVM_DEBUG(dbgs() << "Offset " << Diff.getValue() << " "<br>
>                              << "has penalty: " << ImmCosts << "\n"<br>
>                              << "Adjusted cost: " << Cost << "\n");<br>
>          }<br>
><br>
> diff  --git a/llvm/lib/Transforms/Scalar/GVN.cpp b/llvm/lib/Transforms/Scalar/GVN.cpp<br>
> index af2b48c953800..783301fe589ea 100644<br>
> --- a/llvm/lib/Transforms/Scalar/GVN.cpp<br>
> +++ b/llvm/lib/Transforms/Scalar/GVN.cpp<br>
> @@ -748,14 +748,14 @@ void GVNPass::printPipeline(<br>
><br>
>    OS << "<";<br>
>    if (Options.AllowPRE != None)<br>
> -    OS << (*Options.AllowPRE ? "" : "no-") << "pre;";<br>
> +    OS << (Options.AllowPRE.getValue() ? "" : "no-") << "pre;";<br>
>    if (Options.AllowLoadPRE != None)<br>
> -    OS << (*Options.AllowLoadPRE ? "" : "no-") << "load-pre;";<br>
> +    OS << (Options.AllowLoadPRE.getValue() ? "" : "no-") << "load-pre;";<br>
>    if (Options.AllowLoadPRESplitBackedge != None)<br>
> -    OS << (*Options.AllowLoadPRESplitBackedge ? "" : "no-")<br>
> +    OS << (Options.AllowLoadPRESplitBackedge.getValue() ? "" : "no-")<br>
>         << "split-backedge-load-pre;";<br>
>    if (Options.AllowMemDep != None)<br>
> -    OS << (*Options.AllowMemDep ? "" : "no-") << "memdep";<br>
> +    OS << (Options.AllowMemDep.getValue() ? "" : "no-") << "memdep";<br>
>    OS << ">";<br>
>  }<br>
><br>
><br>
> diff  --git a/llvm/lib/Transforms/Scalar/InductiveRangeCheckElimination.cpp b/llvm/lib/Transforms/Scalar/InductiveRangeCheckElimination.cpp<br>
> index 94ed288eb152d..0e27c856947ca 100644<br>
> --- a/llvm/lib/Transforms/Scalar/InductiveRangeCheckElimination.cpp<br>
> +++ b/llvm/lib/Transforms/Scalar/InductiveRangeCheckElimination.cpp<br>
> @@ -1427,9 +1427,9 @@ bool LoopConstrainer::run() {<br>
>    // constructor.<br>
>    ClonedLoop PreLoop, PostLoop;<br>
>    bool NeedsPreLoop =<br>
> -      Increasing ? SR.LowLimit.has_value() : SR.HighLimit.has_value();<br>
> +      Increasing ? SR.LowLimit.hasValue() : SR.HighLimit.hasValue();<br>
>    bool NeedsPostLoop =<br>
> -      Increasing ? SR.HighLimit.has_value() : SR.LowLimit.has_value();<br>
> +      Increasing ? SR.HighLimit.hasValue() : SR.LowLimit.hasValue();<br>
><br>
>    Value *ExitPreLoopAt = nullptr;<br>
>    Value *ExitMainLoopAt = nullptr;<br>
> @@ -1708,9 +1708,9 @@ IntersectSignedRange(ScalarEvolution &SE,<br>
>                       const InductiveRangeCheck::Range &R2) {<br>
>    if (R2.isEmpty(SE, /* IsSigned */ true))<br>
>      return None;<br>
> -  if (!R1)<br>
> +  if (!R1.hasValue())<br>
>      return R2;<br>
> -  auto &R1Value = *R1;<br>
> +  auto &R1Value = R1.getValue();<br>
>    // We never return empty ranges from this function, and R1 is supposed to be<br>
>    // a result of intersection. Thus, R1 is never empty.<br>
>    assert(!R1Value.isEmpty(SE, /* IsSigned */ true) &&<br>
> @@ -1737,9 +1737,9 @@ IntersectUnsignedRange(ScalarEvolution &SE,<br>
>                         const InductiveRangeCheck::Range &R2) {<br>
>    if (R2.isEmpty(SE, /* IsSigned */ false))<br>
>      return None;<br>
> -  if (!R1)<br>
> +  if (!R1.hasValue())<br>
>      return R2;<br>
> -  auto &R1Value = *R1;<br>
> +  auto &R1Value = R1.getValue();<br>
>    // We never return empty ranges from this function, and R1 is supposed to be<br>
>    // a result of intersection. Thus, R1 is never empty.<br>
>    assert(!R1Value.isEmpty(SE, /* IsSigned */ false) &&<br>
> @@ -1948,21 +1948,24 @@ bool InductiveRangeCheckElimination::run(<br>
>    for (InductiveRangeCheck &IRC : RangeChecks) {<br>
>      auto Result = IRC.computeSafeIterationSpace(SE, IndVar,<br>
>                                                  LS.IsSignedPredicate);<br>
> -    if (Result) {<br>
> -      auto MaybeSafeIterRange = IntersectRange(SE, SafeIterRange, *Result);<br>
> -      if (MaybeSafeIterRange) {<br>
> -        assert(!MaybeSafeIterRange->isEmpty(SE, LS.IsSignedPredicate) &&<br>
> -               "We should never return empty ranges!");<br>
> +    if (Result.hasValue()) {<br>
> +      auto MaybeSafeIterRange =<br>
> +          IntersectRange(SE, SafeIterRange, Result.getValue());<br>
> +      if (MaybeSafeIterRange.hasValue()) {<br>
> +        assert(<br>
> +            !MaybeSafeIterRange.getValue().isEmpty(SE, LS.IsSignedPredicate) &&<br>
> +            "We should never return empty ranges!");<br>
>          RangeChecksToEliminate.push_back(IRC);<br>
> -        SafeIterRange = *MaybeSafeIterRange;<br>
> +        SafeIterRange = MaybeSafeIterRange.getValue();<br>
>        }<br>
>      }<br>
>    }<br>
><br>
> -  if (!SafeIterRange)<br>
> +  if (!SafeIterRange.hasValue())<br>
>      return false;<br>
><br>
> -  LoopConstrainer LC(*L, LI, LPMAddNewLoop, LS, SE, DT, *SafeIterRange);<br>
> +  LoopConstrainer LC(*L, LI, LPMAddNewLoop, LS, SE, DT,<br>
> +                     SafeIterRange.getValue());<br>
>    bool Changed = LC.run();<br>
><br>
>    if (Changed) {<br>
><br>
> diff  --git a/llvm/lib/Transforms/Scalar/LoopDistribute.cpp b/llvm/lib/Transforms/Scalar/LoopDistribute.cpp<br>
> index f70ab0d50cfea..f606e9b7a4841 100644<br>
> --- a/llvm/lib/Transforms/Scalar/LoopDistribute.cpp<br>
> +++ b/llvm/lib/Transforms/Scalar/LoopDistribute.cpp<br>
> @@ -600,9 +600,9 @@ class InstPartitionContainer {<br>
>          {LLVMLoopDistributeFollowupAll,<br>
>           Part->hasDepCycle() ? LLVMLoopDistributeFollowupSequential<br>
>                               : LLVMLoopDistributeFollowupCoincident});<br>
> -    if (PartitionID) {<br>
> +    if (PartitionID.hasValue()) {<br>
>        Loop *NewLoop = Part->getDistributedLoop();<br>
> -      NewLoop->setLoopID(*PartitionID);<br>
> +      NewLoop->setLoopID(PartitionID.getValue());<br>
>      }<br>
>    }<br>
>  };<br>
> @@ -821,10 +821,12 @@ class LoopDistributeForLoop {<br>
>        // The unversioned loop will not be changed, so we inherit all attributes<br>
>        // from the original loop, but remove the loop distribution metadata to<br>
>        // avoid to distribute it again.<br>
> -      MDNode *UnversionedLoopID = *makeFollowupLoopID(<br>
> -          OrigLoopID,<br>
> -          {LLVMLoopDistributeFollowupAll, LLVMLoopDistributeFollowupFallback},<br>
> -          "llvm.loop.distribute.", true);<br>
> +      MDNode *UnversionedLoopID =<br>
> +          makeFollowupLoopID(OrigLoopID,<br>
> +                             {LLVMLoopDistributeFollowupAll,<br>
> +                              LLVMLoopDistributeFollowupFallback},<br>
> +                             "llvm.loop.distribute.", true)<br>
> +              .getValue();<br>
>        LVer.getNonVersionedLoop()->setLoopID(UnversionedLoopID);<br>
>      }<br>
><br>
><br>
> diff  --git a/llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp b/llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp<br>
> index 4bcf102296619..6d4c6756f04de 100644<br>
> --- a/llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp<br>
> +++ b/llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp<br>
> @@ -1481,9 +1481,9 @@ bool LoopIdiomRecognize::processLoopStoreOfLoopLoad(<br>
>        return Changed;<br>
>      // We cannot allow unaligned ops for unordered load/store, so reject<br>
>      // anything where the alignment isn't at least the element size.<br>
> -    assert((StoreAlign && LoadAlign) &&<br>
> +    assert((StoreAlign.hasValue() && LoadAlign.hasValue()) &&<br>
>             "Expect unordered load/store to have align.");<br>
> -    if (*StoreAlign < StoreSize || *LoadAlign < StoreSize)<br>
> +    if (StoreAlign.getValue() < StoreSize || LoadAlign.getValue() < StoreSize)<br>
>        return Changed;<br>
><br>
>      // If the element.atomic memcpy is not lowered into explicit<br>
> @@ -1497,8 +1497,9 @@ bool LoopIdiomRecognize::processLoopStoreOfLoopLoad(<br>
>      // Note that unordered atomic loads/stores are *required* by the spec to<br>
>      // have an alignment but non-atomic loads/stores may not.<br>
>      NewCall = Builder.CreateElementUnorderedAtomicMemCpy(<br>
> -        StoreBasePtr, *StoreAlign, LoadBasePtr, *LoadAlign, NumBytes, StoreSize,<br>
> -        AATags.TBAA, AATags.TBAAStruct, AATags.Scope, AATags.NoAlias);<br>
> +        StoreBasePtr, StoreAlign.getValue(), LoadBasePtr, LoadAlign.getValue(),<br>
> +        NumBytes, StoreSize, AATags.TBAA, AATags.TBAAStruct, AATags.Scope,<br>
> +        AATags.NoAlias);<br>
>    }<br>
>    NewCall->setDebugLoc(TheStore->getDebugLoc());<br>
><br>
><br>
> diff  --git a/llvm/lib/Transforms/Scalar/LoopRotation.cpp b/llvm/lib/Transforms/Scalar/LoopRotation.cpp<br>
> index d9c33b5f335aa..533c8536c4891 100644<br>
> --- a/llvm/lib/Transforms/Scalar/LoopRotation.cpp<br>
> +++ b/llvm/lib/Transforms/Scalar/LoopRotation.cpp<br>
> @@ -60,8 +60,8 @@ PreservedAnalyses LoopRotatePass::run(Loop &L, LoopAnalysisManager &AM,<br>
>      MSSAU = MemorySSAUpdater(AR.MSSA);<br>
>    bool Changed =<br>
>        LoopRotation(&L, &<a href="http://AR.LI" rel="noreferrer" target="_blank">AR.LI</a>, &AR.TTI, &<a href="http://AR.AC" rel="noreferrer" target="_blank">AR.AC</a>, &AR.DT, &<a href="http://AR.SE" rel="noreferrer" target="_blank">AR.SE</a>,<br>
> -                   MSSAU ? MSSAU.getPointer() : nullptr, SQ, false, Threshold,<br>
> -                   false, PrepareForLTO || PrepareForLTOOption);<br>
> +                   MSSAU.hasValue() ? MSSAU.getPointer() : nullptr, SQ, false,<br>
> +                   Threshold, false, PrepareForLTO || PrepareForLTOOption);<br>
><br>
>    if (!Changed)<br>
>      return PreservedAnalyses::all();<br>
> @@ -131,8 +131,9 @@ class LoopRotateLegacyPass : public LoopPass {<br>
>                          : MaxHeaderSize;<br>
><br>
>      return LoopRotation(L, LI, TTI, AC, &DT, &SE,<br>
> -                        MSSAU ? MSSAU.getPointer() : nullptr, SQ, false,<br>
> -                        Threshold, false, PrepareForLTO || PrepareForLTOOption);<br>
> +                        MSSAU.hasValue() ? MSSAU.getPointer() : nullptr, SQ,<br>
> +                        false, Threshold, false,<br>
> +                        PrepareForLTO || PrepareForLTOOption);<br>
>    }<br>
>  };<br>
>  } // end namespace<br>
><br>
> diff  --git a/llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp b/llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp<br>
> index 51007b9006093..c2c29d9f0ff79 100644<br>
> --- a/llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp<br>
> +++ b/llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp<br>
> @@ -735,9 +735,9 @@ class LoopSimplifyCFGLegacyPass : public LoopPass {<br>
>      if (MSSAA && VerifyMemorySSA)<br>
>        MSSAU->getMemorySSA()->verifyMemorySSA();<br>
>      bool DeleteCurrentLoop = false;<br>
> -    bool Changed =<br>
> -        simplifyLoopCFG(*L, DT, LI, SE, MSSAU ? MSSAU.getPointer() : nullptr,<br>
> -                        DeleteCurrentLoop);<br>
> +    bool Changed = simplifyLoopCFG(<br>
> +        *L, DT, LI, SE, MSSAU.hasValue() ? MSSAU.getPointer() : nullptr,<br>
> +        DeleteCurrentLoop);<br>
>      if (DeleteCurrentLoop)<br>
>        LPM.markLoopAsDeleted(*L);<br>
>      return Changed;<br>
><br>
> diff  --git a/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp b/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp<br>
> index 49c3083bb19a9..9959e408e2e22 100644<br>
> --- a/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp<br>
> +++ b/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp<br>
> @@ -6406,8 +6406,9 @@ static bool SalvageDVI(llvm::Loop *L, ScalarEvolution &SE,<br>
>      // less DWARF ops than an iteration count-based expression.<br>
>      if (Optional<APInt> Offset =<br>
>              SE.computeConstantDifference(DVIRec.SCEVs[i], SCEVInductionVar)) {<br>
> -      if (Offset->getMinSignedBits() <= 64)<br>
> -        SalvageExpr->createOffsetExpr(Offset->getSExtValue(), LSRInductionVar);<br>
> +      if (Offset.getValue().getMinSignedBits() <= 64)<br>
> +        SalvageExpr->createOffsetExpr(Offset.getValue().getSExtValue(),<br>
> +                                      LSRInductionVar);<br>
>      } else if (!SalvageExpr->createIterCountExpr(DVIRec.SCEVs[i], IterCountExpr,<br>
>                                                   SE))<br>
>        return false;<br>
><br>
> diff  --git a/llvm/lib/Transforms/Scalar/LoopUnrollAndJamPass.cpp b/llvm/lib/Transforms/Scalar/LoopUnrollAndJamPass.cpp<br>
> index 8ea8f284c03aa..a33e5cca09b90 100644<br>
> --- a/llvm/lib/Transforms/Scalar/LoopUnrollAndJamPass.cpp<br>
> +++ b/llvm/lib/Transforms/Scalar/LoopUnrollAndJamPass.cpp<br>
> @@ -372,8 +372,8 @@ tryToUnrollAndJamLoop(Loop *L, DominatorTree &DT, LoopInfo *LI,<br>
>    Optional<MDNode *> NewInnerEpilogueLoopID = makeFollowupLoopID(<br>
>        OrigOuterLoopID, {LLVMLoopUnrollAndJamFollowupAll,<br>
>                          LLVMLoopUnrollAndJamFollowupRemainderInner});<br>
> -  if (NewInnerEpilogueLoopID)<br>
> -    SubLoop->setLoopID(*NewInnerEpilogueLoopID);<br>
> +  if (NewInnerEpilogueLoopID.hasValue())<br>
> +    SubLoop->setLoopID(NewInnerEpilogueLoopID.getValue());<br>
><br>
>    // Find trip count and trip multiple<br>
>    BasicBlock *Latch = L->getLoopLatch();<br>
> @@ -402,15 +402,15 @@ tryToUnrollAndJamLoop(Loop *L, DominatorTree &DT, LoopInfo *LI,<br>
>      Optional<MDNode *> NewOuterEpilogueLoopID = makeFollowupLoopID(<br>
>          OrigOuterLoopID, {LLVMLoopUnrollAndJamFollowupAll,<br>
>                            LLVMLoopUnrollAndJamFollowupRemainderOuter});<br>
> -    if (NewOuterEpilogueLoopID)<br>
> -      EpilogueOuterLoop->setLoopID(*NewOuterEpilogueLoopID);<br>
> +    if (NewOuterEpilogueLoopID.hasValue())<br>
> +      EpilogueOuterLoop->setLoopID(NewOuterEpilogueLoopID.getValue());<br>
>    }<br>
><br>
>    Optional<MDNode *> NewInnerLoopID =<br>
>        makeFollowupLoopID(OrigOuterLoopID, {LLVMLoopUnrollAndJamFollowupAll,<br>
>                                             LLVMLoopUnrollAndJamFollowupInner});<br>
> -  if (NewInnerLoopID)<br>
> -    SubLoop->setLoopID(*NewInnerLoopID);<br>
> +  if (NewInnerLoopID.hasValue())<br>
> +    SubLoop->setLoopID(NewInnerLoopID.getValue());<br>
>    else<br>
>      SubLoop->setLoopID(OrigSubLoopID);<br>
><br>
> @@ -418,8 +418,8 @@ tryToUnrollAndJamLoop(Loop *L, DominatorTree &DT, LoopInfo *LI,<br>
>      Optional<MDNode *> NewOuterLoopID = makeFollowupLoopID(<br>
>          OrigOuterLoopID,<br>
>          {LLVMLoopUnrollAndJamFollowupAll, LLVMLoopUnrollAndJamFollowupOuter});<br>
> -    if (NewOuterLoopID) {<br>
> -      L->setLoopID(*NewOuterLoopID);<br>
> +    if (NewOuterLoopID.hasValue()) {<br>
> +      L->setLoopID(NewOuterLoopID.getValue());<br>
><br>
>        // Do not setLoopAlreadyUnrolled if a followup was given.<br>
>        return UnrollResult;<br>
><br>
> diff  --git a/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp b/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp<br>
> index 08f21bed48a38..1969513353008 100644<br>
> --- a/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp<br>
> +++ b/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp<br>
> @@ -253,19 +253,19 @@ TargetTransformInfo::UnrollingPreferences llvm::gatherUnrollingPreferences(<br>
>      UP.MaxIterationsCountToAnalyze = UnrollMaxIterationsCountToAnalyze;<br>
><br>
>    // Apply user values provided by argument<br>
> -  if (UserThreshold) {<br>
> +  if (UserThreshold.hasValue()) {<br>
>      UP.Threshold = *UserThreshold;<br>
>      UP.PartialThreshold = *UserThreshold;<br>
>    }<br>
> -  if (UserCount)<br>
> +  if (UserCount.hasValue())<br>
>      UP.Count = *UserCount;<br>
> -  if (UserAllowPartial)<br>
> +  if (UserAllowPartial.hasValue())<br>
>      UP.Partial = *UserAllowPartial;<br>
> -  if (UserRuntime)<br>
> +  if (UserRuntime.hasValue())<br>
>      UP.Runtime = *UserRuntime;<br>
> -  if (UserUpperBound)<br>
> +  if (UserUpperBound.hasValue())<br>
>      UP.UpperBound = *UserUpperBound;<br>
> -  if (UserFullUnrollMaxCount)<br>
> +  if (UserFullUnrollMaxCount.hasValue())<br>
>      UP.FullUnrollMaxCount = *UserFullUnrollMaxCount;<br>
><br>
>    return UP;<br>
> @@ -1323,16 +1323,16 @@ static LoopUnrollResult tryToUnrollLoop(<br>
>      Optional<MDNode *> RemainderLoopID =<br>
>          makeFollowupLoopID(OrigLoopID, {LLVMLoopUnrollFollowupAll,<br>
>                                          LLVMLoopUnrollFollowupRemainder});<br>
> -    if (RemainderLoopID)<br>
> -      RemainderLoop->setLoopID(*RemainderLoopID);<br>
> +    if (RemainderLoopID.hasValue())<br>
> +      RemainderLoop->setLoopID(RemainderLoopID.getValue());<br>
>    }<br>
><br>
>    if (UnrollResult != LoopUnrollResult::FullyUnrolled) {<br>
>      Optional<MDNode *> NewLoopID =<br>
>          makeFollowupLoopID(OrigLoopID, {LLVMLoopUnrollFollowupAll,<br>
>                                          LLVMLoopUnrollFollowupUnrolled});<br>
> -    if (NewLoopID) {<br>
> -      L->setLoopID(*NewLoopID);<br>
> +    if (NewLoopID.hasValue()) {<br>
> +      L->setLoopID(NewLoopID.getValue());<br>
><br>
>        // Do not setLoopAlreadyUnrolled if loop attributes have been specified<br>
>        // explicitly.<br>
> @@ -1645,15 +1645,15 @@ void LoopUnrollPass::printPipeline(<br>
>        OS, MapClassName2PassName);<br>
>    OS << "<";<br>
>    if (UnrollOpts.AllowPartial != None)<br>
> -    OS << (*UnrollOpts.AllowPartial ? "" : "no-") << "partial;";<br>
> +    OS << (UnrollOpts.AllowPartial.getValue() ? "" : "no-") << "partial;";<br>
>    if (UnrollOpts.AllowPeeling != None)<br>
> -    OS << (*UnrollOpts.AllowPeeling ? "" : "no-") << "peeling;";<br>
> +    OS << (UnrollOpts.AllowPeeling.getValue() ? "" : "no-") << "peeling;";<br>
>    if (UnrollOpts.AllowRuntime != None)<br>
> -    OS << (*UnrollOpts.AllowRuntime ? "" : "no-") << "runtime;";<br>
> +    OS << (UnrollOpts.AllowRuntime.getValue() ? "" : "no-") << "runtime;";<br>
>    if (UnrollOpts.AllowUpperBound != None)<br>
> -    OS << (*UnrollOpts.AllowUpperBound ? "" : "no-") << "upperbound;";<br>
> +    OS << (UnrollOpts.AllowUpperBound.getValue() ? "" : "no-") << "upperbound;";<br>
>    if (UnrollOpts.AllowProfileBasedPeeling != None)<br>
> -    OS << (*UnrollOpts.AllowProfileBasedPeeling ? "" : "no-")<br>
> +    OS << (UnrollOpts.AllowProfileBasedPeeling.getValue() ? "" : "no-")<br>
>         << "profile-peeling;";<br>
>    if (UnrollOpts.FullUnrollMaxCount != None)<br>
>      OS << "full-unroll-max=" << UnrollOpts.FullUnrollMaxCount << ";";<br>
><br>
> diff  --git a/llvm/lib/Transforms/Scalar/LowerConstantIntrinsics.cpp b/llvm/lib/Transforms/Scalar/LowerConstantIntrinsics.cpp<br>
> index 47493b54a5274..a886563a1c252 100644<br>
> --- a/llvm/lib/Transforms/Scalar/LowerConstantIntrinsics.cpp<br>
> +++ b/llvm/lib/Transforms/Scalar/LowerConstantIntrinsics.cpp<br>
> @@ -143,10 +143,10 @@ static bool lowerConstantIntrinsics(Function &F, const TargetLibraryInfo &TLI,<br>
>        break;<br>
>      }<br>
>      HasDeadBlocks |= replaceConditionalBranchesOnConstant(<br>
> -        II, NewValue, DTU ? DTU.getPointer() : nullptr);<br>
> +        II, NewValue, DTU.hasValue() ? DTU.getPointer() : nullptr);<br>
>    }<br>
>    if (HasDeadBlocks)<br>
> -    removeUnreachableBlocks(F, DTU ? DTU.getPointer() : nullptr);<br>
> +    removeUnreachableBlocks(F, DTU.hasValue() ? DTU.getPointer() : nullptr);<br>
>    return !Worklist.empty();<br>
>  }<br>
><br>
><br>
> diff  --git a/llvm/lib/Transforms/Utils/CodeExtractor.cpp b/llvm/lib/Transforms/Utils/CodeExtractor.cpp<br>
> index 82403864c1143..c4ef979790be3 100644<br>
> --- a/llvm/lib/Transforms/Utils/CodeExtractor.cpp<br>
> +++ b/llvm/lib/Transforms/Utils/CodeExtractor.cpp<br>
> @@ -1775,9 +1775,9 @@ CodeExtractor::extractCodeRegion(const CodeExtractorAnalysisCache &CEAC,<br>
>    // Update the entry count of the function.<br>
>    if (BFI) {<br>
>      auto Count = BFI->getProfileCountFromFreq(EntryFreq.getFrequency());<br>
> -    if (Count)<br>
> +    if (Count.hasValue())<br>
>        newFunction->setEntryCount(<br>
> -          ProfileCount(*Count, Function::PCT_Real)); // FIXME<br>
> +          ProfileCount(Count.getValue(), Function::PCT_Real)); // FIXME<br>
>      BFI->setBlockFreq(codeReplacer, EntryFreq.getFrequency());<br>
>    }<br>
><br>
><br>
> diff  --git a/llvm/lib/Transforms/Utils/LoopPeel.cpp b/llvm/lib/Transforms/Utils/LoopPeel.cpp<br>
> index f093fea19c4d4..7f0852cef8ec9 100644<br>
> --- a/llvm/lib/Transforms/Utils/LoopPeel.cpp<br>
> +++ b/llvm/lib/Transforms/Utils/LoopPeel.cpp<br>
> @@ -719,9 +719,9 @@ TargetTransformInfo::PeelingPreferences llvm::gatherPeelingPreferences(<br>
>    }<br>
><br>
>    // User specifed values provided by argument.<br>
> -  if (UserAllowPeeling)<br>
> +  if (UserAllowPeeling.hasValue())<br>
>      PP.AllowPeeling = *UserAllowPeeling;<br>
> -  if (UserAllowProfileBasedPeeling)<br>
> +  if (UserAllowProfileBasedPeeling.hasValue())<br>
>      PP.PeelProfiledIterations = *UserAllowProfileBasedPeeling;<br>
><br>
>    return PP;<br>
><br>
> diff  --git a/llvm/lib/Transforms/Utils/LoopUnrollRuntime.cpp b/llvm/lib/Transforms/Utils/LoopUnrollRuntime.cpp<br>
> index 295ae03eceae2..df24af5c6d609 100644<br>
> --- a/llvm/lib/Transforms/Utils/LoopUnrollRuntime.cpp<br>
> +++ b/llvm/lib/Transforms/Utils/LoopUnrollRuntime.cpp<br>
> @@ -397,8 +397,8 @@ CloneLoopBlocks(Loop *L, Value *NewIter, const bool UseEpilogRemainder,<br>
><br>
>    Optional<MDNode *> NewLoopID = makeFollowupLoopID(<br>
>        LoopID, {LLVMLoopUnrollFollowupAll, LLVMLoopUnrollFollowupRemainder});<br>
> -  if (NewLoopID) {<br>
> -    NewLoop->setLoopID(*NewLoopID);<br>
> +  if (NewLoopID.hasValue()) {<br>
> +    NewLoop->setLoopID(NewLoopID.getValue());<br>
><br>
>      // Do not setLoopAlreadyUnrolled if loop attributes have been defined<br>
>      // explicitly.<br>
><br>
> diff  --git a/llvm/lib/Transforms/Utils/LoopUtils.cpp b/llvm/lib/Transforms/Utils/LoopUtils.cpp<br>
> index 7dc94d837896b..b7656f43490bd 100644<br>
> --- a/llvm/lib/Transforms/Utils/LoopUtils.cpp<br>
> +++ b/llvm/lib/Transforms/Utils/LoopUtils.cpp<br>
> @@ -358,8 +358,8 @@ TransformationMode llvm::hasUnrollTransformation(const Loop *L) {<br>
><br>
>    Optional<int> Count =<br>
>        getOptionalIntLoopAttribute(L, "llvm.loop.unroll.count");<br>
> -  if (Count)<br>
> -    return *Count == 1 ? TM_SuppressedByUser : TM_ForcedByUser;<br>
> +  if (Count.hasValue())<br>
> +    return Count.getValue() == 1 ? TM_SuppressedByUser : TM_ForcedByUser;<br>
><br>
>    if (getBooleanLoopAttribute(L, "llvm.loop.unroll.enable"))<br>
>      return TM_ForcedByUser;<br>
> @@ -379,8 +379,8 @@ TransformationMode llvm::hasUnrollAndJamTransformation(const Loop *L) {<br>
><br>
>    Optional<int> Count =<br>
>        getOptionalIntLoopAttribute(L, "llvm.loop.unroll_and_jam.count");<br>
> -  if (Count)<br>
> -    return *Count == 1 ? TM_SuppressedByUser : TM_ForcedByUser;<br>
> +  if (Count.hasValue())<br>
> +    return Count.getValue() == 1 ? TM_SuppressedByUser : TM_ForcedByUser;<br>
><br>
>    if (getBooleanLoopAttribute(L, "llvm.loop.unroll_and_jam.enable"))<br>
>      return TM_ForcedByUser;<br>
><br>
> diff  --git a/llvm/lib/Transforms/Utils/MisExpect.cpp b/llvm/lib/Transforms/Utils/MisExpect.cpp<br>
> index a7acd8dee2ac4..5ace0c63a7395 100644<br>
> --- a/llvm/lib/Transforms/Utils/MisExpect.cpp<br>
> +++ b/llvm/lib/Transforms/Utils/MisExpect.cpp<br>
> @@ -219,18 +219,18 @@ void verifyMisExpect(Instruction &I, ArrayRef<uint32_t> RealWeights,<br>
>  void checkBackendInstrumentation(Instruction &I,<br>
>                                   const ArrayRef<uint32_t> RealWeights) {<br>
>    auto ExpectedWeightsOpt = extractWeights(&I, I.getContext());<br>
> -  if (!ExpectedWeightsOpt)<br>
> +  if (!ExpectedWeightsOpt.hasValue())<br>
>      return;<br>
> -  auto ExpectedWeights = *ExpectedWeightsOpt;<br>
> +  auto ExpectedWeights = ExpectedWeightsOpt.getValue();<br>
>    verifyMisExpect(I, RealWeights, ExpectedWeights);<br>
>  }<br>
><br>
>  void checkFrontendInstrumentation(Instruction &I,<br>
>                                    const ArrayRef<uint32_t> ExpectedWeights) {<br>
>    auto RealWeightsOpt = extractWeights(&I, I.getContext());<br>
> -  if (!RealWeightsOpt)<br>
> +  if (!RealWeightsOpt.hasValue())<br>
>      return;<br>
> -  auto RealWeights = *RealWeightsOpt;<br>
> +  auto RealWeights = RealWeightsOpt.getValue();<br>
>    verifyMisExpect(I, RealWeights, ExpectedWeights);<br>
>  }<br>
><br>
><br>
> diff  --git a/llvm/lib/Transforms/Utils/ModuleUtils.cpp b/llvm/lib/Transforms/Utils/ModuleUtils.cpp<br>
> index 694837ae63b0e..7388a4bd42dbe 100644<br>
> --- a/llvm/lib/Transforms/Utils/ModuleUtils.cpp<br>
> +++ b/llvm/lib/Transforms/Utils/ModuleUtils.cpp<br>
> @@ -254,8 +254,8 @@ void VFABI::setVectorVariantNames(CallInst *CI,<br>
>    for (const std::string &VariantMapping : VariantMappings) {<br>
>      LLVM_DEBUG(dbgs() << "VFABI: adding mapping '" << VariantMapping << "'\n");<br>
>      Optional<VFInfo> VI = VFABI::tryDemangleForVFABI(VariantMapping, *M);<br>
> -    assert(VI && "Cannot add an invalid VFABI name.");<br>
> -    assert(M->getNamedValue(VI->VectorName) &&<br>
> +    assert(VI.hasValue() && "Cannot add an invalid VFABI name.");<br>
> +    assert(M->getNamedValue(VI.getValue().VectorName) &&<br>
>             "Cannot add variant to attribute: "<br>
>             "vector function declaration is missing.");<br>
>    }<br>
><br>
> diff  --git a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp<br>
> index 8ab7fc0d6b973..5e7a762ffac97 100644<br>
> --- a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp<br>
> +++ b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp<br>
> @@ -4877,8 +4877,8 @@ LoopVectorizationCostModel::getMaxLegalScalableVF(unsigned MaxSafeElements) {<br>
>    if (!MaxVScale && TheFunction->hasFnAttribute(Attribute::VScaleRange))<br>
>      MaxVScale =<br>
>          TheFunction->getFnAttribute(Attribute::VScaleRange).getVScaleRangeMax();<br>
> -  MaxScalableVF =<br>
> -      ElementCount::getScalable(MaxVScale ? (MaxSafeElements / *MaxVScale) : 0);<br>
> +  MaxScalableVF = ElementCount::getScalable(<br>
> +      MaxVScale ? (MaxSafeElements / MaxVScale.getValue()) : 0);<br>
>    if (!MaxScalableVF)<br>
>      reportVectorizationInfo(<br>
>          "Max legal vector width too small, scalable vectorization "<br>
> @@ -5273,9 +5273,9 @@ bool LoopVectorizationCostModel::isMoreProfitable(<br>
>    unsigned EstimatedWidthB = B.Width.getKnownMinValue();<br>
>    if (Optional<unsigned> VScale = getVScaleForTuning()) {<br>
>      if (A.Width.isScalable())<br>
> -      EstimatedWidthA *= *VScale;<br>
> +      EstimatedWidthA *= VScale.getValue();<br>
>      if (B.Width.isScalable())<br>
> -      EstimatedWidthB *= *VScale;<br>
> +      EstimatedWidthB *= VScale.getValue();<br>
>    }<br>
><br>
>    // Assume vscale may be larger than 1 (or the value being tuned for),<br>
> @@ -7612,8 +7612,8 @@ void LoopVectorizationPlanner::executePlan(ElementCount BestVF, unsigned BestUF,<br>
>    VPBasicBlock *HeaderVPBB =<br>
>        BestVPlan.getVectorLoopRegion()->getEntryBasicBlock();<br>
>    Loop *L = LI->getLoopFor(State.CFG.VPBB2IRBB[HeaderVPBB]);<br>
> -  if (VectorizedLoopID)<br>
> -    L->setLoopID(*VectorizedLoopID);<br>
> +  if (VectorizedLoopID.hasValue())<br>
> +    L->setLoopID(VectorizedLoopID.getValue());<br>
>    else {<br>
>      // Keep all loop hints from the original loop on the vector loop (we'll<br>
>      // replace the vectorizer-specific hints below).<br>
> @@ -10622,8 +10622,8 @@ bool LoopVectorizePass::processLoop(Loop *L) {<br>
>    Optional<MDNode *> RemainderLoopID =<br>
>        makeFollowupLoopID(OrigLoopID, {LLVMLoopVectorizeFollowupAll,<br>
>                                        LLVMLoopVectorizeFollowupEpilogue});<br>
> -  if (RemainderLoopID) {<br>
> -    L->setLoopID(*RemainderLoopID);<br>
> +  if (RemainderLoopID.hasValue()) {<br>
> +    L->setLoopID(RemainderLoopID.getValue());<br>
>    } else {<br>
>      if (DisableRuntimeUnroll)<br>
>        AddRuntimeUnrollDisableMetaData(L);<br>
><br>
> diff  --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp<br>
> index a9bccbc290140..d7769efb0e464 100644<br>
> --- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp<br>
> +++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp<br>
> @@ -2636,8 +2636,8 @@ class BoUpSLP {<br>
>      // First check if the result is already in the cache.<br>
>      AliasCacheKey key = std::make_pair(Inst1, Inst2);<br>
>      Optional<bool> &result = AliasCache[key];<br>
> -    if (result) {<br>
> -      return *result;<br>
> +    if (result.hasValue()) {<br>
> +      return result.getValue();<br>
>      }<br>
>      bool aliased = true;<br>
>      if (Loc1.Ptr && isSimple(Inst1))<br>
><br>
> diff  --git a/llvm/lib/WindowsDriver/MSVCPaths.cpp b/llvm/lib/WindowsDriver/MSVCPaths.cpp<br>
> index 0661ed7c6ae12..46a4426b38b4d 100644<br>
> --- a/llvm/lib/WindowsDriver/MSVCPaths.cpp<br>
> +++ b/llvm/lib/WindowsDriver/MSVCPaths.cpp<br>
> @@ -98,14 +98,14 @@ static bool getWindowsSDKDirViaCommandLine(<br>
>      llvm::Optional<llvm::StringRef> WinSdkVersion,<br>
>      llvm::Optional<llvm::StringRef> WinSysRoot, std::string &Path, int &Major,<br>
>      std::string &Version) {<br>
> -  if (WinSdkDir || WinSysRoot) {<br>
> +  if (WinSdkDir.hasValue() || WinSysRoot.hasValue()) {<br>
>      // Don't validate the input; trust the value supplied by the user.<br>
>      // The motivation is to prevent unnecessary file and registry access.<br>
>      llvm::VersionTuple SDKVersion;<br>
> -    if (WinSdkVersion)<br>
> +    if (WinSdkVersion.hasValue())<br>
>        SDKVersion.tryParse(*WinSdkVersion);<br>
><br>
> -    if (WinSysRoot) {<br>
> +    if (WinSysRoot.hasValue()) {<br>
>        llvm::SmallString<128> SDKPath(*WinSysRoot);<br>
>        llvm::sys::path::append(SDKPath, "Windows Kits");<br>
>        if (!SDKVersion.empty())<br>
> @@ -479,12 +479,12 @@ bool findVCToolChainViaCommandLine(vfs::FileSystem &VFS,<br>
>                                     std::string &Path, ToolsetLayout &VSLayout) {<br>
>    // Don't validate the input; trust the value supplied by the user.<br>
>    // The primary motivation is to prevent unnecessary file and registry access.<br>
> -  if (VCToolsDir || WinSysRoot) {<br>
> -    if (WinSysRoot) {<br>
> +  if (VCToolsDir.hasValue() || WinSysRoot.hasValue()) {<br>
> +    if (WinSysRoot.hasValue()) {<br>
>        SmallString<128> ToolsPath(*WinSysRoot);<br>
>        sys::path::append(ToolsPath, "VC", "Tools", "MSVC");<br>
>        std::string ToolsVersion;<br>
> -      if (VCToolsVersion)<br>
> +      if (VCToolsVersion.hasValue())<br>
>          ToolsVersion = VCToolsVersion->str();<br>
>        else<br>
>          ToolsVersion = getHighestNumericTupleInDirectory(VFS, ToolsPath);<br>
><br>
> diff  --git a/llvm/tools/lli/lli.cpp b/llvm/tools/lli/lli.cpp<br>
> index 2bc7391bcbcad..f2e3886bdf077 100644<br>
> --- a/llvm/tools/lli/lli.cpp<br>
> +++ b/llvm/tools/lli/lli.cpp<br>
> @@ -536,9 +536,9 @@ int main(int argc, char **argv, char * const *envp) {<br>
>    builder.setMCPU(codegen::getCPUStr());<br>
>    builder.setMAttrs(codegen::getFeatureList());<br>
>    if (auto RM = codegen::getExplicitRelocModel())<br>
> -    builder.setRelocationModel(RM.value());<br>
> +    builder.setRelocationModel(RM.getValue());<br>
>    if (auto CM = codegen::getExplicitCodeModel())<br>
> -    builder.setCodeModel(CM.value());<br>
> +    builder.setCodeModel(CM.getValue());<br>
>    builder.setErrorStr(&ErrorMsg);<br>
>    builder.setEngineKind(ForceInterpreter<br>
>                          ? EngineKind::Interpreter<br>
><br>
> diff  --git a/llvm/tools/llvm-cov/CoverageExporterJson.cpp b/llvm/tools/llvm-cov/CoverageExporterJson.cpp<br>
> index 2e161f53b10d5..d341abe8dfc8d 100644<br>
> --- a/llvm/tools/llvm-cov/CoverageExporterJson.cpp<br>
> +++ b/llvm/tools/llvm-cov/CoverageExporterJson.cpp<br>
> @@ -291,8 +291,8 @@ void CoverageExporterJson::renderRoot(ArrayRef<std::string> SourceFiles) {<br>
>      const json::Object *ObjB = B.getAsObject();<br>
>      assert(ObjA != nullptr && "Value A was not an Object");<br>
>      assert(ObjB != nullptr && "Value B was not an Object");<br>
> -    const StringRef FilenameA = ObjA->getString("filename").value();<br>
> -    const StringRef FilenameB = ObjB->getString("filename").value();<br>
> +    const StringRef FilenameA = ObjA->getString("filename").getValue();<br>
> +    const StringRef FilenameB = ObjB->getString("filename").getValue();<br>
>      return FilenameA.compare(FilenameB) < 0;<br>
>    });<br>
>    auto Export = json::Object(<br>
><br>
> diff  --git a/llvm/tools/llvm-cov/SourceCoverageViewHTML.cpp b/llvm/tools/llvm-cov/SourceCoverageViewHTML.cpp<br>
> index 46782c9b3c9a3..f38eb00dc50f5 100644<br>
> --- a/llvm/tools/llvm-cov/SourceCoverageViewHTML.cpp<br>
> +++ b/llvm/tools/llvm-cov/SourceCoverageViewHTML.cpp<br>
> @@ -561,12 +561,12 @@ void SourceCoverageViewHTML::renderLine(raw_ostream &OS, LineRef L,<br>
>      else<br>
>        Color = None;<br>
><br>
> -    if (Color)<br>
> +    if (Color.hasValue())<br>
>        Snippets[I + 1] = Highlight(Snippets[I + 1], CurSeg->Col,<br>
>                                    CurSeg->Col + Snippets[I + 1].size());<br>
>    }<br>
><br>
> -  if (Color && Segments.empty())<br>
> +  if (Color.hasValue() && Segments.empty())<br>
>      Snippets.back() = Highlight(Snippets.back(), 1, 1 + Snippets.back().size());<br>
><br>
>    if (getOptions().Debug) {<br>
><br>
> diff  --git a/llvm/tools/llvm-exegesis/lib/MCInstrDescView.cpp b/llvm/tools/llvm-exegesis/lib/MCInstrDescView.cpp<br>
> index 0ad664590957c..049cc68b4fb97 100644<br>
> --- a/llvm/tools/llvm-exegesis/lib/MCInstrDescView.cpp<br>
> +++ b/llvm/tools/llvm-exegesis/lib/MCInstrDescView.cpp<br>
> @@ -47,9 +47,9 @@ bool Operand::isUse() const { return !IsDef; }<br>
><br>
>  bool Operand::isReg() const { return Tracker; }<br>
><br>
> -bool Operand::isTied() const { return TiedToIndex.has_value(); }<br>
> +bool Operand::isTied() const { return TiedToIndex.hasValue(); }<br>
><br>
> -bool Operand::isVariable() const { return VariableIndex.has_value(); }<br>
> +bool Operand::isVariable() const { return VariableIndex.hasValue(); }<br>
><br>
>  bool Operand::isMemory() const {<br>
>    return isExplicit() &&<br>
><br>
> diff  --git a/llvm/tools/llvm-ifs/llvm-ifs.cpp b/llvm/tools/llvm-ifs/llvm-ifs.cpp<br>
> index 6909bd1c74d61..f9b6a8c012235 100644<br>
> --- a/llvm/tools/llvm-ifs/llvm-ifs.cpp<br>
> +++ b/llvm/tools/llvm-ifs/llvm-ifs.cpp<br>
> @@ -533,33 +533,34 @@ int main(int argc, char *argv[]) {<br>
>              << "Triple should be defined when output format is TBD";<br>
>          return -1;<br>
>        }<br>
> -      return writeTbdStub(llvm::Triple(Stub.Target.Triple.value()),<br>
> +      return writeTbdStub(llvm::Triple(Stub.Target.Triple.getValue()),<br>
>                            Stub.Symbols, "TBD", Out);<br>
>      }<br>
>      case FileFormat::IFS: {<br>
>        Stub.IfsVersion = IfsVersionCurrent;<br>
> -      if (Config.InputFormat.value() == FileFormat::ELF &&<br>
> +      if (Config.InputFormat.getValue() == FileFormat::ELF &&<br>
>            Config.HintIfsTarget) {<br>
>          std::error_code HintEC(1, std::generic_category());<br>
>          IFSTarget HintTarget = parseTriple(*Config.HintIfsTarget);<br>
> -        if (Stub.Target.Arch.value() != HintTarget.Arch.value())<br>
> +        if (Stub.Target.Arch.getValue() != HintTarget.Arch.getValue())<br>
>            fatalError(make_error<StringError>(<br>
>                "Triple hint does not match the actual architecture", HintEC));<br>
> -        if (Stub.Target.Endianness.value() != HintTarget.Endianness.value())<br>
> +        if (Stub.Target.Endianness.getValue() !=<br>
> +            HintTarget.Endianness.getValue())<br>
>            fatalError(make_error<StringError>(<br>
>                "Triple hint does not match the actual endianness", HintEC));<br>
> -        if (Stub.Target.BitWidth.value() != HintTarget.BitWidth.value())<br>
> +        if (Stub.Target.BitWidth.getValue() != HintTarget.BitWidth.getValue())<br>
>            fatalError(make_error<StringError>(<br>
>                "Triple hint does not match the actual bit width", HintEC));<br>
><br>
>          stripIFSTarget(Stub, true, false, false, false);<br>
> -        Stub.Target.Triple = Config.HintIfsTarget.value();<br>
> +        Stub.Target.Triple = Config.HintIfsTarget.getValue();<br>
>        } else {<br>
>          stripIFSTarget(Stub, Config.StripIfsTarget, Config.StripIfsArch,<br>
>                         Config.StripIfsEndianness, Config.StripIfsBitwidth);<br>
>        }<br>
>        Error IFSWriteError =<br>
> -          writeIFS(Config.Output.value(), Stub, Config.WriteIfChanged);<br>
> +          writeIFS(Config.Output.getValue(), Stub, Config.WriteIfChanged);<br>
>        if (IFSWriteError)<br>
>          fatalError(std::move(IFSWriteError));<br>
>        break;<br>
> @@ -588,28 +589,29 @@ int main(int argc, char *argv[]) {<br>
>      }<br>
>      if (Config.OutputIfs) {<br>
>        Stub.IfsVersion = IfsVersionCurrent;<br>
> -      if (Config.InputFormat.value() == FileFormat::ELF &&<br>
> +      if (Config.InputFormat.getValue() == FileFormat::ELF &&<br>
>            Config.HintIfsTarget) {<br>
>          std::error_code HintEC(1, std::generic_category());<br>
>          IFSTarget HintTarget = parseTriple(*Config.HintIfsTarget);<br>
> -        if (Stub.Target.Arch.value() != HintTarget.Arch.value())<br>
> +        if (Stub.Target.Arch.getValue() != HintTarget.Arch.getValue())<br>
>            fatalError(make_error<StringError>(<br>
>                "Triple hint does not match the actual architecture", HintEC));<br>
> -        if (Stub.Target.Endianness.value() != HintTarget.Endianness.value())<br>
> +        if (Stub.Target.Endianness.getValue() !=<br>
> +            HintTarget.Endianness.getValue())<br>
>            fatalError(make_error<StringError>(<br>
>                "Triple hint does not match the actual endianness", HintEC));<br>
> -        if (Stub.Target.BitWidth.value() != HintTarget.BitWidth.value())<br>
> +        if (Stub.Target.BitWidth.getValue() != HintTarget.BitWidth.getValue())<br>
>            fatalError(make_error<StringError>(<br>
>                "Triple hint does not match the actual bit width", HintEC));<br>
><br>
>          stripIFSTarget(Stub, true, false, false, false);<br>
> -        Stub.Target.Triple = Config.HintIfsTarget.value();<br>
> +        Stub.Target.Triple = Config.HintIfsTarget.getValue();<br>
>        } else {<br>
>          stripIFSTarget(Stub, Config.StripIfsTarget, Config.StripIfsArch,<br>
>                         Config.StripIfsEndianness, Config.StripIfsBitwidth);<br>
>        }<br>
>        Error IFSWriteError =<br>
> -          writeIFS(Config.OutputIfs.value(), Stub, Config.WriteIfChanged);<br>
> +          writeIFS(Config.OutputIfs.getValue(), Stub, Config.WriteIfChanged);<br>
>        if (IFSWriteError)<br>
>          fatalError(std::move(IFSWriteError));<br>
>      }<br>
> @@ -626,8 +628,8 @@ int main(int argc, char *argv[]) {<br>
>              << "Triple should be defined when output format is TBD";<br>
>          return -1;<br>
>        }<br>
> -      return writeTbdStub(llvm::Triple(*Stub.Target.Triple), Stub.Symbols,<br>
> -                          "TBD", Out);<br>
> +      return writeTbdStub(llvm::Triple(Stub.Target.Triple.getValue()),<br>
> +                          Stub.Symbols, "TBD", Out);<br>
>      }<br>
>    }<br>
>    return 0;<br>
><br>
> diff  --git a/llvm/tools/llvm-mca/Views/InstructionInfoView.cpp b/llvm/tools/llvm-mca/Views/InstructionInfoView.cpp<br>
> index d3f9738b63234..28915e5a2ae53 100644<br>
> --- a/llvm/tools/llvm-mca/Views/InstructionInfoView.cpp<br>
> +++ b/llvm/tools/llvm-mca/Views/InstructionInfoView.cpp<br>
> @@ -70,8 +70,8 @@ void InstructionInfoView::printView(raw_ostream &OS) const {<br>
>      else if (IIVDEntry.Latency < 100)<br>
>        TempStream << ' ';<br>
><br>
> -    if (IIVDEntry.RThroughput) {<br>
> -      double RT = IIVDEntry.RThroughput.value();<br>
> +    if (IIVDEntry.RThroughput.hasValue()) {<br>
> +      double RT = IIVDEntry.RThroughput.getValue();<br>
>        TempStream << format("%.2f", RT) << ' ';<br>
>        if (RT < 10.0)<br>
>          TempStream << "  ";<br>
><br>
> diff  --git a/llvm/tools/llvm-objdump/XCOFFDump.cpp b/llvm/tools/llvm-objdump/XCOFFDump.cpp<br>
> index befc9c04fc17e..159741bebb67c 100644<br>
> --- a/llvm/tools/llvm-objdump/XCOFFDump.cpp<br>
> +++ b/llvm/tools/llvm-objdump/XCOFFDump.cpp<br>
> @@ -97,8 +97,8 @@ std::string objdump::getXCOFFSymbolDescription(const SymbolInfoTy &SymbolInfo,<br>
>    std::string Result;<br>
>    // Dummy symbols have no symbol index.<br>
>    if (SymbolInfo.XCOFFSymInfo.Index)<br>
> -    Result = ("(idx: " + Twine(SymbolInfo.XCOFFSymInfo.Index.value()) + ") " +<br>
> -              SymbolName)<br>
> +    Result = ("(idx: " + Twine(SymbolInfo.XCOFFSymInfo.Index.getValue()) +<br>
> +              ") " + SymbolName)<br>
>                   .str();<br>
>    else<br>
>      Result.append(SymbolName.begin(), SymbolName.end());<br>
><br>
> diff  --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp<br>
> index e95e7453ab3d8..42c38207a30e3 100644<br>
> --- a/llvm/tools/llvm-objdump/llvm-objdump.cpp<br>
> +++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp<br>
> @@ -1408,8 +1408,8 @@ static void disassembleObject(const Target *TheTarget, const ObjectFile *Obj,<br>
>        // Right now, most targets return None i.e ignore to treat a symbol<br>
>        // separately. But WebAssembly decodes preludes for some symbols.<br>
>        //<br>
> -      if (Status) {<br>
> -        if (*Status == MCDisassembler::Fail) {<br>
> +      if (Status.hasValue()) {<br>
> +        if (Status.getValue() == MCDisassembler::Fail) {<br>
>            outs() << "// Error in decoding " << SymbolName<br>
>                   << " : Decoding failed region as bytes.\n";<br>
>            for (uint64_t I = 0; I < Size; ++I) {<br>
> @@ -2139,8 +2139,8 @@ void objdump::printSymbol(const ObjectFile *O, const SymbolRef &Symbol,<br>
>              SymName = demangle(SymName);<br>
><br>
>            if (SymbolDescription)<br>
> -            SymName = getXCOFFSymbolDescription(createSymbolInfo(O, *SymRef),<br>
> -                                                SymName);<br>
> +            SymName = getXCOFFSymbolDescription(<br>
> +                createSymbolInfo(O, SymRef.getValue()), SymName);<br>
><br>
>            outs() << ' ' << SymName;<br>
>            outs() << ") ";<br>
> @@ -2247,8 +2247,8 @@ static void printRawClangAST(const ObjectFile *Obj) {<br>
>    if (!ClangASTSection)<br>
>      return;<br>
><br>
> -  StringRef ClangASTContents =<br>
> -      unwrapOrError(ClangASTSection->getContents(), Obj->getFileName());<br>
> +  StringRef ClangASTContents = unwrapOrError(<br>
> +      ClangASTSection.getValue().getContents(), Obj->getFileName());<br>
>    outs().write(ClangASTContents.data(), ClangASTContents.size());<br>
>  }<br>
><br>
><br>
> diff  --git a/llvm/tools/llvm-profdata/llvm-profdata.cpp b/llvm/tools/llvm-profdata/llvm-profdata.cpp<br>
> index 9c6586483ef03..11387ac2882cc 100644<br>
> --- a/llvm/tools/llvm-profdata/llvm-profdata.cpp<br>
> +++ b/llvm/tools/llvm-profdata/llvm-profdata.cpp<br>
> @@ -777,12 +777,12 @@ mergeSampleProfile(const WeightedFileVector &Inputs, SymbolRemapper *Remapper,<br>
>      }<br>
><br>
>      SampleProfileMap &Profiles = Reader->getProfiles();<br>
> -    if (ProfileIsProbeBased &&<br>
> +    if (ProfileIsProbeBased.hasValue() &&<br>
>          ProfileIsProbeBased != FunctionSamples::ProfileIsProbeBased)<br>
>        exitWithError(<br>
>            "cannot merge probe-based profile with non-probe-based profile");<br>
>      ProfileIsProbeBased = FunctionSamples::ProfileIsProbeBased;<br>
> -    if (ProfileIsCS && ProfileIsCS != FunctionSamples::ProfileIsCS)<br>
> +    if (ProfileIsCS.hasValue() && ProfileIsCS != FunctionSamples::ProfileIsCS)<br>
>        exitWithError("cannot merge CS profile with non-CS profile");<br>
>      ProfileIsCS = FunctionSamples::ProfileIsCS;<br>
>      for (SampleProfileMap::iterator I = Profiles.begin(), E = Profiles.end();<br>
><br>
> diff  --git a/llvm/tools/llvm-profgen/ProfiledBinary.cpp b/llvm/tools/llvm-profgen/ProfiledBinary.cpp<br>
> index aaf7a007a82ed..adf7770f5cdbd 100644<br>
> --- a/llvm/tools/llvm-profgen/ProfiledBinary.cpp<br>
> +++ b/llvm/tools/llvm-profgen/ProfiledBinary.cpp<br>
> @@ -100,25 +100,26 @@ BinarySizeContextTracker::getFuncSizeForContext(const SampleContext &Context) {<br>
>      PrevNode = CurrNode;<br>
>      CurrNode =<br>
>          CurrNode->getChildContext(ChildFrame.Location, ChildFrame.FuncName);<br>
> -    if (CurrNode && CurrNode->getFunctionSize())<br>
> -      Size = CurrNode->getFunctionSize().value();<br>
> +    if (CurrNode && CurrNode->getFunctionSize().hasValue())<br>
> +      Size = CurrNode->getFunctionSize().getValue();<br>
>    }<br>
><br>
>    // If we traversed all nodes along the path of the context and haven't<br>
>    // found a size yet, pivot to look for size from sibling nodes, i.e size<br>
>    // of inlinee under<br>
> diff erent context.<br>
> -  if (!Size) {<br>
> +  if (!Size.hasValue()) {<br>
>      if (!CurrNode)<br>
>        CurrNode = PrevNode;<br>
> -    while (!Size && CurrNode && !CurrNode->getAllChildContext().empty()) {<br>
> +    while (!Size.hasValue() && CurrNode &&<br>
> +           !CurrNode->getAllChildContext().empty()) {<br>
>        CurrNode = &CurrNode->getAllChildContext().begin()->second;<br>
> -      if (CurrNode->getFunctionSize())<br>
> -        Size = CurrNode->getFunctionSize().value();<br>
> +      if (CurrNode->getFunctionSize().hasValue())<br>
> +        Size = CurrNode->getFunctionSize().getValue();<br>
>      }<br>
>    }<br>
><br>
> -  assert(Size && "We should at least find one context size.");<br>
> -  return Size.value();<br>
> +  assert(Size.hasValue() && "We should at least find one context size.");<br>
> +  return Size.getValue();<br>
>  }<br>
><br>
>  void BinarySizeContextTracker::trackInlineesOptimizedAway(<br>
><br>
> diff  --git a/llvm/tools/llvm-sim/llvm-sim.cpp b/llvm/tools/llvm-sim/llvm-sim.cpp<br>
> index 2b717d72e48a2..26e370ff30f1e 100644<br>
> --- a/llvm/tools/llvm-sim/llvm-sim.cpp<br>
> +++ b/llvm/tools/llvm-sim/llvm-sim.cpp<br>
> @@ -85,13 +85,14 @@ exportToFile(const StringRef FilePath,<br>
>        Optional<unsigned> End =<br>
>            getPositionInModule((*C.back()).Inst, LLVMInstNum);<br>
><br>
> -      assert(Start &&<br>
> +      assert(Start.hasValue() &&<br>
>               "Could not find instruction number for first instruction");<br>
> -      assert(End && "Could not find instruction number for last instruction");<br>
> +      assert(End.hasValue() &&<br>
> +             "Could not find instruction number for last instruction");<br>
><br>
>        J.object([&] {<br>
> -        J.attribute("start", Start.value());<br>
> -        J.attribute("end", End.value());<br>
> +        J.attribute("start", Start.getValue());<br>
> +        J.attribute("end", End.getValue());<br>
>        });<br>
>      }<br>
>      J.arrayEnd();<br>
><br>
> diff  --git a/llvm/tools/obj2yaml/dwarf2yaml.cpp b/llvm/tools/obj2yaml/dwarf2yaml.cpp<br>
> index 4436cef084f63..c0c23ea10eccd 100644<br>
> --- a/llvm/tools/obj2yaml/dwarf2yaml.cpp<br>
> +++ b/llvm/tools/obj2yaml/dwarf2yaml.cpp<br>
> @@ -247,15 +247,15 @@ void dumpDebugInfo(DWARFContext &DCtx, DWARFYAML::Data &Y) {<br>
>            auto FormValue = DIEWrapper.find(AttrSpec.Attr);<br>
>            if (!FormValue)<br>
>              return;<br>
> -          auto Form = FormValue->getForm();<br>
> +          auto Form = FormValue.getValue().getForm();<br>
>            bool indirect = false;<br>
>            do {<br>
>              indirect = false;<br>
>              switch (Form) {<br>
>              case dwarf::DW_FORM_addr:<br>
>              case dwarf::DW_FORM_GNU_addr_index:<br>
> -              if (auto Val = FormValue->getAsAddress())<br>
> -                NewValue.Value = Val.value();<br>
> +              if (auto Val = FormValue.getValue().getAsAddress())<br>
> +                NewValue.Value = Val.getValue();<br>
>                break;<br>
>              case dwarf::DW_FORM_ref_addr:<br>
>              case dwarf::DW_FORM_ref1:<br>
> @@ -264,16 +264,16 @@ void dumpDebugInfo(DWARFContext &DCtx, DWARFYAML::Data &Y) {<br>
>              case dwarf::DW_FORM_ref8:<br>
>              case dwarf::DW_FORM_ref_udata:<br>
>              case dwarf::DW_FORM_ref_sig8:<br>
> -              if (auto Val = FormValue->getAsReferenceUVal())<br>
> -                NewValue.Value = Val.value();<br>
> +              if (auto Val = FormValue.getValue().getAsReferenceUVal())<br>
> +                NewValue.Value = Val.getValue();<br>
>                break;<br>
>              case dwarf::DW_FORM_exprloc:<br>
>              case dwarf::DW_FORM_block:<br>
>              case dwarf::DW_FORM_block1:<br>
>              case dwarf::DW_FORM_block2:<br>
>              case dwarf::DW_FORM_block4:<br>
> -              if (auto Val = FormValue->getAsBlock()) {<br>
> -                auto BlockData = Val.value();<br>
> +              if (auto Val = FormValue.getValue().getAsBlock()) {<br>
> +                auto BlockData = Val.getValue();<br>
>                  std::copy(BlockData.begin(), BlockData.end(),<br>
>                            std::back_inserter(NewValue.BlockData));<br>
>                }<br>
> @@ -288,8 +288,8 @@ void dumpDebugInfo(DWARFContext &DCtx, DWARFYAML::Data &Y) {<br>
>              case dwarf::DW_FORM_udata:<br>
>              case dwarf::DW_FORM_ref_sup4:<br>
>              case dwarf::DW_FORM_ref_sup8:<br>
> -              if (auto Val = FormValue->getAsUnsignedConstant())<br>
> -                NewValue.Value = Val.value();<br>
> +              if (auto Val = FormValue.getValue().getAsUnsignedConstant())<br>
> +                NewValue.Value = Val.getValue();<br>
>                break;<br>
>              case dwarf::DW_FORM_string:<br>
>                if (auto Val = dwarf::toString(FormValue))<br>
> @@ -297,10 +297,10 @@ void dumpDebugInfo(DWARFContext &DCtx, DWARFYAML::Data &Y) {<br>
>                break;<br>
>              case dwarf::DW_FORM_indirect:<br>
>                indirect = true;<br>
> -              if (auto Val = FormValue->getAsUnsignedConstant()) {<br>
> -                NewValue.Value = Val.value();<br>
> +              if (auto Val = FormValue.getValue().getAsUnsignedConstant()) {<br>
> +                NewValue.Value = Val.getValue();<br>
>                  NewEntry.Values.push_back(NewValue);<br>
> -                Form = static_cast<dwarf::Form>(Val.value());<br>
> +                Form = static_cast<dwarf::Form>(Val.getValue());<br>
>                }<br>
>                break;<br>
>              case dwarf::DW_FORM_strp:<br>
> @@ -311,8 +311,8 @@ void dumpDebugInfo(DWARFContext &DCtx, DWARFYAML::Data &Y) {<br>
>              case dwarf::DW_FORM_strp_sup:<br>
>              case dwarf::DW_FORM_GNU_str_index:<br>
>              case dwarf::DW_FORM_strx:<br>
> -              if (auto Val = FormValue->getAsCStringOffset())<br>
> -                NewValue.Value = Val.value();<br>
> +              if (auto Val = FormValue.getValue().getAsCStringOffset())<br>
> +                NewValue.Value = Val.getValue();<br>
>                break;<br>
>              case dwarf::DW_FORM_flag_present:<br>
>                NewValue.Value = 1;<br>
><br>
> diff  --git a/llvm/tools/obj2yaml/dxcontainer2yaml.cpp b/llvm/tools/obj2yaml/dxcontainer2yaml.cpp<br>
> index 122ae7df50a04..a57b8cfdec956 100644<br>
> --- a/llvm/tools/obj2yaml/dxcontainer2yaml.cpp<br>
> +++ b/llvm/tools/obj2yaml/dxcontainer2yaml.cpp<br>
> @@ -40,8 +40,8 @@ dumpDXContainer(MemoryBufferRef Source) {<br>
>      Obj->Header.PartOffsets->push_back(P.Offset);<br>
>      if (P.Part.getName() == "DXIL") {<br>
>        Optional<DXContainer::DXILData> DXIL = Container.getDXIL();<br>
> -      assert(DXIL && "Since we are iterating and found a DXIL part, "<br>
> -                     "this should never not have a value");<br>
> +      assert(DXIL.hasValue() && "Since we are iterating and found a DXIL part, "<br>
> +                                "this should never not have a value");<br>
>        Obj->Parts.push_back(DXContainerYAML::Part{<br>
>            P.Part.getName().str(), P.Part.Size,<br>
>            DXContainerYAML::DXILProgram{<br>
><br>
> diff  --git a/llvm/unittests/ADT/OptionalTest.cpp b/llvm/unittests/ADT/OptionalTest.cpp<br>
> index 94032c6a80b60..f88437f0ab294 100644<br>
> --- a/llvm/unittests/ADT/OptionalTest.cpp<br>
> +++ b/llvm/unittests/ADT/OptionalTest.cpp<br>
> @@ -29,13 +29,13 @@ void OptionalWorksInConstexpr() {<br>
>    constexpr Optional<int> x2{};<br>
>    static_assert(!x1.has_value() && !x2.has_value(),<br>
>                  "Default construction and hasValue() are contexpr");<br>
> -  static_assert(!x1.has_value() && !x2.has_value(),<br>
> +  static_assert(!x1.hasValue() && !x2.hasValue(),<br>
>                  "Default construction and hasValue() are contexpr");<br>
>    constexpr auto y1 = Optional<int>(3);<br>
>    constexpr Optional<int> y2{3};<br>
>    static_assert(y1.value() == y2.value() && y1.value() == 3,<br>
>                  "Construction with value and getValue() are constexpr");<br>
> -  static_assert(y1.value() == *y2 && *y1 == 3,<br>
> +  static_assert(y1.getValue() == y2.getValue() && y1.getValue() == 3,<br>
>                  "Construction with value and getValue() are constexpr");<br>
>    static_assert(Optional<int>{3} >= 2 && Optional<int>{1} < Optional<int>{2},<br>
>                  "Comparisons work in constexpr");<br>
> @@ -252,14 +252,14 @@ TEST(OptionalTest, Emplace) {<br>
><br>
>    A.emplace(1, 2);<br>
>    EXPECT_TRUE(A.has_value());<br>
> -  EXPECT_TRUE(A.has_value());<br>
> +  EXPECT_TRUE(A.hasValue());<br>
>    EXPECT_EQ(1, A->x);<br>
>    EXPECT_EQ(2, A->y);<br>
>    EXPECT_EQ(0u, MultiArgConstructor::Destructions);<br>
><br>
>    A.emplace(5, false);<br>
>    EXPECT_TRUE(A.has_value());<br>
> -  EXPECT_TRUE(A.has_value());<br>
> +  EXPECT_TRUE(A.hasValue());<br>
>    EXPECT_EQ(5, A->x);<br>
>    EXPECT_EQ(-5, A->y);<br>
>    EXPECT_EQ(1u, MultiArgConstructor::Destructions);<br>
> @@ -270,12 +270,12 @@ TEST(OptionalTest, InPlaceConstructionMultiArgConstructorTest) {<br>
>    {<br>
>      Optional<MultiArgConstructor> A{in_place, 1, 2};<br>
>      EXPECT_TRUE(A.has_value());<br>
> -    EXPECT_TRUE(A.has_value());<br>
> +    EXPECT_TRUE(A.hasValue());<br>
>      EXPECT_EQ(1, A->x);<br>
>      EXPECT_EQ(2, A->y);<br>
>      Optional<MultiArgConstructor> B{in_place, 5, false};<br>
>      EXPECT_TRUE(B.has_value());<br>
> -    EXPECT_TRUE(B.has_value());<br>
> +    EXPECT_TRUE(B.hasValue());<br>
>      EXPECT_EQ(5, B->x);<br>
>      EXPECT_EQ(-5, B->y);<br>
>      EXPECT_EQ(0u, MultiArgConstructor::Destructions);<br>
><br>
> diff  --git a/llvm/unittests/ADT/StatisticTest.cpp b/llvm/unittests/ADT/StatisticTest.cpp<br>
> index 523f510cccdde..17d9911915550 100644<br>
> --- a/llvm/unittests/ADT/StatisticTest.cpp<br>
> +++ b/llvm/unittests/ADT/StatisticTest.cpp<br>
> @@ -92,8 +92,8 @@ TEST(StatisticTest, API) {<br>
>      OptionalStatistic S2;<br>
>      extractCounters(Range1, S1, S2);<br>
><br>
> -    EXPECT_EQ(S1.has_value(), true);<br>
> -    EXPECT_EQ(S2.has_value(), false);<br>
> +    EXPECT_EQ(S1.hasValue(), true);<br>
> +    EXPECT_EQ(S2.hasValue(), false);<br>
>    }<br>
><br>
>    // Counter2 will be registered when it's first touched.<br>
> @@ -108,8 +108,8 @@ TEST(StatisticTest, API) {<br>
>      OptionalStatistic S2;<br>
>      extractCounters(Range, S1, S2);<br>
><br>
> -    EXPECT_EQ(S1.has_value(), true);<br>
> -    EXPECT_EQ(S2.has_value(), true);<br>
> +    EXPECT_EQ(S1.hasValue(), true);<br>
> +    EXPECT_EQ(S2.hasValue(), true);<br>
><br>
>      EXPECT_EQ(S1->first, "Counter");<br>
>      EXPECT_EQ(S1->second, 2u);<br>
> @@ -135,8 +135,8 @@ TEST(StatisticTest, API) {<br>
>      OptionalStatistic S1;<br>
>      OptionalStatistic S2;<br>
>      extractCounters(Range, S1, S2);<br>
> -    EXPECT_EQ(S1.has_value(), false);<br>
> -    EXPECT_EQ(S2.has_value(), false);<br>
> +    EXPECT_EQ(S1.hasValue(), false);<br>
> +    EXPECT_EQ(S2.hasValue(), false);<br>
>    }<br>
><br>
>    // Now check that they successfully re-register and count.<br>
> @@ -153,8 +153,8 @@ TEST(StatisticTest, API) {<br>
>      OptionalStatistic S2;<br>
>      extractCounters(Range, S1, S2);<br>
><br>
> -    EXPECT_EQ(S1.has_value(), true);<br>
> -    EXPECT_EQ(S2.has_value(), true);<br>
> +    EXPECT_EQ(S1.hasValue(), true);<br>
> +    EXPECT_EQ(S2.hasValue(), true);<br>
><br>
>      EXPECT_EQ(S1->first, "Counter");<br>
>      EXPECT_EQ(S1->second, 1u);<br>
><br>
> diff  --git a/llvm/unittests/Analysis/BlockFrequencyInfoTest.cpp b/llvm/unittests/Analysis/BlockFrequencyInfoTest.cpp<br>
> index 91009ab7d074f..5dd399517164c 100644<br>
> --- a/llvm/unittests/Analysis/BlockFrequencyInfoTest.cpp<br>
> +++ b/llvm/unittests/Analysis/BlockFrequencyInfoTest.cpp<br>
> @@ -75,11 +75,11 @@ TEST_F(BlockFrequencyInfoTest, Basic) {<br>
>    EXPECT_EQ(BB0Freq, BB1Freq + BB2Freq);<br>
>    EXPECT_EQ(BB0Freq, BB3Freq);<br>
><br>
> -  EXPECT_EQ(BFI.getBlockProfileCount(&BB0).value(), UINT64_C(100));<br>
> -  EXPECT_EQ(BFI.getBlockProfileCount(BB3).value(), UINT64_C(100));<br>
> -  EXPECT_EQ(BFI.getBlockProfileCount(BB1).value(),<br>
> +  EXPECT_EQ(BFI.getBlockProfileCount(&BB0).getValue(), UINT64_C(100));<br>
> +  EXPECT_EQ(BFI.getBlockProfileCount(BB3).getValue(), UINT64_C(100));<br>
> +  EXPECT_EQ(BFI.getBlockProfileCount(BB1).getValue(),<br>
>              (100 * BB1Freq + BB0Freq / 2) / BB0Freq);<br>
> -  EXPECT_EQ(BFI.getBlockProfileCount(BB2).value(),<br>
> +  EXPECT_EQ(BFI.getBlockProfileCount(BB2).getValue(),<br>
>              (100 * BB2Freq + BB0Freq / 2) / BB0Freq);<br>
><br>
>    // Scale the frequencies of BB0, BB1 and BB2 by a factor of two.<br>
><br>
> diff  --git a/llvm/unittests/Analysis/IRSimilarityIdentifierTest.cpp b/llvm/unittests/Analysis/IRSimilarityIdentifierTest.cpp<br>
> index f6a053792f852..cfe2c25fc8393 100644<br>
> --- a/llvm/unittests/Analysis/IRSimilarityIdentifierTest.cpp<br>
> +++ b/llvm/unittests/Analysis/IRSimilarityIdentifierTest.cpp<br>
> @@ -2188,9 +2188,9 @@ TEST(IRSimilarityCandidate, CanonicalNumbering) {<br>
>    for (std::pair<unsigned, DenseSet<unsigned>> &P : Mapping2) {<br>
>      unsigned Source = P.first;<br>
><br>
> -    ASSERT_TRUE(Cand2.getCanonicalNum(Source).has_value());<br>
> +    ASSERT_TRUE(Cand2.getCanonicalNum(Source).hasValue());<br>
>      unsigned Canon = *Cand2.getCanonicalNum(Source);<br>
> -    ASSERT_TRUE(Cand1.fromCanonicalNum(Canon).has_value());<br>
> +    ASSERT_TRUE(Cand1.fromCanonicalNum(Canon).hasValue());<br>
>      unsigned Dest = *Cand1.fromCanonicalNum(Canon);<br>
><br>
>      DenseSet<unsigned>::iterator It = P.second.find(Dest);<br>
><br>
> diff  --git a/llvm/unittests/Analysis/MemorySSATest.cpp b/llvm/unittests/Analysis/MemorySSATest.cpp<br>
> index 4c8942f30121f..298a8bc5d9fc7 100644<br>
> --- a/llvm/unittests/Analysis/MemorySSATest.cpp<br>
> +++ b/llvm/unittests/Analysis/MemorySSATest.cpp<br>
> @@ -1191,13 +1191,14 @@ TEST_F(MemorySSATest, TestStoreMayAlias) {<br>
>      EXPECT_EQ(MemDef->isOptimized(), true)<br>
>          << "Store " << I << " was not optimized";<br>
>      if (I == 1 || I == 3 || I == 4)<br>
> -      EXPECT_EQ(MemDef->getOptimizedAccessType().value(), AliasResult::MayAlias)<br>
> +      EXPECT_EQ(MemDef->getOptimizedAccessType().getValue(),<br>
> +                AliasResult::MayAlias)<br>
>            << "Store " << I << " doesn't have the correct alias information";<br>
>      else if (I == 0 || I == 2)<br>
>        EXPECT_EQ(MemDef->getOptimizedAccessType(), None)<br>
>            << "Store " << I << " doesn't have the correct alias information";<br>
>      else<br>
> -      EXPECT_EQ(MemDef->getOptimizedAccessType().value(),<br>
> +      EXPECT_EQ(MemDef->getOptimizedAccessType().getValue(),<br>
>                  AliasResult::MustAlias)<br>
>            << "Store " << I << " doesn't have the correct alias information";<br>
>      // EXPECT_EQ expands such that if we increment I above, it won't get<br>
><br>
> diff  --git a/llvm/unittests/Analysis/VectorFunctionABITest.cpp b/llvm/unittests/Analysis/VectorFunctionABITest.cpp<br>
> index 026732c26be11..7ac1b0384f87b 100644<br>
> --- a/llvm/unittests/Analysis/VectorFunctionABITest.cpp<br>
> +++ b/llvm/unittests/Analysis/VectorFunctionABITest.cpp<br>
> @@ -75,8 +75,8 @@ class VFABIParserTest : public ::testing::Test {<br>
>      reset(Name, IRType);<br>
><br>
>      const auto OptInfo = VFABI::tryDemangleForVFABI(MangledName, *(M.get()));<br>
> -    if (OptInfo) {<br>
> -      Info = OptInfo.value();<br>
> +    if (OptInfo.hasValue()) {<br>
> +      Info = OptInfo.getValue();<br>
>        return true;<br>
>      }<br>
><br>
><br>
> diff  --git a/llvm/unittests/BinaryFormat/DwarfTest.cpp b/llvm/unittests/BinaryFormat/DwarfTest.cpp<br>
> index ddafbb4102bde..5e49a5cc2ee68 100644<br>
> --- a/llvm/unittests/BinaryFormat/DwarfTest.cpp<br>
> +++ b/llvm/unittests/BinaryFormat/DwarfTest.cpp<br>
> @@ -147,48 +147,48 @@ TEST(DwarfTest, FixedFormSizes) {<br>
>    FormParams Params_2_4_32 = {2, 4, DWARF32};<br>
>    RefSize = getFixedFormByteSize(DW_FORM_ref_addr, Params_2_4_32);<br>
>    AddrSize = getFixedFormByteSize(DW_FORM_ref_addr, Params_2_4_32);<br>
> -  EXPECT_TRUE(RefSize.has_value());<br>
> -  EXPECT_TRUE(AddrSize.has_value());<br>
> +  EXPECT_TRUE(RefSize.hasValue());<br>
> +  EXPECT_TRUE(AddrSize.hasValue());<br>
>    EXPECT_EQ(*RefSize, *AddrSize);<br>
><br>
>    // Test 32 bit DWARF version 2 with 8 byte addresses.<br>
>    FormParams Params_2_8_32 = {2, 8, DWARF32};<br>
>    RefSize = getFixedFormByteSize(DW_FORM_ref_addr, Params_2_8_32);<br>
>    AddrSize = getFixedFormByteSize(DW_FORM_ref_addr, Params_2_8_32);<br>
> -  EXPECT_TRUE(RefSize.has_value());<br>
> -  EXPECT_TRUE(AddrSize.has_value());<br>
> +  EXPECT_TRUE(RefSize.hasValue());<br>
> +  EXPECT_TRUE(AddrSize.hasValue());<br>
>    EXPECT_EQ(*RefSize, *AddrSize);<br>
><br>
>    // DW_FORM_ref_addr is 4 bytes in DWARF 32 in DWARF version 3 and beyond.<br>
>    FormParams Params_3_4_32 = {3, 4, DWARF32};<br>
>    RefSize = getFixedFormByteSize(DW_FORM_ref_addr, Params_3_4_32);<br>
> -  EXPECT_TRUE(RefSize.has_value());<br>
> +  EXPECT_TRUE(RefSize.hasValue());<br>
>    EXPECT_EQ(*RefSize, 4);<br>
><br>
>    FormParams Params_4_4_32 = {4, 4, DWARF32};<br>
>    RefSize = getFixedFormByteSize(DW_FORM_ref_addr, Params_4_4_32);<br>
> -  EXPECT_TRUE(RefSize.has_value());<br>
> +  EXPECT_TRUE(RefSize.hasValue());<br>
>    EXPECT_EQ(*RefSize, 4);<br>
><br>
>    FormParams Params_5_4_32 = {5, 4, DWARF32};<br>
>    RefSize = getFixedFormByteSize(DW_FORM_ref_addr, Params_5_4_32);<br>
> -  EXPECT_TRUE(RefSize.has_value());<br>
> +  EXPECT_TRUE(RefSize.hasValue());<br>
>    EXPECT_EQ(*RefSize, 4);<br>
><br>
>    // DW_FORM_ref_addr is 8 bytes in DWARF 64 in DWARF version 3 and beyond.<br>
>    FormParams Params_3_8_64 = {3, 8, DWARF64};<br>
>    RefSize = getFixedFormByteSize(DW_FORM_ref_addr, Params_3_8_64);<br>
> -  EXPECT_TRUE(RefSize.has_value());<br>
> +  EXPECT_TRUE(RefSize.hasValue());<br>
>    EXPECT_EQ(*RefSize, 8);<br>
><br>
>    FormParams Params_4_8_64 = {4, 8, DWARF64};<br>
>    RefSize = getFixedFormByteSize(DW_FORM_ref_addr, Params_4_8_64);<br>
> -  EXPECT_TRUE(RefSize.has_value());<br>
> +  EXPECT_TRUE(RefSize.hasValue());<br>
>    EXPECT_EQ(*RefSize, 8);<br>
><br>
>    FormParams Params_5_8_64 = {5, 8, DWARF64};<br>
>    RefSize = getFixedFormByteSize(DW_FORM_ref_addr, Params_5_8_64);<br>
> -  EXPECT_TRUE(RefSize.has_value());<br>
> +  EXPECT_TRUE(RefSize.hasValue());<br>
>    EXPECT_EQ(*RefSize, 8);<br>
>  }<br>
><br>
><br>
> diff  --git a/llvm/unittests/CodeGen/GlobalISel/ConstantFoldingTest.cpp b/llvm/unittests/CodeGen/GlobalISel/ConstantFoldingTest.cpp<br>
> index 33c1f0f32de66..5053d542d2bac 100644<br>
> --- a/llvm/unittests/CodeGen/GlobalISel/ConstantFoldingTest.cpp<br>
> +++ b/llvm/unittests/CodeGen/GlobalISel/ConstantFoldingTest.cpp<br>
> @@ -83,157 +83,157 @@ TEST_F(AArch64GISelMITest, FoldBinOp) {<br>
>    Optional<APInt> FoldGAddInt =<br>
>        ConstantFoldBinOp(TargetOpcode::G_ADD, MIBCst1.getReg(0),<br>
>                          MIBCst2.getReg(0), *MRI);<br>
> -  EXPECT_TRUE(FoldGAddInt.has_value());<br>
> -  EXPECT_EQ(25ULL, FoldGAddInt->getLimitedValue());<br>
> +  EXPECT_TRUE(FoldGAddInt.hasValue());<br>
> +  EXPECT_EQ(25ULL, FoldGAddInt.getValue().getLimitedValue());<br>
>    Optional<APInt> FoldGAddMix =<br>
>        ConstantFoldBinOp(TargetOpcode::G_ADD, MIBCst1.getReg(0),<br>
>                          MIBFCst2.getReg(0), *MRI);<br>
> -  EXPECT_TRUE(FoldGAddMix.has_value());<br>
> -  EXPECT_EQ(1073741840ULL, FoldGAddMix->getLimitedValue());<br>
> +  EXPECT_TRUE(FoldGAddMix.hasValue());<br>
> +  EXPECT_EQ(1073741840ULL, FoldGAddMix.getValue().getLimitedValue());<br>
><br>
>    // Test G_AND folding Integer + Mixed Int-Float cases<br>
>    Optional<APInt> FoldGAndInt =<br>
>        ConstantFoldBinOp(TargetOpcode::G_AND, MIBCst1.getReg(0),<br>
>                          MIBCst2.getReg(0), *MRI);<br>
> -  EXPECT_TRUE(FoldGAndInt.has_value());<br>
> -  EXPECT_EQ(0ULL, FoldGAndInt->getLimitedValue());<br>
> +  EXPECT_TRUE(FoldGAndInt.hasValue());<br>
> +  EXPECT_EQ(0ULL, FoldGAndInt.getValue().getLimitedValue());<br>
>    Optional<APInt> FoldGAndMix =<br>
>        ConstantFoldBinOp(TargetOpcode::G_AND, MIBCst2.getReg(0),<br>
>                          MIBFCst1.getReg(0), *MRI);<br>
> -  EXPECT_TRUE(FoldGAndMix.has_value());<br>
> -  EXPECT_EQ(1ULL, FoldGAndMix->getLimitedValue());<br>
> +  EXPECT_TRUE(FoldGAndMix.hasValue());<br>
> +  EXPECT_EQ(1ULL, FoldGAndMix.getValue().getLimitedValue());<br>
><br>
>    // Test G_ASHR folding Integer + Mixed cases<br>
>    Optional<APInt> FoldGAShrInt =<br>
>        ConstantFoldBinOp(TargetOpcode::G_ASHR, MIBCst1.getReg(0),<br>
>                          MIBCst2.getReg(0), *MRI);<br>
> -  EXPECT_TRUE(FoldGAShrInt.has_value());<br>
> -  EXPECT_EQ(0ULL, FoldGAShrInt->getLimitedValue());<br>
> +  EXPECT_TRUE(FoldGAShrInt.hasValue());<br>
> +  EXPECT_EQ(0ULL, FoldGAShrInt.getValue().getLimitedValue());<br>
>    Optional<APInt> FoldGAShrMix =<br>
>        ConstantFoldBinOp(TargetOpcode::G_ASHR, MIBFCst2.getReg(0),<br>
>                          MIBCst2.getReg(0), *MRI);<br>
> -  EXPECT_TRUE(FoldGAShrMix.has_value());<br>
> -  EXPECT_EQ(2097152ULL, FoldGAShrMix->getLimitedValue());<br>
> +  EXPECT_TRUE(FoldGAShrMix.hasValue());<br>
> +  EXPECT_EQ(2097152ULL, FoldGAShrMix.getValue().getLimitedValue());<br>
><br>
>    // Test G_LSHR folding Integer + Mixed Int-Float cases<br>
>    Optional<APInt> FoldGLShrInt =<br>
>        ConstantFoldBinOp(TargetOpcode::G_LSHR, MIBCst1.getReg(0),<br>
>                          MIBCst2.getReg(0), *MRI);<br>
> -  EXPECT_TRUE(FoldGLShrInt.has_value());<br>
> -  EXPECT_EQ(0ULL, FoldGLShrInt->getLimitedValue());<br>
> +  EXPECT_TRUE(FoldGLShrInt.hasValue());<br>
> +  EXPECT_EQ(0ULL, FoldGLShrInt.getValue().getLimitedValue());<br>
>    Optional<APInt> FoldGLShrMix =<br>
>        ConstantFoldBinOp(TargetOpcode::G_LSHR, MIBFCst1.getReg(0),<br>
>                          MIBCst2.getReg(0), *MRI);<br>
> -  EXPECT_TRUE(FoldGLShrMix.has_value());<br>
> -  EXPECT_EQ(2080768ULL, FoldGLShrMix->getLimitedValue());<br>
> +  EXPECT_TRUE(FoldGLShrMix.hasValue());<br>
> +  EXPECT_EQ(2080768ULL, FoldGLShrMix.getValue().getLimitedValue());<br>
><br>
>    // Test G_MUL folding Integer + Mixed Int-Float cases<br>
>    Optional<APInt> FoldGMulInt =<br>
>        ConstantFoldBinOp(TargetOpcode::G_MUL, MIBCst1.getReg(0),<br>
>                          MIBCst2.getReg(0), *MRI);<br>
> -  EXPECT_TRUE(FoldGMulInt.has_value());<br>
> -  EXPECT_EQ(144ULL, FoldGMulInt->getLimitedValue());<br>
> +  EXPECT_TRUE(FoldGMulInt.hasValue());<br>
> +  EXPECT_EQ(144ULL, FoldGMulInt.getValue().getLimitedValue());<br>
>    Optional<APInt> FoldGMulMix =<br>
>        ConstantFoldBinOp(TargetOpcode::G_MUL, MIBCst1.getReg(0),<br>
>                          MIBFCst2.getReg(0), *MRI);<br>
> -  EXPECT_TRUE(FoldGMulMix.has_value());<br>
> -  EXPECT_EQ(0ULL, FoldGMulMix->getLimitedValue());<br>
> +  EXPECT_TRUE(FoldGMulMix.hasValue());<br>
> +  EXPECT_EQ(0ULL, FoldGMulMix.getValue().getLimitedValue());<br>
><br>
>    // Test G_OR folding Integer + Mixed Int-Float cases<br>
>    Optional<APInt> FoldGOrInt =<br>
>        ConstantFoldBinOp(TargetOpcode::G_OR, MIBCst1.getReg(0),<br>
>                          MIBCst2.getReg(0), *MRI);<br>
> -  EXPECT_TRUE(FoldGOrInt.has_value());<br>
> -  EXPECT_EQ(25ULL, FoldGOrInt->getLimitedValue());<br>
> +  EXPECT_TRUE(FoldGOrInt.hasValue());<br>
> +  EXPECT_EQ(25ULL, FoldGOrInt.getValue().getLimitedValue());<br>
>    Optional<APInt> FoldGOrMix =<br>
>        ConstantFoldBinOp(TargetOpcode::G_OR, MIBCst1.getReg(0),<br>
>                          MIBFCst2.getReg(0), *MRI);<br>
> -  EXPECT_TRUE(FoldGOrMix.has_value());<br>
> -  EXPECT_EQ(1073741840ULL, FoldGOrMix->getLimitedValue());<br>
> +  EXPECT_TRUE(FoldGOrMix.hasValue());<br>
> +  EXPECT_EQ(1073741840ULL, FoldGOrMix.getValue().getLimitedValue());<br>
><br>
>    // Test G_SHL folding Integer + Mixed Int-Float cases<br>
>    Optional<APInt> FoldGShlInt =<br>
>        ConstantFoldBinOp(TargetOpcode::G_SHL, MIBCst1.getReg(0),<br>
>                          MIBCst2.getReg(0), *MRI);<br>
> -  EXPECT_TRUE(FoldGShlInt.has_value());<br>
> -  EXPECT_EQ(8192ULL, FoldGShlInt->getLimitedValue());<br>
> +  EXPECT_TRUE(FoldGShlInt.hasValue());<br>
> +  EXPECT_EQ(8192ULL, FoldGShlInt.getValue().getLimitedValue());<br>
>    Optional<APInt> FoldGShlMix =<br>
>        ConstantFoldBinOp(TargetOpcode::G_SHL, MIBCst1.getReg(0),<br>
>                          MIBFCst2.getReg(0), *MRI);<br>
> -  EXPECT_TRUE(FoldGShlMix.has_value());<br>
> -  EXPECT_EQ(0ULL, FoldGShlMix->getLimitedValue());<br>
> +  EXPECT_TRUE(FoldGShlMix.hasValue());<br>
> +  EXPECT_EQ(0ULL, FoldGShlMix.getValue().getLimitedValue());<br>
><br>
>    // Test G_SUB folding Integer + Mixed Int-Float cases<br>
>    Optional<APInt> FoldGSubInt =<br>
>        ConstantFoldBinOp(TargetOpcode::G_SUB, MIBCst1.getReg(0),<br>
>                          MIBCst2.getReg(0), *MRI);<br>
> -  EXPECT_TRUE(FoldGSubInt.has_value());<br>
> -  EXPECT_EQ(7ULL, FoldGSubInt->getLimitedValue());<br>
> +  EXPECT_TRUE(FoldGSubInt.hasValue());<br>
> +  EXPECT_EQ(7ULL, FoldGSubInt.getValue().getLimitedValue());<br>
>    Optional<APInt> FoldGSubMix =<br>
>        ConstantFoldBinOp(TargetOpcode::G_SUB, MIBCst1.getReg(0),<br>
>                          MIBFCst2.getReg(0), *MRI);<br>
> -  EXPECT_TRUE(FoldGSubMix.has_value());<br>
> -  EXPECT_EQ(3221225488ULL, FoldGSubMix->getLimitedValue());<br>
> +  EXPECT_TRUE(FoldGSubMix.hasValue());<br>
> +  EXPECT_EQ(3221225488ULL, FoldGSubMix.getValue().getLimitedValue());<br>
><br>
>    // Test G_XOR folding Integer + Mixed Int-Float cases<br>
>    Optional<APInt> FoldGXorInt =<br>
>        ConstantFoldBinOp(TargetOpcode::G_XOR, MIBCst1.getReg(0),<br>
>                          MIBCst2.getReg(0), *MRI);<br>
> -  EXPECT_TRUE(FoldGXorInt.has_value());<br>
> -  EXPECT_EQ(25ULL, FoldGXorInt->getLimitedValue());<br>
> +  EXPECT_TRUE(FoldGXorInt.hasValue());<br>
> +  EXPECT_EQ(25ULL, FoldGXorInt.getValue().getLimitedValue());<br>
>    Optional<APInt> FoldGXorMix =<br>
>        ConstantFoldBinOp(TargetOpcode::G_XOR, MIBCst1.getReg(0),<br>
>                          MIBFCst2.getReg(0), *MRI);<br>
> -  EXPECT_TRUE(FoldGXorMix.has_value());<br>
> -  EXPECT_EQ(1073741840ULL, FoldGXorMix->getLimitedValue());<br>
> +  EXPECT_TRUE(FoldGXorMix.hasValue());<br>
> +  EXPECT_EQ(1073741840ULL, FoldGXorMix.getValue().getLimitedValue());<br>
><br>
>    // Test G_UDIV folding Integer + Mixed Int-Float cases<br>
>    Optional<APInt> FoldGUdivInt =<br>
>        ConstantFoldBinOp(TargetOpcode::G_UDIV, MIBCst1.getReg(0),<br>
>                          MIBCst2.getReg(0), *MRI);<br>
> -  EXPECT_TRUE(FoldGUdivInt.has_value());<br>
> -  EXPECT_EQ(1ULL, FoldGUdivInt->getLimitedValue());<br>
> +  EXPECT_TRUE(FoldGUdivInt.hasValue());<br>
> +  EXPECT_EQ(1ULL, FoldGUdivInt.getValue().getLimitedValue());<br>
>    Optional<APInt> FoldGUdivMix =<br>
>        ConstantFoldBinOp(TargetOpcode::G_UDIV, MIBCst1.getReg(0),<br>
>                          MIBFCst2.getReg(0), *MRI);<br>
> -  EXPECT_TRUE(FoldGUdivMix.has_value());<br>
> -  EXPECT_EQ(0ULL, FoldGUdivMix->getLimitedValue());<br>
> +  EXPECT_TRUE(FoldGUdivMix.hasValue());<br>
> +  EXPECT_EQ(0ULL, FoldGUdivMix.getValue().getLimitedValue());<br>
><br>
>    // Test G_SDIV folding Integer + Mixed Int-Float cases<br>
>    Optional<APInt> FoldGSdivInt =<br>
>        ConstantFoldBinOp(TargetOpcode::G_SDIV, MIBCst1.getReg(0),<br>
>                          MIBCst2.getReg(0), *MRI);<br>
> -  EXPECT_TRUE(FoldGSdivInt.has_value());<br>
> -  EXPECT_EQ(1ULL, FoldGSdivInt->getLimitedValue());<br>
> +  EXPECT_TRUE(FoldGSdivInt.hasValue());<br>
> +  EXPECT_EQ(1ULL, FoldGSdivInt.getValue().getLimitedValue());<br>
>    Optional<APInt> FoldGSdivMix =<br>
>        ConstantFoldBinOp(TargetOpcode::G_SDIV, MIBCst1.getReg(0),<br>
>                          MIBFCst2.getReg(0), *MRI);<br>
> -  EXPECT_TRUE(FoldGSdivMix.has_value());<br>
> -  EXPECT_EQ(0ULL, FoldGSdivMix->getLimitedValue());<br>
> +  EXPECT_TRUE(FoldGSdivMix.hasValue());<br>
> +  EXPECT_EQ(0ULL, FoldGSdivMix.getValue().getLimitedValue());<br>
><br>
>    // Test G_UREM folding Integer + Mixed Int-Float cases<br>
>    Optional<APInt> FoldGUremInt =<br>
>        ConstantFoldBinOp(TargetOpcode::G_UDIV, MIBCst1.getReg(0),<br>
>                          MIBCst2.getReg(0), *MRI);<br>
> -  EXPECT_TRUE(FoldGUremInt.has_value());<br>
> -  EXPECT_EQ(1ULL, FoldGUremInt->getLimitedValue());<br>
> +  EXPECT_TRUE(FoldGUremInt.hasValue());<br>
> +  EXPECT_EQ(1ULL, FoldGUremInt.getValue().getLimitedValue());<br>
>    Optional<APInt> FoldGUremMix =<br>
>        ConstantFoldBinOp(TargetOpcode::G_UDIV, MIBCst1.getReg(0),<br>
>                          MIBFCst2.getReg(0), *MRI);<br>
> -  EXPECT_TRUE(FoldGUremMix.has_value());<br>
> -  EXPECT_EQ(0ULL, FoldGUremMix->getLimitedValue());<br>
> +  EXPECT_TRUE(FoldGUremMix.hasValue());<br>
> +  EXPECT_EQ(0ULL, FoldGUremMix.getValue().getLimitedValue());<br>
><br>
>    // Test G_SREM folding Integer + Mixed Int-Float cases<br>
>    Optional<APInt> FoldGSremInt =<br>
>        ConstantFoldBinOp(TargetOpcode::G_SREM, MIBCst1.getReg(0),<br>
>                          MIBCst2.getReg(0), *MRI);<br>
> -  EXPECT_TRUE(FoldGSremInt.has_value());<br>
> -  EXPECT_EQ(7ULL, FoldGSremInt->getLimitedValue());<br>
> +  EXPECT_TRUE(FoldGSremInt.hasValue());<br>
> +  EXPECT_EQ(7ULL, FoldGSremInt.getValue().getLimitedValue());<br>
>    Optional<APInt> FoldGSremMix =<br>
>        ConstantFoldBinOp(TargetOpcode::G_SREM, MIBCst1.getReg(0),<br>
>                          MIBFCst2.getReg(0), *MRI);<br>
> -  EXPECT_TRUE(FoldGSremMix.has_value());<br>
> -  EXPECT_EQ(16ULL, FoldGSremMix->getLimitedValue());<br>
> +  EXPECT_TRUE(FoldGSremMix.hasValue());<br>
> +  EXPECT_EQ(16ULL, FoldGSremMix.getValue().getLimitedValue());<br>
>  }<br>
><br>
>  } // namespace<br>
><br>
> diff  --git a/llvm/unittests/DebugInfo/DWARF/DWARFDebugFrameTest.cpp b/llvm/unittests/DebugInfo/DWARF/DWARFDebugFrameTest.cpp<br>
> index dbc54e7bdb8ef..6a8f23c05a576 100644<br>
> --- a/llvm/unittests/DebugInfo/DWARF/DWARFDebugFrameTest.cpp<br>
> +++ b/llvm/unittests/DebugInfo/DWARF/DWARFDebugFrameTest.cpp<br>
> @@ -424,31 +424,31 @@ TEST(DWARFDebugFrame, RegisterLocations) {<br>
>    // Verify RegisterLocations::getRegisterLocation() works as expected.<br>
>    Optional<dwarf::UnwindLocation> OptionalLoc;<br>
>    OptionalLoc = Locs.getRegisterLocation(0);<br>
> -  EXPECT_FALSE(OptionalLoc.has_value());<br>
> +  EXPECT_FALSE(OptionalLoc.hasValue());<br>
><br>
>    OptionalLoc = Locs.getRegisterLocation(12);<br>
> -  EXPECT_TRUE(OptionalLoc.has_value());<br>
> +  EXPECT_TRUE(OptionalLoc.hasValue());<br>
>    EXPECT_EQ(*OptionalLoc, Reg12Loc);<br>
><br>
>    OptionalLoc = Locs.getRegisterLocation(13);<br>
> -  EXPECT_TRUE(OptionalLoc.has_value());<br>
> +  EXPECT_TRUE(OptionalLoc.hasValue());<br>
>    EXPECT_EQ(*OptionalLoc, Reg13Loc);<br>
><br>
>    OptionalLoc = Locs.getRegisterLocation(14);<br>
> -  EXPECT_TRUE(OptionalLoc.has_value());<br>
> +  EXPECT_TRUE(OptionalLoc.hasValue());<br>
>    EXPECT_EQ(*OptionalLoc, Reg14Loc);<br>
><br>
>    // Verify registers are correctly removed when multiple exist in the list.<br>
>    Locs.removeRegisterLocation(13);<br>
> -  EXPECT_FALSE(Locs.getRegisterLocation(13).has_value());<br>
> +  EXPECT_FALSE(Locs.getRegisterLocation(13).hasValue());<br>
>    EXPECT_TRUE(Locs.hasLocations());<br>
>    expectDumpResult(Locs, "reg12=[CFA+4], reg14=same");<br>
>    Locs.removeRegisterLocation(14);<br>
> -  EXPECT_FALSE(Locs.getRegisterLocation(14).has_value());<br>
> +  EXPECT_FALSE(Locs.getRegisterLocation(14).hasValue());<br>
>    EXPECT_TRUE(Locs.hasLocations());<br>
>    expectDumpResult(Locs, "reg12=[CFA+4]");<br>
>    Locs.removeRegisterLocation(12);<br>
> -  EXPECT_FALSE(Locs.getRegisterLocation(12).has_value());<br>
> +  EXPECT_FALSE(Locs.getRegisterLocation(12).hasValue());<br>
>    EXPECT_FALSE(Locs.hasLocations());<br>
>    expectDumpResult(Locs, "");<br>
>  }<br>
><br>
> diff  --git a/llvm/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp b/llvm/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp<br>
> index e4c65c0414635..367e89e4970d3 100644<br>
> --- a/llvm/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp<br>
> +++ b/llvm/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp<br>
> @@ -252,32 +252,32 @@ void TestAllForms() {<br>
>    FormValue = DieDG.find(Attr_DW_FORM_block);<br>
>    EXPECT_TRUE((bool)FormValue);<br>
>    BlockDataOpt = FormValue->getAsBlock();<br>
> -  EXPECT_TRUE(BlockDataOpt.has_value());<br>
> -  ExtractedBlockData = *BlockDataOpt;<br>
> +  EXPECT_TRUE(BlockDataOpt.hasValue());<br>
> +  ExtractedBlockData = BlockDataOpt.getValue();<br>
>    EXPECT_EQ(ExtractedBlockData.size(), BlockSize);<br>
>    EXPECT_TRUE(memcmp(ExtractedBlockData.data(), BlockData, BlockSize) == 0);<br>
><br>
>    FormValue = DieDG.find(Attr_DW_FORM_block1);<br>
>    EXPECT_TRUE((bool)FormValue);<br>
>    BlockDataOpt = FormValue->getAsBlock();<br>
> -  EXPECT_TRUE(BlockDataOpt.has_value());<br>
> -  ExtractedBlockData = *BlockDataOpt;<br>
> +  EXPECT_TRUE(BlockDataOpt.hasValue());<br>
> +  ExtractedBlockData = BlockDataOpt.getValue();<br>
>    EXPECT_EQ(ExtractedBlockData.size(), BlockSize);<br>
>    EXPECT_TRUE(memcmp(ExtractedBlockData.data(), BlockData, BlockSize) == 0);<br>
><br>
>    FormValue = DieDG.find(Attr_DW_FORM_block2);<br>
>    EXPECT_TRUE((bool)FormValue);<br>
>    BlockDataOpt = FormValue->getAsBlock();<br>
> -  EXPECT_TRUE(BlockDataOpt.has_value());<br>
> -  ExtractedBlockData = *BlockDataOpt;<br>
> +  EXPECT_TRUE(BlockDataOpt.hasValue());<br>
> +  ExtractedBlockData = BlockDataOpt.getValue();<br>
>    EXPECT_EQ(ExtractedBlockData.size(), BlockSize);<br>
>    EXPECT_TRUE(memcmp(ExtractedBlockData.data(), BlockData, BlockSize) == 0);<br>
><br>
>    FormValue = DieDG.find(Attr_DW_FORM_block4);<br>
>    EXPECT_TRUE((bool)FormValue);<br>
>    BlockDataOpt = FormValue->getAsBlock();<br>
> -  EXPECT_TRUE(BlockDataOpt.has_value());<br>
> -  ExtractedBlockData = *BlockDataOpt;<br>
> +  EXPECT_TRUE(BlockDataOpt.hasValue());<br>
> +  ExtractedBlockData = BlockDataOpt.getValue();<br>
>    EXPECT_EQ(ExtractedBlockData.size(), BlockSize);<br>
>    EXPECT_TRUE(memcmp(ExtractedBlockData.data(), BlockData, BlockSize) == 0);<br>
><br>
> @@ -286,8 +286,8 @@ void TestAllForms() {<br>
>      FormValue = DieDG.find(Attr_DW_FORM_data16);<br>
>      EXPECT_TRUE((bool)FormValue);<br>
>      BlockDataOpt = FormValue->getAsBlock();<br>
> -    EXPECT_TRUE(BlockDataOpt.has_value());<br>
> -    ExtractedBlockData = *BlockDataOpt;<br>
> +    EXPECT_TRUE(BlockDataOpt.hasValue());<br>
> +    ExtractedBlockData = BlockDataOpt.getValue();<br>
>      EXPECT_EQ(ExtractedBlockData.size(), 16u);<br>
>      EXPECT_TRUE(memcmp(ExtractedBlockData.data(), Data16, 16) == 0);<br>
>    }<br>
> @@ -989,21 +989,21 @@ template <uint16_t Version, class AddrType> void TestAddresses() {<br>
>      EXPECT_FALSE((bool)OptU64);<br>
>    } else {<br>
>      EXPECT_TRUE((bool)OptU64);<br>
> -    EXPECT_EQ(*OptU64, ActualHighPC);<br>
> +    EXPECT_EQ(OptU64.getValue(), ActualHighPC);<br>
>    }<br>
>    // Get the high PC as an unsigned constant. This should succeed if the high PC<br>
>    // was encoded as an offset and fail if the high PC was encoded as an address.<br>
>    OptU64 = toUnsigned(SubprogramDieLowHighPC.find(DW_AT_high_pc));<br>
>    if (SupportsHighPCAsOffset) {<br>
>      EXPECT_TRUE((bool)OptU64);<br>
> -    EXPECT_EQ(*OptU64, ActualHighPCOffset);<br>
> +    EXPECT_EQ(OptU64.getValue(), ActualHighPCOffset);<br>
>    } else {<br>
>      EXPECT_FALSE((bool)OptU64);<br>
>    }<br>
><br>
>    OptU64 = SubprogramDieLowHighPC.getHighPC(ActualLowPC);<br>
>    EXPECT_TRUE((bool)OptU64);<br>
> -  EXPECT_EQ(*OptU64, ActualHighPC);<br>
> +  EXPECT_EQ(OptU64.getValue(), ActualHighPC);<br>
><br>
>    EXPECT_TRUE(SubprogramDieLowHighPC.getLowAndHighPC(LowPC, HighPC, SectionIndex));<br>
>    EXPECT_EQ(LowPC, ActualLowPC);<br>
> @@ -1638,13 +1638,13 @@ TEST(DWARFDebugInfo, TestDwarfToFunctions) {<br>
>    // First test that we don't get valid values back when using an optional with<br>
>    // no value.<br>
>    Optional<DWARFFormValue> FormValOpt1 = DWARFFormValue();<br>
> -  EXPECT_FALSE(toString(FormValOpt1).has_value());<br>
> -  EXPECT_FALSE(toUnsigned(FormValOpt1).has_value());<br>
> -  EXPECT_FALSE(toReference(FormValOpt1).has_value());<br>
> -  EXPECT_FALSE(toSigned(FormValOpt1).has_value());<br>
> -  EXPECT_FALSE(toAddress(FormValOpt1).has_value());<br>
> -  EXPECT_FALSE(toSectionOffset(FormValOpt1).has_value());<br>
> -  EXPECT_FALSE(toBlock(FormValOpt1).has_value());<br>
> +  EXPECT_FALSE(toString(FormValOpt1).hasValue());<br>
> +  EXPECT_FALSE(toUnsigned(FormValOpt1).hasValue());<br>
> +  EXPECT_FALSE(toReference(FormValOpt1).hasValue());<br>
> +  EXPECT_FALSE(toSigned(FormValOpt1).hasValue());<br>
> +  EXPECT_FALSE(toAddress(FormValOpt1).hasValue());<br>
> +  EXPECT_FALSE(toSectionOffset(FormValOpt1).hasValue());<br>
> +  EXPECT_FALSE(toBlock(FormValOpt1).hasValue());<br>
>    EXPECT_EQ(nullptr, toString(FormValOpt1, nullptr));<br>
>    EXPECT_EQ(InvalidU64, toUnsigned(FormValOpt1, InvalidU64));<br>
>    EXPECT_EQ(InvalidU64, toReference(FormValOpt1, InvalidU64));<br>
> @@ -1657,13 +1657,13 @@ TEST(DWARFDebugInfo, TestDwarfToFunctions) {<br>
>    Optional<DWARFFormValue> FormValOpt2 =<br>
>        DWARFFormValue::createFromUValue(DW_FORM_addr, Address);<br>
><br>
> -  EXPECT_FALSE(toString(FormValOpt2).has_value());<br>
> -  EXPECT_FALSE(toUnsigned(FormValOpt2).has_value());<br>
> -  EXPECT_FALSE(toReference(FormValOpt2).has_value());<br>
> -  EXPECT_FALSE(toSigned(FormValOpt2).has_value());<br>
> -  EXPECT_TRUE(toAddress(FormValOpt2).has_value());<br>
> -  EXPECT_FALSE(toSectionOffset(FormValOpt2).has_value());<br>
> -  EXPECT_FALSE(toBlock(FormValOpt2).has_value());<br>
> +  EXPECT_FALSE(toString(FormValOpt2).hasValue());<br>
> +  EXPECT_FALSE(toUnsigned(FormValOpt2).hasValue());<br>
> +  EXPECT_FALSE(toReference(FormValOpt2).hasValue());<br>
> +  EXPECT_FALSE(toSigned(FormValOpt2).hasValue());<br>
> +  EXPECT_TRUE(toAddress(FormValOpt2).hasValue());<br>
> +  EXPECT_FALSE(toSectionOffset(FormValOpt2).hasValue());<br>
> +  EXPECT_FALSE(toBlock(FormValOpt2).hasValue());<br>
>    EXPECT_EQ(nullptr, toString(FormValOpt2, nullptr));<br>
>    EXPECT_EQ(InvalidU64, toUnsigned(FormValOpt2, InvalidU64));<br>
>    EXPECT_EQ(InvalidU64, toReference(FormValOpt2, InvalidU64));<br>
> @@ -1676,13 +1676,13 @@ TEST(DWARFDebugInfo, TestDwarfToFunctions) {<br>
>    Optional<DWARFFormValue> FormValOpt3 =<br>
>        DWARFFormValue::createFromUValue(DW_FORM_udata, UData8);<br>
><br>
> -  EXPECT_FALSE(toString(FormValOpt3).has_value());<br>
> -  EXPECT_TRUE(toUnsigned(FormValOpt3).has_value());<br>
> -  EXPECT_FALSE(toReference(FormValOpt3).has_value());<br>
> -  EXPECT_TRUE(toSigned(FormValOpt3).has_value());<br>
> -  EXPECT_FALSE(toAddress(FormValOpt3).has_value());<br>
> -  EXPECT_FALSE(toSectionOffset(FormValOpt3).has_value());<br>
> -  EXPECT_FALSE(toBlock(FormValOpt3).has_value());<br>
> +  EXPECT_FALSE(toString(FormValOpt3).hasValue());<br>
> +  EXPECT_TRUE(toUnsigned(FormValOpt3).hasValue());<br>
> +  EXPECT_FALSE(toReference(FormValOpt3).hasValue());<br>
> +  EXPECT_TRUE(toSigned(FormValOpt3).hasValue());<br>
> +  EXPECT_FALSE(toAddress(FormValOpt3).hasValue());<br>
> +  EXPECT_FALSE(toSectionOffset(FormValOpt3).hasValue());<br>
> +  EXPECT_FALSE(toBlock(FormValOpt3).hasValue());<br>
>    EXPECT_EQ(nullptr, toString(FormValOpt3, nullptr));<br>
>    EXPECT_EQ(UData8, toUnsigned(FormValOpt3, InvalidU64));<br>
>    EXPECT_EQ(InvalidU64, toReference(FormValOpt3, InvalidU64));<br>
> @@ -1695,13 +1695,13 @@ TEST(DWARFDebugInfo, TestDwarfToFunctions) {<br>
>    Optional<DWARFFormValue> FormValOpt4 =<br>
>        DWARFFormValue::createFromUValue(DW_FORM_ref_addr, RefData);<br>
><br>
> -  EXPECT_FALSE(toString(FormValOpt4).has_value());<br>
> -  EXPECT_FALSE(toUnsigned(FormValOpt4).has_value());<br>
> -  EXPECT_TRUE(toReference(FormValOpt4).has_value());<br>
> -  EXPECT_FALSE(toSigned(FormValOpt4).has_value());<br>
> -  EXPECT_FALSE(toAddress(FormValOpt4).has_value());<br>
> -  EXPECT_FALSE(toSectionOffset(FormValOpt4).has_value());<br>
> -  EXPECT_FALSE(toBlock(FormValOpt4).has_value());<br>
> +  EXPECT_FALSE(toString(FormValOpt4).hasValue());<br>
> +  EXPECT_FALSE(toUnsigned(FormValOpt4).hasValue());<br>
> +  EXPECT_TRUE(toReference(FormValOpt4).hasValue());<br>
> +  EXPECT_FALSE(toSigned(FormValOpt4).hasValue());<br>
> +  EXPECT_FALSE(toAddress(FormValOpt4).hasValue());<br>
> +  EXPECT_FALSE(toSectionOffset(FormValOpt4).hasValue());<br>
> +  EXPECT_FALSE(toBlock(FormValOpt4).hasValue());<br>
>    EXPECT_EQ(nullptr, toString(FormValOpt4, nullptr));<br>
>    EXPECT_EQ(InvalidU64, toUnsigned(FormValOpt4, InvalidU64));<br>
>    EXPECT_EQ(RefData, toReference(FormValOpt4, InvalidU64));<br>
> @@ -1714,13 +1714,13 @@ TEST(DWARFDebugInfo, TestDwarfToFunctions) {<br>
>    Optional<DWARFFormValue> FormValOpt5 =<br>
>        DWARFFormValue::createFromSValue(DW_FORM_udata, SData8);<br>
><br>
> -  EXPECT_FALSE(toString(FormValOpt5).has_value());<br>
> -  EXPECT_TRUE(toUnsigned(FormValOpt5).has_value());<br>
> -  EXPECT_FALSE(toReference(FormValOpt5).has_value());<br>
> -  EXPECT_TRUE(toSigned(FormValOpt5).has_value());<br>
> -  EXPECT_FALSE(toAddress(FormValOpt5).has_value());<br>
> -  EXPECT_FALSE(toSectionOffset(FormValOpt5).has_value());<br>
> -  EXPECT_FALSE(toBlock(FormValOpt5).has_value());<br>
> +  EXPECT_FALSE(toString(FormValOpt5).hasValue());<br>
> +  EXPECT_TRUE(toUnsigned(FormValOpt5).hasValue());<br>
> +  EXPECT_FALSE(toReference(FormValOpt5).hasValue());<br>
> +  EXPECT_TRUE(toSigned(FormValOpt5).hasValue());<br>
> +  EXPECT_FALSE(toAddress(FormValOpt5).hasValue());<br>
> +  EXPECT_FALSE(toSectionOffset(FormValOpt5).hasValue());<br>
> +  EXPECT_FALSE(toBlock(FormValOpt5).hasValue());<br>
>    EXPECT_EQ(nullptr, toString(FormValOpt5, nullptr));<br>
>    EXPECT_EQ((uint64_t)SData8, toUnsigned(FormValOpt5, InvalidU64));<br>
>    EXPECT_EQ(InvalidU64, toReference(FormValOpt5, InvalidU64));<br>
> @@ -1734,14 +1734,14 @@ TEST(DWARFDebugInfo, TestDwarfToFunctions) {<br>
>    Optional<DWARFFormValue> FormValOpt6 =<br>
>        DWARFFormValue::createFromBlockValue(DW_FORM_block1, Array);<br>
><br>
> -  EXPECT_FALSE(toString(FormValOpt6).has_value());<br>
> -  EXPECT_FALSE(toUnsigned(FormValOpt6).has_value());<br>
> -  EXPECT_FALSE(toReference(FormValOpt6).has_value());<br>
> -  EXPECT_FALSE(toSigned(FormValOpt6).has_value());<br>
> -  EXPECT_FALSE(toAddress(FormValOpt6).has_value());<br>
> -  EXPECT_FALSE(toSectionOffset(FormValOpt6).has_value());<br>
> +  EXPECT_FALSE(toString(FormValOpt6).hasValue());<br>
> +  EXPECT_FALSE(toUnsigned(FormValOpt6).hasValue());<br>
> +  EXPECT_FALSE(toReference(FormValOpt6).hasValue());<br>
> +  EXPECT_FALSE(toSigned(FormValOpt6).hasValue());<br>
> +  EXPECT_FALSE(toAddress(FormValOpt6).hasValue());<br>
> +  EXPECT_FALSE(toSectionOffset(FormValOpt6).hasValue());<br>
>    auto BlockOpt = toBlock(FormValOpt6);<br>
> -  EXPECT_TRUE(BlockOpt.has_value());<br>
> +  EXPECT_TRUE(BlockOpt.hasValue());<br>
>    EXPECT_EQ(*BlockOpt, Array);<br>
>    EXPECT_EQ(nullptr, toString(FormValOpt6, nullptr));<br>
>    EXPECT_EQ(InvalidU64, toUnsigned(FormValOpt6, InvalidU64));<br>
> @@ -1799,24 +1799,24 @@ TEST(DWARFDebugInfo, TestFindAttrs) {<br>
>    auto FuncDie = FuncSpecDie.getSibling();<br>
><br>
>    // Make sure that passing in an empty attribute list behave correctly.<br>
> -  EXPECT_FALSE(FuncDie.find(ArrayRef<dwarf::Attribute>()).has_value());<br>
> +  EXPECT_FALSE(FuncDie.find(ArrayRef<dwarf::Attribute>()).hasValue());<br>
><br>
>    // Make sure that passing in a list of attribute that are not contained<br>
>    // in the DIE returns nothing.<br>
> -  EXPECT_FALSE(FuncDie.find({DW_AT_low_pc, DW_AT_entry_pc}).has_value());<br>
> +  EXPECT_FALSE(FuncDie.find({DW_AT_low_pc, DW_AT_entry_pc}).hasValue());<br>
><br>
>    const dwarf::Attribute Attrs[] = {DW_AT_linkage_name,<br>
>                                      DW_AT_MIPS_linkage_name};<br>
><br>
>    // Make sure we can't extract the linkage name attributes when using<br>
>    // DWARFDie::find() since it won't check the DW_AT_specification DIE.<br>
> -  EXPECT_FALSE(FuncDie.find(Attrs).has_value());<br>
> +  EXPECT_FALSE(FuncDie.find(Attrs).hasValue());<br>
><br>
>    // Make sure we can extract the name from the specification die when using<br>
>    // DWARFDie::findRecursively() since it should recurse through the<br>
>    // DW_AT_specification DIE.<br>
>    auto NameOpt = FuncDie.findRecursively(Attrs);<br>
> -  EXPECT_TRUE(NameOpt.has_value());<br>
> +  EXPECT_TRUE(NameOpt.hasValue());<br>
>    EXPECT_EQ(DieMangled, toString(NameOpt, ""));<br>
>  }<br>
><br>
><br>
> diff  --git a/llvm/unittests/DebugInfo/DWARF/DWARFFormValueTest.cpp b/llvm/unittests/DebugInfo/DWARF/DWARFFormValueTest.cpp<br>
> index c81059c8d589f..9976777005a18 100644<br>
> --- a/llvm/unittests/DebugInfo/DWARF/DWARFFormValueTest.cpp<br>
> +++ b/llvm/unittests/DebugInfo/DWARF/DWARFFormValueTest.cpp<br>
> @@ -79,17 +79,17 @@ TEST(DWARFFormValue, SignedConstantForms) {<br>
>    auto Sign2 = createDataXFormValue<uint16_t>(DW_FORM_data2, -12345);<br>
>    auto Sign4 = createDataXFormValue<uint32_t>(DW_FORM_data4, -123456789);<br>
>    auto Sign8 = createDataXFormValue<uint64_t>(DW_FORM_data8, -1);<br>
> -  EXPECT_EQ(Sign1.getAsSignedConstant().value(), -123);<br>
> -  EXPECT_EQ(Sign2.getAsSignedConstant().value(), -12345);<br>
> -  EXPECT_EQ(Sign4.getAsSignedConstant().value(), -123456789);<br>
> -  EXPECT_EQ(Sign8.getAsSignedConstant().value(), -1);<br>
> +  EXPECT_EQ(Sign1.getAsSignedConstant().getValue(), -123);<br>
> +  EXPECT_EQ(Sign2.getAsSignedConstant().getValue(), -12345);<br>
> +  EXPECT_EQ(Sign4.getAsSignedConstant().getValue(), -123456789);<br>
> +  EXPECT_EQ(Sign8.getAsSignedConstant().getValue(), -1);<br>
><br>
>    // Check that we can handle big positive values, but that we return<br>
>    // an error just over the limit.<br>
>    auto UMax = createULEBFormValue(LLONG_MAX);<br>
>    auto TooBig = createULEBFormValue(uint64_t(LLONG_MAX) + 1);<br>
> -  EXPECT_EQ(UMax.getAsSignedConstant().value(), LLONG_MAX);<br>
> -  EXPECT_EQ(TooBig.getAsSignedConstant().has_value(), false);<br>
> +  EXPECT_EQ(UMax.getAsSignedConstant().getValue(), LLONG_MAX);<br>
> +  EXPECT_EQ(TooBig.getAsSignedConstant().hasValue(), false);<br>
><br>
>    // Sanity check some other forms.<br>
>    auto Data1 = createDataXFormValue<uint8_t>(DW_FORM_data1, 120);<br>
> @@ -100,14 +100,14 @@ TEST(DWARFFormValue, SignedConstantForms) {<br>
>    auto LEBMax = createSLEBFormValue(LLONG_MAX);<br>
>    auto LEB1 = createSLEBFormValue(-42);<br>
>    auto LEB2 = createSLEBFormValue(42);<br>
> -  EXPECT_EQ(Data1.getAsSignedConstant().value(), 120);<br>
> -  EXPECT_EQ(Data2.getAsSignedConstant().value(), 32000);<br>
> -  EXPECT_EQ(Data4.getAsSignedConstant().value(), 2000000000);<br>
> -  EXPECT_EQ(Data8.getAsSignedConstant().value(), 0x1234567812345678LL);<br>
> -  EXPECT_EQ(LEBMin.getAsSignedConstant().value(), LLONG_MIN);<br>
> -  EXPECT_EQ(LEBMax.getAsSignedConstant().value(), LLONG_MAX);<br>
> -  EXPECT_EQ(LEB1.getAsSignedConstant().value(), -42);<br>
> -  EXPECT_EQ(LEB2.getAsSignedConstant().value(), 42);<br>
> +  EXPECT_EQ(Data1.getAsSignedConstant().getValue(), 120);<br>
> +  EXPECT_EQ(Data2.getAsSignedConstant().getValue(), 32000);<br>
> +  EXPECT_EQ(Data4.getAsSignedConstant().getValue(), 2000000000);<br>
> +  EXPECT_EQ(Data8.getAsSignedConstant().getValue(), 0x1234567812345678LL);<br>
> +  EXPECT_EQ(LEBMin.getAsSignedConstant().getValue(), LLONG_MIN);<br>
> +  EXPECT_EQ(LEBMax.getAsSignedConstant().getValue(), LLONG_MAX);<br>
> +  EXPECT_EQ(LEB1.getAsSignedConstant().getValue(), -42);<br>
> +  EXPECT_EQ(LEB2.getAsSignedConstant().getValue(), 42);<br>
><br>
>    // Data16 is a little tricky.<br>
>    char Cksum[16] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};<br>
><br>
> diff  --git a/llvm/unittests/DebugInfo/GSYM/GSYMTest.cpp b/llvm/unittests/DebugInfo/GSYM/GSYMTest.cpp<br>
> index bfe66f0cef1c2..977231d81143a 100644<br>
> --- a/llvm/unittests/DebugInfo/GSYM/GSYMTest.cpp<br>
> +++ b/llvm/unittests/DebugInfo/GSYM/GSYMTest.cpp<br>
> @@ -1349,8 +1349,8 @@ TEST(GSYMTest, TestDWARFFunctionWithAddresses) {<br>
>    auto ExpFI = GR->getFunctionInfo(0x1000);<br>
>    ASSERT_THAT_EXPECTED(ExpFI, Succeeded());<br>
>    ASSERT_EQ(ExpFI->Range, AddressRange(0x1000, 0x2000));<br>
> -  EXPECT_FALSE(ExpFI->OptLineTable.has_value());<br>
> -  EXPECT_FALSE(ExpFI->Inline.has_value());<br>
> +  EXPECT_FALSE(ExpFI->OptLineTable.hasValue());<br>
> +  EXPECT_FALSE(ExpFI->Inline.hasValue());<br>
>  }<br>
><br>
>  TEST(GSYMTest, TestDWARFFunctionWithAddressAndOffset) {<br>
> @@ -1426,8 +1426,8 @@ TEST(GSYMTest, TestDWARFFunctionWithAddressAndOffset) {<br>
>    auto ExpFI = GR->getFunctionInfo(0x1000);<br>
>    ASSERT_THAT_EXPECTED(ExpFI, Succeeded());<br>
>    ASSERT_EQ(ExpFI->Range, AddressRange(0x1000, 0x2000));<br>
> -  EXPECT_FALSE(ExpFI->OptLineTable.has_value());<br>
> -  EXPECT_FALSE(ExpFI->Inline.has_value());<br>
> +  EXPECT_FALSE(ExpFI->OptLineTable.hasValue());<br>
> +  EXPECT_FALSE(ExpFI->Inline.hasValue());<br>
>  }<br>
><br>
>  TEST(GSYMTest, TestDWARFStructMethodNoMangled) {<br>
> @@ -1533,8 +1533,8 @@ TEST(GSYMTest, TestDWARFStructMethodNoMangled) {<br>
>    auto ExpFI = GR->getFunctionInfo(0x1000);<br>
>    ASSERT_THAT_EXPECTED(ExpFI, Succeeded());<br>
>    ASSERT_EQ(ExpFI->Range, AddressRange(0x1000, 0x2000));<br>
> -  EXPECT_FALSE(ExpFI->OptLineTable.has_value());<br>
> -  EXPECT_FALSE(ExpFI->Inline.has_value());<br>
> +  EXPECT_FALSE(ExpFI->OptLineTable.hasValue());<br>
> +  EXPECT_FALSE(ExpFI->Inline.hasValue());<br>
>    StringRef MethodName = GR->getString(ExpFI->Name);<br>
>    EXPECT_EQ(MethodName, "Foo::dump");<br>
>  }<br>
> @@ -1638,8 +1638,8 @@ TEST(GSYMTest, TestDWARFTextRanges) {<br>
>    auto ExpFI = GR->getFunctionInfo(0x1000);<br>
>    ASSERT_THAT_EXPECTED(ExpFI, Succeeded());<br>
>    ASSERT_EQ(ExpFI->Range, AddressRange(0x1000, 0x2000));<br>
> -  EXPECT_FALSE(ExpFI->OptLineTable.has_value());<br>
> -  EXPECT_FALSE(ExpFI->Inline.has_value());<br>
> +  EXPECT_FALSE(ExpFI->OptLineTable.hasValue());<br>
> +  EXPECT_FALSE(ExpFI->Inline.hasValue());<br>
>    StringRef MethodName = GR->getString(ExpFI->Name);<br>
>    EXPECT_EQ(MethodName, "main");<br>
>  }<br>
> @@ -1667,8 +1667,8 @@ TEST(GSYMTest, TestEmptySymbolEndAddressOfTextRanges) {<br>
>    auto ExpFI = GR->getFunctionInfo(0x1500);<br>
>    ASSERT_THAT_EXPECTED(ExpFI, Succeeded());<br>
>    ASSERT_EQ(ExpFI->Range, AddressRange(0x1500, 0x2000));<br>
> -  EXPECT_FALSE(ExpFI->OptLineTable.has_value());<br>
> -  EXPECT_FALSE(ExpFI->Inline.has_value());<br>
> +  EXPECT_FALSE(ExpFI->OptLineTable.hasValue());<br>
> +  EXPECT_FALSE(ExpFI->Inline.hasValue());<br>
>    StringRef MethodName = GR->getString(ExpFI->Name);<br>
>    EXPECT_EQ(MethodName, "symbol");<br>
>  }<br>
> @@ -1836,8 +1836,8 @@ TEST(GSYMTest, TestDWARFInlineInfo) {<br>
>    auto ExpFI = GR->getFunctionInfo(0x1000);<br>
>    ASSERT_THAT_EXPECTED(ExpFI, Succeeded());<br>
>    ASSERT_EQ(ExpFI->Range, AddressRange(0x1000, 0x2000));<br>
> -  EXPECT_TRUE(ExpFI->OptLineTable.has_value());<br>
> -  EXPECT_TRUE(ExpFI->Inline.has_value());<br>
> +  EXPECT_TRUE(ExpFI->OptLineTable.hasValue());<br>
> +  EXPECT_TRUE(ExpFI->Inline.hasValue());<br>
>    StringRef MethodName = GR->getString(ExpFI->Name);<br>
>    EXPECT_EQ(MethodName, "main");<br>
><br>
> @@ -2122,14 +2122,14 @@ TEST(GSYMTest, TestDWARFNoLines) {<br>
>    ASSERT_THAT_EXPECTED(ExpFI, Succeeded());<br>
>    ASSERT_EQ(ExpFI->Range, AddressRange(0x3000, 0x4000));<br>
>    // Make sure we have no line table.<br>
> -  EXPECT_FALSE(ExpFI->OptLineTable.has_value());<br>
> +  EXPECT_FALSE(ExpFI->OptLineTable.hasValue());<br>
>    MethodName = GR->getString(ExpFI->Name);<br>
>    EXPECT_EQ(MethodName, "no_lines_no_decl");<br>
><br>
>    ExpFI = GR->getFunctionInfo(0x4000);<br>
>    ASSERT_THAT_EXPECTED(ExpFI, Succeeded());<br>
>    ASSERT_EQ(ExpFI->Range, AddressRange(0x4000, 0x5000));<br>
> -  EXPECT_TRUE(ExpFI->OptLineTable.has_value());<br>
> +  EXPECT_TRUE(ExpFI->OptLineTable.hasValue());<br>
>    MethodName = GR->getString(ExpFI->Name);<br>
>    EXPECT_EQ(MethodName, "no_lines_with_decl");<br>
>    // Make sure we have one line table entry that uses the DW_AT_decl_file/line<br>
><br>
> diff  --git a/llvm/unittests/FileCheck/FileCheckTest.cpp b/llvm/unittests/FileCheck/FileCheckTest.cpp<br>
> index 39230c49bdbae..f3b5d3d2aaab6 100644<br>
> --- a/llvm/unittests/FileCheck/FileCheckTest.cpp<br>
> +++ b/llvm/unittests/FileCheck/FileCheckTest.cpp<br>
> @@ -766,8 +766,8 @@ TEST_F(FileCheckTest, NumericVariable) {<br>
>    ASSERT_TRUE(Value);<br>
>    EXPECT_EQ(925, cantFail(Value->getSignedValue()));<br>
>    // getStringValue should return the same memory not just the same characters.<br>
> -  EXPECT_EQ(StringValue.begin(), FooVar.getStringValue()->begin());<br>
> -  EXPECT_EQ(StringValue.end(), FooVar.getStringValue()->end());<br>
> +  EXPECT_EQ(StringValue.begin(), FooVar.getStringValue().getValue().begin());<br>
> +  EXPECT_EQ(StringValue.end(), FooVar.getStringValue().getValue().end());<br>
>    EvalResult = FooVarUse.eval();<br>
>    ASSERT_THAT_EXPECTED(EvalResult, Succeeded());<br>
>    EXPECT_EQ(925, cantFail(EvalResult->getSignedValue()));<br>
><br>
> diff  --git a/llvm/unittests/IR/MetadataTest.cpp b/llvm/unittests/IR/MetadataTest.cpp<br>
> index a755dfa81ab44..0c73aaa69b31f 100644<br>
> --- a/llvm/unittests/IR/MetadataTest.cpp<br>
> +++ b/llvm/unittests/IR/MetadataTest.cpp<br>
> @@ -1045,51 +1045,52 @@ TEST_F(DILocationTest, cloneTemporary) {<br>
>  }<br>
><br>
>  TEST_F(DILocationTest, discriminatorEncoding) {<br>
> -  EXPECT_EQ(0U, DILocation::encodeDiscriminator(0, 0, 0).value());<br>
> +  EXPECT_EQ(0U, DILocation::encodeDiscriminator(0, 0, 0).getValue());<br>
><br>
>    // Encode base discriminator as a component: lsb is 0, then the value.<br>
>    // The other components are all absent, so we leave all the other bits 0.<br>
> -  EXPECT_EQ(2U, DILocation::encodeDiscriminator(1, 0, 0).value());<br>
> +  EXPECT_EQ(2U, DILocation::encodeDiscriminator(1, 0, 0).getValue());<br>
><br>
>    // Base discriminator component is empty, so lsb is 1. Next component is not<br>
>    // empty, so its lsb is 0, then its value (1). Next component is empty.<br>
>    // So the bit pattern is 101.<br>
> -  EXPECT_EQ(5U, DILocation::encodeDiscriminator(0, 1, 0).value());<br>
> +  EXPECT_EQ(5U, DILocation::encodeDiscriminator(0, 1, 0).getValue());<br>
><br>
>    // First 2 components are empty, so the bit pattern is 11. Then the<br>
>    // next component - ending up with 1011.<br>
> -  EXPECT_EQ(0xbU, DILocation::encodeDiscriminator(0, 0, 1).value());<br>
> +  EXPECT_EQ(0xbU, DILocation::encodeDiscriminator(0, 0, 1).getValue());<br>
><br>
>    // The bit pattern for the first 2 components is 11. The next bit is 0,<br>
>    // because the last component is not empty. We have 29 bits usable for<br>
>    // encoding, but we cap it at 12 bits uniformously for all components. We<br>
>    // encode the last component over 14 bits.<br>
> -  EXPECT_EQ(0xfffbU, DILocation::encodeDiscriminator(0, 0, 0xfff).value());<br>
> +  EXPECT_EQ(0xfffbU, DILocation::encodeDiscriminator(0, 0, 0xfff).getValue());<br>
><br>
> -  EXPECT_EQ(0x102U, DILocation::encodeDiscriminator(1, 1, 0).value());<br>
> +  EXPECT_EQ(0x102U, DILocation::encodeDiscriminator(1, 1, 0).getValue());<br>
><br>
> -  EXPECT_EQ(0x13eU, DILocation::encodeDiscriminator(0x1f, 1, 0).value());<br>
> +  EXPECT_EQ(0x13eU, DILocation::encodeDiscriminator(0x1f, 1, 0).getValue());<br>
><br>
> -  EXPECT_EQ(0x87feU, DILocation::encodeDiscriminator(0x1ff, 1, 0).value());<br>
> +  EXPECT_EQ(0x87feU, DILocation::encodeDiscriminator(0x1ff, 1, 0).getValue());<br>
><br>
> -  EXPECT_EQ(0x1f3eU, DILocation::encodeDiscriminator(0x1f, 0x1f, 0).value());<br>
> +  EXPECT_EQ(0x1f3eU, DILocation::encodeDiscriminator(0x1f, 0x1f, 0).getValue());<br>
><br>
> -  EXPECT_EQ(0x3ff3eU, DILocation::encodeDiscriminator(0x1f, 0x1ff, 0).value());<br>
> +  EXPECT_EQ(0x3ff3eU,<br>
> +            DILocation::encodeDiscriminator(0x1f, 0x1ff, 0).getValue());<br>
><br>
>    EXPECT_EQ(0x1ff87feU,<br>
> -            DILocation::encodeDiscriminator(0x1ff, 0x1ff, 0).value());<br>
> +            DILocation::encodeDiscriminator(0x1ff, 0x1ff, 0).getValue());<br>
><br>
>    EXPECT_EQ(0xfff9f3eU,<br>
> -            DILocation::encodeDiscriminator(0x1f, 0x1f, 0xfff).value());<br>
> +            DILocation::encodeDiscriminator(0x1f, 0x1f, 0xfff).getValue());<br>
><br>
>    EXPECT_EQ(0xffc3ff3eU,<br>
> -            DILocation::encodeDiscriminator(0x1f, 0x1ff, 0x1ff).value());<br>
> +            DILocation::encodeDiscriminator(0x1f, 0x1ff, 0x1ff).getValue());<br>
><br>
>    EXPECT_EQ(0xffcf87feU,<br>
> -            DILocation::encodeDiscriminator(0x1ff, 0x1f, 0x1ff).value());<br>
> +            DILocation::encodeDiscriminator(0x1ff, 0x1f, 0x1ff).getValue());<br>
><br>
>    EXPECT_EQ(0xe1ff87feU,<br>
> -            DILocation::encodeDiscriminator(0x1ff, 0x1ff, 7).value());<br>
> +            DILocation::encodeDiscriminator(0x1ff, 0x1ff, 7).getValue());<br>
>  }<br>
><br>
>  TEST_F(DILocationTest, discriminatorEncodingNegativeTests) {<br>
> @@ -1112,36 +1113,36 @@ TEST_F(DILocationTest, discriminatorSpecialCases) {<br>
>    EXPECT_EQ(0U, L1->getBaseDiscriminator());<br>
>    EXPECT_EQ(1U, L1->getDuplicationFactor());<br>
><br>
> -  EXPECT_EQ(L1, L1->cloneWithBaseDiscriminator(0).value());<br>
> -  EXPECT_EQ(L1, L1->cloneByMultiplyingDuplicationFactor(0).value());<br>
> -  EXPECT_EQ(L1, L1->cloneByMultiplyingDuplicationFactor(1).value());<br>
> +  EXPECT_EQ(L1, L1->cloneWithBaseDiscriminator(0).getValue());<br>
> +  EXPECT_EQ(L1, L1->cloneByMultiplyingDuplicationFactor(0).getValue());<br>
> +  EXPECT_EQ(L1, L1->cloneByMultiplyingDuplicationFactor(1).getValue());<br>
><br>
> -  auto L2 = L1->cloneWithBaseDiscriminator(1).value();<br>
> +  auto L2 = L1->cloneWithBaseDiscriminator(1).getValue();<br>
>    EXPECT_EQ(0U, L1->getBaseDiscriminator());<br>
>    EXPECT_EQ(1U, L1->getDuplicationFactor());<br>
><br>
>    EXPECT_EQ(1U, L2->getBaseDiscriminator());<br>
>    EXPECT_EQ(1U, L2->getDuplicationFactor());<br>
><br>
> -  auto L3 = L2->cloneByMultiplyingDuplicationFactor(2).value();<br>
> +  auto L3 = L2->cloneByMultiplyingDuplicationFactor(2).getValue();<br>
>    EXPECT_EQ(1U, L3->getBaseDiscriminator());<br>
>    EXPECT_EQ(2U, L3->getDuplicationFactor());<br>
><br>
> -  EXPECT_EQ(L2, L2->cloneByMultiplyingDuplicationFactor(1).value());<br>
> +  EXPECT_EQ(L2, L2->cloneByMultiplyingDuplicationFactor(1).getValue());<br>
><br>
> -  auto L4 = L3->cloneByMultiplyingDuplicationFactor(4).value();<br>
> +  auto L4 = L3->cloneByMultiplyingDuplicationFactor(4).getValue();<br>
>    EXPECT_EQ(1U, L4->getBaseDiscriminator());<br>
>    EXPECT_EQ(8U, L4->getDuplicationFactor());<br>
><br>
> -  auto L5 = L4->cloneWithBaseDiscriminator(2).value();<br>
> +  auto L5 = L4->cloneWithBaseDiscriminator(2).getValue();<br>
>    EXPECT_EQ(2U, L5->getBaseDiscriminator());<br>
>    EXPECT_EQ(8U, L5->getDuplicationFactor());<br>
><br>
>    // Check extreme cases<br>
> -  auto L6 = L1->cloneWithBaseDiscriminator(0xfff).value();<br>
> +  auto L6 = L1->cloneWithBaseDiscriminator(0xfff).getValue();<br>
>    EXPECT_EQ(0xfffU, L6->getBaseDiscriminator());<br>
>    EXPECT_EQ(0xfffU, L6->cloneByMultiplyingDuplicationFactor(0xfff)<br>
> -                        .value()<br>
> +                        .getValue()<br>
>                          ->getDuplicationFactor());<br>
><br>
>    // Check we return None for unencodable cases.<br>
> @@ -2932,24 +2933,22 @@ TEST_F(DIExpressionTest, createFragmentExpression) {<br>
>  #define EXPECT_VALID_FRAGMENT(Offset, Size, ...)                               \<br>
>    do {                                                                         \<br>
>      uint64_t Elements[] = {__VA_ARGS__};                                       \<br>
> -    DIExpression *Expression = DIExpression::get(Context, Elements);           \<br>
> -    EXPECT_TRUE(                                                               \<br>
> -        DIExpression::createFragmentExpression(Expression, Offset, Size)       \<br>
> -            .has_value());                                                     \<br>
> +    DIExpression* Expression = DIExpression::get(Context, Elements);           \<br>
> +    EXPECT_TRUE(DIExpression::createFragmentExpression(                        \<br>
> +      Expression, Offset, Size).hasValue());                                   \<br>
>    } while (false)<br>
>  #define EXPECT_INVALID_FRAGMENT(Offset, Size, ...)                             \<br>
>    do {                                                                         \<br>
>      uint64_t Elements[] = {__VA_ARGS__};                                       \<br>
> -    DIExpression *Expression = DIExpression::get(Context, Elements);           \<br>
> -    EXPECT_FALSE(                                                              \<br>
> -        DIExpression::createFragmentExpression(Expression, Offset, Size)       \<br>
> -            .has_value());                                                     \<br>
> +    DIExpression* Expression = DIExpression::get(Context, Elements);           \<br>
> +    EXPECT_FALSE(DIExpression::createFragmentExpression(                       \<br>
> +      Expression, Offset, Size).hasValue());                                   \<br>
>    } while (false)<br>
><br>
>    // createFragmentExpression adds correct ops.<br>
>    Optional<DIExpression*> R = DIExpression::createFragmentExpression(<br>
>      DIExpression::get(Context, {}), 0, 32);<br>
> -  EXPECT_EQ(R.has_value(), true);<br>
> +  EXPECT_EQ(R.hasValue(), true);<br>
>    EXPECT_EQ(3u, (*R)->getNumElements());<br>
>    EXPECT_EQ(dwarf::DW_OP_LLVM_fragment, (*R)->getElement(0));<br>
>    EXPECT_EQ(0u, (*R)->getElement(1));<br>
> @@ -3456,20 +3455,20 @@ TEST_F(FunctionAttachmentTest, Verifier) {<br>
><br>
>  TEST_F(FunctionAttachmentTest, RealEntryCount) {<br>
>    Function *F = getFunction("foo");<br>
> -  EXPECT_FALSE(F->getEntryCount().has_value());<br>
> +  EXPECT_FALSE(F->getEntryCount().hasValue());<br>
>    F->setEntryCount(12304, Function::PCT_Real);<br>
>    auto Count = F->getEntryCount();<br>
> -  EXPECT_TRUE(Count.has_value());<br>
> +  EXPECT_TRUE(Count.hasValue());<br>
>    EXPECT_EQ(12304u, Count->getCount());<br>
>    EXPECT_EQ(Function::PCT_Real, Count->getType());<br>
>  }<br>
><br>
>  TEST_F(FunctionAttachmentTest, SyntheticEntryCount) {<br>
>    Function *F = getFunction("bar");<br>
> -  EXPECT_FALSE(F->getEntryCount().has_value());<br>
> +  EXPECT_FALSE(F->getEntryCount().hasValue());<br>
>    F->setEntryCount(123, Function::PCT_Synthetic);<br>
>    auto Count = F->getEntryCount(true /*allow synthetic*/);<br>
> -  EXPECT_TRUE(Count.has_value());<br>
> +  EXPECT_TRUE(Count.hasValue());<br>
>    EXPECT_EQ(123u, Count->getCount());<br>
>    EXPECT_EQ(Function::PCT_Synthetic, Count->getType());<br>
>  }<br>
><br>
> diff  --git a/llvm/unittests/IR/VPIntrinsicTest.cpp b/llvm/unittests/IR/VPIntrinsicTest.cpp<br>
> index 34123efd18ba3..62e16df1f4916 100644<br>
> --- a/llvm/unittests/IR/VPIntrinsicTest.cpp<br>
> +++ b/llvm/unittests/IR/VPIntrinsicTest.cpp<br>
> @@ -128,25 +128,25 @@ class VPIntrinsicTest : public testing::Test {<br>
>  TEST_F(VPIntrinsicTest, VPIntrinsicsDefScopes) {<br>
>    Optional<Intrinsic::ID> ScopeVPID;<br>
>  #define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...)                                 \<br>
> -  ASSERT_FALSE(ScopeVPID.has_value());                                         \<br>
> +  ASSERT_FALSE(ScopeVPID.hasValue());                                          \<br>
>    ScopeVPID = Intrinsic::VPID;<br>
>  #define END_REGISTER_VP_INTRINSIC(VPID)                                        \<br>
> -  ASSERT_TRUE(ScopeVPID.has_value());                                          \<br>
> -  ASSERT_EQ(*ScopeVPID, Intrinsic::VPID);                                      \<br>
> +  ASSERT_TRUE(ScopeVPID.hasValue());                                           \<br>
> +  ASSERT_EQ(ScopeVPID.getValue(), Intrinsic::VPID);                            \<br>
>    ScopeVPID = None;<br>
><br>
>    Optional<ISD::NodeType> ScopeOPC;<br>
>  #define BEGIN_REGISTER_VP_SDNODE(SDOPC, ...)                                   \<br>
> -  ASSERT_FALSE(ScopeOPC.has_value());                                          \<br>
> +  ASSERT_FALSE(ScopeOPC.hasValue());                                           \<br>
>    ScopeOPC = ISD::SDOPC;<br>
>  #define END_REGISTER_VP_SDNODE(SDOPC)                                          \<br>
> -  ASSERT_TRUE(ScopeOPC.has_value());                                           \<br>
> -  ASSERT_EQ(*ScopeOPC, ISD::SDOPC);                                            \<br>
> +  ASSERT_TRUE(ScopeOPC.hasValue());                                            \<br>
> +  ASSERT_EQ(ScopeOPC.getValue(), ISD::SDOPC);                                  \<br>
>    ScopeOPC = None;<br>
>  #include "llvm/IR/VPIntrinsics.def"<br>
><br>
> -  ASSERT_FALSE(ScopeVPID.has_value());<br>
> -  ASSERT_FALSE(ScopeOPC.has_value());<br>
> +  ASSERT_FALSE(ScopeVPID.hasValue());<br>
> +  ASSERT_FALSE(ScopeOPC.hasValue());<br>
>  }<br>
><br>
>  /// Check that every VP intrinsic in the test module is recognized as a VP<br>
> @@ -233,8 +233,8 @@ TEST_F(VPIntrinsicTest, GetParamPos) {<br>
>      ASSERT_TRUE(F.isIntrinsic());<br>
>      Optional<unsigned> MaskParamPos =<br>
>          VPIntrinsic::getMaskParamPos(F.getIntrinsicID());<br>
> -    if (MaskParamPos) {<br>
> -      Type *MaskParamType = F.getArg(*MaskParamPos)->getType();<br>
> +    if (MaskParamPos.hasValue()) {<br>
> +      Type *MaskParamType = F.getArg(MaskParamPos.getValue())->getType();<br>
>        ASSERT_TRUE(MaskParamType->isVectorTy());<br>
>        ASSERT_TRUE(<br>
>            cast<VectorType>(MaskParamType)->getElementType()->isIntegerTy(1));<br>
> @@ -242,8 +242,8 @@ TEST_F(VPIntrinsicTest, GetParamPos) {<br>
><br>
>      Optional<unsigned> VecLenParamPos =<br>
>          VPIntrinsic::getVectorLengthParamPos(F.getIntrinsicID());<br>
> -    if (VecLenParamPos) {<br>
> -      Type *VecLenParamType = F.getArg(*VecLenParamPos)->getType();<br>
> +    if (VecLenParamPos.hasValue()) {<br>
> +      Type *VecLenParamType = F.getArg(VecLenParamPos.getValue())->getType();<br>
>        ASSERT_TRUE(VecLenParamType->isIntegerTy(32));<br>
>      }<br>
>    }<br>
> @@ -406,13 +406,13 @@ TEST_F(VPIntrinsicTest, VPReductions) {<br>
><br>
>      if (!VPReductionIntrinsic::isVPReduction(ID)) {<br>
>        EXPECT_EQ(VPRedI, nullptr);<br>
> -      EXPECT_EQ(VPReductionIntrinsic::getStartParamPos(ID).has_value(), false);<br>
> -      EXPECT_EQ(VPReductionIntrinsic::getVectorParamPos(ID).has_value(), false);<br>
> +      EXPECT_EQ(VPReductionIntrinsic::getStartParamPos(ID).hasValue(), false);<br>
> +      EXPECT_EQ(VPReductionIntrinsic::getVectorParamPos(ID).hasValue(), false);<br>
>        continue;<br>
>      }<br>
><br>
> -    EXPECT_EQ(VPReductionIntrinsic::getStartParamPos(ID).has_value(), true);<br>
> -    EXPECT_EQ(VPReductionIntrinsic::getVectorParamPos(ID).has_value(), true);<br>
> +    EXPECT_EQ(VPReductionIntrinsic::getStartParamPos(ID).hasValue(), true);<br>
> +    EXPECT_EQ(VPReductionIntrinsic::getVectorParamPos(ID).hasValue(), true);<br>
>      ASSERT_NE(VPRedI, nullptr);<br>
>      EXPECT_EQ(VPReductionIntrinsic::getStartParamPos(ID),<br>
>                VPRedI->getStartParamPos());<br>
><br>
> diff  --git a/llvm/unittests/InterfaceStub/ELFYAMLTest.cpp b/llvm/unittests/InterfaceStub/ELFYAMLTest.cpp<br>
> index d347e1755cea3..404dfd3e6b686 100644<br>
> --- a/llvm/unittests/InterfaceStub/ELFYAMLTest.cpp<br>
> +++ b/llvm/unittests/InterfaceStub/ELFYAMLTest.cpp<br>
> @@ -47,9 +47,9 @@ TEST(ElfYamlTextAPI, YAMLReadableTBE) {<br>
>    ASSERT_THAT_ERROR(StubOrErr.takeError(), Succeeded());<br>
>    std::unique_ptr<IFSStub> Stub = std::move(StubOrErr.get());<br>
>    EXPECT_NE(Stub.get(), nullptr);<br>
> -  EXPECT_FALSE(Stub->SoName.has_value());<br>
> -  EXPECT_TRUE(Stub->Target.Arch.has_value());<br>
> -  EXPECT_EQ(Stub->Target.Arch.value(), (uint16_t)llvm::ELF::EM_X86_64);<br>
> +  EXPECT_FALSE(Stub->SoName.hasValue());<br>
> +  EXPECT_TRUE(Stub->Target.Arch.hasValue());<br>
> +  EXPECT_EQ(Stub->Target.Arch.getValue(), (uint16_t)llvm::ELF::EM_X86_64);<br>
>    EXPECT_EQ(Stub->NeededLibs.size(), 3u);<br>
>    EXPECT_STREQ(Stub->NeededLibs[0].c_str(), "libc.so");<br>
>    EXPECT_STREQ(Stub->NeededLibs[1].c_str(), "libfoo.so");<br>
> @@ -94,24 +94,24 @@ TEST(ElfYamlTextAPI, YAMLReadsTBESymbols) {<br>
>    EXPECT_EQ(SymBaz.Type, IFSSymbolType::TLS);<br>
>    EXPECT_FALSE(SymBaz.Undefined);<br>
>    EXPECT_FALSE(SymBaz.Weak);<br>
> -  EXPECT_FALSE(SymBaz.Warning.has_value());<br>
> +  EXPECT_FALSE(SymBaz.Warning.hasValue());<br>
><br>
>    IFSSymbol const &SymFoo = *Iterator++;<br>
>    EXPECT_STREQ(SymFoo.Name.c_str(), "foo");<br>
> -  EXPECT_FALSE(SymFoo.Size.has_value());<br>
> +  EXPECT_FALSE(SymFoo.Size.hasValue());<br>
>    EXPECT_EQ(SymFoo.Type, IFSSymbolType::Func);<br>
>    EXPECT_FALSE(SymFoo.Undefined);<br>
>    EXPECT_FALSE(SymFoo.Weak);<br>
> -  EXPECT_TRUE(SymFoo.Warning.has_value());<br>
> +  EXPECT_TRUE(SymFoo.Warning.hasValue());<br>
>    EXPECT_STREQ(SymFoo.Warning->c_str(), "Deprecated!");<br>
><br>
>    IFSSymbol const &SymNor = *Iterator++;<br>
>    EXPECT_STREQ(SymNor.Name.c_str(), "nor");<br>
> -  EXPECT_FALSE(SymNor.Size.has_value());<br>
> +  EXPECT_FALSE(SymNor.Size.hasValue());<br>
>    EXPECT_EQ(SymNor.Type, IFSSymbolType::NoType);<br>
>    EXPECT_TRUE(SymNor.Undefined);<br>
>    EXPECT_FALSE(SymNor.Weak);<br>
> -  EXPECT_FALSE(SymNor.Warning.has_value());<br>
> +  EXPECT_FALSE(SymNor.Warning.hasValue());<br>
><br>
>    IFSSymbol const &SymNot = *Iterator++;<br>
>    EXPECT_STREQ(SymNot.Name.c_str(), "not");<br>
><br>
> diff  --git a/llvm/unittests/Object/XCOFFObjectFileTest.cpp b/llvm/unittests/Object/XCOFFObjectFileTest.cpp<br>
> index cf2be43c33988..41662be0b6dbb 100644<br>
> --- a/llvm/unittests/Object/XCOFFObjectFileTest.cpp<br>
> +++ b/llvm/unittests/Object/XCOFFObjectFileTest.cpp<br>
> @@ -83,16 +83,16 @@ TEST(XCOFFObjectFileTest, XCOFFTracebackTableAPIGeneral) {<br>
>    EXPECT_TRUE(TT.hasParmsOnStack());<br>
><br>
>    ASSERT_TRUE(TT.getParmsType());<br>
> -  EXPECT_EQ(TT.getParmsType().value(), "i, f, d");<br>
> +  EXPECT_EQ(TT.getParmsType().getValue(), "i, f, d");<br>
><br>
>    ASSERT_TRUE(TT.getTraceBackTableOffset());<br>
> -  EXPECT_EQ(TT.getTraceBackTableOffset().value(), 64u);<br>
> +  EXPECT_EQ(TT.getTraceBackTableOffset().getValue(), 64u);<br>
><br>
>    EXPECT_FALSE(TT.getHandlerMask());<br>
><br>
>    ASSERT_TRUE(TT.getFunctionName());<br>
> -  EXPECT_EQ(TT.getFunctionName().value(), "add_all");<br>
> -  EXPECT_EQ(TT.getFunctionName()->size(), 7u);<br>
> +  EXPECT_EQ(TT.getFunctionName().getValue(), "add_all");<br>
> +  EXPECT_EQ(TT.getFunctionName().getValue().size(), 7u);<br>
><br>
>    EXPECT_FALSE(TT.getAllocaRegister());<br>
>    EXPECT_EQ(Size, 25u);<br>
> @@ -171,11 +171,11 @@ TEST(XCOFFObjectFileTest, XCOFFTracebackTableAPIControlledStorageInfoDisp) {<br>
>    XCOFFTracebackTable TT = *TTOrErr;<br>
>    EXPECT_TRUE(TT.hasControlledStorage());<br>
>    ASSERT_TRUE(TT.getNumOfCtlAnchors());<br>
> -  EXPECT_EQ(TT.getNumOfCtlAnchors().value(), 2u);<br>
> +  EXPECT_EQ(TT.getNumOfCtlAnchors().getValue(), 2u);<br>
><br>
>    ASSERT_TRUE(TT.getControlledStorageInfoDisp());<br>
><br>
> -  SmallVector<uint32_t, 8> Disp = TT.getControlledStorageInfoDisp().value();<br>
> +  SmallVector<uint32_t, 8> Disp = TT.getControlledStorageInfoDisp().getValue();<br>
><br>
>    ASSERT_EQ(Disp.size(), 2UL);<br>
>    EXPECT_EQ(Disp[0], 0x05050000u);<br>
> @@ -207,10 +207,10 @@ TEST(XCOFFObjectFileTest, XCOFFTracebackTableAPIHasVectorInfo) {<br>
>    EXPECT_TRUE(TT.hasExtensionTable());<br>
><br>
>    ASSERT_TRUE(TT.getParmsType());<br>
> -  EXPECT_EQ(TT.getParmsType().value(), "v, i, f, i, d, i, v");<br>
> +  EXPECT_EQ(TT.getParmsType().getValue(), "v, i, f, i, d, i, v");<br>
><br>
>    ASSERT_TRUE(TT.getVectorExt());<br>
> -  TBVectorExt VecExt = TT.getVectorExt().value();<br>
> +  TBVectorExt VecExt = TT.getVectorExt().getValue();<br>
><br>
>    EXPECT_EQ(VecExt.getNumberOfVRSaved(), 0);<br>
>    EXPECT_TRUE(VecExt.isVRSavedOnStack());<br>
> @@ -240,10 +240,10 @@ TEST(XCOFFObjectFileTest, XCOFFTracebackTableAPIHasVectorInfo1) {<br>
>    XCOFFTracebackTable TT = *TTOrErr;<br>
><br>
>    ASSERT_TRUE(TT.getParmsType());<br>
> -  EXPECT_EQ(TT.getParmsType().value(), "v, i, f, i, d, i, v, v");<br>
> +  EXPECT_EQ(TT.getParmsType().getValue(), "v, i, f, i, d, i, v, v");<br>
><br>
>    ASSERT_TRUE(TT.getVectorExt());<br>
> -  TBVectorExt VecExt = TT.getVectorExt().value();<br>
> +  TBVectorExt VecExt = TT.getVectorExt().getValue();<br>
><br>
>    EXPECT_EQ(VecExt.getNumberOfVRSaved(), 4);<br>
>    EXPECT_FALSE(VecExt.isVRSavedOnStack());<br>
><br>
> diff  --git a/llvm/unittests/ObjectYAML/DWARFYAMLTest.cpp b/llvm/unittests/ObjectYAML/DWARFYAMLTest.cpp<br>
> index 09c9e352460de..91febffdfcc3a 100644<br>
> --- a/llvm/unittests/ObjectYAML/DWARFYAMLTest.cpp<br>
> +++ b/llvm/unittests/ObjectYAML/DWARFYAMLTest.cpp<br>
> @@ -91,8 +91,8 @@ TEST(DebugPubSection, TestDebugPubSection) {<br>
>    DWARFYAML::Data Data;<br>
>    ASSERT_THAT_ERROR(parseDWARFYAML(Yaml, Data), Succeeded());<br>
><br>
> -  ASSERT_TRUE(Data.PubNames.has_value());<br>
> -  DWARFYAML::PubSection PubNames = Data.PubNames.value();<br>
> +  ASSERT_TRUE(Data.PubNames.hasValue());<br>
> +  DWARFYAML::PubSection PubNames = Data.PubNames.getValue();<br>
><br>
>    ASSERT_EQ(PubNames.Entries.size(), 2u);<br>
>    EXPECT_EQ((uint32_t)PubNames.Entries[0].DieOffset, 0x1234u);<br>
> @@ -100,8 +100,8 @@ TEST(DebugPubSection, TestDebugPubSection) {<br>
>    EXPECT_EQ((uint32_t)PubNames.Entries[1].DieOffset, 0x4321u);<br>
>    EXPECT_EQ(PubNames.Entries[1].Name, "def");<br>
><br>
> -  ASSERT_TRUE(Data.PubTypes.has_value());<br>
> -  DWARFYAML::PubSection PubTypes = Data.PubTypes.value();<br>
> +  ASSERT_TRUE(Data.PubTypes.hasValue());<br>
> +  DWARFYAML::PubSection PubTypes = Data.PubTypes.getValue();<br>
><br>
>    ASSERT_EQ(PubTypes.Entries.size(), 2u);<br>
>    EXPECT_EQ((uint32_t)PubTypes.Entries[0].DieOffset, 0x1234u);<br>
> @@ -157,8 +157,8 @@ TEST(DebugGNUPubSection, TestDebugGNUPubSections) {<br>
>    DWARFYAML::Data Data;<br>
>    ASSERT_THAT_ERROR(parseDWARFYAML(Yaml, Data), Succeeded());<br>
><br>
> -  ASSERT_TRUE(Data.GNUPubNames.has_value());<br>
> -  DWARFYAML::PubSection GNUPubNames = Data.GNUPubNames.value();<br>
> +  ASSERT_TRUE(Data.GNUPubNames.hasValue());<br>
> +  DWARFYAML::PubSection GNUPubNames = Data.GNUPubNames.getValue();<br>
><br>
>    ASSERT_EQ(GNUPubNames.Entries.size(), 2u);<br>
>    EXPECT_EQ((uint32_t)GNUPubNames.Entries[0].DieOffset, 0x1234u);<br>
> @@ -168,8 +168,8 @@ TEST(DebugGNUPubSection, TestDebugGNUPubSections) {<br>
>    EXPECT_EQ((uint8_t)GNUPubNames.Entries[1].Descriptor, 0x34);<br>
>    EXPECT_EQ(GNUPubNames.Entries[1].Name, "def");<br>
><br>
> -  ASSERT_TRUE(Data.GNUPubTypes.has_value());<br>
> -  DWARFYAML::PubSection GNUPubTypes = Data.GNUPubTypes.value();<br>
> +  ASSERT_TRUE(Data.GNUPubTypes.hasValue());<br>
> +  DWARFYAML::PubSection GNUPubTypes = Data.GNUPubTypes.getValue();<br>
><br>
>    ASSERT_EQ(GNUPubTypes.Entries.size(), 2u);<br>
>    EXPECT_EQ((uint32_t)GNUPubTypes.Entries[0].DieOffset, 0x1234u);<br>
><br>
> diff  --git a/llvm/unittests/ProfileData/MemProfTest.cpp b/llvm/unittests/ProfileData/MemProfTest.cpp<br>
> index 290d33154e6c0..480848100446b 100644<br>
> --- a/llvm/unittests/ProfileData/MemProfTest.cpp<br>
> +++ b/llvm/unittests/ProfileData/MemProfTest.cpp<br>
> @@ -104,9 +104,9 @@ MATCHER_P4(FrameContains, FunctionName, LineOffset, Column, Inline, "") {<br>
>      *result_listener << "Hash mismatch";<br>
>      return false;<br>
>    }<br>
> -  if (F.SymbolName && F.SymbolName.value() != FunctionName) {<br>
> +  if (F.SymbolName.hasValue() && F.SymbolName.getValue() != FunctionName) {<br>
>      *result_listener << "SymbolName mismatch\nWant: " << FunctionName<br>
> -                     << "\nGot: " << F.SymbolName.value();<br>
> +                     << "\nGot: " << F.SymbolName.getValue();<br>
>      return false;<br>
>    }<br>
>    if (F.LineOffset == LineOffset && F.Column == Column &&<br>
><br>
> diff  --git a/llvm/unittests/Support/AlignmentTest.cpp b/llvm/unittests/Support/AlignmentTest.cpp<br>
> index fa26b60521165..fa9199706b412 100644<br>
> --- a/llvm/unittests/Support/AlignmentTest.cpp<br>
> +++ b/llvm/unittests/Support/AlignmentTest.cpp<br>
> @@ -63,11 +63,11 @@ TEST(AlignmentTest, ValidCTors) {<br>
><br>
>  TEST(AlignmentTest, CheckMaybeAlignHasValue) {<br>
>    EXPECT_TRUE(MaybeAlign(1));<br>
> -  EXPECT_TRUE(MaybeAlign(1).has_value());<br>
> +  EXPECT_TRUE(MaybeAlign(1).hasValue());<br>
>    EXPECT_FALSE(MaybeAlign(0));<br>
> -  EXPECT_FALSE(MaybeAlign(0).has_value());<br>
> +  EXPECT_FALSE(MaybeAlign(0).hasValue());<br>
>    EXPECT_FALSE(MaybeAlign());<br>
> -  EXPECT_FALSE(MaybeAlign().has_value());<br>
> +  EXPECT_FALSE(MaybeAlign().hasValue());<br>
>  }<br>
><br>
>  TEST(AlignmentTest, Division) {<br>
> @@ -165,8 +165,8 @@ TEST(AlignmentTest, isAligned_isAddrAligned) {<br>
>      MaybeAlign A(T.alignment);<br>
>      // Test Align<br>
>      if (A) {<br>
> -      EXPECT_EQ(isAligned(*A, T.offset), T.isAligned);<br>
> -      EXPECT_EQ(isAddrAligned(*A, T.forgedAddr()), T.isAligned);<br>
> +      EXPECT_EQ(isAligned(A.getValue(), T.offset), T.isAligned);<br>
> +      EXPECT_EQ(isAddrAligned(A.getValue(), T.forgedAddr()), T.isAligned);<br>
>      }<br>
>    }<br>
>  }<br>
><br>
> diff  --git a/llvm/unittests/Support/Casting.cpp b/llvm/unittests/Support/Casting.cpp<br>
> index bebb36fc61f22..311fefd728785 100644<br>
> --- a/llvm/unittests/Support/Casting.cpp<br>
> +++ b/llvm/unittests/Support/Casting.cpp<br>
> @@ -248,11 +248,11 @@ TEST(CastingTest, dyn_cast_value_types) {<br>
>  TEST(CastingTest, dyn_cast_if_present) {<br>
>    Optional<T1> empty{};<br>
>    Optional<T2> F1 = dyn_cast_if_present<T2>(empty);<br>
> -  EXPECT_FALSE(F1.has_value());<br>
> +  EXPECT_FALSE(F1.hasValue());<br>
><br>
>    T1 t1;<br>
>    Optional<T2> F2 = dyn_cast_if_present<T2>(t1);<br>
> -  EXPECT_TRUE(F2.has_value());<br>
> +  EXPECT_TRUE(F2.hasValue());<br>
><br>
>    T1 *t1Null = nullptr;<br>
><br>
><br>
> diff  --git a/llvm/unittests/Support/KnownBitsTest.cpp b/llvm/unittests/Support/KnownBitsTest.cpp<br>
> index 1411c2edf608b..9ef62bb90fcc4 100644<br>
> --- a/llvm/unittests/Support/KnownBitsTest.cpp<br>
> +++ b/llvm/unittests/Support/KnownBitsTest.cpp<br>
> @@ -358,38 +358,38 @@ TEST(KnownBitsTest, ICmpExhaustive) {<br>
>        Optional<bool> KnownSLT = KnownBits::slt(Known1, Known2);<br>
>        Optional<bool> KnownSLE = KnownBits::sle(Known1, Known2);<br>
><br>
> -      EXPECT_EQ(AllEQ || NoneEQ, KnownEQ.has_value());<br>
> -      EXPECT_EQ(AllNE || NoneNE, KnownNE.has_value());<br>
> -      EXPECT_EQ(AllUGT || NoneUGT, KnownUGT.has_value());<br>
> -      EXPECT_EQ(AllUGE || NoneUGE, KnownUGE.has_value());<br>
> -      EXPECT_EQ(AllULT || NoneULT, KnownULT.has_value());<br>
> -      EXPECT_EQ(AllULE || NoneULE, KnownULE.has_value());<br>
> -      EXPECT_EQ(AllSGT || NoneSGT, KnownSGT.has_value());<br>
> -      EXPECT_EQ(AllSGE || NoneSGE, KnownSGE.has_value());<br>
> -      EXPECT_EQ(AllSLT || NoneSLT, KnownSLT.has_value());<br>
> -      EXPECT_EQ(AllSLE || NoneSLE, KnownSLE.has_value());<br>
> -<br>
> -      EXPECT_EQ(AllEQ, KnownEQ && *KnownEQ);<br>
> -      EXPECT_EQ(AllNE, KnownNE && *KnownNE);<br>
> -      EXPECT_EQ(AllUGT, KnownUGT && *KnownUGT);<br>
> -      EXPECT_EQ(AllUGE, KnownUGE && *KnownUGE);<br>
> -      EXPECT_EQ(AllULT, KnownULT && *KnownULT);<br>
> -      EXPECT_EQ(AllULE, KnownULE && *KnownULE);<br>
> -      EXPECT_EQ(AllSGT, KnownSGT && *KnownSGT);<br>
> -      EXPECT_EQ(AllSGE, KnownSGE && *KnownSGE);<br>
> -      EXPECT_EQ(AllSLT, KnownSLT && *KnownSLT);<br>
> -      EXPECT_EQ(AllSLE, KnownSLE && *KnownSLE);<br>
> -<br>
> -      EXPECT_EQ(NoneEQ, KnownEQ && !*KnownEQ);<br>
> -      EXPECT_EQ(NoneNE, KnownNE && !*KnownNE);<br>
> -      EXPECT_EQ(NoneUGT, KnownUGT && !*KnownUGT);<br>
> -      EXPECT_EQ(NoneUGE, KnownUGE && !*KnownUGE);<br>
> -      EXPECT_EQ(NoneULT, KnownULT && !*KnownULT);<br>
> -      EXPECT_EQ(NoneULE, KnownULE && !*KnownULE);<br>
> -      EXPECT_EQ(NoneSGT, KnownSGT && !*KnownSGT);<br>
> -      EXPECT_EQ(NoneSGE, KnownSGE && !*KnownSGE);<br>
> -      EXPECT_EQ(NoneSLT, KnownSLT && !*KnownSLT);<br>
> -      EXPECT_EQ(NoneSLE, KnownSLE && !*KnownSLE);<br>
> +      EXPECT_EQ(AllEQ || NoneEQ, KnownEQ.hasValue());<br>
> +      EXPECT_EQ(AllNE || NoneNE, KnownNE.hasValue());<br>
> +      EXPECT_EQ(AllUGT || NoneUGT, KnownUGT.hasValue());<br>
> +      EXPECT_EQ(AllUGE || NoneUGE, KnownUGE.hasValue());<br>
> +      EXPECT_EQ(AllULT || NoneULT, KnownULT.hasValue());<br>
> +      EXPECT_EQ(AllULE || NoneULE, KnownULE.hasValue());<br>
> +      EXPECT_EQ(AllSGT || NoneSGT, KnownSGT.hasValue());<br>
> +      EXPECT_EQ(AllSGE || NoneSGE, KnownSGE.hasValue());<br>
> +      EXPECT_EQ(AllSLT || NoneSLT, KnownSLT.hasValue());<br>
> +      EXPECT_EQ(AllSLE || NoneSLE, KnownSLE.hasValue());<br>
> +<br>
> +      EXPECT_EQ(AllEQ, KnownEQ.hasValue() && KnownEQ.getValue());<br>
> +      EXPECT_EQ(AllNE, KnownNE.hasValue() && KnownNE.getValue());<br>
> +      EXPECT_EQ(AllUGT, KnownUGT.hasValue() && KnownUGT.getValue());<br>
> +      EXPECT_EQ(AllUGE, KnownUGE.hasValue() && KnownUGE.getValue());<br>
> +      EXPECT_EQ(AllULT, KnownULT.hasValue() && KnownULT.getValue());<br>
> +      EXPECT_EQ(AllULE, KnownULE.hasValue() && KnownULE.getValue());<br>
> +      EXPECT_EQ(AllSGT, KnownSGT.hasValue() && KnownSGT.getValue());<br>
> +      EXPECT_EQ(AllSGE, KnownSGE.hasValue() && KnownSGE.getValue());<br>
> +      EXPECT_EQ(AllSLT, KnownSLT.hasValue() && KnownSLT.getValue());<br>
> +      EXPECT_EQ(AllSLE, KnownSLE.hasValue() && KnownSLE.getValue());<br>
> +<br>
> +      EXPECT_EQ(NoneEQ, KnownEQ.hasValue() && !KnownEQ.getValue());<br>
> +      EXPECT_EQ(NoneNE, KnownNE.hasValue() && !KnownNE.getValue());<br>
> +      EXPECT_EQ(NoneUGT, KnownUGT.hasValue() && !KnownUGT.getValue());<br>
> +      EXPECT_EQ(NoneUGE, KnownUGE.hasValue() && !KnownUGE.getValue());<br>
> +      EXPECT_EQ(NoneULT, KnownULT.hasValue() && !KnownULT.getValue());<br>
> +      EXPECT_EQ(NoneULE, KnownULE.hasValue() && !KnownULE.getValue());<br>
> +      EXPECT_EQ(NoneSGT, KnownSGT.hasValue() && !KnownSGT.getValue());<br>
> +      EXPECT_EQ(NoneSGE, KnownSGE.hasValue() && !KnownSGE.getValue());<br>
> +      EXPECT_EQ(NoneSLT, KnownSLT.hasValue() && !KnownSLT.getValue());<br>
> +      EXPECT_EQ(NoneSLE, KnownSLE.hasValue() && !KnownSLE.getValue());<br>
>      });<br>
>    });<br>
>  }<br>
><br>
> diff  --git a/llvm/unittests/Support/YAMLParserTest.cpp b/llvm/unittests/Support/YAMLParserTest.cpp<br>
> index 14def9c528875..692d963828318 100644<br>
> --- a/llvm/unittests/Support/YAMLParserTest.cpp<br>
> +++ b/llvm/unittests/Support/YAMLParserTest.cpp<br>
> @@ -344,12 +344,12 @@ TEST(YAMLParser, FlowSequenceTokensOutsideFlowSequence) {<br>
><br>
>  static void expectCanParseBool(StringRef S, bool Expected) {<br>
>    llvm::Optional<bool> Parsed = yaml::parseBool(S);<br>
> -  EXPECT_TRUE(Parsed.has_value());<br>
> +  EXPECT_TRUE(Parsed.hasValue());<br>
>    EXPECT_EQ(*Parsed, Expected);<br>
>  }<br>
><br>
>  static void expectCannotParseBool(StringRef S) {<br>
> -  EXPECT_FALSE(yaml::parseBool(S).has_value());<br>
> +  EXPECT_FALSE(yaml::parseBool(S).hasValue());<br>
>  }<br>
><br>
>  TEST(YAMLParser, ParsesBools) {<br>
><br>
> diff  --git a/llvm/unittests/TableGen/ParserEntryPointTest.cpp b/llvm/unittests/TableGen/ParserEntryPointTest.cpp<br>
> index a227f3d6715bc..23642b6fd751c 100644<br>
> --- a/llvm/unittests/TableGen/ParserEntryPointTest.cpp<br>
> +++ b/llvm/unittests/TableGen/ParserEntryPointTest.cpp<br>
> @@ -35,6 +35,6 @@ TEST(Parser, SanityTest) {<br>
><br>
>    Record *Foo = Records.getDef("Foo");<br>
>    Optional<StringRef> Field = Foo->getValueAsOptionalString("strField");<br>
> -  EXPECT_TRUE(Field.has_value());<br>
> -  EXPECT_EQ(*Field, "value");<br>
> +  EXPECT_TRUE(Field.hasValue());<br>
> +  EXPECT_EQ(Field.getValue(), "value");<br>
>  }<br>
><br>
> diff  --git a/llvm/utils/TableGen/GlobalISel/GIMatchTree.h b/llvm/utils/TableGen/GlobalISel/GIMatchTree.h<br>
> index 55a86259661db..56df37731c09a 100644<br>
> --- a/llvm/utils/TableGen/GlobalISel/GIMatchTree.h<br>
> +++ b/llvm/utils/TableGen/GlobalISel/GIMatchTree.h<br>
> @@ -32,11 +32,11 @@ class GIMatchTreeVariableBinding {<br>
>                               Optional<unsigned> OpIdx = None)<br>
>        : Name(Name), InstrID(InstrID), OpIdx(OpIdx) {}<br>
><br>
> -  bool isInstr() const { return !OpIdx; }<br>
> +  bool isInstr() const { return !OpIdx.hasValue(); }<br>
>    StringRef getName() const { return Name; }<br>
>    unsigned getInstrID() const { return InstrID; }<br>
>    unsigned getOpIdx() const {<br>
> -    assert(OpIdx && "Is not an operand binding");<br>
> +    assert(OpIdx.hasValue() && "Is not an operand binding");<br>
>      return *OpIdx;<br>
>    }<br>
>  };<br>
><br>
> diff  --git a/llvm/utils/TableGen/GlobalISelEmitter.cpp b/llvm/utils/TableGen/GlobalISelEmitter.cpp<br>
> index e5e216baa74d7..e4ea6daee9deb 100644<br>
> --- a/llvm/utils/TableGen/GlobalISelEmitter.cpp<br>
> +++ b/llvm/utils/TableGen/GlobalISelEmitter.cpp<br>
> @@ -2936,14 +2936,14 @@ class RenderComplexPatternOperand : public OperandRenderer {<br>
>    }<br>
><br>
>    void emitRenderOpcodes(MatchTable &Table, RuleMatcher &Rule) const override {<br>
> -    Table << MatchTable::Opcode(SubOperand ? "GIR_ComplexSubOperandRenderer"<br>
> -                                           : "GIR_ComplexRenderer")<br>
> +    Table << MatchTable::Opcode(SubOperand.hasValue() ? "GIR_ComplexSubOperandRenderer"<br>
> +                                                      : "GIR_ComplexRenderer")<br>
>            << MatchTable::Comment("InsnID") << MatchTable::IntValue(InsnID)<br>
>            << MatchTable::Comment("RendererID")<br>
>            << MatchTable::IntValue(RendererID);<br>
> -    if (SubOperand)<br>
> +    if (SubOperand.hasValue())<br>
>        Table << MatchTable::Comment("SubOperand")<br>
> -            << MatchTable::IntValue(*SubOperand);<br>
> +            << MatchTable::IntValue(SubOperand.getValue());<br>
>      Table << MatchTable::Comment(SymbolicName) << MatchTable::LineBreak;<br>
>    }<br>
>  };<br>
> @@ -4946,8 +4946,8 @@ Error GlobalISelEmitter::importDefaultOperandRenderers(<br>
>        auto Def = DefaultDefOp->getDef();<br>
>        if (Def->getName() == "undef_tied_input") {<br>
>          unsigned TempRegID = M.allocateTempRegID();<br>
> -        M.insertAction<MakeTempRegisterAction>(InsertPt, *OpTyOrNone,<br>
> -                                               TempRegID);<br>
> +        M.insertAction<MakeTempRegisterAction>(<br>
> +          InsertPt, OpTyOrNone.getValue(), TempRegID);<br>
>          InsertPt = M.insertAction<BuildMIAction>(<br>
>            InsertPt, M.allocateOutputInsnID(),<br>
>            &Target.getInstruction(RK.getDef("IMPLICIT_DEF")));<br>
><br>
> diff  --git a/mlir/include/mlir/Dialect/Affine/Analysis/AffineStructures.h b/mlir/include/mlir/Dialect/Affine/Analysis/AffineStructures.h<br>
> index d4f9414840872..b307f0d4d2e33 100644<br>
> --- a/mlir/include/mlir/Dialect/Affine/Analysis/AffineStructures.h<br>
> +++ b/mlir/include/mlir/Dialect/Affine/Analysis/AffineStructures.h<br>
> @@ -400,13 +400,13 @@ class FlatAffineValueConstraints : public presburger::IntegerPolyhedron {<br>
>    inline Value getValue(unsigned pos) const {<br>
>      assert(pos < getNumDimAndSymbolIds() && "Invalid position");<br>
>      assert(hasValue(pos) && "identifier's Value not set");<br>
> -    return values[pos].value();<br>
> +    return values[pos].getValue();<br>
>    }<br>
><br>
>    /// Returns true if the pos^th identifier has an associated Value.<br>
>    inline bool hasValue(unsigned pos) const {<br>
>      assert(pos < getNumDimAndSymbolIds() && "Invalid position");<br>
> -    return values[pos].has_value();<br>
> +    return values[pos].hasValue();<br>
>    }<br>
><br>
>    /// Returns true if at least one identifier has an associated Value.<br>
><br>
> diff  --git a/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td b/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td<br>
> index 52a7ef3dfaa03..1b547bb89ef19 100644<br>
> --- a/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td<br>
> +++ b/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td<br>
> @@ -347,8 +347,8 @@ def LLVM_FNegOp : LLVM_UnaryFloatArithmeticOp<<br>
>  // of LLVM ops that accept such an attribute.<br>
>  class MemoryOpWithAlignmentBase {<br>
>    code setAlignmentCode = [{<br>
> -    if ($alignment) {<br>
> -      auto align = *$alignment;<br>
> +    if ($alignment.hasValue()) {<br>
> +      auto align = $alignment.getValue();<br>
>        if (align != 0)<br>
>          inst->setAlignment(llvm::Align(align));<br>
>      }<br>
><br>
> diff  --git a/mlir/include/mlir/Dialect/LLVMIR/NVVMOps.td b/mlir/include/mlir/Dialect/LLVMIR/NVVMOps.td<br>
> index e51460ed8b290..24287f1397083 100644<br>
> --- a/mlir/include/mlir/Dialect/LLVMIR/NVVMOps.td<br>
> +++ b/mlir/include/mlir/Dialect/LLVMIR/NVVMOps.td<br>
> @@ -568,8 +568,8 @@ class MMA_SYNC_INTR {<br>
>         # op[1].ptx_elt_type # "\" == eltypeB && "<br>
>         # " \"" # op[2].ptx_elt_type # "\" == eltypeC && "<br>
>         # " \"" # op[3].ptx_elt_type # "\" == eltypeD "<br>
> -       # " && (sat  ? " # sat # " == static_cast<int>(*sat) : true)"<br>
> -       # !if(!ne(b1op, ""), " && (b1Op ? MMAB1Op::" # b1op # " == *b1Op : true)", "") # ")\n"<br>
> +       # " && (sat.hasValue()  ? " # sat # " == static_cast<int>(*sat) : true)"<br>
> +       # !if(!ne(b1op, ""), " && (b1Op.hasValue() ? MMAB1Op::" # b1op # " == b1Op.getValue() : true)", "") # ")\n"<br>
>         # "  return " #<br>
>         MMA_SYNC_NAME<layoutA, layoutB, b1op, sat, op[0], op[1], op[2], op[3]>.id # ";",<br>
>            "") // if supported<br>
> @@ -995,8 +995,8 @@ def NVVM_MmaOp : NVVM_Op<"mma.sync", [AttrSizedOperandSegments]> {<br>
>          $shape.getM(), $shape.getN(), $shape.getK(),<br>
>          $b1Op, $intOverflowBehavior,<br>
>          $layoutA, $layoutB,<br>
> -        *$multiplicandAPtxType,<br>
> -        *$multiplicandBPtxType,<br>
> +        $multiplicandAPtxType.getValue(),<br>
> +        $multiplicandBPtxType.getValue(),<br>
>          op.accumPtxType(),<br>
>          op.resultPtxType());<br>
><br>
><br>
> diff  --git a/mlir/include/mlir/Dialect/Transform/IR/TransformInterfaces.h b/mlir/include/mlir/Dialect/Transform/IR/TransformInterfaces.h<br>
> index 2aea098e28594..ef891dd2ddc51 100644<br>
> --- a/mlir/include/mlir/Dialect/Transform/IR/TransformInterfaces.h<br>
> +++ b/mlir/include/mlir/Dialect/Transform/IR/TransformInterfaces.h<br>
> @@ -75,11 +75,11 @@ class LLVM_NODISCARD DiagnosedSilenceableFailure {<br>
>    }<br>
><br>
>    /// Returns `true` if this is a silencable failure.<br>
> -  bool isSilenceableFailure() const { return diagnostic.has_value(); }<br>
> +  bool isSilenceableFailure() const { return diagnostic.hasValue(); }<br>
><br>
>    /// Returns `true` if this is a success.<br>
>    bool succeeded() const {<br>
> -    return !diagnostic.has_value() && ::mlir::succeeded(result);<br>
> +    return !diagnostic.hasValue() && ::mlir::succeeded(result);<br>
>    }<br>
><br>
>    /// Returns the diagnostic message without emitting it. Expects this object<br>
><br>
> diff  --git a/mlir/include/mlir/IR/OpDefinition.h b/mlir/include/mlir/IR/OpDefinition.h<br>
> index 602317234e139..42eccde488919 100644<br>
> --- a/mlir/include/mlir/IR/OpDefinition.h<br>
> +++ b/mlir/include/mlir/IR/OpDefinition.h<br>
> @@ -44,11 +44,11 @@ class OptionalParseResult {<br>
>    OptionalParseResult(llvm::NoneType) : impl(llvm::None) {}<br>
><br>
>    /// Returns true if we contain a valid ParseResult value.<br>
> -  bool has_value() const { return impl.has_value(); }<br>
> +  bool hasValue() const { return impl.hasValue(); }<br>
><br>
>    /// Access the internal ParseResult value.<br>
> -  ParseResult value() const { return impl.value(); }<br>
> -  ParseResult operator*() const { return value(); }<br>
> +  ParseResult getValue() const { return impl.getValue(); }<br>
> +  ParseResult operator*() const { return getValue(); }<br>
><br>
>  private:<br>
>    Optional<ParseResult> impl;<br>
><br>
> diff  --git a/mlir/include/mlir/IR/OpImplementation.h b/mlir/include/mlir/IR/OpImplementation.h<br>
> index af75fed0fc1f3..2acb2c799d83b 100644<br>
> --- a/mlir/include/mlir/IR/OpImplementation.h<br>
> +++ b/mlir/include/mlir/IR/OpImplementation.h<br>
> @@ -555,7 +555,7 @@ class AsmParser {<br>
>    ParseResult parseInteger(IntT &result) {<br>
>      auto loc = getCurrentLocation();<br>
>      OptionalParseResult parseResult = parseOptionalInteger(result);<br>
> -    if (!parseResult.has_value())<br>
> +    if (!parseResult.hasValue())<br>
>        return emitError(loc, "expected integer value");<br>
>      return *parseResult;<br>
>    }<br>
> @@ -570,7 +570,7 @@ class AsmParser {<br>
>      // Parse the unsigned variant.<br>
>      APInt uintResult;<br>
>      OptionalParseResult parseResult = parseOptionalInteger(uintResult);<br>
> -    if (!parseResult.has_value() || failed(*parseResult))<br>
> +    if (!parseResult.hasValue() || failed(*parseResult))<br>
>        return parseResult;<br>
><br>
>      // Try to convert to the provided integer type.  sextOrTrunc is correct even<br>
> @@ -817,7 +817,7 @@ class AsmParser {<br>
>                                               StringRef attrName,<br>
>                                               NamedAttrList &attrs) {<br>
>      OptionalParseResult parseResult = parseOptionalAttribute(result, type);<br>
> -    if (parseResult.has_value() && succeeded(*parseResult))<br>
> +    if (parseResult.hasValue() && succeeded(*parseResult))<br>
>        attrs.append(attrName, result);<br>
>      return parseResult;<br>
>    }<br>
> @@ -1299,9 +1299,9 @@ class OpAsmParser : public AsmParser {<br>
>    ParseResult parseAssignmentList(SmallVectorImpl<Argument> &lhs,<br>
>                                    SmallVectorImpl<UnresolvedOperand> &rhs) {<br>
>      OptionalParseResult result = parseOptionalAssignmentList(lhs, rhs);<br>
> -    if (!result.has_value())<br>
> +    if (!result.hasValue())<br>
>        return emitError(getCurrentLocation(), "expected '('");<br>
> -    return result.value();<br>
> +    return result.getValue();<br>
>    }<br>
><br>
>    virtual OptionalParseResult<br>
><br>
> diff  --git a/mlir/include/mlir/Support/LogicalResult.h b/mlir/include/mlir/Support/LogicalResult.h<br>
> index b2cf736fef9b6..29408283a2480 100644<br>
> --- a/mlir/include/mlir/Support/LogicalResult.h<br>
> +++ b/mlir/include/mlir/Support/LogicalResult.h<br>
> @@ -90,12 +90,12 @@ template <typename T> class LLVM_NODISCARD FailureOr : public Optional<T> {<br>
>    FailureOr(const FailureOr<U> &other)<br>
>        : Optional<T>(failed(other) ? Optional<T>() : Optional<T>(*other)) {}<br>
><br>
> -  operator LogicalResult() const { return success(this->has_value()); }<br>
> +  operator LogicalResult() const { return success(this->hasValue()); }<br>
><br>
>  private:<br>
>    /// Hide the bool conversion as it easily creates confusion.<br>
>    using Optional<T>::operator bool;<br>
> -  using Optional<T>::has_value;<br>
> +  using Optional<T>::hasValue;<br>
>  };<br>
><br>
>  /// This class represents success/failure for parsing-like operations that find<br>
><br>
> diff  --git a/mlir/include/mlir/TableGen/Operator.h b/mlir/include/mlir/TableGen/Operator.h<br>
> index ab03a1af8a240..6bac85075622e 100644<br>
> --- a/mlir/include/mlir/TableGen/Operator.h<br>
> +++ b/mlir/include/mlir/TableGen/Operator.h<br>
> @@ -263,12 +263,12 @@ class Operator {<br>
>      explicit ArgOrType(TypeConstraint constraint)<br>
>          : index(None), constraint(constraint) {}<br>
>      bool isArg() const {<br>
> -      assert(constraint.has_value() ^ index.has_value());<br>
> -      return index.has_value();<br>
> +      assert(constraint.hasValue() ^ index.hasValue());<br>
> +      return index.hasValue();<br>
>      }<br>
>      bool isType() const {<br>
> -      assert(constraint.has_value() ^ index.has_value());<br>
> -      return constraint.has_value();<br>
> +      assert(constraint.hasValue() ^ index.hasValue());<br>
> +      return constraint.hasValue();<br>
>      }<br>
><br>
>      int getArg() const { return *index; }<br>
><br>
> diff  --git a/mlir/include/mlir/Transforms/DialectConversion.h b/mlir/include/mlir/Transforms/DialectConversion.h<br>
> index 678bf02d731ef..feac434da68f5 100644<br>
> --- a/mlir/include/mlir/Transforms/DialectConversion.h<br>
> +++ b/mlir/include/mlir/Transforms/DialectConversion.h<br>
> @@ -251,9 +251,9 @@ class TypeConverter {<br>
>          [callback = std::forward<FnT>(callback)](<br>
>              T type, SmallVectorImpl<Type> &results, ArrayRef<Type>) {<br>
>            if (Optional<Type> resultOpt = callback(type)) {<br>
> -            bool wasSuccess = static_cast<bool>(resultOpt.value());<br>
> +            bool wasSuccess = static_cast<bool>(resultOpt.getValue());<br>
>              if (wasSuccess)<br>
> -              results.push_back(resultOpt.value());<br>
> +              results.push_back(resultOpt.getValue());<br>
>              return Optional<LogicalResult>(success(wasSuccess));<br>
>            }<br>
>            return Optional<LogicalResult>();<br>
><br>
> diff  --git a/mlir/lib/Analysis/Presburger/IntegerRelation.cpp b/mlir/lib/Analysis/Presburger/IntegerRelation.cpp<br>
> index baeb467c9c035..7376747663e62 100644<br>
> --- a/mlir/lib/Analysis/Presburger/IntegerRelation.cpp<br>
> +++ b/mlir/lib/Analysis/Presburger/IntegerRelation.cpp<br>
> @@ -2015,14 +2015,14 @@ IntegerRelation::unionBoundingBox(const IntegerRelation &otherCst) {<br>
>    int64_t lbFloorDivisor, otherLbFloorDivisor;<br>
>    for (unsigned d = 0, e = getNumDimIds(); d < e; ++d) {<br>
>      auto extent = getConstantBoundOnDimSize(d, &lb, &lbFloorDivisor, &ub);<br>
> -    if (!extent.has_value())<br>
> +    if (!extent.hasValue())<br>
>        // TODO: symbolic extents when necessary.<br>
>        // TODO: handle union if a dimension is unbounded.<br>
>        return failure();<br>
><br>
>      auto otherExtent = otherCst.getConstantBoundOnDimSize(<br>
>          d, &otherLb, &otherLbFloorDivisor, &otherUb);<br>
> -    if (!otherExtent.has_value() || lbFloorDivisor != otherLbFloorDivisor)<br>
> +    if (!otherExtent.hasValue() || lbFloorDivisor != otherLbFloorDivisor)<br>
>        // TODO: symbolic extents when necessary.<br>
>        return failure();<br>
><br>
> @@ -2043,10 +2043,10 @@ IntegerRelation::unionBoundingBox(const IntegerRelation &otherCst) {<br>
>        // Uncomparable - check for constant lower/upper bounds.<br>
>        auto constLb = getConstantBound(BoundType::LB, d);<br>
>        auto constOtherLb = otherCst.getConstantBound(BoundType::LB, d);<br>
> -      if (!constLb.has_value() || !constOtherLb.has_value())<br>
> +      if (!constLb.hasValue() || !constOtherLb.hasValue())<br>
>          return failure();<br>
>        std::fill(minLb.begin(), minLb.end(), 0);<br>
> -      minLb.back() = std::min(*constLb, constOtherLb.value());<br>
> +      minLb.back() = std::min(constLb.getValue(), constOtherLb.getValue());<br>
>      }<br>
><br>
>      // Do the same for ub's but max of upper bounds. Identify max.<br>
> @@ -2059,10 +2059,10 @@ IntegerRelation::unionBoundingBox(const IntegerRelation &otherCst) {<br>
>        // Uncomparable - check for constant lower/upper bounds.<br>
>        auto constUb = getConstantBound(BoundType::UB, d);<br>
>        auto constOtherUb = otherCst.getConstantBound(BoundType::UB, d);<br>
> -      if (!constUb.has_value() || !constOtherUb.has_value())<br>
> +      if (!constUb.hasValue() || !constOtherUb.hasValue())<br>
>          return failure();<br>
>        std::fill(maxUb.begin(), maxUb.end(), 0);<br>
> -      maxUb.back() = std::max(*constUb, constOtherUb.value());<br>
> +      maxUb.back() = std::max(constUb.getValue(), constOtherUb.getValue());<br>
>      }<br>
><br>
>      std::fill(newLb.begin(), newLb.end(), 0);<br>
><br>
> diff  --git a/mlir/lib/Conversion/SPIRVToLLVM/SPIRVToLLVM.cpp b/mlir/lib/Conversion/SPIRVToLLVM/SPIRVToLLVM.cpp<br>
> index 3d2dae573fb23..6e0f007efc4b3 100644<br>
> --- a/mlir/lib/Conversion/SPIRVToLLVM/SPIRVToLLVM.cpp<br>
> +++ b/mlir/lib/Conversion/SPIRVToLLVM/SPIRVToLLVM.cpp<br>
> @@ -645,8 +645,8 @@ class ExecutionModePattern<br>
>      ModuleOp module = op->getParentOfType<ModuleOp>();<br>
>      IntegerAttr executionModeAttr = op.execution_modeAttr();<br>
>      std::string moduleName;<br>
> -    if (module.getName().has_value())<br>
> -      moduleName = "_" + module.getName()->str();<br>
> +    if (module.getName().hasValue())<br>
> +      moduleName = "_" + module.getName().getValue().str();<br>
>      else<br>
>        moduleName = "";<br>
>      std::string executionModeInfoName =<br>
> @@ -1585,10 +1585,10 @@ void mlir::encodeBindAttribute(ModuleOp module) {<br>
>        if (descriptorSet && binding) {<br>
>          // Encode these numbers into the variable's symbolic name. If the<br>
>          // SPIR-V module has a name, add it at the beginning.<br>
> -        auto moduleAndName =<br>
> -            spvModule.getName().has_value()<br>
> -                ? spvModule.getName()->str() + "_" + op.sym_name().str()<br>
> -                : op.sym_name().str();<br>
> +        auto moduleAndName = spvModule.getName().hasValue()<br>
> +                                 ? spvModule.getName().getValue().str() + "_" +<br>
> +                                       op.sym_name().str()<br>
> +                                 : op.sym_name().str();<br>
>          std::string name =<br>
>              llvm::formatv("{0}_descriptor_set{1}_binding{2}", moduleAndName,<br>
>                            std::to_string(descriptorSet.getInt()),<br>
><br>
> diff  --git a/mlir/lib/Conversion/TosaToLinalg/TosaToLinalg.cpp b/mlir/lib/Conversion/TosaToLinalg/TosaToLinalg.cpp<br>
> index c7917a46678c8..133a3631b7d5a 100644<br>
> --- a/mlir/lib/Conversion/TosaToLinalg/TosaToLinalg.cpp<br>
> +++ b/mlir/lib/Conversion/TosaToLinalg/TosaToLinalg.cpp<br>
> @@ -147,8 +147,8 @@ createLinalgBodyCalculationForElementwiseOp(Operation *op, ValueRange args,<br>
>        cast<tosa::NegateOp>(op).quantization_info()) {<br>
>      auto quantizationInfo = cast<tosa::NegateOp>(op).quantization_info();<br>
>      int32_t inputBitWidth = elementTy.getIntOrFloatBitWidth();<br>
> -    int64_t inZp = quantizationInfo->getInputZp();<br>
> -    int64_t outZp = quantizationInfo->getOutputZp();<br>
> +    int64_t inZp = quantizationInfo.getValue().getInputZp();<br>
> +    int64_t outZp = quantizationInfo.getValue().getOutputZp();<br>
><br>
>      // Compute the maximum value that can occur in the intermediate buffer.<br>
>      int64_t zpAdd = inZp + outZp;<br>
> @@ -1153,9 +1153,9 @@ class RescaleConverter : public OpRewritePattern<tosa::RescaleOp> {<br>
><br>
>      auto dynamicDimsOr =<br>
>          checkHasDynamicBatchDims(rewriter, op, {input, op.output()});<br>
> -    if (!dynamicDimsOr.has_value())<br>
> +    if (!dynamicDimsOr.hasValue())<br>
>        return failure();<br>
> -    SmallVector<Value> dynamicDims = dynamicDimsOr.value();<br>
> +    SmallVector<Value> dynamicDims = dynamicDimsOr.getValue();<br>
><br>
>      // The shift and multiplier values.<br>
>      SmallVector<int32_t> multiplierValues;<br>
> @@ -1345,9 +1345,9 @@ class ResizeConverter : public OpRewritePattern<tosa::ResizeOp> {<br>
><br>
>      auto dynamicDimsOr =<br>
>          checkHasDynamicBatchDims(rewriter, op, {input, op.output()});<br>
> -    if (!dynamicDimsOr.has_value())<br>
> +    if (!dynamicDimsOr.hasValue())<br>
>        return failure();<br>
> -    SmallVector<Value> dynamicDims = dynamicDimsOr.value();<br>
> +    SmallVector<Value> dynamicDims = dynamicDimsOr.getValue();<br>
><br>
>      if (op.mode() != "NEAREST_NEIGHBOR" && op.mode() != "BILINEAR")<br>
>        return failure();<br>
> @@ -2040,9 +2040,9 @@ class GatherConverter : public OpConversionPattern<tosa::GatherOp> {<br>
><br>
>      auto dynamicDimsOr =<br>
>          checkHasDynamicBatchDims(rewriter, op, {input, indices, op.output()});<br>
> -    if (!dynamicDimsOr.has_value())<br>
> +    if (!dynamicDimsOr.hasValue())<br>
>        return failure();<br>
> -    SmallVector<Value> dynamicDims = dynamicDimsOr.value();<br>
> +    SmallVector<Value> dynamicDims = dynamicDimsOr.getValue();<br>
><br>
>      auto resultElementTy = resultTy.getElementType();<br>
><br>
><br>
> diff  --git a/mlir/lib/Conversion/TosaToLinalg/TosaToLinalgNamed.cpp b/mlir/lib/Conversion/TosaToLinalg/TosaToLinalgNamed.cpp<br>
> index 531824c874d48..866fea818e8f8 100644<br>
> --- a/mlir/lib/Conversion/TosaToLinalg/TosaToLinalgNamed.cpp<br>
> +++ b/mlir/lib/Conversion/TosaToLinalg/TosaToLinalgNamed.cpp<br>
> @@ -694,9 +694,9 @@ class MaxPool2dConverter : public OpRewritePattern<tosa::MaxPool2dOp> {<br>
><br>
>      auto dynamicDimsOr =<br>
>          checkHasDynamicBatchDims(rewriter, op, {input, op.output()});<br>
> -    if (!dynamicDimsOr.has_value())<br>
> +    if (!dynamicDimsOr.hasValue())<br>
>        return failure();<br>
> -    SmallVector<Value> dynamicDims = dynamicDimsOr.value();<br>
> +    SmallVector<Value> dynamicDims = dynamicDimsOr.getValue();<br>
><br>
>      // Determine what the initial value needs to be for the max pool op.<br>
>      Attribute initialAttr;<br>
> @@ -771,9 +771,9 @@ class AvgPool2dConverter : public OpRewritePattern<tosa::AvgPool2dOp> {<br>
><br>
>      auto dynamicDimsOr =<br>
>          checkHasDynamicBatchDims(rewriter, op, {input, op.output()});<br>
> -    if (!dynamicDimsOr.has_value())<br>
> +    if (!dynamicDimsOr.hasValue())<br>
>        return failure();<br>
> -    SmallVector<Value> dynamicDims = dynamicDimsOr.value();<br>
> +    SmallVector<Value> dynamicDims = dynamicDimsOr.getValue();<br>
><br>
>      // Apply padding as necessary.<br>
>      llvm::SmallVector<int64_t> pad;<br>
><br>
> diff  --git a/mlir/lib/Conversion/VectorToSCF/VectorToSCF.cpp b/mlir/lib/Conversion/VectorToSCF/VectorToSCF.cpp<br>
> index 2356136f92d42..9ead9e29c71da 100644<br>
> --- a/mlir/lib/Conversion/VectorToSCF/VectorToSCF.cpp<br>
> +++ b/mlir/lib/Conversion/VectorToSCF/VectorToSCF.cpp<br>
> @@ -90,12 +90,12 @@ static void getXferIndices(OpBuilder &b, OpTy xferOp, Value iv,<br>
>    indices.append(prevIndices.begin(), prevIndices.end());<br>
><br>
>    Location loc = xferOp.getLoc();<br>
> -  bool isBroadcast = !dim.has_value();<br>
> +  bool isBroadcast = !dim.hasValue();<br>
>    if (!isBroadcast) {<br>
>      AffineExpr d0, d1;<br>
>      bindDims(xferOp.getContext(), d0, d1);<br>
> -    Value offset = adaptor.getIndices()[dim.value()];<br>
> -    indices[dim.value()] =<br>
> +    Value offset = adaptor.getIndices()[dim.getValue()];<br>
> +    indices[dim.getValue()] =<br>
>          makeComposedAffineApply(b, loc, d0 + d1, {offset, iv});<br>
>    }<br>
>  }<br>
><br>
> diff  --git a/mlir/lib/Dialect/Affine/Analysis/AffineStructures.cpp b/mlir/lib/Dialect/Affine/Analysis/AffineStructures.cpp<br>
> index 1ce9c3c8b4a4e..e1e66219d0143 100644<br>
> --- a/mlir/lib/Dialect/Affine/Analysis/AffineStructures.cpp<br>
> +++ b/mlir/lib/Dialect/Affine/Analysis/AffineStructures.cpp<br>
> @@ -322,7 +322,7 @@ unsigned FlatAffineValueConstraints::insertId(IdKind kind, unsigned pos,<br>
><br>
>  bool FlatAffineValueConstraints::hasValues() const {<br>
>    return llvm::find_if(values, [](Optional<Value> id) {<br>
> -           return id.has_value();<br>
> +           return id.hasValue();<br>
>           }) != values.end();<br>
>  }<br>
><br>
> @@ -401,11 +401,11 @@ static void mergeAndAlignIds(unsigned offset, FlatAffineValueConstraints *a,<br>
><br>
>    assert(std::all_of(a->getMaybeValues().begin() + offset,<br>
>                       a->getMaybeValues().end(),<br>
> -                     [](Optional<Value> id) { return id.has_value(); }));<br>
> +                     [](Optional<Value> id) { return id.hasValue(); }));<br>
><br>
>    assert(std::all_of(b->getMaybeValues().begin() + offset,<br>
>                       b->getMaybeValues().end(),<br>
> -                     [](Optional<Value> id) { return id.has_value(); }));<br>
> +                     [](Optional<Value> id) { return id.hasValue(); }));<br>
><br>
>    SmallVector<Value, 4> aDimValues;<br>
>    a->getValues(offset, a->getNumDimIds(), &aDimValues);<br>
> @@ -1008,18 +1008,18 @@ void FlatAffineValueConstraints::getSliceBounds(<br>
><br>
>        auto lbConst = getConstantBound(BoundType::LB, pos);<br>
>        auto ubConst = getConstantBound(BoundType::UB, pos);<br>
> -      if (lbConst.has_value() && ubConst.has_value()) {<br>
> +      if (lbConst.hasValue() && ubConst.hasValue()) {<br>
>          // Detect equality to a constant.<br>
> -        if (lbConst.value() == ubConst.value()) {<br>
> -          memo[pos] = getAffineConstantExpr(*lbConst, context);<br>
> +        if (lbConst.getValue() == ubConst.getValue()) {<br>
> +          memo[pos] = getAffineConstantExpr(lbConst.getValue(), context);<br>
>            changed = true;<br>
>            continue;<br>
>          }<br>
><br>
>          // Detect an identifier as modulo of another identifier w.r.t a<br>
>          // constant.<br>
> -        if (detectAsMod(*this, pos, lbConst.value(), ubConst.value(), memo,<br>
> -                        context)) {<br>
> +        if (detectAsMod(*this, pos, lbConst.getValue(), ubConst.getValue(),<br>
> +                        memo, context)) {<br>
>            changed = true;<br>
>            continue;<br>
>          }<br>
> @@ -1119,19 +1119,21 @@ void FlatAffineValueConstraints::getSliceBounds(<br>
>          LLVM_DEBUG(llvm::dbgs()<br>
>                     << "WARNING: Potentially over-approximating slice lb\n");<br>
>          auto lbConst = getConstantBound(BoundType::LB, pos + offset);<br>
> -        if (lbConst) {<br>
> -          lbMap = AffineMap::get(numMapDims, numMapSymbols,<br>
> -                                 getAffineConstantExpr(*lbConst, context));<br>
> +        if (lbConst.hasValue()) {<br>
> +          lbMap = AffineMap::get(<br>
> +              numMapDims, numMapSymbols,<br>
> +              getAffineConstantExpr(lbConst.getValue(), context));<br>
>          }<br>
>        }<br>
>        if (!ubMap || ubMap.getNumResults() > 1) {<br>
>          LLVM_DEBUG(llvm::dbgs()<br>
>                     << "WARNING: Potentially over-approximating slice ub\n");<br>
>          auto ubConst = getConstantBound(BoundType::UB, pos + offset);<br>
> -        if (ubConst) {<br>
> -          ubMap = AffineMap::get(<br>
> -              numMapDims, numMapSymbols,<br>
> -              getAffineConstantExpr(ubConst.value() + ubAdjustment, context));<br>
> +        if (ubConst.hasValue()) {<br>
> +          ubMap =<br>
> +              AffineMap::get(numMapDims, numMapSymbols,<br>
> +                             getAffineConstantExpr(<br>
> +                                 ubConst.getValue() + ubAdjustment, context));<br>
>          }<br>
>        }<br>
>      }<br>
> @@ -1669,13 +1671,13 @@ void FlatAffineRelation::compose(const FlatAffineRelation &other) {<br>
><br>
>    // Add and match domain of `rel` to domain of `this`.<br>
>    for (unsigned i = 0, e = rel.getNumDomainDims(); i < e; ++i)<br>
> -    if (relMaybeValues[i].has_value())<br>
> -      setValue(i, relMaybeValues[i].value());<br>
> +    if (relMaybeValues[i].hasValue())<br>
> +      setValue(i, relMaybeValues[i].getValue());<br>
>    // Add and match range of `this` to range of `rel`.<br>
>    for (unsigned i = 0, e = getNumRangeDims(); i < e; ++i) {<br>
>      unsigned rangeIdx = rel.getNumDomainDims() + i;<br>
> -    if (thisMaybeValues[rangeIdx].has_value())<br>
> -      rel.setValue(rangeIdx, thisMaybeValues[rangeIdx].value());<br>
> +    if (thisMaybeValues[rangeIdx].hasValue())<br>
> +      rel.setValue(rangeIdx, thisMaybeValues[rangeIdx].getValue());<br>
>    }<br>
><br>
>    // Append `this` to `rel` and simplify constraints.<br>
><br>
> diff  --git a/mlir/lib/Dialect/Affine/Analysis/LoopAnalysis.cpp b/mlir/lib/Dialect/Affine/Analysis/LoopAnalysis.cpp<br>
> index f8c43e7ca4dc5..0620a593d2063 100644<br>
> --- a/mlir/lib/Dialect/Affine/Analysis/LoopAnalysis.cpp<br>
> +++ b/mlir/lib/Dialect/Affine/Analysis/LoopAnalysis.cpp<br>
> @@ -92,9 +92,9 @@ Optional<uint64_t> mlir::getConstantTripCount(AffineForOp forOp) {<br>
>    Optional<uint64_t> tripCount;<br>
>    for (auto resultExpr : map.getResults()) {<br>
>      if (auto constExpr = resultExpr.dyn_cast<AffineConstantExpr>()) {<br>
> -      if (tripCount)<br>
> -        tripCount =<br>
> -            std::min(*tripCount, static_cast<uint64_t>(constExpr.getValue()));<br>
> +      if (tripCount.hasValue())<br>
> +        tripCount = std::min(tripCount.getValue(),<br>
> +                             static_cast<uint64_t>(constExpr.getValue()));<br>
>        else<br>
>          tripCount = constExpr.getValue();<br>
>      } else<br>
> @@ -132,13 +132,13 @@ uint64_t mlir::getLargestDivisorOfTripCount(AffineForOp forOp) {<br>
>        // Trip count is not a known constant; return its largest known divisor.<br>
>        thisGcd = resultExpr.getLargestKnownDivisor();<br>
>      }<br>
> -    if (gcd)<br>
> -      gcd = llvm::GreatestCommonDivisor64(*gcd, thisGcd);<br>
> +    if (gcd.hasValue())<br>
> +      gcd = llvm::GreatestCommonDivisor64(gcd.getValue(), thisGcd);<br>
>      else<br>
>        gcd = thisGcd;<br>
>    }<br>
> -  assert(gcd.has_value() && "value expected per above logic");<br>
> -  return gcd.value();<br>
> +  assert(gcd.hasValue() && "value expected per above logic");<br>
> +  return gcd.getValue();<br>
>  }<br>
><br>
>  /// Given an induction variable `iv` of type AffineForOp and an access `index`<br>
><br>
> diff  --git a/mlir/lib/Dialect/Affine/Analysis/Utils.cpp b/mlir/lib/Dialect/Affine/Analysis/Utils.cpp<br>
> index 501570633f353..6a9a03886f5d9 100644<br>
> --- a/mlir/lib/Dialect/Affine/Analysis/Utils.cpp<br>
> +++ b/mlir/lib/Dialect/Affine/Analysis/Utils.cpp<br>
> @@ -375,8 +375,8 @@ Optional<int64_t> MemRefRegion::getConstantBoundingSizeAndShape(<br>
>      SmallVector<int64_t, 4> lb;<br>
>      Optional<int64_t><br>
> diff  =<br>
>          cstWithShapeBounds.getConstantBoundOnDimSize(d, &lb, &lbDivisor);<br>
> -    if (<br>
> diff ) {<br>
> -<br>
> diff Constant =<br>
> diff .value();<br>
> +    if (<br>
> diff .hasValue()) {<br>
> +<br>
> diff Constant =<br>
> diff .getValue();<br>
>        assert(<br>
> diff Constant >= 0 && "Dim size bound can't be negative");<br>
>        assert(lbDivisor > 0);<br>
>      } else {<br>
> @@ -1012,17 +1012,17 @@ bool mlir::buildSliceTripCountMap(<br>
>          continue;<br>
>        }<br>
>        Optional<uint64_t> maybeConstTripCount = getConstantTripCount(forOp);<br>
> -      if (maybeConstTripCount) {<br>
> -        (*tripCountMap)[op] = maybeConstTripCount.value();<br>
> +      if (maybeConstTripCount.hasValue()) {<br>
> +        (*tripCountMap)[op] = maybeConstTripCount.getValue();<br>
>          continue;<br>
>        }<br>
>        return false;<br>
>      }<br>
>      Optional<uint64_t> tripCount = getConstDifference(lbMap, ubMap);<br>
>      // Slice bounds are created with a constant ub - lb<br>
> diff erence.<br>
> -    if (!tripCount.has_value())<br>
> +    if (!tripCount.hasValue())<br>
>        return false;<br>
> -    (*tripCountMap)[op] = tripCount.value();<br>
> +    (*tripCountMap)[op] = tripCount.getValue();<br>
>    }<br>
>    return true;<br>
>  }<br>
> @@ -1320,9 +1320,9 @@ static Optional<int64_t> getMemoryFootprintBytes(Block &block,<br>
>    int64_t totalSizeInBytes = 0;<br>
>    for (const auto &region : regions) {<br>
>      Optional<int64_t> size = region.second->getRegionSize();<br>
> -    if (!size.has_value())<br>
> +    if (!size.hasValue())<br>
>        return None;<br>
> -    totalSizeInBytes += size.value();<br>
> +    totalSizeInBytes += size.getValue();<br>
>    }<br>
>    return totalSizeInBytes;<br>
>  }<br>
><br>
> diff  --git a/mlir/lib/Dialect/Affine/IR/AffineOps.cpp b/mlir/lib/Dialect/Affine/IR/AffineOps.cpp<br>
> index 6a6827c9f3eb3..01f651d4f57fa 100644<br>
> --- a/mlir/lib/Dialect/Affine/IR/AffineOps.cpp<br>
> +++ b/mlir/lib/Dialect/Affine/IR/AffineOps.cpp<br>
> @@ -336,8 +336,9 @@ static bool isDimOpValidSymbol(OpTy dimOp, Region *region) {<br>
>    // The dim op is also okay if its operand memref is a view/subview whose<br>
>    // corresponding size is a valid symbol.<br>
>    Optional<int64_t> index = dimOp.getConstantIndex();<br>
> -  assert(index && "expect only `dim` operations with a constant index");<br>
> -  int64_t i = *index;<br>
> +  assert(index.hasValue() &&<br>
> +         "expect only `dim` operations with a constant index");<br>
> +  int64_t i = index.getValue();<br>
>    return TypeSwitch<Operation *, bool>(dimOp.source().getDefiningOp())<br>
>        .Case<memref::ViewOp, memref::SubViewOp, memref::AllocOp>(<br>
>            [&](auto op) { return isMemRefSizeValidSymbol(op, i, region); })<br>
> @@ -1712,12 +1713,12 @@ struct AffineForEmptyLoopFolder : public OpRewritePattern<AffineForOp> {<br>
>      }<br>
>      // Bail out when the trip count is unknown and the loop returns any value<br>
>      // defined outside of the loop or any iterArg out of order.<br>
> -    if (!tripCount.has_value() &&<br>
> +    if (!tripCount.hasValue() &&<br>
>          (hasValDefinedOutsideLoop || iterArgsNotInOrder))<br>
>        return failure();<br>
>      // Bail out when the loop iterates more than once and it returns any iterArg<br>
>      // out of order.<br>
> -    if (tripCount.has_value() && *tripCount >= 2 && iterArgsNotInOrder)<br>
> +    if (tripCount.hasValue() && tripCount.getValue() >= 2 && iterArgsNotInOrder)<br>
>        return failure();<br>
>      rewriter.replaceOp(forOp, replacements);<br>
>      return success();<br>
> @@ -1750,18 +1751,19 @@ OperandRange AffineForOp::getSuccessorEntryOperands(Optional<unsigned> index) {<br>
>  void AffineForOp::getSuccessorRegions(<br>
>      Optional<unsigned> index, ArrayRef<Attribute> operands,<br>
>      SmallVectorImpl<RegionSuccessor> &regions) {<br>
> -  assert((!index || *index == 0) && "expected loop region");<br>
> +  assert((!index.hasValue() || index.getValue() == 0) &&<br>
> +         "expected loop region");<br>
>    // The loop may typically branch back to its body or to the parent operation.<br>
>    // If the predecessor is the parent op and the trip count is known to be at<br>
>    // least one, branch into the body using the iterator arguments. And in cases<br>
>    // we know the trip count is zero, it can only branch back to its parent.<br>
>    Optional<uint64_t> tripCount = getTrivialConstantTripCount(*this);<br>
> -  if (!index && tripCount) {<br>
> -    if (tripCount.value() > 0) {<br>
> +  if (!index.hasValue() && tripCount.hasValue()) {<br>
> +    if (tripCount.getValue() > 0) {<br>
>        regions.push_back(RegionSuccessor(&getLoopBody(), getRegionIterArgs()));<br>
>        return;<br>
>      }<br>
> -    if (tripCount.value() == 0) {<br>
> +    if (tripCount.getValue() == 0) {<br>
>        regions.push_back(RegionSuccessor(getResults()));<br>
>        return;<br>
>      }<br>
> @@ -3588,8 +3590,8 @@ ParseResult AffineParallelOp::parse(OpAsmParser &parser,<br>
>            arith::symbolizeAtomicRMWKind(attrVal.getValue());<br>
>        if (!reduction)<br>
>          return parser.emitError(loc, "invalid reduction value: ") << attrVal;<br>
> -      reductions.push_back(<br>
> -          builder.getI64IntegerAttr(static_cast<int64_t>(reduction.value())));<br>
> +      reductions.push_back(builder.getI64IntegerAttr(<br>
> +          static_cast<int64_t>(reduction.getValue())));<br>
>        // While we keep getting commas, keep parsing.<br>
>        return success();<br>
>      };<br>
><br>
> diff  --git a/mlir/lib/Dialect/Affine/Transforms/AffineDataCopyGeneration.cpp b/mlir/lib/Dialect/Affine/Transforms/AffineDataCopyGeneration.cpp<br>
> index 18a10c493eb7c..864f10991c748 100644<br>
> --- a/mlir/lib/Dialect/Affine/Transforms/AffineDataCopyGeneration.cpp<br>
> +++ b/mlir/lib/Dialect/Affine/Transforms/AffineDataCopyGeneration.cpp<br>
> @@ -142,8 +142,9 @@ void AffineDataCopyGeneration::runOnBlock(Block *block,<br>
>          Optional<int64_t> footprint =<br>
>              getMemoryFootprintBytes(forOp,<br>
>                                      /*memorySpace=*/0);<br>
> -        return (footprint &&<br>
> -                static_cast<uint64_t>(*footprint) > fastMemCapacityBytes);<br>
> +        return (footprint.hasValue() &&<br>
> +                static_cast<uint64_t>(footprint.getValue()) ><br>
> +                    fastMemCapacityBytes);<br>
>        };<br>
><br>
>        // If the memory footprint of the 'affine.for' loop is higher than fast<br>
><br>
> diff  --git a/mlir/lib/Dialect/Affine/Transforms/LoopFusion.cpp b/mlir/lib/Dialect/Affine/Transforms/LoopFusion.cpp<br>
> index f68662080e70f..b77ef90b471b9 100644<br>
> --- a/mlir/lib/Dialect/Affine/Transforms/LoopFusion.cpp<br>
> +++ b/mlir/lib/Dialect/Affine/Transforms/LoopFusion.cpp<br>
> @@ -441,15 +441,15 @@ struct MemRefDependenceGraph {<br>
>        ++pos;<br>
>      }<br>
><br>
> -    if (firstSrcDepPos) {<br>
> -      if (lastDstDepPos) {<br>
> -        if (firstSrcDepPos.value() <= lastDstDepPos.value()) {<br>
> +    if (firstSrcDepPos.hasValue()) {<br>
> +      if (lastDstDepPos.hasValue()) {<br>
> +        if (firstSrcDepPos.getValue() <= lastDstDepPos.getValue()) {<br>
>            // No valid insertion point exists which preserves dependences.<br>
>            return nullptr;<br>
>          }<br>
>        }<br>
>        // Return the insertion point at 'firstSrcDepPos'.<br>
> -      return depInsts[firstSrcDepPos.value()];<br>
> +      return depInsts[firstSrcDepPos.getValue()];<br>
>      }<br>
>      // No dependence targets in range (or only dst deps in range), return<br>
>      // 'dstNodInst' insertion point.<br>
> @@ -942,10 +942,10 @@ static Value createPrivateMemRef(AffineForOp forOp, Operation *srcStoreOpInst,<br>
>    // Create 'newMemRefType' using 'newShape' from MemRefRegion accessed<br>
>    // by 'srcStoreOpInst'.<br>
>    uint64_t bufSize =<br>
> -      getMemRefEltSizeInBytes(oldMemRefType) * numElements.value();<br>
> +      getMemRefEltSizeInBytes(oldMemRefType) * numElements.getValue();<br>
>    unsigned newMemSpace;<br>
> -  if (bufSize <= localBufSizeThreshold && fastMemorySpace.has_value()) {<br>
> -    newMemSpace = fastMemorySpace.value();<br>
> +  if (bufSize <= localBufSizeThreshold && fastMemorySpace.hasValue()) {<br>
> +    newMemSpace = fastMemorySpace.getValue();<br>
>    } else {<br>
>      newMemSpace = oldMemRefType.getMemorySpaceAsInt();<br>
>    }<br>
> @@ -1141,9 +1141,9 @@ static bool isFusionProfitable(Operation *srcOpInst, Operation *srcStoreOpInst,<br>
><br>
>    Optional<int64_t> maybeSrcWriteRegionSizeBytes =<br>
>        srcWriteRegion.getRegionSize();<br>
> -  if (!maybeSrcWriteRegionSizeBytes.has_value())<br>
> +  if (!maybeSrcWriteRegionSizeBytes.hasValue())<br>
>      return false;<br>
> -  int64_t srcWriteRegionSizeBytes = maybeSrcWriteRegionSizeBytes.value();<br>
> +  int64_t srcWriteRegionSizeBytes = maybeSrcWriteRegionSizeBytes.getValue();<br>
><br>
>    // Compute op instance count for the src loop nest.<br>
>    uint64_t dstLoopNestCost = getComputeCost(dstForOp, dstLoopNestStats);<br>
> @@ -1183,14 +1183,15 @@ static bool isFusionProfitable(Operation *srcOpInst, Operation *srcStoreOpInst,<br>
><br>
>      Optional<int64_t> maybeSliceWriteRegionSizeBytes =<br>
>          sliceWriteRegion.getRegionSize();<br>
> -    if (!maybeSliceWriteRegionSizeBytes.has_value() ||<br>
> -        *maybeSliceWriteRegionSizeBytes == 0) {<br>
> +    if (!maybeSliceWriteRegionSizeBytes.hasValue() ||<br>
> +        maybeSliceWriteRegionSizeBytes.getValue() == 0) {<br>
>        LLVM_DEBUG(llvm::dbgs()<br>
>                   << "Failed to get slice write region size at loopDepth: " << i<br>
>                   << "\n");<br>
>        continue;<br>
>      }<br>
> -    int64_t sliceWriteRegionSizeBytes = maybeSliceWriteRegionSizeBytes.value();<br>
> +    int64_t sliceWriteRegionSizeBytes =<br>
> +        maybeSliceWriteRegionSizeBytes.getValue();<br>
><br>
>      // If we are fusing for reuse, check that write regions remain the same.<br>
>      // TODO: Write region check should check sizes and offsets in<br>
> @@ -1267,11 +1268,11 @@ static bool isFusionProfitable(Operation *srcOpInst, Operation *srcStoreOpInst,<br>
>      return false;<br>
>    }<br>
><br>
> -  auto srcMemSizeVal = srcMemSize.value();<br>
> -  auto dstMemSizeVal = dstMemSize.value();<br>
> +  auto srcMemSizeVal = srcMemSize.getValue();<br>
> +  auto dstMemSizeVal = dstMemSize.getValue();<br>
><br>
>    assert(sliceMemEstimate && "expected value");<br>
> -  auto fusedMem = dstMemSizeVal + sliceMemEstimate.value();<br>
> +  auto fusedMem = dstMemSizeVal + sliceMemEstimate.getValue();<br>
><br>
>    LLVM_DEBUG(llvm::dbgs() << "   src mem: " << srcMemSizeVal << "\n"<br>
>                            << "   dst mem: " << dstMemSizeVal << "\n"<br>
><br>
> diff  --git a/mlir/lib/Dialect/Affine/Utils/LoopUtils.cpp b/mlir/lib/Dialect/Affine/Utils/LoopUtils.cpp<br>
> index 04586c90a7b55..09f11ebfaeab3 100644<br>
> --- a/mlir/lib/Dialect/Affine/Utils/LoopUtils.cpp<br>
> +++ b/mlir/lib/Dialect/Affine/Utils/LoopUtils.cpp<br>
> @@ -405,13 +405,13 @@ checkTilingLegalityImpl(MutableArrayRef<mlir::AffineForOp> origLoops) {<br>
>          LLVM_DEBUG(dstAccess.opInst->dump(););<br>
>          for (unsigned k = 0, e = depComps.size(); k < e; k++) {<br>
>            DependenceComponent depComp = depComps[k];<br>
> -          if (depComp.lb.has_value() && depComp.ub.has_value() &&<br>
> -              depComp.lb.value() < depComp.ub.value() &&<br>
> -              depComp.ub.value() < 0) {<br>
> +          if (depComp.lb.hasValue() && depComp.ub.hasValue() &&<br>
> +              depComp.lb.getValue() < depComp.ub.getValue() &&<br>
> +              depComp.ub.getValue() < 0) {<br>
>              LLVM_DEBUG(llvm::dbgs()<br>
>                         << "Dependence component lb = "<br>
> -                       << Twine(depComp.lb.value())<br>
> -                       << " ub = " << Twine(depComp.ub.value())<br>
> +                       << Twine(depComp.lb.getValue())<br>
> +                       << " ub = " << Twine(depComp.ub.getValue())<br>
>                         << " is negative  at depth: " << Twine(d)<br>
>                         << " and thus violates the legality rule.\n");<br>
>              return false;<br>
> @@ -802,11 +802,11 @@ constructTiledIndexSetHyperRect(MutableArrayRef<AffineForOp> origLoops,<br>
>      newLoops[width + i].setStep(origLoops[i].getStep());<br>
><br>
>      // Set the upper bound.<br>
> -    if (mayBeConstantCount && *mayBeConstantCount < tileSizes[i]) {<br>
> +    if (mayBeConstantCount && mayBeConstantCount.getValue() < tileSizes[i]) {<br>
>        // Trip count is less than the tile size: upper bound is lower bound +<br>
>        // trip count * stepSize.<br>
> -      AffineMap ubMap = b.getSingleDimShiftAffineMap(*mayBeConstantCount *<br>
> -                                                     origLoops[i].getStep());<br>
> +      AffineMap ubMap = b.getSingleDimShiftAffineMap(<br>
> +          mayBeConstantCount.getValue() * origLoops[i].getStep());<br>
>        newLoops[width + i].setUpperBound(<br>
>            /*operands=*/newLoops[i].getInductionVar(), ubMap);<br>
>      } else if (largestDiv % tileSizes[i] != 0) {<br>
> @@ -974,8 +974,8 @@ void mlir::getTileableBands(func::FuncOp f,<br>
>  /// Unrolls this loop completely.<br>
>  LogicalResult mlir::loopUnrollFull(AffineForOp forOp) {<br>
>    Optional<uint64_t> mayBeConstantTripCount = getConstantTripCount(forOp);<br>
> -  if (mayBeConstantTripCount) {<br>
> -    uint64_t tripCount = mayBeConstantTripCount.value();<br>
> +  if (mayBeConstantTripCount.hasValue()) {<br>
> +    uint64_t tripCount = mayBeConstantTripCount.getValue();<br>
>      if (tripCount == 0)<br>
>        return success();<br>
>      if (tripCount == 1)<br>
> @@ -990,8 +990,9 @@ LogicalResult mlir::loopUnrollFull(AffineForOp forOp) {<br>
>  LogicalResult mlir::loopUnrollUpToFactor(AffineForOp forOp,<br>
>                                           uint64_t unrollFactor) {<br>
>    Optional<uint64_t> mayBeConstantTripCount = getConstantTripCount(forOp);<br>
> -  if (mayBeConstantTripCount && *mayBeConstantTripCount < unrollFactor)<br>
> -    return loopUnrollByFactor(forOp, mayBeConstantTripCount.value());<br>
> +  if (mayBeConstantTripCount.hasValue() &&<br>
> +      mayBeConstantTripCount.getValue() < unrollFactor)<br>
> +    return loopUnrollByFactor(forOp, mayBeConstantTripCount.getValue());<br>
>    return loopUnrollByFactor(forOp, unrollFactor);<br>
>  }<br>
><br>
> @@ -1149,8 +1150,9 @@ LogicalResult mlir::loopUnrollByFactor(<br>
>  LogicalResult mlir::loopUnrollJamUpToFactor(AffineForOp forOp,<br>
>                                              uint64_t unrollJamFactor) {<br>
>    Optional<uint64_t> mayBeConstantTripCount = getConstantTripCount(forOp);<br>
> -  if (mayBeConstantTripCount && *mayBeConstantTripCount < unrollJamFactor)<br>
> -    return loopUnrollJamByFactor(forOp, mayBeConstantTripCount.value());<br>
> +  if (mayBeConstantTripCount.hasValue() &&<br>
> +      mayBeConstantTripCount.getValue() < unrollJamFactor)<br>
> +    return loopUnrollJamByFactor(forOp, mayBeConstantTripCount.getValue());<br>
>    return loopUnrollJamByFactor(forOp, unrollJamFactor);<br>
>  }<br>
><br>
> @@ -1571,8 +1573,8 @@ AffineForOp mlir::sinkSequentialLoops(AffineForOp forOp) {<br>
>      assert(depComps.size() >= maxLoopDepth);<br>
>      for (unsigned j = 0; j < maxLoopDepth; ++j) {<br>
>        DependenceComponent &depComp = depComps[j];<br>
> -      assert(depComp.lb.has_value() && depComp.ub.has_value());<br>
> -      if (depComp.lb.value() != 0 || depComp.ub.value() != 0)<br>
> +      assert(depComp.lb.hasValue() && depComp.ub.hasValue());<br>
> +      if (depComp.lb.getValue() != 0 || depComp.ub.getValue() != 0)<br>
>          isParallelLoop[j] = false;<br>
>      }<br>
>    }<br>
> @@ -2404,12 +2406,12 @@ LogicalResult mlir::affineDataCopyGenerate(Block::iterator begin,<br>
>    block->walk(begin, end, [&](Operation *opInst) {<br>
>      // Gather regions to allocate to buffers in faster memory space.<br>
>      if (auto loadOp = dyn_cast<AffineLoadOp>(opInst)) {<br>
> -      if ((filterMemRef.has_value() && filterMemRef != loadOp.getMemRef()) ||<br>
> +      if ((filterMemRef.hasValue() && filterMemRef != loadOp.getMemRef()) ||<br>
>            (loadOp.getMemRefType().getMemorySpaceAsInt() !=<br>
>             copyOptions.slowMemorySpace))<br>
>          return;<br>
>      } else if (auto storeOp = dyn_cast<AffineStoreOp>(opInst)) {<br>
> -      if ((filterMemRef.has_value() && filterMemRef != storeOp.getMemRef()) ||<br>
> +      if ((filterMemRef.hasValue() && filterMemRef != storeOp.getMemRef()) ||<br>
>            storeOp.getMemRefType().getMemorySpaceAsInt() !=<br>
>                copyOptions.slowMemorySpace)<br>
>          return;<br>
><br>
> diff  --git a/mlir/lib/Dialect/Affine/Utils/Utils.cpp b/mlir/lib/Dialect/Affine/Utils/Utils.cpp<br>
> index 5cfebeb668b72..5f9eee572cbbe 100644<br>
> --- a/mlir/lib/Dialect/Affine/Utils/Utils.cpp<br>
> +++ b/mlir/lib/Dialect/Affine/Utils/Utils.cpp<br>
> @@ -1792,11 +1792,11 @@ MemRefType mlir::normalizeMemRefType(MemRefType memrefType, OpBuilder b,<br>
>        // For a static memref and an affine map with no symbols, this is<br>
>        // always bounded.<br>
>        assert(ubConst && "should always have an upper bound");<br>
> -      if (ubConst.value() < 0)<br>
> +      if (ubConst.getValue() < 0)<br>
>          // This is due to an invalid map that maps to a negative space.<br>
>          return memrefType;<br>
>        // If dimension of new memrefType is dynamic, the value is -1.<br>
> -      newShape[d] = *ubConst + 1;<br>
> +      newShape[d] = ubConst.getValue() + 1;<br>
>      }<br>
>    }<br>
><br>
><br>
> diff  --git a/mlir/lib/Dialect/Arithmetic/Transforms/UnsignedWhenEquivalent.cpp b/mlir/lib/Dialect/Arithmetic/Transforms/UnsignedWhenEquivalent.cpp<br>
> index f4e0415c39b5c..f84990d0a8c47 100644<br>
> --- a/mlir/lib/Dialect/Arithmetic/Transforms/UnsignedWhenEquivalent.cpp<br>
> +++ b/mlir/lib/Dialect/Arithmetic/Transforms/UnsignedWhenEquivalent.cpp<br>
> @@ -23,9 +23,9 @@ using namespace mlir::arith;<br>
>  static LogicalResult staticallyNonNegative(IntRangeAnalysis &analysis,<br>
>                                             Value v) {<br>
>    Optional<ConstantIntRanges> result = analysis.getResult(v);<br>
> -  if (!result.has_value())<br>
> +  if (!result.hasValue())<br>
>      return failure();<br>
> -  const ConstantIntRanges &range = result.value();<br>
> +  const ConstantIntRanges &range = result.getValue();<br>
>    return success(range.smin().isNonNegative());<br>
>  }<br>
><br>
><br>
> diff  --git a/mlir/lib/Dialect/Bufferization/IR/BufferizationOps.cpp b/mlir/lib/Dialect/Bufferization/IR/BufferizationOps.cpp<br>
> index 20273c675a41b..37ff8e9be79e2 100644<br>
> --- a/mlir/lib/Dialect/Bufferization/IR/BufferizationOps.cpp<br>
> +++ b/mlir/lib/Dialect/Bufferization/IR/BufferizationOps.cpp<br>
> @@ -444,11 +444,11 @@ struct SimplifyClones : public OpRewritePattern<CloneOp> {<br>
>      llvm::Optional<Operation *> maybeCloneDeallocOp =<br>
>          memref::findDealloc(cloneOp.getOutput());<br>
>      // Skip if either of them has > 1 deallocate operations.<br>
> -    if (!maybeCloneDeallocOp.has_value())<br>
> +    if (!maybeCloneDeallocOp.hasValue())<br>
>        return failure();<br>
>      llvm::Optional<Operation *> maybeSourceDeallocOp =<br>
>          memref::findDealloc(source);<br>
> -    if (!maybeSourceDeallocOp.has_value())<br>
> +    if (!maybeSourceDeallocOp.hasValue())<br>
>        return failure();<br>
>      Operation *cloneDeallocOp = *maybeCloneDeallocOp;<br>
>      Operation *sourceDeallocOp = *maybeSourceDeallocOp;<br>
><br>
> diff  --git a/mlir/lib/Dialect/Bufferization/Transforms/BufferUtils.cpp b/mlir/lib/Dialect/Bufferization/Transforms/BufferUtils.cpp<br>
> index 7240e5b02a726..d631dc30982e3 100644<br>
> --- a/mlir/lib/Dialect/Bufferization/Transforms/BufferUtils.cpp<br>
> +++ b/mlir/lib/Dialect/Bufferization/Transforms/BufferUtils.cpp<br>
> @@ -158,11 +158,11 @@ bufferization::getGlobalFor(arith::ConstantOp constantOp, uint64_t alignment) {<br>
>      auto globalOp = dyn_cast<memref::GlobalOp>(&op);<br>
>      if (!globalOp)<br>
>        continue;<br>
> -    if (!globalOp.initial_value().has_value())<br>
> +    if (!globalOp.initial_value().hasValue())<br>
>        continue;<br>
>      uint64_t opAlignment =<br>
> -        globalOp.alignment().has_value() ? globalOp.alignment().value() : 0;<br>
> -    Attribute initialValue = globalOp.initial_value().value();<br>
> +        globalOp.alignment().hasValue() ? globalOp.alignment().getValue() : 0;<br>
> +    Attribute initialValue = globalOp.initial_value().getValue();<br>
>      if (opAlignment == alignment && initialValue == constantOp.getValue())<br>
>        return globalOp;<br>
>    }<br>
><br>
> diff  --git a/mlir/lib/Dialect/Bufferization/Transforms/FuncBufferizableOpInterfaceImpl.cpp b/mlir/lib/Dialect/Bufferization/Transforms/FuncBufferizableOpInterfaceImpl.cpp<br>
> index 1cff6f9c6b79d..3689522dd065e 100644<br>
> --- a/mlir/lib/Dialect/Bufferization/Transforms/FuncBufferizableOpInterfaceImpl.cpp<br>
> +++ b/mlir/lib/Dialect/Bufferization/Transforms/FuncBufferizableOpInterfaceImpl.cpp<br>
> @@ -114,9 +114,9 @@ static FuncOpAnalysisState getFuncOpAnalysisState(const AnalysisState &state,<br>
>    Optional<const FuncAnalysisState *> maybeState =<br>
>        state.getDialectState<FuncAnalysisState>(<br>
>            func::FuncDialect::getDialectNamespace());<br>
> -  if (!maybeState.has_value())<br>
> +  if (!maybeState.hasValue())<br>
>      return FuncOpAnalysisState::NotAnalyzed;<br>
> -  const auto &analyzedFuncOps = maybeState.value()->analyzedFuncOps;<br>
> +  const auto &analyzedFuncOps = maybeState.getValue()->analyzedFuncOps;<br>
>    auto it = analyzedFuncOps.find(funcOp);<br>
>    if (it == analyzedFuncOps.end())<br>
>      return FuncOpAnalysisState::NotAnalyzed;<br>
><br>
> diff  --git a/mlir/lib/Dialect/DLTI/DLTI.cpp b/mlir/lib/Dialect/DLTI/DLTI.cpp<br>
> index eaf6f1e619a01..046152a670924 100644<br>
> --- a/mlir/lib/Dialect/DLTI/DLTI.cpp<br>
> +++ b/mlir/lib/Dialect/DLTI/DLTI.cpp<br>
> @@ -73,11 +73,11 @@ DataLayoutEntryAttr DataLayoutEntryAttr::parse(AsmParser &parser) {<br>
>    std::string identifier;<br>
>    SMLoc idLoc = parser.getCurrentLocation();<br>
>    OptionalParseResult parsedType = parser.parseOptionalType(type);<br>
> -  if (parsedType.has_value() && failed(parsedType.value()))<br>
> +  if (parsedType.hasValue() && failed(parsedType.getValue()))<br>
>      return {};<br>
> -  if (!parsedType.has_value()) {<br>
> +  if (!parsedType.hasValue()) {<br>
>      OptionalParseResult parsedString = parser.parseOptionalString(&identifier);<br>
> -    if (!parsedString.has_value() || failed(parsedString.value())) {<br>
> +    if (!parsedString.hasValue() || failed(parsedString.getValue())) {<br>
>        parser.emitError(idLoc) << "expected a type or a quoted string";<br>
>        return {};<br>
>      }<br>
><br>
> diff  --git a/mlir/lib/Dialect/EmitC/IR/EmitC.cpp b/mlir/lib/Dialect/EmitC/IR/EmitC.cpp<br>
> index f2a19cd0a55af..be6dd41c029d0 100644<br>
> --- a/mlir/lib/Dialect/EmitC/IR/EmitC.cpp<br>
> +++ b/mlir/lib/Dialect/EmitC/IR/EmitC.cpp<br>
> @@ -151,7 +151,7 @@ ParseResult IncludeOp::parse(OpAsmParser &parser, OperationState &result) {<br>
>    StringAttr include;<br>
>    OptionalParseResult includeParseResult =<br>
>        parser.parseOptionalAttribute(include, "include", result.attributes);<br>
> -  if (!includeParseResult.has_value())<br>
> +  if (!includeParseResult.hasValue())<br>
>      return parser.emitError(parser.getNameLoc()) << "expected string attribute";<br>
><br>
>    if (standardInclude && parser.parseOptionalGreater())<br>
><br>
> diff  --git a/mlir/lib/Dialect/GPU/Transforms/SerializeToBlob.cpp b/mlir/lib/Dialect/GPU/Transforms/SerializeToBlob.cpp<br>
> index 29f244884ac13..35bf5942f24d0 100644<br>
> --- a/mlir/lib/Dialect/GPU/Transforms/SerializeToBlob.cpp<br>
> +++ b/mlir/lib/Dialect/GPU/Transforms/SerializeToBlob.cpp<br>
> @@ -75,10 +75,10 @@ void gpu::SerializeToBlobPass::runOnOperation() {<br>
>    Optional<std::string> maybeTargetISA =<br>
>        translateToISA(*llvmModule, *targetMachine);<br>
><br>
> -  if (!maybeTargetISA.has_value())<br>
> +  if (!maybeTargetISA.hasValue())<br>
>      return signalPassFailure();<br>
><br>
> -  std::string targetISA = std::move(maybeTargetISA.value());<br>
> +  std::string targetISA = std::move(maybeTargetISA.getValue());<br>
><br>
>    LLVM_DEBUG({<br>
>      llvm::dbgs() << "ISA for module: " << getOperation().getNameAttr() << "\n";<br>
><br>
> diff  --git a/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp b/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp<br>
> index 0cc2fca7b70b2..63a89d5ec10e5 100644<br>
> --- a/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp<br>
> +++ b/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp<br>
> @@ -237,8 +237,9 @@ ParseResult AllocaOp::parse(OpAsmParser &parser, OperationState &result) {<br>
><br>
>    Optional<NamedAttribute> alignmentAttr =<br>
>        result.attributes.getNamed("alignment");<br>
> -  if (alignmentAttr.has_value()) {<br>
> -    auto alignmentInt = alignmentAttr->getValue().dyn_cast<IntegerAttr>();<br>
> +  if (alignmentAttr.hasValue()) {<br>
> +    auto alignmentInt =<br>
> +        alignmentAttr.getValue().getValue().dyn_cast<IntegerAttr>();<br>
>      if (!alignmentInt)<br>
>        return parser.emitError(parser.getNameLoc(),<br>
>                                "expected integer alignment");<br>
> @@ -271,11 +272,11 @@ ParseResult AllocaOp::parse(OpAsmParser &parser, OperationState &result) {<br>
>  /// the attribute, but not both.<br>
>  static LogicalResult verifyOpaquePtr(Operation *op, LLVMPointerType ptrType,<br>
>                                       Optional<Type> ptrElementType) {<br>
> -  if (ptrType.isOpaque() && !ptrElementType.has_value()) {<br>
> +  if (ptrType.isOpaque() && !ptrElementType.hasValue()) {<br>
>      return op->emitOpError() << "expected '" << kElemTypeAttrName<br>
>                               << "' attribute if opaque pointer type is used";<br>
>    }<br>
> -  if (!ptrType.isOpaque() && ptrElementType.has_value()) {<br>
> +  if (!ptrType.isOpaque() && ptrElementType.hasValue()) {<br>
>      return op->emitOpError()<br>
>             << "unexpected '" << kElemTypeAttrName<br>
>             << "' attribute when non-opaque pointer type is used";<br>
> @@ -340,10 +341,10 @@ static ParseResult parseSwitchOpCases(<br>
>    do {<br>
>      int64_t value = 0;<br>
>      OptionalParseResult integerParseResult = parser.parseOptionalInteger(value);<br>
> -    if (values.empty() && !integerParseResult.has_value())<br>
> +    if (values.empty() && !integerParseResult.hasValue())<br>
>        return success();<br>
><br>
> -    if (!integerParseResult.has_value() || integerParseResult.value())<br>
> +    if (!integerParseResult.hasValue() || integerParseResult.getValue())<br>
>        return failure();<br>
>      values.push_back(APInt(bitWidth, value));<br>
><br>
> @@ -616,8 +617,8 @@ parseGEPIndices(OpAsmParser &parser,<br>
>      int32_t constantIndex;<br>
>      OptionalParseResult parsedInteger =<br>
>          parser.parseOptionalInteger(constantIndex);<br>
> -    if (parsedInteger.has_value()) {<br>
> -      if (failed(parsedInteger.value()))<br>
> +    if (parsedInteger.hasValue()) {<br>
> +      if (failed(parsedInteger.getValue()))<br>
>          return failure();<br>
>        constantIndices.push_back(constantIndex);<br>
>        return success();<br>
> @@ -915,13 +916,13 @@ LogicalResult InvokeOp::verify() {<br>
><br>
>  void InvokeOp::print(OpAsmPrinter &p) {<br>
>    auto callee = getCallee();<br>
> -  bool isDirect = callee.has_value();<br>
> +  bool isDirect = callee.hasValue();<br>
><br>
>    p << ' ';<br>
><br>
>    // Either function name or pointer<br>
>    if (isDirect)<br>
> -    p.printSymbolName(callee.value());<br>
> +    p.printSymbolName(callee.getValue());<br>
>    else<br>
>      p << getOperand(0);<br>
><br>
> @@ -1208,13 +1209,13 @@ LogicalResult CallOp::verify() {<br>
><br>
>  void CallOp::print(OpAsmPrinter &p) {<br>
>    auto callee = getCallee();<br>
> -  bool isDirect = callee.has_value();<br>
> +  bool isDirect = callee.hasValue();<br>
><br>
>    // Print the direct callee if present as a function attribute, or an indirect<br>
>    // callee (first operand) otherwise.<br>
>    p << ' ';<br>
>    if (isDirect)<br>
> -    p.printSymbolName(callee.value());<br>
> +    p.printSymbolName(callee.getValue());<br>
>    else<br>
>      p << getOperand(0);<br>
><br>
> @@ -1926,7 +1927,7 @@ ParseResult GlobalOp::parse(OpAsmParser &parser, OperationState &result) {<br>
>      OptionalParseResult parseResult =<br>
>          parser.parseOptionalRegion(initRegion, /*arguments=*/{},<br>
>                                     /*argTypes=*/{});<br>
> -    if (parseResult.has_value() && failed(*parseResult))<br>
> +    if (parseResult.hasValue() && failed(*parseResult))<br>
>        return failure();<br>
>    }<br>
><br>
> @@ -1986,8 +1987,8 @@ LogicalResult GlobalOp::verify() {<br>
>    }<br>
><br>
>    Optional<uint64_t> alignAttr = getAlignment();<br>
> -  if (alignAttr.has_value()) {<br>
> -    uint64_t value = alignAttr.value();<br>
> +  if (alignAttr.hasValue()) {<br>
> +    uint64_t value = alignAttr.getValue();<br>
>      if (!llvm::isPowerOf2_64(value))<br>
>        return emitError() << "alignment attribute is not a power of 2";<br>
>    }<br>
> @@ -2260,7 +2261,7 @@ ParseResult LLVMFuncOp::parse(OpAsmParser &parser, OperationState &result) {<br>
>    auto *body = result.addRegion();<br>
>    OptionalParseResult parseResult =<br>
>        parser.parseOptionalRegion(*body, entryArgs);<br>
> -  return failure(parseResult.has_value() && failed(*parseResult));<br>
> +  return failure(parseResult.hasValue() && failed(*parseResult));<br>
>  }<br>
><br>
>  // Print the LLVMFuncOp. Collects argument and result types and passes them to<br>
><br>
> diff  --git a/mlir/lib/Dialect/LLVMIR/IR/LLVMTypeSyntax.cpp b/mlir/lib/Dialect/LLVMIR/IR/LLVMTypeSyntax.cpp<br>
> index 295f59f6b6d55..04015efea3e9f 100644<br>
> --- a/mlir/lib/Dialect/LLVMIR/IR/LLVMTypeSyntax.cpp<br>
> +++ b/mlir/lib/Dialect/LLVMIR/IR/LLVMTypeSyntax.cpp<br>
> @@ -232,7 +232,7 @@ static LLVMPointerType parsePointerType(AsmParser &parser) {<br>
><br>
>    unsigned addressSpace = 0;<br>
>    OptionalParseResult opr = parser.parseOptionalInteger(addressSpace);<br>
> -  if (opr.has_value()) {<br>
> +  if (opr.hasValue()) {<br>
>      if (failed(*opr) || parser.parseGreater())<br>
>        return LLVMPointerType();<br>
>      return parser.getChecked<LLVMPointerType>(loc, parser.getContext(),<br>
> @@ -442,8 +442,8 @@ static Type dispatchParse(AsmParser &parser, bool allowAny = true) {<br>
>    // Try parsing any MLIR type.<br>
>    Type type;<br>
>    OptionalParseResult result = parser.parseOptionalType(type);<br>
> -  if (result.has_value()) {<br>
> -    if (failed(result.value()))<br>
> +  if (result.hasValue()) {<br>
> +    if (failed(result.getValue()))<br>
>        return nullptr;<br>
>      if (!allowAny) {<br>
>        parser.emitError(keyLoc) << "unexpected type, expected keyword";<br>
><br>
> diff  --git a/mlir/lib/Dialect/LLVMIR/IR/NVVMDialect.cpp b/mlir/lib/Dialect/LLVMIR/IR/NVVMDialect.cpp<br>
> index d5d84bdd470d7..7d4691a96b823 100644<br>
> --- a/mlir/lib/Dialect/LLVMIR/IR/NVVMDialect.cpp<br>
> +++ b/mlir/lib/Dialect/LLVMIR/IR/NVVMDialect.cpp<br>
> @@ -117,15 +117,15 @@ static bool isIntegerPtxType(MMATypes type) {<br>
>  MMATypes MmaOp::accumPtxType() {<br>
>    Optional<mlir::NVVM::MMATypes> val = inferOperandMMAType(<br>
>        getODSOperands(2).getTypes().front(), /*isAccum=*/true);<br>
> -  assert(val && "accumulator PTX type should always be inferrable");<br>
> -  return val.value();<br>
> +  assert(val.hasValue() && "accumulator PTX type should always be inferrable");<br>
> +  return val.getValue();<br>
>  }<br>
><br>
>  MMATypes MmaOp::resultPtxType() {<br>
>    Optional<mlir::NVVM::MMATypes> val =<br>
>        inferOperandMMAType(getResult().getType(), /*isAccum=*/true);<br>
> -  assert(val && "result PTX type should always be inferrable");<br>
> -  return val.value();<br>
> +  assert(val.hasValue() && "result PTX type should always be inferrable");<br>
> +  return val.getValue();<br>
>  }<br>
><br>
>  void MmaOp::print(OpAsmPrinter &p) {<br>
> @@ -224,10 +224,10 @@ void MmaOp::build(OpBuilder &builder, OperationState &result, Type resultType,<br>
>      result.addAttribute("layoutB", MMALayoutAttr::get(ctx, MMALayout::col));<br>
>    }<br>
><br>
> -  if (intOverflow)<br>
> +  if (intOverflow.hasValue())<br>
>      result.addAttribute("intOverflowBehavior",<br>
>                          MMAIntOverflowAttr::get(ctx, *intOverflow));<br>
> -  if (b1Op)<br>
> +  if (b1Op.hasValue())<br>
>      result.addAttribute("b1Op", MMAB1OpAttr::get(ctx, *b1Op));<br>
><br>
>    result.addTypes(resultType);<br>
> @@ -311,13 +311,13 @@ ParseResult MmaOp::parse(OpAsmParser &parser, OperationState &result) {<br>
>    for (unsigned idx = 0; idx < names.size(); idx++) {<br>
>      const auto &frag = frags[idx];<br>
>      Optional<NamedAttribute> attr = namedAttributes.getNamed(names[idx]);<br>
> -    if (!frag.elemtype.has_value() && !attr) {<br>
> +    if (!frag.elemtype.hasValue() && !attr.hasValue()) {<br>
>        return parser.emitError(<br>
>            parser.getNameLoc(),<br>
>            "attribute " + names[idx] +<br>
>                " is not provided explicitly and cannot be inferred");<br>
>      }<br>
> -    if (!attr)<br>
> +    if (!attr.hasValue())<br>
>        result.addAttribute(<br>
>            names[idx], MMATypesAttr::get(parser.getContext(), *frag.elemtype));<br>
>    }<br>
> @@ -399,10 +399,10 @@ LogicalResult MmaOp::verify() {<br>
>        break;<br>
>      default:<br>
>        return emitError("invalid shape or multiplicand type: " +<br>
> -                       stringifyEnum(getMultiplicandAPtxType().value()));<br>
> +                       stringifyEnum(getMultiplicandAPtxType().getValue()));<br>
>      }<br>
><br>
> -    if (isIntegerPtxType(getMultiplicandAPtxType().value())) {<br>
> +    if (isIntegerPtxType(getMultiplicandAPtxType().getValue())) {<br>
>        expectedResult.push_back(s32x4StructTy);<br>
>        expectedC.emplace_back(4, i32Ty);<br>
>        multiplicandFragType = i32Ty;<br>
> @@ -440,16 +440,16 @@ LogicalResult MmaOp::verify() {<br>
>            context, SmallVector<Type>(2, f64Ty)));<br>
>        allowedShapes.push_back({8, 8, 4});<br>
>      }<br>
> -    if (isIntegerPtxType(getMultiplicandAPtxType().value())) {<br>
> +    if (isIntegerPtxType(getMultiplicandAPtxType().getValue())) {<br>
>        expectedA.push_back({i32Ty});<br>
>        expectedB.push_back({i32Ty});<br>
>        expectedC.push_back({i32Ty, i32Ty});<br>
>        expectedResult.push_back(s32x2StructTy);<br>
> -      if (isInt4PtxType(getMultiplicandAPtxType().value()))<br>
> +      if (isInt4PtxType(getMultiplicandAPtxType().getValue()))<br>
>          allowedShapes.push_back({8, 8, 32});<br>
> -      if (isInt8PtxType(getMultiplicandAPtxType().value()))<br>
> +      if (isInt8PtxType(getMultiplicandAPtxType().getValue()))<br>
>          allowedShapes.push_back({8, 8, 16});<br>
> -      if (getMultiplicandAPtxType().value() == MMATypes::b1)<br>
> +      if (getMultiplicandAPtxType().getValue() == MMATypes::b1)<br>
>          allowedShapes.push_back({8, 8, 128});<br>
>      }<br>
>    }<br>
><br>
> diff  --git a/mlir/lib/Dialect/Linalg/Transforms/Fusion.cpp b/mlir/lib/Dialect/Linalg/Transforms/Fusion.cpp<br>
> index 8bff2c2b2f268..2b783a85263b4 100644<br>
> --- a/mlir/lib/Dialect/Linalg/Transforms/Fusion.cpp<br>
> +++ b/mlir/lib/Dialect/Linalg/Transforms/Fusion.cpp<br>
> @@ -777,14 +777,16 @@ fuseOperations(OpBuilder &b, LinalgOp rootOp, TiledLinalgOp tiledLinalgOp,<br>
>            LinalgDependenceGraph::DependenceType::RAW)<br>
>          continue;<br>
><br>
> -      unsigned resultIndex = dependence.getDependentOpViewResultNum().value();<br>
> +      unsigned resultIndex =<br>
> +          dependence.getDependentOpViewResultNum().getValue();<br>
>        LinalgOp consumer = origOpToFusedOp.lookup(dependence.getIndexingOp());<br>
>        if (!consumer)<br>
>          continue;<br>
><br>
>        Value replacementValue = fusedOp.getOperation()->getResult(resultIndex);<br>
>        consumer.getOperation()->setOperand(<br>
> -          dependence.getIndexingOpViewOperandNum().value(), replacementValue);<br>
> +          dependence.getIndexingOpViewOperandNum().getValue(),<br>
> +          replacementValue);<br>
>      }<br>
><br>
>      // At this point, all Linalg uses of the tensors produced by `origOp` have<br>
><br>
> diff  --git a/mlir/lib/Dialect/Linalg/Transforms/Promotion.cpp b/mlir/lib/Dialect/Linalg/Transforms/Promotion.cpp<br>
> index 88d986bd0037a..1f2ca258ce33f 100644<br>
> --- a/mlir/lib/Dialect/Linalg/Transforms/Promotion.cpp<br>
> +++ b/mlir/lib/Dialect/Linalg/Transforms/Promotion.cpp<br>
> @@ -49,8 +49,8 @@ static Value allocBuffer(ImplicitLocOpBuilder &b,<br>
>    auto width = layout.getTypeSize(elementType);<br>
><br>
>    IntegerAttr alignmentAttr;<br>
> -  if (alignment)<br>
> -    alignmentAttr = b.getI64IntegerAttr(alignment.value());<br>
> +  if (alignment.hasValue())<br>
> +    alignmentAttr = b.getI64IntegerAttr(alignment.getValue());<br>
><br>
>    // Static buffer.<br>
>    if (auto cst = allocSize.getDefiningOp<arith::ConstantIndexOp>()) {<br>
> @@ -233,7 +233,7 @@ FailureOr<PromotionInfo> mlir::linalg::promoteSubviewAsNewBuffer(<br>
>      Value size =<br>
>          failed(upperBound)<br>
>              ? rangeValue.size<br>
> -            : b.create<arith::ConstantIndexOp>(loc, upperBound.value());<br>
> +            : b.create<arith::ConstantIndexOp>(loc, upperBound.getValue());<br>
>      LLVM_DEBUG(llvm::dbgs() << "Extracted tightest: " << size << "\n");<br>
>      fullSizes.push_back(size);<br>
>      partialSizes.push_back(<br>
><br>
> diff  --git a/mlir/lib/Dialect/Linalg/Transforms/Transforms.cpp b/mlir/lib/Dialect/Linalg/Transforms/Transforms.cpp<br>
> index 67ca94b95f1e2..a3b95b3fffefc 100644<br>
> --- a/mlir/lib/Dialect/Linalg/Transforms/Transforms.cpp<br>
> +++ b/mlir/lib/Dialect/Linalg/Transforms/Transforms.cpp<br>
> @@ -102,8 +102,9 @@ LogicalResult mlir::linalg::LinalgTransformationFilter::checkAndNotify(<br>
>  void mlir::linalg::LinalgTransformationFilter::<br>
>      replaceLinalgTransformationFilter(PatternRewriter &rewriter,<br>
>                                        Operation *op) const {<br>
> -  if (replacement)<br>
> -    op->setAttr(LinalgTransforms::kLinalgTransformMarker, replacement.value());<br>
> +  if (replacement.hasValue())<br>
> +    op->setAttr(LinalgTransforms::kLinalgTransformMarker,<br>
> +                replacement.getValue());<br>
>    else<br>
>      op->removeAttr(<br>
>          rewriter.getStringAttr(LinalgTransforms::kLinalgTransformMarker));<br>
> @@ -440,10 +441,10 @@ LogicalResult mlir::linalg::LinalgBaseTileAndFusePattern::matchAndRewrite(<br>
>      if (failed(unfusedTiledOp))<br>
>        return failure();<br>
>      rewriter.replaceOp(tiledAndFusedOps->op,<br>
> -                       getTiledOpResult(unfusedTiledOp.value()));<br>
> +                       getTiledOpResult(unfusedTiledOp.getValue()));<br>
>      tiledAndFusedOps->op = unfusedTiledOp->op;<br>
>    }<br>
> -  op->replaceAllUsesWith(getTiledAndFusedOpResult(tiledAndFusedOps.value()));<br>
> +  op->replaceAllUsesWith(getTiledAndFusedOpResult(tiledAndFusedOps.getValue()));<br>
><br>
>    filter.replaceLinalgTransformationFilter(rewriter,<br>
>                                             tiledAndFusedOps->op.getOperation());<br>
><br>
> diff  --git a/mlir/lib/Dialect/MemRef/IR/MemRefOps.cpp b/mlir/lib/Dialect/MemRef/IR/MemRefOps.cpp<br>
> index 85351c570d9e9..014c5be2c3648 100644<br>
> --- a/mlir/lib/Dialect/MemRef/IR/MemRefOps.cpp<br>
> +++ b/mlir/lib/Dialect/MemRef/IR/MemRefOps.cpp<br>
> @@ -1297,8 +1297,8 @@ LogicalResult GlobalOp::verify() {<br>
><br>
>    // Verify that the initial value, if present, is either a unit attribute or<br>
>    // an elements attribute.<br>
> -  if (initial_value().has_value()) {<br>
> -    Attribute initValue = initial_value().value();<br>
> +  if (initial_value().hasValue()) {<br>
> +    Attribute initValue = initial_value().getValue();<br>
>      if (!initValue.isa<UnitAttr>() && !initValue.isa<ElementsAttr>())<br>
>        return emitOpError("initial value should be a unit or elements "<br>
>                           "attribute, but got ")<br>
> @@ -1329,8 +1329,8 @@ LogicalResult GlobalOp::verify() {<br>
><br>
>  ElementsAttr GlobalOp::getConstantInitValue() {<br>
>    auto initVal = initial_value();<br>
> -  if (constant() && initVal.has_value())<br>
> -    return initVal->cast<ElementsAttr>();<br>
> +  if (constant() && initVal.hasValue())<br>
> +    return initVal.getValue().cast<ElementsAttr>();<br>
>    return {};<br>
>  }<br>
><br>
> @@ -2483,14 +2483,14 @@ static bool isTrivialSubViewOp(SubViewOp subViewOp) {<br>
>    // Check offsets are zero.<br>
>    if (llvm::any_of(mixedOffsets, [](OpFoldResult ofr) {<br>
>          Optional<int64_t> intValue = getConstantIntValue(ofr);<br>
> -        return !intValue || *intValue != 0;<br>
> +        return !intValue || intValue.getValue() != 0;<br>
>        }))<br>
>      return false;<br>
><br>
>    // Check strides are one.<br>
>    if (llvm::any_of(mixedStrides, [](OpFoldResult ofr) {<br>
>          Optional<int64_t> intValue = getConstantIntValue(ofr);<br>
> -        return !intValue || *intValue != 1;<br>
> +        return !intValue || intValue.getValue() != 1;<br>
>        }))<br>
>      return false;<br>
><br>
><br>
> diff  --git a/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp b/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp<br>
> index b2960a68144f9..ec1b6e942e80c 100644<br>
> --- a/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp<br>
> +++ b/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp<br>
> @@ -243,7 +243,7 @@ ParseResult ParallelOp::parse(OpAsmParser &parser, OperationState &result) {<br>
>    // async()?<br>
>    async = parseOptionalOperandAndType(parser, ParallelOp::getAsyncKeyword(),<br>
>                                        result);<br>
> -  if (async.has_value() && failed(*async))<br>
> +  if (async.hasValue() && failed(*async))<br>
>      return failure();<br>
><br>
>    // wait()?<br>
> @@ -254,19 +254,19 @@ ParseResult ParallelOp::parse(OpAsmParser &parser, OperationState &result) {<br>
>    // num_gangs(value)?<br>
>    numGangs = parseOptionalOperandAndType(<br>
>        parser, ParallelOp::getNumGangsKeyword(), result);<br>
> -  if (numGangs.has_value() && failed(*numGangs))<br>
> +  if (numGangs.hasValue() && failed(*numGangs))<br>
>      return failure();<br>
><br>
>    // num_workers(value)?<br>
>    numWorkers = parseOptionalOperandAndType(<br>
>        parser, ParallelOp::getNumWorkersKeyword(), result);<br>
> -  if (numWorkers.has_value() && failed(*numWorkers))<br>
> +  if (numWorkers.hasValue() && failed(*numWorkers))<br>
>      return failure();<br>
><br>
>    // vector_length(value)?<br>
>    vectorLength = parseOptionalOperandAndType(<br>
>        parser, ParallelOp::getVectorLengthKeyword(), result);<br>
> -  if (vectorLength.has_value() && failed(*vectorLength))<br>
> +  if (vectorLength.hasValue() && failed(*vectorLength))<br>
>      return failure();<br>
><br>
>    // if()?<br>
> @@ -362,11 +362,11 @@ ParseResult ParallelOp::parse(OpAsmParser &parser, OperationState &result) {<br>
>    result.addAttribute(<br>
>        ParallelOp::getOperandSegmentSizeAttr(),<br>
>        builder.getI32VectorAttr(<br>
> -          {static_cast<int32_t>(async.has_value() ? 1 : 0),<br>
> +          {static_cast<int32_t>(async.hasValue() ? 1 : 0),<br>
>             static_cast<int32_t>(waitOperands.size()),<br>
> -           static_cast<int32_t>(numGangs.has_value() ? 1 : 0),<br>
> -           static_cast<int32_t>(numWorkers.has_value() ? 1 : 0),<br>
> -           static_cast<int32_t>(vectorLength.has_value() ? 1 : 0),<br>
> +           static_cast<int32_t>(numGangs.hasValue() ? 1 : 0),<br>
> +           static_cast<int32_t>(numWorkers.hasValue() ? 1 : 0),<br>
> +           static_cast<int32_t>(vectorLength.hasValue() ? 1 : 0),<br>
>             static_cast<int32_t>(hasIfCond ? 1 : 0),<br>
>             static_cast<int32_t>(hasSelfCond ? 1 : 0),<br>
>             static_cast<int32_t>(reductionOperands.size()),<br>
> @@ -531,13 +531,13 @@ ParseResult LoopOp::parse(OpAsmParser &parser, OperationState &result) {<br>
>    if (succeeded(parser.parseOptionalLParen())) {<br>
>      gangNum = parserOptionalOperandAndTypeWithPrefix(<br>
>          parser, result, LoopOp::getGangNumKeyword());<br>
> -    if (gangNum.has_value() && failed(*gangNum))<br>
> +    if (gangNum.hasValue() && failed(*gangNum))<br>
>        return failure();<br>
>      // FIXME: Comma should require subsequent operands.<br>
>      (void)parser.parseOptionalComma();<br>
>      gangStatic = parserOptionalOperandAndTypeWithPrefix(<br>
>          parser, result, LoopOp::getGangStaticKeyword());<br>
> -    if (gangStatic.has_value() && failed(*gangStatic))<br>
> +    if (gangStatic.hasValue() && failed(*gangStatic))<br>
>        return failure();<br>
>      // FIXME: Why allow optional last commas?<br>
>      (void)parser.parseOptionalComma();<br>
> @@ -551,7 +551,7 @@ ParseResult LoopOp::parse(OpAsmParser &parser, OperationState &result) {<br>
><br>
>    // optional worker operand<br>
>    worker = parseOptionalOperandAndType(parser, result);<br>
> -  if (worker.has_value() && failed(*worker))<br>
> +  if (worker.hasValue() && failed(*worker))<br>
>      return failure();<br>
><br>
>    // vector?<br>
> @@ -560,7 +560,7 @@ ParseResult LoopOp::parse(OpAsmParser &parser, OperationState &result) {<br>
><br>
>    // optional vector operand<br>
>    vector = parseOptionalOperandAndType(parser, result);<br>
> -  if (vector.has_value() && failed(*vector))<br>
> +  if (vector.hasValue() && failed(*vector))<br>
>      return failure();<br>
><br>
>    // tile()?<br>
> @@ -591,10 +591,10 @@ ParseResult LoopOp::parse(OpAsmParser &parser, OperationState &result) {<br>
><br>
>    result.addAttribute(LoopOp::getOperandSegmentSizeAttr(),<br>
>                        builder.getI32VectorAttr(<br>
> -                          {static_cast<int32_t>(gangNum.has_value() ? 1 : 0),<br>
> -                           static_cast<int32_t>(gangStatic.has_value() ? 1 : 0),<br>
> -                           static_cast<int32_t>(worker.has_value() ? 1 : 0),<br>
> -                           static_cast<int32_t>(vector.has_value() ? 1 : 0),<br>
> +                          {static_cast<int32_t>(gangNum.hasValue() ? 1 : 0),<br>
> +                           static_cast<int32_t>(gangStatic.hasValue() ? 1 : 0),<br>
> +                           static_cast<int32_t>(worker.hasValue() ? 1 : 0),<br>
> +                           static_cast<int32_t>(vector.hasValue() ? 1 : 0),<br>
>                             static_cast<int32_t>(tileOperands.size()),<br>
>                             static_cast<int32_t>(privateOperands.size()),<br>
>                             static_cast<int32_t>(reductionOperands.size())}));<br>
><br>
> diff  --git a/mlir/lib/Dialect/PDL/IR/PDLTypes.cpp b/mlir/lib/Dialect/PDL/IR/PDLTypes.cpp<br>
> index f3b19236522c2..13e19d4276ebe 100644<br>
> --- a/mlir/lib/Dialect/PDL/IR/PDLTypes.cpp<br>
> +++ b/mlir/lib/Dialect/PDL/IR/PDLTypes.cpp<br>
> @@ -40,7 +40,7 @@ static Type parsePDLType(AsmParser &parser) {<br>
>    {<br>
>      Type genType;<br>
>      auto parseResult = generatedTypeParser(parser, typeTag, genType);<br>
> -    if (parseResult.has_value())<br>
> +    if (parseResult.hasValue())<br>
>        return genType;<br>
>    }<br>
><br>
><br>
> diff  --git a/mlir/lib/Dialect/Quant/IR/TypeParser.cpp b/mlir/lib/Dialect/Quant/IR/TypeParser.cpp<br>
> index 91e7ec78aaa5d..951f62a76c44d 100644<br>
> --- a/mlir/lib/Dialect/Quant/IR/TypeParser.cpp<br>
> +++ b/mlir/lib/Dialect/Quant/IR/TypeParser.cpp<br>
> @@ -30,7 +30,7 @@ static IntegerType parseStorageType(DialectAsmParser &parser, bool &isSigned) {<br>
>    StringRef identifier;<br>
>    unsigned storageTypeWidth = 0;<br>
>    OptionalParseResult result = parser.parseOptionalType(type);<br>
> -  if (result.has_value()) {<br>
> +  if (result.hasValue()) {<br>
>      if (!succeeded(*result))<br>
>        return nullptr;<br>
>      isSigned = !type.isUnsigned();<br>
><br>
> diff  --git a/mlir/lib/Dialect/SCF/IR/SCF.cpp b/mlir/lib/Dialect/SCF/IR/SCF.cpp<br>
> index 503c36d0517b6..293238e82b169 100644<br>
> --- a/mlir/lib/Dialect/SCF/IR/SCF.cpp<br>
> +++ b/mlir/lib/Dialect/SCF/IR/SCF.cpp<br>
> @@ -2711,7 +2711,7 @@ ParseResult scf::WhileOp::parse(OpAsmParser &parser, OperationState &result) {<br>
><br>
>    OptionalParseResult listResult =<br>
>        parser.parseOptionalAssignmentList(regionArgs, operands);<br>
> -  if (listResult.has_value() && failed(listResult.value()))<br>
> +  if (listResult.hasValue() && failed(listResult.getValue()))<br>
>      return failure();<br>
><br>
>    FunctionType functionType;<br>
><br>
> diff  --git a/mlir/lib/Dialect/SCF/Transforms/TileUsingInterface.cpp b/mlir/lib/Dialect/SCF/Transforms/TileUsingInterface.cpp<br>
> index 63d34e47b45a7..1bad67f3d7f4d 100644<br>
> --- a/mlir/lib/Dialect/SCF/Transforms/TileUsingInterface.cpp<br>
> +++ b/mlir/lib/Dialect/SCF/Transforms/TileUsingInterface.cpp<br>
> @@ -340,11 +340,11 @@ scf::TileConsumerAndFuseProducersUsingSCFForOp::returningMatchAndRewrite(<br>
>      // 2c. Generate the tiled implementation of the producer of the source<br>
>      rewriter.setInsertionPoint(candidateSliceOp);<br>
>      FailureOr<Value> fusedProducerValue =<br>
> -        tensor::replaceExtractSliceWithTiledProducer(rewriter, candidateSliceOp,<br>
> -                                                     fusableProducer.value());<br>
> +        tensor::replaceExtractSliceWithTiledProducer(<br>
> +            rewriter, candidateSliceOp, fusableProducer.getValue());<br>
>      if (failed(fusedProducerValue))<br>
>        continue;<br>
> -    rewriter.replaceOp(candidateSliceOp, fusedProducerValue.value());<br>
> +    rewriter.replaceOp(candidateSliceOp, fusedProducerValue.getValue());<br>
><br>
>      // 2d. The operands of the fused producer might themselved be slices of<br>
>      //     values produced by operations that implement the `TilingInterface`.<br>
><br>
> diff  --git a/mlir/lib/Dialect/SCF/Utils/AffineCanonicalizationUtils.cpp b/mlir/lib/Dialect/SCF/Utils/AffineCanonicalizationUtils.cpp<br>
> index 024731a9222c3..958b5a2757148 100644<br>
> --- a/mlir/lib/Dialect/SCF/Utils/AffineCanonicalizationUtils.cpp<br>
> +++ b/mlir/lib/Dialect/SCF/Utils/AffineCanonicalizationUtils.cpp<br>
> @@ -27,8 +27,9 @@ using namespace presburger;<br>
><br>
>  static void unpackOptionalValues(ArrayRef<Optional<Value>> source,<br>
>                                   SmallVector<Value> &target) {<br>
> -  target = llvm::to_vector<4>(llvm::map_range(<br>
> -      source, [](Optional<Value> val) { return val ? *val : Value(); }));<br>
> +  target = llvm::to_vector<4>(llvm::map_range(source, [](Optional<Value> val) {<br>
> +    return val.hasValue() ? *val : Value();<br>
> +  }));<br>
>  }<br>
><br>
>  /// Bound an identifier `pos` in a given FlatAffineValueConstraints with<br>
><br>
> diff  --git a/mlir/lib/Dialect/SPIRV/IR/SPIRVAttributes.cpp b/mlir/lib/Dialect/SPIRV/IR/SPIRVAttributes.cpp<br>
> index 7b7ff84bfd26f..4accfc173a592 100644<br>
> --- a/mlir/lib/Dialect/SPIRV/IR/SPIRVAttributes.cpp<br>
> +++ b/mlir/lib/Dialect/SPIRV/IR/SPIRVAttributes.cpp<br>
> @@ -387,7 +387,7 @@ static Attribute parseInterfaceVarABIAttr(DialectAsmParser &parser) {<br>
>      uint32_t descriptorSet = 0;<br>
>      auto descriptorSetParseResult = parser.parseOptionalInteger(descriptorSet);<br>
><br>
> -    if (!descriptorSetParseResult.has_value() ||<br>
> +    if (!descriptorSetParseResult.hasValue() ||<br>
>          failed(*descriptorSetParseResult)) {<br>
>        parser.emitError(loc, "missing descriptor set");<br>
>        return {};<br>
> @@ -404,7 +404,7 @@ static Attribute parseInterfaceVarABIAttr(DialectAsmParser &parser) {<br>
>      uint32_t binding = 0;<br>
>      auto bindingParseResult = parser.parseOptionalInteger(binding);<br>
><br>
> -    if (!bindingParseResult.has_value() || failed(*bindingParseResult)) {<br>
> +    if (!bindingParseResult.hasValue() || failed(*bindingParseResult)) {<br>
>        parser.emitError(loc, "missing binding");<br>
>        return {};<br>
>      }<br>
> @@ -583,8 +583,8 @@ Attribute SPIRVDialect::parseAttribute(DialectAsmParser &parser,<br>
>    Attribute attr;<br>
>    OptionalParseResult result =<br>
>        generatedAttributeParser(parser, attrKind, type, attr);<br>
> -  if (result.has_value()) {<br>
> -    if (failed(result.value()))<br>
> +  if (result.hasValue()) {<br>
> +    if (failed(result.getValue()))<br>
>        return {};<br>
>      return attr;<br>
>    }<br>
><br>
> diff  --git a/mlir/lib/Dialect/SPIRV/IR/SPIRVCanonicalization.cpp b/mlir/lib/Dialect/SPIRV/IR/SPIRVCanonicalization.cpp<br>
> index 9ca9c15e119fc..aaa0fb33ae912 100644<br>
> --- a/mlir/lib/Dialect/SPIRV/IR/SPIRVCanonicalization.cpp<br>
> +++ b/mlir/lib/Dialect/SPIRV/IR/SPIRVCanonicalization.cpp<br>
> @@ -216,11 +216,11 @@ OpFoldResult spirv::LogicalAndOp::fold(ArrayRef<Attribute> operands) {<br>
><br>
>    if (Optional<bool> rhs = getScalarOrSplatBoolAttr(operands.back())) {<br>
>      // x && true = x<br>
> -    if (rhs.value())<br>
> +    if (rhs.getValue())<br>
>        return operand1();<br>
><br>
>      // x && false = false<br>
> -    if (!rhs.value())<br>
> +    if (!rhs.getValue())<br>
>        return operands.back();<br>
>    }<br>
><br>
> @@ -247,12 +247,12 @@ OpFoldResult spirv::LogicalOrOp::fold(ArrayRef<Attribute> operands) {<br>
>    assert(operands.size() == 2 && "spv.LogicalOr should take two operands");<br>
><br>
>    if (auto rhs = getScalarOrSplatBoolAttr(operands.back())) {<br>
> -    if (rhs.value())<br>
> +    if (rhs.getValue())<br>
>        // x || true = true<br>
>        return operands.back();<br>
><br>
>      // x || false = x<br>
> -    if (!rhs.value())<br>
> +    if (!rhs.getValue())<br>
>        return operand1();<br>
>    }<br>
><br>
><br>
> diff  --git a/mlir/lib/Dialect/SPIRV/IR/SPIRVDialect.cpp b/mlir/lib/Dialect/SPIRV/IR/SPIRVDialect.cpp<br>
> index dff597141cc25..ee717d2fe8595 100644<br>
> --- a/mlir/lib/Dialect/SPIRV/IR/SPIRVDialect.cpp<br>
> +++ b/mlir/lib/Dialect/SPIRV/IR/SPIRVDialect.cpp<br>
> @@ -496,8 +496,8 @@ template <typename ParseType, typename... Args> struct ParseCommaSeparatedList {<br>
>      auto remainingValues = ParseCommaSeparatedList<Args...>{}(dialect, parser);<br>
>      if (!remainingValues)<br>
>        return llvm::None;<br>
> -    return std::tuple_cat(std::tuple<ParseType>(parseVal.value()),<br>
> -                          remainingValues.value());<br>
> +    return std::tuple_cat(std::tuple<ParseType>(parseVal.getValue()),<br>
> +                          remainingValues.getValue());<br>
>    }<br>
>  };<br>
><br>
> @@ -571,7 +571,7 @@ static ParseResult parseStructMemberDecorations(<br>
>    SMLoc offsetLoc = parser.getCurrentLocation();<br>
>    StructType::OffsetInfo offset = 0;<br>
>    OptionalParseResult offsetParseResult = parser.parseOptionalInteger(offset);<br>
> -  if (offsetParseResult.has_value()) {<br>
> +  if (offsetParseResult.hasValue()) {<br>
>      if (failed(*offsetParseResult))<br>
>        return failure();<br>
><br>
> @@ -588,7 +588,7 @@ static ParseResult parseStructMemberDecorations(<br>
>      return success();<br>
><br>
>    // If there was an offset, make sure to parse the comma.<br>
> -  if (offsetParseResult.has_value() && parser.parseComma())<br>
> +  if (offsetParseResult.hasValue() && parser.parseComma())<br>
>      return failure();<br>
><br>
>    // Check for spirv::Decorations.<br>
> @@ -607,11 +607,11 @@ static ParseResult parseStructMemberDecorations(<br>
><br>
>        memberDecorationInfo.emplace_back(<br>
>            static_cast<uint32_t>(memberTypes.size() - 1), 1,<br>
> -          memberDecoration.value(), memberDecorationValue.value());<br>
> +          memberDecoration.getValue(), memberDecorationValue.getValue());<br>
>      } else {<br>
>        memberDecorationInfo.emplace_back(<br>
>            static_cast<uint32_t>(memberTypes.size() - 1), 0,<br>
> -          memberDecoration.value(), 0);<br>
> +          memberDecoration.getValue(), 0);<br>
>      }<br>
>      return success();<br>
>    };<br>
><br>
> diff  --git a/mlir/lib/Dialect/SPIRV/IR/SPIRVOps.cpp b/mlir/lib/Dialect/SPIRV/IR/SPIRVOps.cpp<br>
> index 4af79a1c33d2e..4e7338fa1133c 100644<br>
> --- a/mlir/lib/Dialect/SPIRV/IR/SPIRVOps.cpp<br>
> +++ b/mlir/lib/Dialect/SPIRV/IR/SPIRVOps.cpp<br>
> @@ -2236,7 +2236,7 @@ ParseResult spirv::FuncOp::parse(OpAsmParser &parser, OperationState &state) {<br>
>    // Parse the optional function body.<br>
>    auto *body = state.addRegion();<br>
>    OptionalParseResult result = parser.parseOptionalRegion(*body, entryArgs);<br>
> -  return failure(result.has_value() && failed(*result));<br>
> +  return failure(result.hasValue() && failed(*result));<br>
>  }<br>
><br>
>  void spirv::FuncOp::print(OpAsmPrinter &printer) {<br>
><br>
> diff  --git a/mlir/lib/Dialect/SPIRV/Transforms/LowerABIAttributesPass.cpp b/mlir/lib/Dialect/SPIRV/Transforms/LowerABIAttributesPass.cpp<br>
> index 263f00ef1d863..3ea2224a4408a 100644<br>
> --- a/mlir/lib/Dialect/SPIRV/Transforms/LowerABIAttributesPass.cpp<br>
> +++ b/mlir/lib/Dialect/SPIRV/Transforms/LowerABIAttributesPass.cpp<br>
> @@ -131,8 +131,8 @@ static LogicalResult lowerEntryPointABIAttr(spirv::FuncOp funcOp,<br>
>      return funcOp.emitRemark("lower entry point failure: could not select "<br>
>                               "execution model based on 'spv.target_env'");<br>
><br>
> -  builder.create<spirv::EntryPointOp>(funcOp.getLoc(), executionModel.value(),<br>
> -                                      funcOp, interfaceVars);<br>
> +  builder.create<spirv::EntryPointOp>(<br>
> +      funcOp.getLoc(), executionModel.getValue(), funcOp, interfaceVars);<br>
><br>
>    // Specifies the spv.ExecutionModeOp.<br>
>    auto localSizeAttr = entryPointAttr.getLocalSize();<br>
><br>
> diff  --git a/mlir/lib/Dialect/Shape/IR/Shape.cpp b/mlir/lib/Dialect/Shape/IR/Shape.cpp<br>
> index 6fd8fa666a595..b3f6c4cc2cea7 100644<br>
> --- a/mlir/lib/Dialect/Shape/IR/Shape.cpp<br>
> +++ b/mlir/lib/Dialect/Shape/IR/Shape.cpp<br>
> @@ -1247,11 +1247,11 @@ OpFoldResult GetExtentOp::fold(ArrayRef<Attribute> operands) {<br>
>    if (!elements)<br>
>      return nullptr;<br>
>    Optional<int64_t> dim = getConstantDim();<br>
> -  if (!dim.has_value())<br>
> +  if (!dim.hasValue())<br>
>      return nullptr;<br>
> -  if (dim.value() >= elements.getNumElements())<br>
> +  if (dim.getValue() >= elements.getNumElements())<br>
>      return nullptr;<br>
> -  return elements.getValues<Attribute>()[(uint64_t)dim.value()];<br>
> +  return elements.getValues<Attribute>()[(uint64_t)dim.getValue()];<br>
>  }<br>
><br>
>  void GetExtentOp::build(OpBuilder &builder, OperationState &result, Value shape,<br>
><br>
> diff  --git a/mlir/lib/Dialect/SparseTensor/Transforms/Sparsification.cpp b/mlir/lib/Dialect/SparseTensor/Transforms/Sparsification.cpp<br>
> index 0504ea08d97cd..8c62290b5e0cf 100644<br>
> --- a/mlir/lib/Dialect/SparseTensor/Transforms/Sparsification.cpp<br>
> +++ b/mlir/lib/Dialect/SparseTensor/Transforms/Sparsification.cpp<br>
> @@ -1729,9 +1729,9 @@ struct GenericOpSparsifier : public OpRewritePattern<linalg::GenericOp> {<br>
><br>
>      // Builds the tensor expression for the Linalg operation in SSA form.<br>
>      Optional<unsigned> optExp = merger.buildTensorExpFromLinalg(op);<br>
> -    if (!optExp.has_value())<br>
> +    if (!optExp.hasValue())<br>
>        return failure();<br>
> -    unsigned exp = optExp.value();<br>
> +    unsigned exp = optExp.getValue();<br>
><br>
>      // Rejects an inadmissable tensor expression.<br>
>      OpOperand *sparseOut = nullptr;<br>
><br>
> diff  --git a/mlir/lib/Dialect/SparseTensor/Utils/Merger.cpp b/mlir/lib/Dialect/SparseTensor/Utils/Merger.cpp<br>
> index 9482e71a6eeef..ed19cf7a18690 100644<br>
> --- a/mlir/lib/Dialect/SparseTensor/Utils/Merger.cpp<br>
> +++ b/mlir/lib/Dialect/SparseTensor/Utils/Merger.cpp<br>
> @@ -893,8 +893,8 @@ Optional<unsigned> Merger::buildTensorExp(linalg::GenericOp op, Value v) {<br>
>    // Construct unary operations if subexpression can be built.<br>
>    if (def->getNumOperands() == 1) {<br>
>      auto x = buildTensorExp(op, def->getOperand(0));<br>
> -    if (x) {<br>
> -      unsigned e = x.value();<br>
> +    if (x.hasValue()) {<br>
> +      unsigned e = x.getValue();<br>
>        if (isa<math::AbsOp>(def))<br>
>          return addExp(kAbsF, e);<br>
>        if (isa<complex::AbsOp>(def))<br>
> @@ -966,9 +966,9 @@ Optional<unsigned> Merger::buildTensorExp(linalg::GenericOp op, Value v) {<br>
>    if (def->getNumOperands() == 2) {<br>
>      auto x = buildTensorExp(op, def->getOperand(0));<br>
>      auto y = buildTensorExp(op, def->getOperand(1));<br>
> -    if (x.has_value() && y.has_value()) {<br>
> -      unsigned e0 = x.value();<br>
> -      unsigned e1 = y.value();<br>
> +    if (x.hasValue() && y.hasValue()) {<br>
> +      unsigned e0 = x.getValue();<br>
> +      unsigned e1 = y.getValue();<br>
>        if (isa<arith::MulFOp>(def))<br>
>          return addExp(kMulF, e0, e1);<br>
>        if (isa<complex::MulOp>(def))<br>
><br>
> diff  --git a/mlir/lib/Dialect/Tensor/Transforms/SwapExtractSliceWithProducer.cpp b/mlir/lib/Dialect/Tensor/Transforms/SwapExtractSliceWithProducer.cpp<br>
> index 87981646d0ffa..8d570cfdf7592 100644<br>
> --- a/mlir/lib/Dialect/Tensor/Transforms/SwapExtractSliceWithProducer.cpp<br>
> +++ b/mlir/lib/Dialect/Tensor/Transforms/SwapExtractSliceWithProducer.cpp<br>
> @@ -39,5 +39,5 @@ FailureOr<Value> tensor::replaceExtractSliceWithTiledProducer(<br>
>    if (failed(tiledResult))<br>
>      return failure();<br>
><br>
> -  return tiledResult.value();<br>
> +  return tiledResult.getValue();<br>
>  }<br>
><br>
> diff  --git a/mlir/lib/Dialect/Tosa/Transforms/TosaDecomposeTransposeConv.cpp b/mlir/lib/Dialect/Tosa/Transforms/TosaDecomposeTransposeConv.cpp<br>
> index a0a9262539c8b..120e5024837d4 100644<br>
> --- a/mlir/lib/Dialect/Tosa/Transforms/TosaDecomposeTransposeConv.cpp<br>
> +++ b/mlir/lib/Dialect/Tosa/Transforms/TosaDecomposeTransposeConv.cpp<br>
> @@ -208,8 +208,8 @@ class TransposeConvStridedConverter<br>
>      Value weightPaddingVal = createOpAndInfer<tosa::ConstOp>(<br>
>          rewriter, loc, weightPaddingAttr.getType(), weightPaddingAttr);<br>
><br>
> -    if (op.quantization_info().has_value()) {<br>
> -      auto quantInfo = op.quantization_info().value();<br>
> +    if (op.quantization_info().hasValue()) {<br>
> +      auto quantInfo = op.quantization_info().getValue();<br>
>        weight = createOpAndInfer<tosa::PadOp>(<br>
>            rewriter, loc, UnrankedTensorType::get(weightETy), weight,<br>
>            weightPaddingVal, nullptr,<br>
> @@ -272,8 +272,8 @@ class TransposeConvStridedConverter<br>
>      Value inputPaddingVal = createOpAndInfer<tosa::ConstOp>(<br>
>          rewriter, loc, inputPaddingAttr.getType(), inputPaddingAttr);<br>
><br>
> -    if (op.quantization_info().has_value()) {<br>
> -      auto quantInfo = op.quantization_info().value();<br>
> +    if (op.quantization_info().hasValue()) {<br>
> +      auto quantInfo = op.quantization_info().getValue();<br>
>        input = createOpAndInfer<tosa::PadOp>(<br>
>            rewriter, loc, UnrankedTensorType::get(inputETy), input,<br>
>            inputPaddingVal, nullptr,<br>
><br>
> diff  --git a/mlir/lib/Dialect/Transform/IR/TransformOps.cpp b/mlir/lib/Dialect/Transform/IR/TransformOps.cpp<br>
> index 23e7b5d190000..d83a9de96be9d 100644<br>
> --- a/mlir/lib/Dialect/Transform/IR/TransformOps.cpp<br>
> +++ b/mlir/lib/Dialect/Transform/IR/TransformOps.cpp<br>
> @@ -134,12 +134,12 @@ void transform::AlternativesOp::getSuccessorRegions(<br>
>      Optional<unsigned> index, ArrayRef<Attribute> operands,<br>
>      SmallVectorImpl<RegionSuccessor> &regions) {<br>
>    for (Region &alternative :<br>
> -       llvm::drop_begin(getAlternatives(), index ? *index + 1 : 0)) {<br>
> +       llvm::drop_begin(getAlternatives(), index.hasValue() ? *index + 1 : 0)) {<br>
>      regions.emplace_back(&alternative, !getOperands().empty()<br>
>                                             ? alternative.getArguments()<br>
>                                             : Block::BlockArgListType());<br>
>    }<br>
> -  if (index)<br>
> +  if (index.hasValue())<br>
>      regions.emplace_back(getOperation()->getResults());<br>
>  }<br>
><br>
><br>
> diff  --git a/mlir/lib/Dialect/Utils/ReshapeOpsUtils.cpp b/mlir/lib/Dialect/Utils/ReshapeOpsUtils.cpp<br>
> index b26b3d93541a2..64937be9fac05 100644<br>
> --- a/mlir/lib/Dialect/Utils/ReshapeOpsUtils.cpp<br>
> +++ b/mlir/lib/Dialect/Utils/ReshapeOpsUtils.cpp<br>
> @@ -238,7 +238,7 @@ LogicalResult mlir::reshapeLikeShapesAreCompatible(<br>
>            return emitError("invalid to have a single dimension (" +<br>
>                             Twine(map.index()) +<br>
>                             ") expanded into multiple dynamic dims (" +<br>
> -                           Twine(expandedDimStart + dynamicShape.value()) +<br>
> +                           Twine(expandedDimStart + dynamicShape.getValue()) +<br>
>                             "," + Twine(expandedDimStart + dim.index()) + ")");<br>
>          }<br>
>          dynamicShape = dim.index();<br>
><br>
> diff  --git a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp<br>
> index 387e5f1293031..ebf36627b6308 100644<br>
> --- a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp<br>
> +++ b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp<br>
> @@ -2677,8 +2677,8 @@ void TransferReadOp::build(OpBuilder &builder, OperationState &result,<br>
>                             ValueRange indices, AffineMap permutationMap,<br>
>                             Optional<ArrayRef<bool>> inBounds) {<br>
>    auto permutationMapAttr = AffineMapAttr::get(permutationMap);<br>
> -  auto inBoundsAttr = (inBounds && !inBounds->empty())<br>
> -                          ? builder.getBoolArrayAttr(inBounds.value())<br>
> +  auto inBoundsAttr = (inBounds && !inBounds.getValue().empty())<br>
> +                          ? builder.getBoolArrayAttr(inBounds.getValue())<br>
>                            : ArrayAttr();<br>
>    build(builder, result, vectorType, source, indices, permutationMapAttr,<br>
>          inBoundsAttr);<br>
> @@ -2692,8 +2692,8 @@ void TransferReadOp::build(OpBuilder &builder, OperationState &result,<br>
>    AffineMap permutationMap = getTransferMinorIdentityMap(<br>
>        source.getType().cast<ShapedType>(), vectorType);<br>
>    auto permutationMapAttr = AffineMapAttr::get(permutationMap);<br>
> -  auto inBoundsAttr = (inBounds && !inBounds->empty())<br>
> -                          ? builder.getBoolArrayAttr(inBounds.value())<br>
> +  auto inBoundsAttr = (inBounds && !inBounds.getValue().empty())<br>
> +                          ? builder.getBoolArrayAttr(inBounds.getValue())<br>
>                            : ArrayAttr();<br>
>    build(builder, result, vectorType, source, indices, permutationMapAttr,<br>
>          padding,<br>
> @@ -3216,8 +3216,8 @@ void TransferWriteOp::build(OpBuilder &builder, OperationState &result,<br>
>                              AffineMap permutationMap,<br>
>                              Optional<ArrayRef<bool>> inBounds) {<br>
>    auto permutationMapAttr = AffineMapAttr::get(permutationMap);<br>
> -  auto inBoundsAttr = (inBounds && !inBounds->empty())<br>
> -                          ? builder.getBoolArrayAttr(inBounds.value())<br>
> +  auto inBoundsAttr = (inBounds && !inBounds.getValue().empty())<br>
> +                          ? builder.getBoolArrayAttr(inBounds.getValue())<br>
>                            : ArrayAttr();<br>
>    build(builder, result, vector, dest, indices, permutationMapAttr,<br>
>          /*mask=*/Value(), inBoundsAttr);<br>
><br>
> diff  --git a/mlir/lib/Dialect/Vector/Transforms/VectorTransferPermutationMapRewritePatterns.cpp b/mlir/lib/Dialect/Vector/Transforms/VectorTransferPermutationMapRewritePatterns.cpp<br>
> index e419fc2db87a0..948814556b157 100644<br>
> --- a/mlir/lib/Dialect/Vector/Transforms/VectorTransferPermutationMapRewritePatterns.cpp<br>
> +++ b/mlir/lib/Dialect/Vector/Transforms/VectorTransferPermutationMapRewritePatterns.cpp<br>
> @@ -105,9 +105,10 @@ struct TransferReadPermutationLowering<br>
><br>
>      // Transpose in_bounds attribute.<br>
>      ArrayAttr newInBoundsAttr =<br>
> -        op.getInBounds() ? transposeInBoundsAttr(<br>
> -                               rewriter, op.getInBounds().value(), permutation)<br>
> -                         : ArrayAttr();<br>
> +        op.getInBounds()<br>
> +            ? transposeInBoundsAttr(rewriter, op.getInBounds().getValue(),<br>
> +                                    permutation)<br>
> +            : ArrayAttr();<br>
><br>
>      // Generate new transfer_read operation.<br>
>      VectorType newReadType =<br>
> @@ -175,9 +176,10 @@ struct TransferWritePermutationLowering<br>
><br>
>      // Transpose in_bounds attribute.<br>
>      ArrayAttr newInBoundsAttr =<br>
> -        op.getInBounds() ? transposeInBoundsAttr(<br>
> -                               rewriter, op.getInBounds().value(), permutation)<br>
> -                         : ArrayAttr();<br>
> +        op.getInBounds()<br>
> +            ? transposeInBoundsAttr(rewriter, op.getInBounds().getValue(),<br>
> +                                    permutation)<br>
> +            : ArrayAttr();<br>
><br>
>      // Generate new transfer_write operation.<br>
>      Value newVec = rewriter.create<vector::TransposeOp>(<br>
><br>
> diff  --git a/mlir/lib/Dialect/Vector/Transforms/VectorTransforms.cpp b/mlir/lib/Dialect/Vector/Transforms/VectorTransforms.cpp<br>
> index 26e4caca0587c..67635d69ddeaf 100644<br>
> --- a/mlir/lib/Dialect/Vector/Transforms/VectorTransforms.cpp<br>
> +++ b/mlir/lib/Dialect/Vector/Transforms/VectorTransforms.cpp<br>
> @@ -553,9 +553,9 @@ class OuterProductOpLowering : public OpRewritePattern<vector::OuterProductOp> {<br>
>        Value b = rewriter.create<vector::BroadcastOp>(loc, lhsType, op.getRhs());<br>
>        Optional<Value> mult = createContractArithOp(loc, op.getLhs(), b, acc,<br>
>                                                     kind, rewriter, isInt);<br>
> -      if (!mult.has_value())<br>
> +      if (!mult.hasValue())<br>
>          return failure();<br>
> -      rewriter.replaceOp(op, mult.value());<br>
> +      rewriter.replaceOp(op, mult.getValue());<br>
>        return success();<br>
>      }<br>
><br>
> @@ -571,9 +571,9 @@ class OuterProductOpLowering : public OpRewritePattern<vector::OuterProductOp> {<br>
>          r = rewriter.create<vector::ExtractOp>(loc, rhsType, acc, pos);<br>
>        Optional<Value> m =<br>
>            createContractArithOp(loc, a, op.getRhs(), r, kind, rewriter, isInt);<br>
> -      if (!m.has_value())<br>
> +      if (!m.hasValue())<br>
>          return failure();<br>
> -      result = rewriter.create<vector::InsertOp>(loc, resType, m.value(),<br>
> +      result = rewriter.create<vector::InsertOp>(loc, resType, m.getValue(),<br>
>                                                   result, pos);<br>
>      }<br>
>      rewriter.replaceOp(op, result);<br>
> @@ -1824,8 +1824,8 @@ Value ContractionOpLowering::lowerParallel(vector::ContractionOp op,<br>
>    }<br>
>    assert(iterIndex >= 0 && "parallel index not listed in operand mapping");<br>
>    Optional<int64_t> lookup = getResultIndex(iMap[2], iterIndex);<br>
> -  assert(lookup && "parallel index not listed in reduction");<br>
> -  int64_t resIndex = lookup.value();<br>
> +  assert(lookup.hasValue() && "parallel index not listed in reduction");<br>
> +  int64_t resIndex = lookup.getValue();<br>
>    // Construct new iterator types and affine map array attribute.<br>
>    std::array<AffineMap, 3> lowIndexingMaps = {<br>
>        adjustMap(iMap[0], iterIndex, rewriter),<br>
> @@ -1864,10 +1864,10 @@ Value ContractionOpLowering::lowerReduction(vector::ContractionOp op,<br>
>    SmallVector<AffineMap, 4> iMap = op.getIndexingMaps();<br>
>    Optional<int64_t> lookupLhs = getResultIndex(iMap[0], iterIndex);<br>
>    Optional<int64_t> lookupRhs = getResultIndex(iMap[1], iterIndex);<br>
> -  assert(lookupLhs && "missing LHS parallel index");<br>
> -  assert(lookupRhs && "missing RHS parallel index");<br>
> -  int64_t lhsIndex = lookupLhs.value();<br>
> -  int64_t rhsIndex = lookupRhs.value();<br>
> +  assert(lookupLhs.hasValue() && "missing LHS parallel index");<br>
> +  assert(lookupRhs.hasValue() && "missing RHS parallel index");<br>
> +  int64_t lhsIndex = lookupLhs.getValue();<br>
> +  int64_t rhsIndex = lookupRhs.getValue();<br>
>    int64_t dimSize = lhsType.getDimSize(lhsIndex);<br>
>    assert(dimSize == rhsType.getDimSize(rhsIndex) && "corrupt shape");<br>
>    // Base case.<br>
><br>
> diff  --git a/mlir/lib/IR/FunctionImplementation.cpp b/mlir/lib/IR/FunctionImplementation.cpp<br>
> index 9481e4ae8175b..a9160a9bc2e2b 100644<br>
> --- a/mlir/lib/IR/FunctionImplementation.cpp<br>
> +++ b/mlir/lib/IR/FunctionImplementation.cpp<br>
> @@ -41,8 +41,8 @@ parseFunctionArgumentList(OpAsmParser &parser, bool allowVariadic,<br>
>          OpAsmParser::Argument argument;<br>
>          auto argPresent = parser.parseOptionalArgument(<br>
>              argument, /*allowType=*/true, /*allowAttrs=*/true);<br>
> -        if (argPresent.has_value()) {<br>
> -          if (failed(argPresent.value()))<br>
> +        if (argPresent.hasValue()) {<br>
> +          if (failed(argPresent.getValue()))<br>
>              return failure(); // Present but malformed.<br>
><br>
>            // Reject this if the preceding argument was missing a name.<br>
> @@ -229,7 +229,7 @@ ParseResult mlir::function_interface_impl::parseFunctionOp(<br>
>    OptionalParseResult parseResult =<br>
>        parser.parseOptionalRegion(*body, entryArgs,<br>
>                                   /*enableNameShadowing=*/false);<br>
> -  if (parseResult.has_value()) {<br>
> +  if (parseResult.hasValue()) {<br>
>      if (failed(*parseResult))<br>
>        return failure();<br>
>      // Function body was parsed, make sure its not empty.<br>
><br>
> diff  --git a/mlir/lib/Interfaces/ControlFlowInterfaces.cpp b/mlir/lib/Interfaces/ControlFlowInterfaces.cpp<br>
> index d84218c195516..991f16e23b7e4 100644<br>
> --- a/mlir/lib/Interfaces/ControlFlowInterfaces.cpp<br>
> +++ b/mlir/lib/Interfaces/ControlFlowInterfaces.cpp<br>
> @@ -107,20 +107,20 @@ verifyTypesAlongAllEdges(Operation *op, Optional<unsigned> sourceNo,<br>
>      auto printEdgeName = [&](InFlightDiagnostic &diag) -> InFlightDiagnostic & {<br>
>        diag << "from ";<br>
>        if (sourceNo)<br>
> -        diag << "Region #" << sourceNo.value();<br>
> +        diag << "Region #" << sourceNo.getValue();<br>
>        else<br>
>          diag << "parent operands";<br>
><br>
>        diag << " to ";<br>
>        if (succRegionNo)<br>
> -        diag << "Region #" << succRegionNo.value();<br>
> +        diag << "Region #" << succRegionNo.getValue();<br>
>        else<br>
>          diag << "parent results";<br>
>        return diag;<br>
>      };<br>
><br>
>      Optional<TypeRange> sourceTypes = getInputsTypesForRegion(succRegionNo);<br>
> -    if (!sourceTypes.has_value())<br>
> +    if (!sourceTypes.hasValue())<br>
>        continue;<br>
><br>
>      TypeRange succInputsTypes = succ.getSuccessorInputs().getTypes();<br>
><br>
> diff  --git a/mlir/lib/Interfaces/ViewLikeInterface.cpp b/mlir/lib/Interfaces/ViewLikeInterface.cpp<br>
> index 36489d41b1645..4ecf5390edc75 100644<br>
> --- a/mlir/lib/Interfaces/ViewLikeInterface.cpp<br>
> +++ b/mlir/lib/Interfaces/ViewLikeInterface.cpp<br>
> @@ -121,7 +121,7 @@ static ParseResult parseOperandsOrIntegersImpl(<br>
>    while (true) {<br>
>      OpAsmParser::UnresolvedOperand operand;<br>
>      auto res = parser.parseOptionalOperand(operand);<br>
> -    if (res.has_value() && succeeded(res.value())) {<br>
> +    if (res.hasValue() && succeeded(res.getValue())) {<br>
>        values.push_back(operand);<br>
>        attrVals.push_back(dynVal);<br>
>      } else {<br>
><br>
> diff  --git a/mlir/lib/Parser/AffineParser.cpp b/mlir/lib/Parser/AffineParser.cpp<br>
> index eb65ddea56ded..f62455c37b450 100644<br>
> --- a/mlir/lib/Parser/AffineParser.cpp<br>
> +++ b/mlir/lib/Parser/AffineParser.cpp<br>
> @@ -324,11 +324,11 @@ AffineExpr AffineParser::parseSymbolSSAIdExpr() {<br>
>  ///   affine-expr ::= integer-literal<br>
>  AffineExpr AffineParser::parseIntegerExpr() {<br>
>    auto val = getToken().getUInt64IntegerValue();<br>
> -  if (!val.has_value() || (int64_t)val.value() < 0)<br>
> +  if (!val.hasValue() || (int64_t)val.getValue() < 0)<br>
>      return emitError("constant too large for index"), nullptr;<br>
><br>
>    consumeToken(Token::integer);<br>
> -  return builder.getAffineConstantExpr((int64_t)val.value());<br>
> +  return builder.getAffineConstantExpr((int64_t)val.getValue());<br>
>  }<br>
><br>
>  /// Parses an expression that can be a valid operand of an affine expression.<br>
><br>
> diff  --git a/mlir/lib/Parser/AttributeParser.cpp b/mlir/lib/Parser/AttributeParser.cpp<br>
> index eafebe9a6f14b..efc1c226a2aa0 100644<br>
> --- a/mlir/lib/Parser/AttributeParser.cpp<br>
> +++ b/mlir/lib/Parser/AttributeParser.cpp<br>
> @@ -211,7 +211,7 @@ Attribute Parser::parseAttribute(Type type) {<br>
>      // better error message.<br>
>      Type type;<br>
>      OptionalParseResult result = parseOptionalType(type);<br>
> -    if (!result.has_value())<br>
> +    if (!result.hasValue())<br>
>        return emitWrongTokenError("expected attribute value"), Attribute();<br>
>      return failed(*result) ? Attribute() : TypeAttr::get(type);<br>
>    }<br>
> @@ -245,7 +245,7 @@ OptionalParseResult Parser::parseOptionalAttribute(Attribute &attribute,<br>
>      // Parse an optional type attribute.<br>
>      Type type;<br>
>      OptionalParseResult result = parseOptionalType(type);<br>
> -    if (result.has_value() && succeeded(*result))<br>
> +    if (result.hasValue() && succeeded(*result))<br>
>        attribute = TypeAttr::get(type);<br>
>      return result;<br>
>    }<br>
> @@ -666,8 +666,8 @@ TensorLiteralParser::getFloatAttrElements(SMLoc loc, FloatType eltTy,<br>
>  DenseElementsAttr TensorLiteralParser::getStringAttr(SMLoc loc,<br>
>                                                       ShapedType type,<br>
>                                                       Type eltTy) {<br>
> -  if (hexStorage) {<br>
> -    auto stringValue = hexStorage->getStringValue();<br>
> +  if (hexStorage.hasValue()) {<br>
> +    auto stringValue = hexStorage.getValue().getStringValue();<br>
>      return DenseStringElementsAttr::get(type, {stringValue});<br>
>    }<br>
><br>
><br>
> diff  --git a/mlir/lib/Parser/LocationParser.cpp b/mlir/lib/Parser/LocationParser.cpp<br>
> index cf1e8afaab281..4749c16ab31ac 100644<br>
> --- a/mlir/lib/Parser/LocationParser.cpp<br>
> +++ b/mlir/lib/Parser/LocationParser.cpp<br>
> @@ -118,11 +118,11 @@ ParseResult Parser::parseNameOrFileLineColLocation(LocationAttr &loc) {<br>
>        return emitWrongTokenError(<br>
>            "expected integer column number in FileLineColLoc");<br>
>      auto column = getToken().getUnsignedIntegerValue();<br>
> -    if (!column.has_value())<br>
> +    if (!column.hasValue())<br>
>        return emitError("expected integer column number in FileLineColLoc");<br>
>      consumeToken(Token::integer);<br>
><br>
> -    loc = FileLineColLoc::get(ctx, str, line.value(), column.value());<br>
> +    loc = FileLineColLoc::get(ctx, str, line.getValue(), column.getValue());<br>
>      return success();<br>
>    }<br>
><br>
><br>
> diff  --git a/mlir/lib/Parser/Parser.cpp b/mlir/lib/Parser/Parser.cpp<br>
> index 61001343a188d..170d571c26929 100644<br>
> --- a/mlir/lib/Parser/Parser.cpp<br>
> +++ b/mlir/lib/Parser/Parser.cpp<br>
> @@ -1857,8 +1857,8 @@ ParseResult OperationParser::parseRegionBody(Region &region, SMLoc startLoc,<br>
>                     .attachNote(getEncodedSourceLocation(*defLoc))<br>
>                 << "previously referenced here";<br>
>        }<br>
> -      Location loc = entryArg.sourceLoc.has_value()<br>
> -                         ? entryArg.sourceLoc.value()<br>
> +      Location loc = entryArg.sourceLoc.hasValue()<br>
> +                         ? entryArg.sourceLoc.getValue()<br>
>                           : getEncodedSourceLocation(argInfo.location);<br>
>        BlockArgument arg = block->addArgument(entryArg.type, loc);<br>
><br>
><br>
> diff  --git a/mlir/lib/Parser/TypeParser.cpp b/mlir/lib/Parser/TypeParser.cpp<br>
> index 5c69ad2333722..52fae4b50d03e 100644<br>
> --- a/mlir/lib/Parser/TypeParser.cpp<br>
> +++ b/mlir/lib/Parser/TypeParser.cpp<br>
> @@ -310,9 +310,9 @@ Type Parser::parseNonFunctionType() {<br>
>    // integer-type<br>
>    case Token::inttype: {<br>
>      auto width = getToken().getIntTypeBitwidth();<br>
> -    if (!width.has_value())<br>
> +    if (!width.hasValue())<br>
>        return (emitError("invalid integer width"), nullptr);<br>
> -    if (width.value() > IntegerType::kMaxWidth) {<br>
> +    if (width.getValue() > IntegerType::kMaxWidth) {<br>
>        emitError(getToken().getLoc(), "integer bitwidth is limited to ")<br>
>            << IntegerType::kMaxWidth << " bits";<br>
>        return nullptr;<br>
><br>
> diff  --git a/mlir/lib/Target/LLVMIR/ConvertFromLLVMIR.cpp b/mlir/lib/Target/LLVMIR/ConvertFromLLVMIR.cpp<br>
> index 1b1a18f855daf..32237bd022e7b 100644<br>
> --- a/mlir/lib/Target/LLVMIR/ConvertFromLLVMIR.cpp<br>
> +++ b/mlir/lib/Target/LLVMIR/ConvertFromLLVMIR.cpp<br>
> @@ -432,8 +432,8 @@ GlobalOp Importer::processGlobal(llvm::GlobalVariable *gv) {<br>
><br>
>    uint64_t alignment = 0;<br>
>    llvm::MaybeAlign maybeAlign = gv->getAlign();<br>
> -  if (maybeAlign) {<br>
> -    llvm::Align align = maybeAlign.value();<br>
> +  if (maybeAlign.hasValue()) {<br>
> +    llvm::Align align = maybeAlign.getValue();<br>
>      alignment = align.value();<br>
>    }<br>
><br>
><br>
> diff  --git a/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp<br>
> index fac9b64d31045..d0cb2d3562d39 100644<br>
> --- a/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp<br>
> +++ b/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp<br>
> @@ -28,9 +28,9 @@ using namespace mlir;<br>
>  namespace {<br>
>  static llvm::omp::ScheduleKind<br>
>  convertToScheduleKind(Optional<omp::ClauseScheduleKind> schedKind) {<br>
> -  if (!schedKind.has_value())<br>
> +  if (!schedKind.hasValue())<br>
>      return llvm::omp::OMP_SCHEDULE_Default;<br>
> -  switch (schedKind.value()) {<br>
> +  switch (schedKind.getValue()) {<br>
>    case omp::ClauseScheduleKind::Static:<br>
>      return llvm::omp::OMP_SCHEDULE_Static;<br>
>    case omp::ClauseScheduleKind::Dynamic:<br>
><br>
> diff  --git a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp<br>
> index 93498c744ebe3..923cffc1caf11 100644<br>
> --- a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp<br>
> +++ b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp<br>
> @@ -666,17 +666,17 @@ LogicalResult ModuleTranslation::convertGlobals() {<br>
>                               : llvm::GlobalValue::NotThreadLocal,<br>
>          addrSpace);<br>
><br>
> -    if (op.getUnnamedAddr().has_value())<br>
> +    if (op.getUnnamedAddr().hasValue())<br>
>        var->setUnnamedAddr(convertUnnamedAddrToLLVM(*op.getUnnamedAddr()));<br>
><br>
> -    if (op.getSection().has_value())<br>
> +    if (op.getSection().hasValue())<br>
>        var->setSection(*op.getSection());<br>
><br>
>      addRuntimePreemptionSpecifier(op.getDsoLocal(), var);<br>
><br>
>      Optional<uint64_t> alignment = op.getAlignment();<br>
> -    if (alignment)<br>
> -      var->setAlignment(llvm::MaybeAlign(alignment.value()));<br>
> +    if (alignment.hasValue())<br>
> +      var->setAlignment(llvm::MaybeAlign(alignment.getValue()));<br>
><br>
>      globalsMapping.try_emplace(op, var);<br>
>    }<br>
><br>
> diff  --git a/mlir/lib/Target/SPIRV/Deserialization/Deserializer.cpp b/mlir/lib/Target/SPIRV/Deserialization/Deserializer.cpp<br>
> index 383bdc4c905a9..361413ee24cfd 100644<br>
> --- a/mlir/lib/Target/SPIRV/Deserialization/Deserializer.cpp<br>
> +++ b/mlir/lib/Target/SPIRV/Deserialization/Deserializer.cpp<br>
> @@ -377,7 +377,7 @@ spirv::Deserializer::processFunction(ArrayRef<uint32_t> operands) {<br>
><br>
>    std::string fnName = getFunctionSymbol(fnID);<br>
>    auto funcOp = opBuilder.create<spirv::FuncOp>(<br>
> -      unknownLoc, fnName, functionType, fnControl.value());<br>
> +      unknownLoc, fnName, functionType, fnControl.getValue());<br>
>    curFunction = funcMap[fnID] = funcOp;<br>
>    auto *entryBlock = funcOp.addEntryBlock();<br>
>    LLVM_DEBUG({<br>
> @@ -883,7 +883,7 @@ spirv::Deserializer::processCooperativeMatrixType(ArrayRef<uint32_t> operands) {<br>
>    unsigned columns = getConstantInt(operands[4]).getInt();<br>
><br>
>    typeMap[operands[0]] = spirv::CooperativeMatrixNVType::get(<br>
> -      elementTy, scope.value(), rows, columns);<br>
> +      elementTy, scope.getValue(), rows, columns);<br>
>    return success();<br>
>  }<br>
><br>
> @@ -1067,8 +1067,8 @@ spirv::Deserializer::processImageType(ArrayRef<uint32_t> operands) {<br>
>             << operands[7];<br>
><br>
>    typeMap[operands[0]] = spirv::ImageType::get(<br>
> -      elementTy, dim.value(), depthInfo.value(), arrayedInfo.value(),<br>
> -      samplingInfo.value(), samplerUseInfo.value(), format.value());<br>
> +      elementTy, dim.getValue(), depthInfo.getValue(), arrayedInfo.getValue(),<br>
> +      samplingInfo.getValue(), samplerUseInfo.getValue(), format.getValue());<br>
>    return success();<br>
>  }<br>
><br>
><br>
> diff  --git a/mlir/test/lib/Analysis/TestMemRefDependenceCheck.cpp b/mlir/test/lib/Analysis/TestMemRefDependenceCheck.cpp<br>
> index a45e21afb5761..eebd9e3631530 100644<br>
> --- a/mlir/test/lib/Analysis/TestMemRefDependenceCheck.cpp<br>
> +++ b/mlir/test/lib/Analysis/TestMemRefDependenceCheck.cpp<br>
> @@ -52,14 +52,16 @@ getDirectionVectorStr(bool ret, unsigned numCommonLoops, unsigned loopNestDepth,<br>
>    std::string result;<br>
>    for (const auto &dependenceComponent : dependenceComponents) {<br>
>      std::string lbStr = "-inf";<br>
> -    if (dependenceComponent.lb.has_value() &&<br>
> -        dependenceComponent.lb.value() != std::numeric_limits<int64_t>::min())<br>
> -      lbStr = std::to_string(dependenceComponent.lb.value());<br>
> +    if (dependenceComponent.lb.hasValue() &&<br>
> +        dependenceComponent.lb.getValue() !=<br>
> +            std::numeric_limits<int64_t>::min())<br>
> +      lbStr = std::to_string(dependenceComponent.lb.getValue());<br>
><br>
>      std::string ubStr = "+inf";<br>
> -    if (dependenceComponent.ub.has_value() &&<br>
> -        dependenceComponent.ub.value() != std::numeric_limits<int64_t>::max())<br>
> -      ubStr = std::to_string(dependenceComponent.ub.value());<br>
> +    if (dependenceComponent.ub.hasValue() &&<br>
> +        dependenceComponent.ub.getValue() !=<br>
> +            std::numeric_limits<int64_t>::max())<br>
> +      ubStr = std::to_string(dependenceComponent.ub.getValue());<br>
><br>
>      result += "[" + lbStr + ", " + ubStr + "]";<br>
>    }<br>
><br>
> diff  --git a/mlir/test/lib/Dialect/Test/TestDialect.cpp b/mlir/test/lib/Dialect/Test/TestDialect.cpp<br>
> index 64cf476a0386b..45d345e0a4f51 100644<br>
> --- a/mlir/test/lib/Dialect/Test/TestDialect.cpp<br>
> +++ b/mlir/test/lib/Dialect/Test/TestDialect.cpp<br>
> @@ -1310,8 +1310,8 @@ void RegionIfOp::getSuccessorRegions(<br>
>      Optional<unsigned> index, ArrayRef<Attribute> operands,<br>
>      SmallVectorImpl<RegionSuccessor> &regions) {<br>
>    // We always branch to the join region.<br>
> -  if (index) {<br>
> -    if (index.value() < 2)<br>
> +  if (index.hasValue()) {<br>
> +    if (index.getValue() < 2)<br>
>        regions.push_back(RegionSuccessor(&getJoinRegion(), getJoinArgs()));<br>
>      else<br>
>        regions.push_back(RegionSuccessor(getResults()));<br>
><br>
> diff  --git a/mlir/test/lib/Dialect/Test/TestTypeDefs.td b/mlir/test/lib/Dialect/Test/TestTypeDefs.td<br>
> index 9853b4a18bc92..fd50dd3e0e90b 100644<br>
> --- a/mlir/test/lib/Dialect/Test/TestTypeDefs.td<br>
> +++ b/mlir/test/lib/Dialect/Test/TestTypeDefs.td<br>
> @@ -292,9 +292,9 @@ class DefaultValuedAPFloat<string value><br>
>    let parser = [{ [&]() -> mlir::FailureOr<llvm::Optional<llvm::APFloat>> {<br>
>      mlir::FloatAttr attr;<br>
>      auto result = $_parser.parseOptionalAttribute(attr);<br>
> -    if (result.has_value() && mlir::succeeded(*result))<br>
> +    if (result.hasValue() && mlir::succeeded(*result))<br>
>        return {attr.getValue()};<br>
> -    if (!result.has_value())<br>
> +    if (!result.hasValue())<br>
>        return llvm::Optional<llvm::APFloat>();<br>
>      return mlir::failure();<br>
>    }() }];<br>
><br>
> diff  --git a/mlir/test/lib/Dialect/Test/TestTypes.cpp b/mlir/test/lib/Dialect/Test/TestTypes.cpp<br>
> index 76e67ed0d1342..5418025d501c9 100644<br>
> --- a/mlir/test/lib/Dialect/Test/TestTypes.cpp<br>
> +++ b/mlir/test/lib/Dialect/Test/TestTypes.cpp<br>
> @@ -414,15 +414,15 @@ Type TestDialect::parseTestType(AsmParser &parser,<br>
>    {<br>
>      Type genType;<br>
>      auto parseResult = generatedTypeParser(parser, typeTag, genType);<br>
> -    if (parseResult.has_value())<br>
> +    if (parseResult.hasValue())<br>
>        return genType;<br>
>    }<br>
><br>
>    {<br>
>      Type dynType;<br>
>      auto parseResult = parseOptionalDynamicType(typeTag, parser, dynType);<br>
> -    if (parseResult.has_value()) {<br>
> -      if (succeeded(parseResult.value()))<br>
> +    if (parseResult.hasValue()) {<br>
> +      if (succeeded(parseResult.getValue()))<br>
>          return dynType;<br>
>        return Type();<br>
>      }<br>
><br>
> diff  --git a/mlir/test/lib/Dialect/Test/TestTypes.h b/mlir/test/lib/Dialect/Test/TestTypes.h<br>
> index 654600bbfb455..bd6421d04735e 100644<br>
> --- a/mlir/test/lib/Dialect/Test/TestTypes.h<br>
> +++ b/mlir/test/lib/Dialect/Test/TestTypes.h<br>
> @@ -77,7 +77,7 @@ struct FieldParser<Optional<int>> {<br>
>      Optional<int> value;<br>
>      value.emplace();<br>
>      OptionalParseResult result = parser.parseOptionalInteger(*value);<br>
> -    if (result.has_value()) {<br>
> +    if (result.hasValue()) {<br>
>        if (succeeded(*result))<br>
>          return value;<br>
>        return failure();<br>
><br>
> diff  --git a/mlir/test/lib/Dialect/Transform/TestTransformDialectExtension.cpp b/mlir/test/lib/Dialect/Transform/TestTransformDialectExtension.cpp<br>
> index a81090bc06abb..9242a51dbb840 100644<br>
> --- a/mlir/test/lib/Dialect/Transform/TestTransformDialectExtension.cpp<br>
> +++ b/mlir/test/lib/Dialect/Transform/TestTransformDialectExtension.cpp<br>
> @@ -52,12 +52,12 @@ class TestTransformOp<br>
>    static ParseResult parse(OpAsmParser &parser, OperationState &state) {<br>
>      StringAttr message;<br>
>      OptionalParseResult result = parser.parseOptionalAttribute(message);<br>
> -    if (!result.has_value())<br>
> +    if (!result.hasValue())<br>
>        return success();<br>
><br>
> -    if (result.value().succeeded())<br>
> +    if (result.getValue().succeeded())<br>
>        state.addAttribute("message", message);<br>
> -    return result.value();<br>
> +    return result.getValue();<br>
>    }<br>
><br>
>    void print(OpAsmPrinter &printer) {<br>
><br>
> diff  --git a/mlir/test/lib/Transforms/TestIntRangeInference.cpp b/mlir/test/lib/Transforms/TestIntRangeInference.cpp<br>
> index f9f8db46bb3a3..1bd2a24d3ce6c 100644<br>
> --- a/mlir/test/lib/Transforms/TestIntRangeInference.cpp<br>
> +++ b/mlir/test/lib/Transforms/TestIntRangeInference.cpp<br>
> @@ -25,9 +25,9 @@ static LogicalResult replaceWithConstant(IntRangeAnalysis &analysis,<br>
>    Optional<ConstantIntRanges> maybeInferredRange = analysis.getResult(value);<br>
>    if (!maybeInferredRange)<br>
>      return failure();<br>
> -  const ConstantIntRanges &inferredRange = maybeInferredRange.value();<br>
> +  const ConstantIntRanges &inferredRange = maybeInferredRange.getValue();<br>
>    Optional<APInt> maybeConstValue = inferredRange.getConstantValue();<br>
> -  if (!maybeConstValue.has_value())<br>
> +  if (!maybeConstValue.hasValue())<br>
>      return failure();<br>
><br>
>    Operation *maybeDefiningOp = value.getDefiningOp();<br>
><br>
> diff  --git a/mlir/test/mlir-tblgen/<a href="http://default-type-attr-print-parser.td" rel="noreferrer" target="_blank">default-type-attr-print-parser.td</a> b/mlir/test/mlir-tblgen/<a href="http://default-type-attr-print-parser.td" rel="noreferrer" target="_blank">default-type-attr-print-parser.td</a><br>
> index 88328fd05d3b8..ac898a97d9eee 100644<br>
> --- a/mlir/test/mlir-tblgen/<a href="http://default-type-attr-print-parser.td" rel="noreferrer" target="_blank">default-type-attr-print-parser.td</a><br>
> +++ b/mlir/test/mlir-tblgen/<a href="http://default-type-attr-print-parser.td" rel="noreferrer" target="_blank">default-type-attr-print-parser.td</a><br>
> @@ -32,7 +32,7 @@ def AttrA : TestAttr<"AttrA"> {<br>
>  // ATTR:   {<br>
>  // ATTR:     ::mlir::Attribute attr;<br>
>  // ATTR:     auto parseResult = generatedAttributeParser(parser, attrTag, type, attr);<br>
> -// ATTR:     if (parseResult.has_value())<br>
> +// ATTR:     if (parseResult.hasValue())<br>
>  // ATTR:       return attr;<br>
>  // ATTR:   }<br>
>  // ATTR:   parser.emitError(typeLoc) << "unknown attribute `"<br>
> @@ -61,7 +61,7 @@ def TypeA : TestType<"TypeA"> {<br>
>  // TYPE:     return ::mlir::Type();<br>
>  // TYPE:   ::mlir::Type genType;<br>
>  // TYPE:   auto parseResult = generatedTypeParser(parser, mnemonic, genType);<br>
> -// TYPE:   if (parseResult.has_value())<br>
> +// TYPE:   if (parseResult.hasValue())<br>
>  // TYPE:     return genType;<br>
>  // TYPE:   parser.emitError(typeLoc) << "unknown  type `"<br>
>  // TYPE:       << mnemonic << "` in dialect `" << getNamespace() << "`";<br>
><br>
> diff  --git a/mlir/tools/mlir-linalg-ods-gen/mlir-linalg-ods-yaml-gen.cpp b/mlir/tools/mlir-linalg-ods-gen/mlir-linalg-ods-yaml-gen.cpp<br>
> index 2c28d0ec1f702..9140c53c41dfa 100644<br>
> --- a/mlir/tools/mlir-linalg-ods-gen/mlir-linalg-ods-yaml-gen.cpp<br>
> +++ b/mlir/tools/mlir-linalg-ods-gen/mlir-linalg-ods-yaml-gen.cpp<br>
> @@ -730,16 +730,16 @@ static LogicalResult generateNamedGenericOpOds(LinalgOpConfig &opConfig,<br>
>        }<br>
>        // Add the index attributes to the op definition and builders.<br>
>        if (arg.kind == LinalgOperandDefKind::IndexAttr) {<br>
> -        assert(arg.indexAttrMap.has_value());<br>
> -        assert(arg.defaultIndices.has_value());<br>
> +        assert(arg.indexAttrMap.hasValue());<br>
> +        assert(arg.defaultIndices.hasValue());<br>
>          size_t size = arg.indexAttrMap->affineMap().getNumResults();<br>
> -        assert(arg.defaultIndices->size() == size);<br>
> +        assert(arg.defaultIndices.getValue().size() == size);<br>
>          static const char typeFmt[] = "RankedI64ElementsAttr<[{0}]>";<br>
>          static const char defFmt[] = "DefaultValuedAttr<{0}, \"{ {1} }\">:${2}";<br>
>          std::string defaultVals;<br>
>          llvm::raw_string_ostream ss(defaultVals);<br>
>          llvm::interleave(<br>
> -            arg.defaultIndices.value(), ss,<br>
> +            arg.defaultIndices.getValue(), ss,<br>
>              [&](int64_t val) { ss << "static_cast<int64_t>(" << val << ")"; },<br>
>              ", ");<br>
>          attrDefs.push_back(llvm::formatv(defFmt, llvm::formatv(typeFmt, size),<br>
> @@ -1088,11 +1088,11 @@ if ({1}Iter != attrs.end()) {{<br>
>            if (expression.scalarFn->attrName) {<br>
>              if (llvm::none_of(args, [&](LinalgOperandDef &arg) {<br>
>                    return isFunctionAttribute(arg.kind) &&<br>
> -                         <a href="http://arg.name" rel="noreferrer" target="_blank">arg.name</a> == expression.scalarFn->attrName.value();<br>
> +                         <a href="http://arg.name" rel="noreferrer" target="_blank">arg.name</a> == expression.scalarFn->attrName.getValue();<br>
>                  })) {<br>
>                emitError(genContext.getLoc())<br>
>                    << "missing function attribute "<br>
> -                  << expression.scalarFn->attrName.value();<br>
> +                  << expression.scalarFn->attrName.getValue();<br>
>              }<br>
>              funcType = llvm::formatv("{0}Val", *expression.scalarFn->attrName);<br>
>            }<br>
> @@ -1101,17 +1101,17 @@ if ({1}Iter != attrs.end()) {{<br>
>            // Add the optional type parameter to the operands.<br>
>            SmallVector<std::string> operandCppValues;<br>
>            if (expression.scalarFn->kind == ScalarFnKind::Type) {<br>
> -            assert(expression.scalarFn->typeVar.has_value());<br>
> +            assert(expression.scalarFn->typeVar.hasValue());<br>
>              Optional<std::string> typeCppValue =<br>
> -                findTypeValue(expression.scalarFn->typeVar.value(), args);<br>
> +                findTypeValue(expression.scalarFn->typeVar.getValue(), args);<br>
>              if (!typeCppValue) {<br>
>                emitError(genContext.getLoc())<br>
> -                  << "type variable " << expression.scalarFn->typeVar.value()<br>
> +                  << "type variable " << expression.scalarFn->typeVar.getValue()<br>
>                    << ", used in a type conversion, must map to a predefined or "<br>
>                    << "an argument type but it does not";<br>
>                return None;<br>
>              }<br>
> -            operandCppValues.push_back(typeCppValue.value());<br>
> +            operandCppValues.push_back(typeCppValue.getValue());<br>
>            }<br>
><br>
>            // Collect the scalar operands.<br>
><br>
> diff  --git a/mlir/tools/mlir-tblgen/AttrOrTypeDefGen.cpp b/mlir/tools/mlir-tblgen/AttrOrTypeDefGen.cpp<br>
> index 53cc698c957fa..759143dc606b0 100644<br>
> --- a/mlir/tools/mlir-tblgen/AttrOrTypeDefGen.cpp<br>
> +++ b/mlir/tools/mlir-tblgen/AttrOrTypeDefGen.cpp<br>
> @@ -678,7 +678,7 @@ ::mlir::Attribute {0}::parseAttribute(::mlir::DialectAsmParser &parser,<br>
>    {{<br>
>      ::mlir::Attribute attr;<br>
>      auto parseResult = generatedAttributeParser(parser, attrTag, type, attr);<br>
> -    if (parseResult.has_value())<br>
> +    if (parseResult.hasValue())<br>
>        return attr;<br>
>    }<br>
>    {1}<br>
> @@ -700,8 +700,8 @@ static const char *const dialectDynamicAttrParserDispatch = R"(<br>
>    {<br>
>      ::mlir::Attribute genAttr;<br>
>      auto parseResult = parseOptionalDynamicAttr(attrTag, parser, genAttr);<br>
> -    if (parseResult.has_value()) {<br>
> -      if (::mlir::succeeded(*parseResult))<br>
> +    if (parseResult.hasValue()) {<br>
> +      if (::mlir::succeeded(parseResult.getValue()))<br>
>          return genAttr;<br>
>        return Attribute();<br>
>      }<br>
> @@ -727,7 +727,7 @@ ::mlir::Type {0}::parseType(::mlir::DialectAsmParser &parser) const {{<br>
>      return ::mlir::Type();<br>
>    ::mlir::Type genType;<br>
>    auto parseResult = generatedTypeParser(parser, mnemonic, genType);<br>
> -  if (parseResult.has_value())<br>
> +  if (parseResult.hasValue())<br>
>      return genType;<br>
>    {1}<br>
>    parser.emitError(typeLoc) << "unknown  type `"<br>
> @@ -747,7 +747,7 @@ void {0}::printType(::mlir::Type type,<br>
>  static const char *const dialectDynamicTypeParserDispatch = R"(<br>
>    {<br>
>      auto parseResult = parseOptionalDynamicType(mnemonic, parser, genType);<br>
> -    if (parseResult.has_value()) {<br>
> +    if (parseResult.hasValue()) {<br>
>        if (::mlir::succeeded(parseResult.getValue()))<br>
>          return genType;<br>
>        return Type();<br>
><br>
> diff  --git a/mlir/tools/mlir-tblgen/OpFormatGen.cpp b/mlir/tools/mlir-tblgen/OpFormatGen.cpp<br>
> index 1269622a142ae..212fe0e1204e5 100644<br>
> --- a/mlir/tools/mlir-tblgen/OpFormatGen.cpp<br>
> +++ b/mlir/tools/mlir-tblgen/OpFormatGen.cpp<br>
> @@ -408,7 +408,7 @@ const char *const optionalAttrParserCode = R"(<br>
>    {<br>
>      ::mlir::OptionalParseResult parseResult =<br>
>        parser.parseOptionalAttribute({0}Attr, {1}, "{0}", result.attributes);<br>
> -    if (parseResult.has_value() && failed(*parseResult))<br>
> +    if (parseResult.hasValue() && failed(*parseResult))<br>
>        return ::mlir::failure();<br>
>    }<br>
>  )";<br>
> @@ -445,7 +445,7 @@ const char *const enumAttrParserCode = R"(<br>
>          parser.parseOptionalAttribute(attrVal,<br>
>                                        parser.getBuilder().getNoneType(),<br>
>                                        "{0}", attrStorage);<br>
> -      if (parseResult.has_value()) {{<br>
> +      if (parseResult.hasValue()) {{<br>
>          if (failed(*parseResult))<br>
>            return ::mlir::failure();<br>
>          attrStr = attrVal.getValue();<br>
> @@ -479,7 +479,7 @@ const char *const optionalOperandParserCode = R"(<br>
>      ::mlir::OpAsmParser::UnresolvedOperand operand;<br>
>      ::mlir::OptionalParseResult parseResult =<br>
>                                      parser.parseOptionalOperand(operand);<br>
> -    if (parseResult.has_value()) {<br>
> +    if (parseResult.hasValue()) {<br>
>        if (failed(*parseResult))<br>
>          return ::mlir::failure();<br>
>        {0}Operands.push_back(operand);<br>
> @@ -532,7 +532,7 @@ const char *const optionalTypeParserCode = R"(<br>
>      ::mlir::Type optionalType;<br>
>      ::mlir::OptionalParseResult parseResult =<br>
>                                      parser.parseOptionalType(optionalType);<br>
> -    if (parseResult.has_value()) {<br>
> +    if (parseResult.hasValue()) {<br>
>        if (failed(*parseResult))<br>
>          return ::mlir::failure();<br>
>        {0}Types.push_back(optionalType);<br>
> @@ -584,7 +584,7 @@ const char *regionListParserCode = R"(<br>
>    {<br>
>      std::unique_ptr<::mlir::Region> region;<br>
>      auto firstRegionResult = parser.parseOptionalRegion(region);<br>
> -    if (firstRegionResult.has_value()) {<br>
> +    if (firstRegionResult.hasValue()) {<br>
>        if (failed(*firstRegionResult))<br>
>          return ::mlir::failure();<br>
>        {0}Regions.emplace_back(std::move(region));<br>
> @@ -622,7 +622,7 @@ const char *regionListEnsureSingleBlockParserCode = R"(<br>
>  const char *optionalRegionParserCode = R"(<br>
>    {<br>
>       auto parseResult = parser.parseOptionalRegion(*{0}Region);<br>
> -     if (parseResult.has_value() && failed(*parseResult))<br>
> +     if (parseResult.hasValue() && failed(*parseResult))<br>
>         return ::mlir::failure();<br>
>    }<br>
>  )";<br>
> @@ -656,7 +656,7 @@ const char *successorListParserCode = R"(<br>
>    {<br>
>      ::mlir::Block *succ;<br>
>      auto firstSucc = parser.parseOptionalSuccessor(succ);<br>
> -    if (firstSucc.has_value()) {<br>
> +    if (firstSucc.hasValue()) {<br>
>        if (failed(*firstSucc))<br>
>          return ::mlir::failure();<br>
>        {0}Successors.emplace_back(succ);<br>
><br>
> diff  --git a/mlir/unittests/Analysis/Presburger/IntegerPolyhedronTest.cpp b/mlir/unittests/Analysis/Presburger/IntegerPolyhedronTest.cpp<br>
> index 5929e92231f6f..f69b4ee7a6e7f 100644<br>
> --- a/mlir/unittests/Analysis/Presburger/IntegerPolyhedronTest.cpp<br>
> +++ b/mlir/unittests/Analysis/Presburger/IntegerPolyhedronTest.cpp<br>
> @@ -66,8 +66,8 @@ static void checkSample(bool hasSample, const IntegerPolyhedron &poly,<br>
>      maybeLexMin = poly.findIntegerLexMin();<br>
><br>
>      if (!hasSample) {<br>
> -      EXPECT_FALSE(maybeSample.has_value());<br>
> -      if (maybeSample.has_value()) {<br>
> +      EXPECT_FALSE(maybeSample.hasValue());<br>
> +      if (maybeSample.hasValue()) {<br>
>          llvm::errs() << "findIntegerSample gave sample: ";<br>
>          dump(*maybeSample);<br>
>        }<br>
> @@ -78,7 +78,7 @@ static void checkSample(bool hasSample, const IntegerPolyhedron &poly,<br>
>          dump(*maybeLexMin);<br>
>        }<br>
>      } else {<br>
> -      ASSERT_TRUE(maybeSample.has_value());<br>
> +      ASSERT_TRUE(maybeSample.hasValue());<br>
>        EXPECT_TRUE(poly.containsPoint(*maybeSample));<br>
><br>
>        ASSERT_FALSE(maybeLexMin.isEmpty());<br>
><br>
> diff  --git a/mlir/unittests/Analysis/Presburger/PWMAFunctionTest.cpp b/mlir/unittests/Analysis/Presburger/PWMAFunctionTest.cpp<br>
> index 1c959c687554a..27d02524ec15b 100644<br>
> --- a/mlir/unittests/Analysis/Presburger/PWMAFunctionTest.cpp<br>
> +++ b/mlir/unittests/Analysis/Presburger/PWMAFunctionTest.cpp<br>
> @@ -138,7 +138,7 @@ TEST(PWMAFunction, valueAt) {<br>
>    EXPECT_THAT(*nonNegPWMAF.valueAt({2, 3}), ElementsAre(11, 23));<br>
>    EXPECT_THAT(*nonNegPWMAF.valueAt({-2, 3}), ElementsAre(11, 23));<br>
>    EXPECT_THAT(*nonNegPWMAF.valueAt({2, -3}), ElementsAre(-1, -1));<br>
> -  EXPECT_FALSE(nonNegPWMAF.valueAt({-2, -3}).has_value());<br>
> +  EXPECT_FALSE(nonNegPWMAF.valueAt({-2, -3}).hasValue());<br>
><br>
>    PWMAFunction divPWMAF = parsePWMAF(<br>
>        /*numInputs=*/2, /*numOutputs=*/2,<br>
> @@ -149,11 +149,11 @@ TEST(PWMAFunction, valueAt) {<br>
>        });<br>
>    EXPECT_THAT(*divPWMAF.valueAt({4, 3}), ElementsAre(11, 23));<br>
>    EXPECT_THAT(*divPWMAF.valueAt({4, -3}), ElementsAre(-1, -1));<br>
> -  EXPECT_FALSE(divPWMAF.valueAt({3, 3}).has_value());<br>
> -  EXPECT_FALSE(divPWMAF.valueAt({3, -3}).has_value());<br>
> +  EXPECT_FALSE(divPWMAF.valueAt({3, 3}).hasValue());<br>
> +  EXPECT_FALSE(divPWMAF.valueAt({3, -3}).hasValue());<br>
><br>
>    EXPECT_THAT(*divPWMAF.valueAt({-2, 3}), ElementsAre(11, 23));<br>
> -  EXPECT_FALSE(divPWMAF.valueAt({-2, -3}).has_value());<br>
> +  EXPECT_FALSE(divPWMAF.valueAt({-2, -3}).hasValue());<br>
>  }<br>
><br>
>  TEST(PWMAFunction, removeIdRangeRegressionTest) {<br>
><br>
> diff  --git a/mlir/unittests/Analysis/Presburger/PresburgerSetTest.cpp b/mlir/unittests/Analysis/Presburger/PresburgerSetTest.cpp<br>
> index aa7182596443b..0c98f488ea074 100644<br>
> --- a/mlir/unittests/Analysis/Presburger/PresburgerSetTest.cpp<br>
> +++ b/mlir/unittests/Analysis/Presburger/PresburgerSetTest.cpp<br>
> @@ -762,7 +762,7 @@ void testComputeReprAtPoints(IntegerPolyhedron poly,<br>
>    EXPECT_TRUE(repr.hasOnlyDivLocals());<br>
>    EXPECT_TRUE(repr.getSpace().isCompatible(poly.getSpace()));<br>
>    for (const SmallVector<int64_t, 4> &point : points) {<br>
> -    EXPECT_EQ(poly.containsPointNoLocal(point).has_value(),<br>
> +    EXPECT_EQ(poly.containsPointNoLocal(point).hasValue(),<br>
>                repr.containsPoint(point));<br>
>    }<br>
>  }<br>
><br>
> diff  --git a/mlir/unittests/Analysis/Presburger/SimplexTest.cpp b/mlir/unittests/Analysis/Presburger/SimplexTest.cpp<br>
> index df03935e16f30..4c55c922a91b4 100644<br>
> --- a/mlir/unittests/Analysis/Presburger/SimplexTest.cpp<br>
> +++ b/mlir/unittests/Analysis/Presburger/SimplexTest.cpp<br>
> @@ -196,7 +196,7 @@ TEST(SimplexTest, getSamplePointIfIntegral) {<br>
>                                        },<br>
>                                        {})<br>
>                     .getSamplePointIfIntegral()<br>
> -                   .has_value());<br>
> +                   .hasValue());<br>
><br>
>    auto maybeSample = simplexFromConstraints(2,<br>
>                                              {// x = y - 2.<br>
> @@ -208,7 +208,7 @@ TEST(SimplexTest, getSamplePointIfIntegral) {<br>
>                                              {})<br>
>                           .getSamplePointIfIntegral();<br>
><br>
> -  EXPECT_TRUE(maybeSample.has_value());<br>
> +  EXPECT_TRUE(maybeSample.hasValue());<br>
>    EXPECT_THAT(*maybeSample, testing::ElementsAre(0, 2));<br>
><br>
>    auto maybeSample2 = simplexFromConstraints(2,<br>
> @@ -220,7 +220,7 @@ TEST(SimplexTest, getSamplePointIfIntegral) {<br>
>                                                   {0, 1, -2} // y = 2.<br>
>                                               })<br>
>                            .getSamplePointIfIntegral();<br>
> -  EXPECT_TRUE(maybeSample2.has_value());<br>
> +  EXPECT_TRUE(maybeSample2.hasValue());<br>
>    EXPECT_THAT(*maybeSample2, testing::ElementsAre(0, 2));<br>
><br>
>    EXPECT_FALSE(simplexFromConstraints(1,<br>
> @@ -229,7 +229,7 @@ TEST(SimplexTest, getSamplePointIfIntegral) {<br>
>                                         {-2, +1}},<br>
>                                        {})<br>
>                     .getSamplePointIfIntegral()<br>
> -                   .has_value());<br>
> +                   .hasValue());<br>
>  }<br>
><br>
>  /// Some basic sanity checks involving zero or one variables.<br>
> @@ -545,7 +545,7 @@ TEST(SimplexTest, addDivisionVariable) {<br>
>    simplex.addInequality({1, 0, -3}); // x >= 3.<br>
>    simplex.addInequality({-1, 0, 9}); // x <= 9.<br>
>    Optional<SmallVector<int64_t, 8>> sample = simplex.findIntegerSample();<br>
> -  ASSERT_TRUE(sample.has_value());<br>
> +  ASSERT_TRUE(sample.hasValue());<br>
>    EXPECT_EQ((*sample)[0] / 2, (*sample)[1]);<br>
>  }<br>
><br>
><br>
> diff  --git a/mlir/unittests/IR/OperationSupportTest.cpp b/mlir/unittests/IR/OperationSupportTest.cpp<br>
> index 4f6a98ddc659f..2511a5d3b6bfd 100644<br>
> --- a/mlir/unittests/IR/OperationSupportTest.cpp<br>
> +++ b/mlir/unittests/IR/OperationSupportTest.cpp<br>
> @@ -247,7 +247,7 @@ TEST(NamedAttrListTest, TestAppendAssign) {<br>
>    attrs.append("foo", b.getStringAttr("zoo"));<br>
>    {<br>
>      auto dup = attrs.findDuplicate();<br>
> -    ASSERT_TRUE(dup.has_value());<br>
> +    ASSERT_TRUE(dup.hasValue());<br>
>    }<br>
><br>
>    SmallVector<NamedAttribute> newAttrs = {<br>
> @@ -257,7 +257,7 @@ TEST(NamedAttrListTest, TestAppendAssign) {<br>
>    attrs.assign(newAttrs);<br>
><br>
>    auto dup = attrs.findDuplicate();<br>
> -  ASSERT_FALSE(dup.has_value());<br>
> +  ASSERT_FALSE(dup.hasValue());<br>
><br>
>    {<br>
>      auto *it = attrs.begin();<br>
><br>
> diff  --git a/mlir/unittests/Interfaces/ControlFlowInterfacesTest.cpp b/mlir/unittests/Interfaces/ControlFlowInterfacesTest.cpp<br>
> index af02a45e27aed..b92f3199eacfb 100644<br>
> --- a/mlir/unittests/Interfaces/ControlFlowInterfacesTest.cpp<br>
> +++ b/mlir/unittests/Interfaces/ControlFlowInterfacesTest.cpp<br>
> @@ -79,7 +79,7 @@ struct DoubleLoopRegionsOp<br>
>    void getSuccessorRegions(Optional<unsigned> index,<br>
>                             ArrayRef<Attribute> operands,<br>
>                             SmallVectorImpl<RegionSuccessor> &regions) {<br>
> -    if (index.has_value()) {<br>
> +    if (index.hasValue()) {<br>
>        regions.push_back(RegionSuccessor());<br>
>        regions.push_back(RegionSuccessor(&getOperation()->getRegion(*index)));<br>
>      }<br>
><br>
> diff  --git a/mlir/unittests/Pass/AnalysisManagerTest.cpp b/mlir/unittests/Pass/AnalysisManagerTest.cpp<br>
> index 5fa17f3ccd1a9..cef8da7634c7a 100644<br>
> --- a/mlir/unittests/Pass/AnalysisManagerTest.cpp<br>
> +++ b/mlir/unittests/Pass/AnalysisManagerTest.cpp<br>
> @@ -52,8 +52,8 @@ TEST(AnalysisManagerTest, FineGrainModuleAnalysisPreservation) {<br>
>    am.invalidate(pa);<br>
><br>
>    // Check that only MyAnalysis is preserved.<br>
> -  EXPECT_TRUE(am.getCachedAnalysis<MyAnalysis>().has_value());<br>
> -  EXPECT_FALSE(am.getCachedAnalysis<OtherAnalysis>().has_value());<br>
> +  EXPECT_TRUE(am.getCachedAnalysis<MyAnalysis>().hasValue());<br>
> +  EXPECT_FALSE(am.getCachedAnalysis<OtherAnalysis>().hasValue());<br>
>  }<br>
><br>
>  TEST(AnalysisManagerTest, FineGrainFunctionAnalysisPreservation) {<br>
> @@ -83,8 +83,8 @@ TEST(AnalysisManagerTest, FineGrainFunctionAnalysisPreservation) {<br>
>    fam.invalidate(pa);<br>
><br>
>    // Check that only MyAnalysis is preserved.<br>
> -  EXPECT_TRUE(fam.getCachedAnalysis<MyAnalysis>().has_value());<br>
> -  EXPECT_FALSE(fam.getCachedAnalysis<OtherAnalysis>().has_value());<br>
> +  EXPECT_TRUE(fam.getCachedAnalysis<MyAnalysis>().hasValue());<br>
> +  EXPECT_FALSE(fam.getCachedAnalysis<OtherAnalysis>().hasValue());<br>
>  }<br>
><br>
>  TEST(AnalysisManagerTest, FineGrainChildFunctionAnalysisPreservation) {<br>
> @@ -106,7 +106,7 @@ TEST(AnalysisManagerTest, FineGrainChildFunctionAnalysisPreservation) {<br>
>    AnalysisManager am = mam;<br>
><br>
>    // Check that the analysis cache is initially empty.<br>
> -  EXPECT_FALSE(am.getCachedChildAnalysis<MyAnalysis>(func1).has_value());<br>
> +  EXPECT_FALSE(am.getCachedChildAnalysis<MyAnalysis>(func1).hasValue());<br>
><br>
>    // Query two<br>
> diff erent analyses, but only preserve one before invalidating.<br>
>    am.getChildAnalysis<MyAnalysis>(func1);<br>
> @@ -117,8 +117,8 @@ TEST(AnalysisManagerTest, FineGrainChildFunctionAnalysisPreservation) {<br>
>    am.invalidate(pa);<br>
><br>
>    // Check that only MyAnalysis is preserved.<br>
> -  EXPECT_TRUE(am.getCachedChildAnalysis<MyAnalysis>(func1).has_value());<br>
> -  EXPECT_FALSE(am.getCachedChildAnalysis<OtherAnalysis>(func1).has_value());<br>
> +  EXPECT_TRUE(am.getCachedChildAnalysis<MyAnalysis>(func1).hasValue());<br>
> +  EXPECT_FALSE(am.getCachedChildAnalysis<OtherAnalysis>(func1).hasValue());<br>
>  }<br>
><br>
>  /// Test analyses with custom invalidation logic.<br>
> @@ -150,13 +150,13 @@ TEST(AnalysisManagerTest, CustomInvalidation) {<br>
>    // Check that the analysis is invalidated properly.<br>
>    am.getAnalysis<CustomInvalidatingAnalysis>();<br>
>    am.invalidate(pa);<br>
> -  EXPECT_FALSE(am.getCachedAnalysis<CustomInvalidatingAnalysis>().has_value());<br>
> +  EXPECT_FALSE(am.getCachedAnalysis<CustomInvalidatingAnalysis>().hasValue());<br>
><br>
>    // Check that the analysis is preserved properly.<br>
>    am.getAnalysis<CustomInvalidatingAnalysis>();<br>
>    pa.preserve<TestAnalysisSet>();<br>
>    am.invalidate(pa);<br>
> -  EXPECT_TRUE(am.getCachedAnalysis<CustomInvalidatingAnalysis>().has_value());<br>
> +  EXPECT_TRUE(am.getCachedAnalysis<CustomInvalidatingAnalysis>().hasValue());<br>
>  }<br>
><br>
>  TEST(AnalysisManagerTest, OpSpecificAnalysis) {<br>
> @@ -169,7 +169,7 @@ TEST(AnalysisManagerTest, OpSpecificAnalysis) {<br>
><br>
>    // Query the op specific analysis for the module and verify that its cached.<br>
>    am.getAnalysis<OpSpecificAnalysis, ModuleOp>();<br>
> -  EXPECT_TRUE(am.getCachedAnalysis<OpSpecificAnalysis>().has_value());<br>
> +  EXPECT_TRUE(am.getCachedAnalysis<OpSpecificAnalysis>().hasValue());<br>
>  }<br>
><br>
>  struct AnalysisWithDependency {<br>
> @@ -194,15 +194,15 @@ TEST(AnalysisManagerTest, DependentAnalysis) {<br>
>    AnalysisManager am = mam;<br>
><br>
>    am.getAnalysis<AnalysisWithDependency>();<br>
> -  EXPECT_TRUE(am.getCachedAnalysis<AnalysisWithDependency>().has_value());<br>
> -  EXPECT_TRUE(am.getCachedAnalysis<MyAnalysis>().has_value());<br>
> +  EXPECT_TRUE(am.getCachedAnalysis<AnalysisWithDependency>().hasValue());<br>
> +  EXPECT_TRUE(am.getCachedAnalysis<MyAnalysis>().hasValue());<br>
><br>
>    detail::PreservedAnalyses pa;<br>
>    pa.preserve<AnalysisWithDependency>();<br>
>    am.invalidate(pa);<br>
><br>
> -  EXPECT_FALSE(am.getCachedAnalysis<AnalysisWithDependency>().has_value());<br>
> -  EXPECT_FALSE(am.getCachedAnalysis<MyAnalysis>().has_value());<br>
> +  EXPECT_FALSE(am.getCachedAnalysis<AnalysisWithDependency>().hasValue());<br>
> +  EXPECT_FALSE(am.getCachedAnalysis<MyAnalysis>().hasValue());<br>
>  }<br>
><br>
>  struct AnalysisWithNestedDependency {<br>
> @@ -227,19 +227,18 @@ TEST(AnalysisManagerTest, NestedDependentAnalysis) {<br>
>    AnalysisManager am = mam;<br>
><br>
>    am.getAnalysis<AnalysisWithNestedDependency>();<br>
> -  EXPECT_TRUE(am.getCachedAnalysis<AnalysisWithNestedDependency>().has_value());<br>
> -  EXPECT_TRUE(am.getCachedAnalysis<AnalysisWithDependency>().has_value());<br>
> -  EXPECT_TRUE(am.getCachedAnalysis<MyAnalysis>().has_value());<br>
> +  EXPECT_TRUE(am.getCachedAnalysis<AnalysisWithNestedDependency>().hasValue());<br>
> +  EXPECT_TRUE(am.getCachedAnalysis<AnalysisWithDependency>().hasValue());<br>
> +  EXPECT_TRUE(am.getCachedAnalysis<MyAnalysis>().hasValue());<br>
><br>
>    detail::PreservedAnalyses pa;<br>
>    pa.preserve<AnalysisWithDependency>();<br>
>    pa.preserve<AnalysisWithNestedDependency>();<br>
>    am.invalidate(pa);<br>
><br>
> -  EXPECT_FALSE(<br>
> -      am.getCachedAnalysis<AnalysisWithNestedDependency>().has_value());<br>
> -  EXPECT_FALSE(am.getCachedAnalysis<AnalysisWithDependency>().has_value());<br>
> -  EXPECT_FALSE(am.getCachedAnalysis<MyAnalysis>().has_value());<br>
> +  EXPECT_FALSE(am.getCachedAnalysis<AnalysisWithNestedDependency>().hasValue());<br>
> +  EXPECT_FALSE(am.getCachedAnalysis<AnalysisWithDependency>().hasValue());<br>
> +  EXPECT_FALSE(am.getCachedAnalysis<MyAnalysis>().hasValue());<br>
>  }<br>
><br>
>  struct AnalysisWith2Ctors {<br>
><br>
> diff  --git a/polly/lib/Exchange/JSONExporter.cpp b/polly/lib/Exchange/JSONExporter.cpp<br>
> index d882ea67bc447..e92055bfb9af6 100644<br>
> --- a/polly/lib/Exchange/JSONExporter.cpp<br>
> +++ b/polly/lib/Exchange/JSONExporter.cpp<br>
> @@ -218,8 +218,8 @@ static bool importContext(Scop &S, const json::Object &JScop) {<br>
>      return false;<br>
>    }<br>
><br>
> -  isl::set NewContext =<br>
> -      isl::set{S.getIslCtx().get(), JScop.getString("context")->str()};<br>
> +  isl::set NewContext = isl::set{S.getIslCtx().get(),<br>
> +                                 JScop.getString("context").getValue().str()};<br>
><br>
>    // Check whether the context was parsed successfully.<br>
>    if (NewContext.is_null()) {<br>
> @@ -290,10 +290,10 @@ static bool importSchedule(Scop &S, const json::Object &JScop,<br>
>      }<br>
>      Optional<StringRef> Schedule =<br>
>          statements[Index].getAsObject()->getString("schedule");<br>
> -    assert(Schedule &&<br>
> +    assert(Schedule.hasValue() &&<br>
>             "Schedules that contain extension nodes require special handling.");<br>
> -    isl_map *Map =<br>
> -        isl_map_read_from_str(S.getIslCtx().get(), Schedule->str().c_str());<br>
> +    isl_map *Map = isl_map_read_from_str(S.getIslCtx().get(),<br>
> +                                         Schedule.getValue().str().c_str());<br>
><br>
>      // Check whether the schedule was parsed successfully<br>
>      if (!Map) {<br>
> @@ -575,14 +575,14 @@ static bool areArraysEqual(ScopArrayInfo *SAI, const json::Object &Array) {<br>
>    for (unsigned i = 1; i < Array.getArray("sizes")->size(); i++) {<br>
>      SAI->getDimensionSize(i)->print(RawStringOstream);<br>
>      const json::Array &SizesArray = *Array.getArray("sizes");<br>
> -    if (RawStringOstream.str() != SizesArray[i].getAsString().value())<br>
> +    if (RawStringOstream.str() != SizesArray[i].getAsString().getValue())<br>
>        return false;<br>
>      Buffer.clear();<br>
>    }<br>
><br>
>    // Check if key 'type'<br>
> diff ers from the current one or is not valid.<br>
>    SAI->getElementType()->print(RawStringOstream);<br>
> -  if (RawStringOstream.str() != Array.getString("type").value()) {<br>
> +  if (RawStringOstream.str() != Array.getString("type").getValue()) {<br>
>      errs() << "Array has not a valid type.\n";<br>
>      return false;<br>
>    }<br>
> @@ -652,8 +652,9 @@ static bool importArrays(Scop &S, const json::Object &JScop) {<br>
><br>
>    for (; ArrayIdx < Arrays.size(); ArrayIdx++) {<br>
>      const json::Object &Array = *Arrays[ArrayIdx].getAsObject();<br>
> -    auto *ElementType = parseTextType(Array.get("type")->getAsString()->str(),<br>
> -                                      S.getSE()->getContext());<br>
> +    auto *ElementType =<br>
> +        parseTextType(Array.get("type")->getAsString().getValue().str(),<br>
> +                      S.getSE()->getContext());<br>
>      if (!ElementType) {<br>
>        errs() << "Error while parsing element type for new array.\n";<br>
>        return false;<br>
> @@ -673,10 +674,10 @@ static bool importArrays(Scop &S, const json::Object &JScop) {<br>
>      }<br>
><br>
>      auto NewSAI = S.createScopArrayInfo(<br>
> -        ElementType, Array.getString("name")->str(), DimSizes);<br>
> +        ElementType, Array.getString("name").getValue().str(), DimSizes);<br>
><br>
>      if (Array.get("allocation")) {<br>
> -      NewSAI->setIsOnHeap(Array.getString("allocation").value() == "heap");<br>
> +      NewSAI->setIsOnHeap(Array.getString("allocation").getValue() == "heap");<br>
>      }<br>
>    }<br>
><br>
><br>
> diff  --git a/polly/lib/Transform/ManualOptimizer.cpp b/polly/lib/Transform/ManualOptimizer.cpp<br>
> index 21d83d9f86a05..ef705eca8740c 100644<br>
> --- a/polly/lib/Transform/ManualOptimizer.cpp<br>
> +++ b/polly/lib/Transform/ManualOptimizer.cpp<br>
> @@ -42,8 +42,8 @@ static TransformationMode hasUnrollTransformation(MDNode *LoopID) {<br>
><br>
>    Optional<int> Count =<br>
>        getOptionalIntLoopAttribute(LoopID, "llvm.loop.unroll.count");<br>
> -  if (Count)<br>
> -    return *Count == 1 ? TM_SuppressedByUser : TM_ForcedByUser;<br>
> +  if (Count.hasValue())<br>
> +    return Count.getValue() == 1 ? TM_SuppressedByUser : TM_ForcedByUser;<br>
><br>
>    if (getBooleanLoopAttribute(LoopID, "llvm.loop.unroll.enable"))<br>
>      return TM_ForcedByUser;<br>
><br>
> diff  --git a/polly/lib/Transform/MatmulOptimizer.cpp b/polly/lib/Transform/MatmulOptimizer.cpp<br>
> index d7418d3e90a8f..4a40fac0d03be 100644<br>
> --- a/polly/lib/Transform/MatmulOptimizer.cpp<br>
> +++ b/polly/lib/Transform/MatmulOptimizer.cpp<br>
> @@ -570,29 +570,29 @@ static void getTargetCacheParameters(const llvm::TargetTransformInfo *TTI) {<br>
>    auto L1DCache = llvm::TargetTransformInfo::CacheLevel::L1D;<br>
>    auto L2DCache = llvm::TargetTransformInfo::CacheLevel::L2D;<br>
>    if (FirstCacheLevelSize == -1) {<br>
> -    if (TTI->getCacheSize(L1DCache).has_value())<br>
> -      FirstCacheLevelSize = TTI->getCacheSize(L1DCache).value();<br>
> +    if (TTI->getCacheSize(L1DCache).hasValue())<br>
> +      FirstCacheLevelSize = TTI->getCacheSize(L1DCache).getValue();<br>
>      else<br>
>        FirstCacheLevelSize = static_cast<int>(FirstCacheLevelDefaultSize);<br>
>    }<br>
>    if (SecondCacheLevelSize == -1) {<br>
> -    if (TTI->getCacheSize(L2DCache).has_value())<br>
> -      SecondCacheLevelSize = TTI->getCacheSize(L2DCache).value();<br>
> +    if (TTI->getCacheSize(L2DCache).hasValue())<br>
> +      SecondCacheLevelSize = TTI->getCacheSize(L2DCache).getValue();<br>
>      else<br>
>        SecondCacheLevelSize = static_cast<int>(SecondCacheLevelDefaultSize);<br>
>    }<br>
>    if (FirstCacheLevelAssociativity == -1) {<br>
> -    if (TTI->getCacheAssociativity(L1DCache).has_value())<br>
> +    if (TTI->getCacheAssociativity(L1DCache).hasValue())<br>
>        FirstCacheLevelAssociativity =<br>
> -          TTI->getCacheAssociativity(L1DCache).value();<br>
> +          TTI->getCacheAssociativity(L1DCache).getValue();<br>
>      else<br>
>        FirstCacheLevelAssociativity =<br>
>            static_cast<int>(FirstCacheLevelDefaultAssociativity);<br>
>    }<br>
>    if (SecondCacheLevelAssociativity == -1) {<br>
> -    if (TTI->getCacheAssociativity(L2DCache).has_value())<br>
> +    if (TTI->getCacheAssociativity(L2DCache).hasValue())<br>
>        SecondCacheLevelAssociativity =<br>
> -          TTI->getCacheAssociativity(L2DCache).value();<br>
> +          TTI->getCacheAssociativity(L2DCache).getValue();<br>
>      else<br>
>        SecondCacheLevelAssociativity =<br>
>            static_cast<int>(SecondCacheLevelDefaultAssociativity);<br>
><br>
><br>
><br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
> <a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>