Move the preserve-{bc,ll}-uselistorder options out of individual tools, make them global defaults for AsmWriter and BitcodeWriter (#160079)
This patch moves the `preserve-bc-uselistorder` and `preserve-ll-uselistorder` options out of individual tools(opt, llvm-as, llvm-dis, llvm-link, llvm-extract) and make them global defaults for AsmWriter and BitcodeWriter. These options are useful when we use `-print-*` options to dump LLVM IR.
This commit is contained in:
parent
19b9b54158
commit
26eca2439c
@ -118,6 +118,10 @@ static cl::opt<bool>
|
||||
#endif
|
||||
cl::desc(""));
|
||||
|
||||
static cl::opt<bool> PreserveBitcodeUseListOrder(
|
||||
"preserve-bc-uselistorder", cl::Hidden, cl::init(true),
|
||||
cl::desc("Preserve use-list order when writing LLVM bitcode."));
|
||||
|
||||
namespace llvm {
|
||||
extern FunctionSummary::ForceSummaryHotnessType ForceSummaryEdgesCold;
|
||||
}
|
||||
@ -217,7 +221,10 @@ public:
|
||||
bool ShouldPreserveUseListOrder,
|
||||
const ModuleSummaryIndex *Index)
|
||||
: BitcodeWriterBase(Stream, StrtabBuilder), M(M),
|
||||
VE(M, ShouldPreserveUseListOrder), Index(Index) {
|
||||
VE(M, PreserveBitcodeUseListOrder.getNumOccurrences()
|
||||
? PreserveBitcodeUseListOrder
|
||||
: ShouldPreserveUseListOrder),
|
||||
Index(Index) {
|
||||
// Assign ValueIds to any callee values in the index that came from
|
||||
// indirect call profiles and were recorded as a GUID not a Value*
|
||||
// (which would have been assigned an ID by the ValueEnumerator).
|
||||
|
||||
@ -102,6 +102,10 @@ static cl::opt<bool> PrintProfData(
|
||||
"print-prof-data", cl::Hidden,
|
||||
cl::desc("Pretty print perf data (branch weights, etc) when dumping"));
|
||||
|
||||
static cl::opt<bool> PreserveAssemblyUseListOrder(
|
||||
"preserve-ll-uselistorder", cl::Hidden, cl::init(false),
|
||||
cl::desc("Preserve use-list order when writing LLVM assembly."));
|
||||
|
||||
// Make virtual table appear in this compilation unit.
|
||||
AssemblyAnnotationWriter::~AssemblyAnnotationWriter() = default;
|
||||
|
||||
@ -2939,7 +2943,10 @@ AssemblyWriter::AssemblyWriter(formatted_raw_ostream &o, SlotTracker &Mac,
|
||||
bool IsForDebug, bool ShouldPreserveUseListOrder)
|
||||
: Out(o), TheModule(M), Machine(Mac), TypePrinter(M), AnnotationWriter(AAW),
|
||||
IsForDebug(IsForDebug),
|
||||
ShouldPreserveUseListOrder(ShouldPreserveUseListOrder) {
|
||||
ShouldPreserveUseListOrder(
|
||||
PreserveAssemblyUseListOrder.getNumOccurrences()
|
||||
? PreserveAssemblyUseListOrder
|
||||
: ShouldPreserveUseListOrder) {
|
||||
if (!TheModule)
|
||||
return;
|
||||
for (const GlobalObject &GO : TheModule->global_objects())
|
||||
@ -2950,7 +2957,8 @@ AssemblyWriter::AssemblyWriter(formatted_raw_ostream &o, SlotTracker &Mac,
|
||||
AssemblyWriter::AssemblyWriter(formatted_raw_ostream &o, SlotTracker &Mac,
|
||||
const ModuleSummaryIndex *Index, bool IsForDebug)
|
||||
: Out(o), TheIndex(Index), Machine(Mac), TypePrinter(/*Module=*/nullptr),
|
||||
IsForDebug(IsForDebug), ShouldPreserveUseListOrder(false) {}
|
||||
IsForDebug(IsForDebug),
|
||||
ShouldPreserveUseListOrder(PreserveAssemblyUseListOrder) {}
|
||||
|
||||
void AssemblyWriter::writeOperand(const Value *Operand, bool PrintType) {
|
||||
if (!Operand) {
|
||||
|
||||
@ -38,11 +38,6 @@ namespace llvm {
|
||||
extern cl::opt<std::string> OutputPrefix;
|
||||
}
|
||||
|
||||
static cl::opt<bool> PreserveBitcodeUseListOrder(
|
||||
"preserve-bc-uselistorder",
|
||||
cl::desc("Preserve use-list order when writing LLVM bitcode."),
|
||||
cl::init(true), cl::Hidden);
|
||||
|
||||
static cl::opt<std::string>
|
||||
OptCmd("opt-command", cl::init(""),
|
||||
cl::desc("Path to opt. (default: search path "
|
||||
@ -51,7 +46,7 @@ static cl::opt<std::string>
|
||||
/// This writes the current "Program" to the named bitcode file. If an error
|
||||
/// occurs, true is returned.
|
||||
static bool writeProgramToFileAux(ToolOutputFile &Out, const Module &M) {
|
||||
WriteBitcodeToFile(M, Out.os(), PreserveBitcodeUseListOrder);
|
||||
WriteBitcodeToFile(M, Out.os(), /* ShouldPreserveUseListOrder */ true);
|
||||
Out.os().close();
|
||||
if (!Out.os().has_error()) {
|
||||
Out.keep();
|
||||
@ -68,7 +63,7 @@ bool BugDriver::writeProgramToFile(const std::string &Filename, int FD,
|
||||
|
||||
bool BugDriver::writeProgramToFile(int FD, const Module &M) const {
|
||||
raw_fd_ostream OS(FD, /*shouldClose*/ false);
|
||||
WriteBitcodeToFile(M, OS, PreserveBitcodeUseListOrder);
|
||||
WriteBitcodeToFile(M, OS, /* ShouldPreserveUseListOrder */ true);
|
||||
OS.flush();
|
||||
if (!OS.has_error())
|
||||
return false;
|
||||
@ -155,7 +150,7 @@ bool BugDriver::runPasses(Module &Program,
|
||||
DiscardTemp Discard{*Temp};
|
||||
raw_fd_ostream OS(Temp->FD, /*shouldClose*/ false);
|
||||
|
||||
WriteBitcodeToFile(Program, OS, PreserveBitcodeUseListOrder);
|
||||
WriteBitcodeToFile(Program, OS, /* ShouldPreserveUseListOrder */ true);
|
||||
OS.flush();
|
||||
if (OS.has_error()) {
|
||||
errs() << "Error writing bitcode file: " << Temp->TmpName << "\n";
|
||||
|
||||
@ -57,11 +57,6 @@ static cl::opt<bool>
|
||||
cl::desc("Do not run verifier on input LLVM (dangerous!)"),
|
||||
cl::cat(AsCat));
|
||||
|
||||
static cl::opt<bool> PreserveBitcodeUseListOrder(
|
||||
"preserve-bc-uselistorder",
|
||||
cl::desc("Preserve use-list order when writing LLVM bitcode."),
|
||||
cl::init(true), cl::Hidden, cl::cat(AsCat));
|
||||
|
||||
static cl::opt<std::string> ClDataLayout("data-layout",
|
||||
cl::desc("data layout string to use"),
|
||||
cl::value_desc("layout-string"),
|
||||
@ -100,7 +95,7 @@ static void WriteOutputFile(const Module *M, const ModuleSummaryIndex *Index) {
|
||||
// any non-null Index along with it as a per-module Index.
|
||||
// If both are empty, this will give an empty module block, which is
|
||||
// the expected behavior.
|
||||
WriteBitcodeToFile(*M, Out->os(), PreserveBitcodeUseListOrder,
|
||||
WriteBitcodeToFile(*M, Out->os(), /* ShouldPreserveUseListOrder */ true,
|
||||
IndexToWrite, EmitModuleHash);
|
||||
else
|
||||
// Otherwise, with an empty Module but non-empty Index, we write a
|
||||
|
||||
@ -80,11 +80,6 @@ static cl::opt<bool>
|
||||
cl::desc("Add informational comments to the .ll file"),
|
||||
cl::cat(DisCategory));
|
||||
|
||||
static cl::opt<bool> PreserveAssemblyUseListOrder(
|
||||
"preserve-ll-uselistorder",
|
||||
cl::desc("Preserve use-list order when writing LLVM assembly."),
|
||||
cl::init(false), cl::Hidden, cl::cat(DisCategory));
|
||||
|
||||
static cl::opt<bool>
|
||||
MaterializeMetadata("materialize-metadata",
|
||||
cl::desc("Load module without materializing metadata, "
|
||||
@ -255,7 +250,8 @@ int main(int argc, char **argv) {
|
||||
if (!DontPrint) {
|
||||
if (M) {
|
||||
M->removeDebugIntrinsicDeclarations();
|
||||
M->print(Out->os(), Annotator.get(), PreserveAssemblyUseListOrder);
|
||||
M->print(Out->os(), Annotator.get(),
|
||||
/* ShouldPreserveUseListOrder */ false);
|
||||
}
|
||||
if (Index)
|
||||
Index->print(Out->os());
|
||||
|
||||
@ -129,16 +129,6 @@ static cl::opt<bool> OutputAssembly("S",
|
||||
cl::desc("Write output as LLVM assembly"),
|
||||
cl::Hidden, cl::cat(ExtractCat));
|
||||
|
||||
static cl::opt<bool> PreserveBitcodeUseListOrder(
|
||||
"preserve-bc-uselistorder",
|
||||
cl::desc("Preserve use-list order when writing LLVM bitcode."),
|
||||
cl::init(true), cl::Hidden, cl::cat(ExtractCat));
|
||||
|
||||
static cl::opt<bool> PreserveAssemblyUseListOrder(
|
||||
"preserve-ll-uselistorder",
|
||||
cl::desc("Preserve use-list order when writing LLVM assembly."),
|
||||
cl::init(false), cl::Hidden, cl::cat(ExtractCat));
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
InitLLVM X(argc, argv);
|
||||
|
||||
@ -421,9 +411,11 @@ int main(int argc, char **argv) {
|
||||
}
|
||||
|
||||
if (OutputAssembly)
|
||||
PM.addPass(PrintModulePass(Out.os(), "", PreserveAssemblyUseListOrder));
|
||||
PM.addPass(
|
||||
PrintModulePass(Out.os(), "", /* ShouldPreserveUseListOrder */ false));
|
||||
else if (Force || !CheckBitcodeOutputToConsole(Out.os()))
|
||||
PM.addPass(BitcodeWriterPass(Out.os(), PreserveBitcodeUseListOrder));
|
||||
PM.addPass(
|
||||
BitcodeWriterPass(Out.os(), /* ShouldPreserveUseListOrder */ true));
|
||||
|
||||
PM.run(*M, MAM);
|
||||
|
||||
|
||||
@ -110,16 +110,6 @@ static cl::opt<bool> SuppressWarnings("suppress-warnings",
|
||||
cl::desc("Suppress all linking warnings"),
|
||||
cl::init(false), cl::cat(LinkCategory));
|
||||
|
||||
static cl::opt<bool> PreserveBitcodeUseListOrder(
|
||||
"preserve-bc-uselistorder",
|
||||
cl::desc("Preserve use-list order when writing LLVM bitcode."),
|
||||
cl::init(true), cl::Hidden, cl::cat(LinkCategory));
|
||||
|
||||
static cl::opt<bool> PreserveAssemblyUseListOrder(
|
||||
"preserve-ll-uselistorder",
|
||||
cl::desc("Preserve use-list order when writing LLVM assembly."),
|
||||
cl::init(false), cl::Hidden, cl::cat(LinkCategory));
|
||||
|
||||
static cl::opt<bool> NoVerify("disable-verify",
|
||||
cl::desc("Do not run the verifier"), cl::Hidden,
|
||||
cl::cat(LinkCategory));
|
||||
@ -525,9 +515,10 @@ int main(int argc, char **argv) {
|
||||
errs() << "Writing bitcode...\n";
|
||||
Composite->removeDebugIntrinsicDeclarations();
|
||||
if (OutputAssembly) {
|
||||
Composite->print(Out.os(), nullptr, PreserveAssemblyUseListOrder);
|
||||
Composite->print(Out.os(), nullptr, /* ShouldPreserveUseListOrder */ false);
|
||||
} else if (Force || !CheckBitcodeOutputToConsole(Out.os())) {
|
||||
WriteBitcodeToFile(*Composite, Out.os(), PreserveBitcodeUseListOrder);
|
||||
WriteBitcodeToFile(*Composite, Out.os(),
|
||||
/* ShouldPreserveUseListOrder */ true);
|
||||
}
|
||||
|
||||
// Declare success.
|
||||
|
||||
@ -232,16 +232,6 @@ static cl::opt<std::string> ClDataLayout("data-layout",
|
||||
cl::value_desc("layout-string"),
|
||||
cl::init(""));
|
||||
|
||||
static cl::opt<bool> PreserveBitcodeUseListOrder(
|
||||
"preserve-bc-uselistorder",
|
||||
cl::desc("Preserve use-list order when writing LLVM bitcode."),
|
||||
cl::init(true), cl::Hidden);
|
||||
|
||||
static cl::opt<bool> PreserveAssemblyUseListOrder(
|
||||
"preserve-ll-uselistorder",
|
||||
cl::desc("Preserve use-list order when writing LLVM assembly."),
|
||||
cl::init(false), cl::Hidden);
|
||||
|
||||
static cl::opt<bool> RunTwice("run-twice",
|
||||
cl::desc("Run all passes twice, re-using the "
|
||||
"same pass manager (legacy PM only)."),
|
||||
@ -753,9 +743,9 @@ extern "C" int optMain(
|
||||
return runPassPipeline(
|
||||
argv[0], *M, TM.get(), &TLII, Out.get(), ThinLinkOut.get(),
|
||||
RemarksFile.get(), Pipeline, PluginList, PassBuilderCallbacks,
|
||||
OK, VK, PreserveAssemblyUseListOrder,
|
||||
PreserveBitcodeUseListOrder, EmitSummaryIndex, EmitModuleHash,
|
||||
EnableDebugify, VerifyDebugInfoPreserve,
|
||||
OK, VK, /* ShouldPreserveAssemblyUseListOrder */ false,
|
||||
/* ShouldPreserveBitcodeUseListOrder */ true, EmitSummaryIndex,
|
||||
EmitModuleHash, EnableDebugify, VerifyDebugInfoPreserve,
|
||||
EnableProfileVerification, UnifiedLTO)
|
||||
? 0
|
||||
: 1;
|
||||
@ -877,9 +867,11 @@ extern "C" int optMain(
|
||||
OS = BOS.get();
|
||||
}
|
||||
if (OutputAssembly)
|
||||
Passes.add(createPrintModulePass(*OS, "", PreserveAssemblyUseListOrder));
|
||||
Passes.add(createPrintModulePass(
|
||||
*OS, "", /* ShouldPreserveAssemblyUseListOrder */ false));
|
||||
else
|
||||
Passes.add(createBitcodeWriterPass(*OS, PreserveBitcodeUseListOrder));
|
||||
Passes.add(createBitcodeWriterPass(
|
||||
*OS, /* ShouldPreserveBitcodeUseListOrder */ true));
|
||||
}
|
||||
|
||||
// Before executing passes, print the final values of the LLVM options.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user