Files
llvm-tms34010/llvm/lib/Bitcode/Writer/BitcodeWriterPass.cpp
T
Harald van Dijk 4c7fd846d5 [DebugInfo] Remove old decls when converting DI (#194964)
We were trying to remove declarations of old debug intrinsics whenever
printing modules or writing them to file. This is no longer necessary as
we use the new-style debug values exclusively now, other than when a
target pass specifically converts back to the old style. If a target
pass does that, removing the intrinsics is not right as the intrinsics'
users will still linger.

This change should be NFC except for the experimental DirectX target
where we do exactly that.

Fixes #194884
2026-05-07 23:40:15 +01:00

76 lines
2.6 KiB
C++

//===- BitcodeWriterPass.cpp - Bitcode writing pass -----------------------===//
//
// 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
//
//===----------------------------------------------------------------------===//
//
// BitcodeWriterPass implementation.
//
//===----------------------------------------------------------------------===//
#include "llvm/Bitcode/BitcodeWriterPass.h"
#include "llvm/Analysis/ModuleSummaryAnalysis.h"
#include "llvm/Bitcode/BitcodeWriter.h"
#include "llvm/IR/PassManager.h"
#include "llvm/InitializePasses.h"
#include "llvm/Pass.h"
using namespace llvm;
PreservedAnalyses BitcodeWriterPass::run(Module &M, ModuleAnalysisManager &AM) {
const ModuleSummaryIndex *Index =
EmitSummaryIndex ? &(AM.getResult<ModuleSummaryIndexAnalysis>(M))
: nullptr;
WriteBitcodeToFile(M, OS, ShouldPreserveUseListOrder, Index, EmitModuleHash);
return PreservedAnalyses::all();
}
namespace {
class WriteBitcodePass : public ModulePass {
raw_ostream &OS; // raw_ostream to print on
bool ShouldPreserveUseListOrder;
public:
static char ID; // Pass identification, replacement for typeid
WriteBitcodePass() : ModulePass(ID), OS(dbgs()) {
initializeWriteBitcodePassPass(*PassRegistry::getPassRegistry());
}
explicit WriteBitcodePass(raw_ostream &o, bool ShouldPreserveUseListOrder)
: ModulePass(ID), OS(o),
ShouldPreserveUseListOrder(ShouldPreserveUseListOrder) {
initializeWriteBitcodePassPass(*PassRegistry::getPassRegistry());
}
StringRef getPassName() const override { return "Bitcode Writer"; }
bool runOnModule(Module &M) override {
WriteBitcodeToFile(M, OS, ShouldPreserveUseListOrder, /*Index=*/nullptr,
/*EmitModuleHash=*/false);
return false;
}
void getAnalysisUsage(AnalysisUsage &AU) const override {
AU.setPreservesAll();
}
};
}
char WriteBitcodePass::ID = 0;
INITIALIZE_PASS_BEGIN(WriteBitcodePass, "write-bitcode", "Write Bitcode", false,
true)
INITIALIZE_PASS_DEPENDENCY(ModuleSummaryIndexWrapperPass)
INITIALIZE_PASS_END(WriteBitcodePass, "write-bitcode", "Write Bitcode", false,
true)
ModulePass *llvm::createBitcodeWriterPass(raw_ostream &Str,
bool ShouldPreserveUseListOrder) {
return new WriteBitcodePass(Str, ShouldPreserveUseListOrder);
}
bool llvm::isBitcodeWriterPass(Pass *P) {
return P->getPassID() == (llvm::AnalysisID)&WriteBitcodePass::ID;
}