//===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/AsmParser/AsmParserContext.h" namespace llvm { std::optional AsmParserContext::getFunctionLocation(const Function *F) const { if (auto FIt = Functions.find(F); FIt != Functions.end()) return FIt->second; return std::nullopt; } std::optional AsmParserContext::getBlockLocation(const BasicBlock *BB) const { if (auto BBIt = Blocks.find(BB); BBIt != Blocks.end()) return BBIt->second; return std::nullopt; } std::optional AsmParserContext::getInstructionLocation(const Instruction *I) const { if (auto IIt = Instructions.find(I); IIt != Instructions.end()) return IIt->second; return std::nullopt; } Function * AsmParserContext::getFunctionAtLocation(const FileLocRange &Query) const { auto It = FunctionsInverse.find(Query.Start); if (It.stop() <= Query.End) return *It; return nullptr; } Function *AsmParserContext::getFunctionAtLocation(const FileLoc &Query) const { return FunctionsInverse.lookup(Query, nullptr); } BasicBlock * AsmParserContext::getBlockAtLocation(const FileLocRange &Query) const { auto It = BlocksInverse.find(Query.Start); if (It.stop() <= Query.End) return *It; return nullptr; } BasicBlock *AsmParserContext::getBlockAtLocation(const FileLoc &Query) const { return BlocksInverse.lookup(Query, nullptr); } Instruction * AsmParserContext::getInstructionAtLocation(const FileLocRange &Query) const { auto It = InstructionsInverse.find(Query.Start); if (It.stop() <= Query.End) return *It; return nullptr; } Instruction * AsmParserContext::getInstructionAtLocation(const FileLoc &Query) const { return InstructionsInverse.lookup(Query, nullptr); } bool AsmParserContext::addFunctionLocation(Function *F, const FileLocRange &Loc) { bool Inserted = Functions.insert({F, Loc}).second; if (Inserted) FunctionsInverse.insert(Loc.Start, Loc.End, F); return Inserted; } bool AsmParserContext::addBlockLocation(BasicBlock *BB, const FileLocRange &Loc) { bool Inserted = Blocks.insert({BB, Loc}).second; if (Inserted) BlocksInverse.insert(Loc.Start, Loc.End, BB); return Inserted; } bool AsmParserContext::addInstructionLocation(Instruction *I, const FileLocRange &Loc) { bool Inserted = Instructions.insert({I, Loc}).second; if (Inserted) InstructionsInverse.insert(Loc.Start, Loc.End, I); return Inserted; } } // namespace llvm