1//=== ScopLocation.cpp - Debug location for ScopDetection ----- -*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// Helper function for extracting region debug information.
10//
11//===----------------------------------------------------------------------===//
12//
13#include "polly/Support/ScopLocation.h"
14#include "llvm/Analysis/RegionInfo.h"
15#include "llvm/IR/DebugInfoMetadata.h"
16
17using namespace llvm;
18
19namespace polly {
20
21void getDebugLocation(const Region *R, unsigned &LineBegin, unsigned &LineEnd,
22 std::string &FileName) {
23 LineBegin = -1;
24 LineEnd = 0;
25
26 for (const BasicBlock *BB : R->blocks())
27 for (const Instruction &Inst : *BB) {
28 DebugLoc DL = Inst.getStableDebugLoc();
29 if (!DL)
30 continue;
31
32 auto *Scope = cast<DIScope>(Val: DL.getScope());
33
34 if (FileName.empty())
35 FileName = Scope->getFilename().str();
36
37 unsigned NewLine = DL.getLine();
38
39 LineBegin = std::min(a: LineBegin, b: NewLine);
40 LineEnd = std::max(a: LineEnd, b: NewLine);
41 }
42}
43} // namespace polly
44

source code of polly/lib/Support/ScopLocation.cpp