12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- //=== ScopLocation.cpp - Debug location for ScopDetection ----- -*- C++ -*-===//
- //
- // 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
- //
- //===----------------------------------------------------------------------===//
- //
- // Helper function for extracting region debug information.
- //
- //===----------------------------------------------------------------------===//
- //
- #include "polly/Support/ScopLocation.h"
- #include "llvm/Analysis/RegionInfo.h"
- #include "llvm/IR/DebugInfoMetadata.h"
- using namespace llvm;
- namespace polly {
- void getDebugLocation(const Region *R, unsigned &LineBegin, unsigned &LineEnd,
- std::string &FileName) {
- LineBegin = -1;
- LineEnd = 0;
- for (const BasicBlock *BB : R->blocks())
- for (const Instruction &Inst : *BB) {
- DebugLoc DL = Inst.getDebugLoc();
- if (!DL)
- continue;
- auto *Scope = cast<DIScope>(DL.getScope());
- if (FileName.empty())
- FileName = Scope->getFilename().str();
- unsigned NewLine = DL.getLine();
- LineBegin = std::min(LineBegin, NewLine);
- LineEnd = std::max(LineEnd, NewLine);
- }
- }
- } // namespace polly
|