1//===- ReduceDbgRecords.cpp - Specialized Delta Pass ----------------------===//
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// This file implements a function which calls the Generic Delta pass in order
10// to reduce uninteresting DbgVariableRecords from defined functions.
11//
12// DbgVariableRecords store variable-location debug-info and are attached to
13// instructions. This information used to be represented by intrinsics such as
14// dbg.value, and would naturally get reduced by llvm-reduce like any other
15// instruction. As DbgVariableRecords get stored elsewhere, they need to be
16// enumerated and eliminated like any other data structure in LLVM.
17//
18//===----------------------------------------------------------------------===//
19
20#include "ReduceDbgRecords.h"
21#include "Utils.h"
22#include "llvm/ADT/STLExtras.h"
23
24using namespace llvm;
25
26static void extractDbgRecordsFromModule(Oracle &O, ReducerWorkItem &WorkItem) {
27 Module &M = WorkItem.getModule();
28
29 for (auto &F : M)
30 for (auto &BB : F)
31 for (auto &I : BB)
32 for (DbgRecord &DR : llvm::make_early_inc_range(Range: I.getDbgRecordRange()))
33 if (!O.shouldKeep())
34 DR.eraseFromParent();
35}
36
37void llvm::reduceDbgRecordDeltaPass(TestRunner &Test) {
38 runDeltaPass(Test, ExtractChunksFromModule: extractDbgRecordsFromModule, Message: "Reducing DbgRecords");
39}
40