Skip to content

Commit 26eca24

Browse files
authored
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.
1 parent 19b9b54 commit 26eca24

File tree

8 files changed

+38
-62
lines changed

8 files changed

+38
-62
lines changed

llvm/lib/Bitcode/Writer/BitcodeWriter.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,10 @@ static cl::opt<bool>
118118
#endif
119119
cl::desc(""));
120120

121+
static cl::opt<bool> PreserveBitcodeUseListOrder(
122+
"preserve-bc-uselistorder", cl::Hidden, cl::init(true),
123+
cl::desc("Preserve use-list order when writing LLVM bitcode."));
124+
121125
namespace llvm {
122126
extern FunctionSummary::ForceSummaryHotnessType ForceSummaryEdgesCold;
123127
}
@@ -217,7 +221,10 @@ class ModuleBitcodeWriterBase : public BitcodeWriterBase {
217221
bool ShouldPreserveUseListOrder,
218222
const ModuleSummaryIndex *Index)
219223
: BitcodeWriterBase(Stream, StrtabBuilder), M(M),
220-
VE(M, ShouldPreserveUseListOrder), Index(Index) {
224+
VE(M, PreserveBitcodeUseListOrder.getNumOccurrences()
225+
? PreserveBitcodeUseListOrder
226+
: ShouldPreserveUseListOrder),
227+
Index(Index) {
221228
// Assign ValueIds to any callee values in the index that came from
222229
// indirect call profiles and were recorded as a GUID not a Value*
223230
// (which would have been assigned an ID by the ValueEnumerator).

llvm/lib/IR/AsmWriter.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,10 @@ static cl::opt<bool> PrintProfData(
102102
"print-prof-data", cl::Hidden,
103103
cl::desc("Pretty print perf data (branch weights, etc) when dumping"));
104104

105+
static cl::opt<bool> PreserveAssemblyUseListOrder(
106+
"preserve-ll-uselistorder", cl::Hidden, cl::init(false),
107+
cl::desc("Preserve use-list order when writing LLVM assembly."));
108+
105109
// Make virtual table appear in this compilation unit.
106110
AssemblyAnnotationWriter::~AssemblyAnnotationWriter() = default;
107111

@@ -2939,7 +2943,10 @@ AssemblyWriter::AssemblyWriter(formatted_raw_ostream &o, SlotTracker &Mac,
29392943
bool IsForDebug, bool ShouldPreserveUseListOrder)
29402944
: Out(o), TheModule(M), Machine(Mac), TypePrinter(M), AnnotationWriter(AAW),
29412945
IsForDebug(IsForDebug),
2942-
ShouldPreserveUseListOrder(ShouldPreserveUseListOrder) {
2946+
ShouldPreserveUseListOrder(
2947+
PreserveAssemblyUseListOrder.getNumOccurrences()
2948+
? PreserveAssemblyUseListOrder
2949+
: ShouldPreserveUseListOrder) {
29432950
if (!TheModule)
29442951
return;
29452952
for (const GlobalObject &GO : TheModule->global_objects())
@@ -2950,7 +2957,8 @@ AssemblyWriter::AssemblyWriter(formatted_raw_ostream &o, SlotTracker &Mac,
29502957
AssemblyWriter::AssemblyWriter(formatted_raw_ostream &o, SlotTracker &Mac,
29512958
const ModuleSummaryIndex *Index, bool IsForDebug)
29522959
: Out(o), TheIndex(Index), Machine(Mac), TypePrinter(/*Module=*/nullptr),
2953-
IsForDebug(IsForDebug), ShouldPreserveUseListOrder(false) {}
2960+
IsForDebug(IsForDebug),
2961+
ShouldPreserveUseListOrder(PreserveAssemblyUseListOrder) {}
29542962

29552963
void AssemblyWriter::writeOperand(const Value *Operand, bool PrintType) {
29562964
if (!Operand) {

llvm/tools/bugpoint/OptimizerDriver.cpp

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,6 @@ namespace llvm {
3838
extern cl::opt<std::string> OutputPrefix;
3939
}
4040

41-
static cl::opt<bool> PreserveBitcodeUseListOrder(
42-
"preserve-bc-uselistorder",
43-
cl::desc("Preserve use-list order when writing LLVM bitcode."),
44-
cl::init(true), cl::Hidden);
45-
4641
static cl::opt<std::string>
4742
OptCmd("opt-command", cl::init(""),
4843
cl::desc("Path to opt. (default: search path "
@@ -51,7 +46,7 @@ static cl::opt<std::string>
5146
/// This writes the current "Program" to the named bitcode file. If an error
5247
/// occurs, true is returned.
5348
static bool writeProgramToFileAux(ToolOutputFile &Out, const Module &M) {
54-
WriteBitcodeToFile(M, Out.os(), PreserveBitcodeUseListOrder);
49+
WriteBitcodeToFile(M, Out.os(), /* ShouldPreserveUseListOrder */ true);
5550
Out.os().close();
5651
if (!Out.os().has_error()) {
5752
Out.keep();
@@ -68,7 +63,7 @@ bool BugDriver::writeProgramToFile(const std::string &Filename, int FD,
6863

6964
bool BugDriver::writeProgramToFile(int FD, const Module &M) const {
7065
raw_fd_ostream OS(FD, /*shouldClose*/ false);
71-
WriteBitcodeToFile(M, OS, PreserveBitcodeUseListOrder);
66+
WriteBitcodeToFile(M, OS, /* ShouldPreserveUseListOrder */ true);
7267
OS.flush();
7368
if (!OS.has_error())
7469
return false;
@@ -155,7 +150,7 @@ bool BugDriver::runPasses(Module &Program,
155150
DiscardTemp Discard{*Temp};
156151
raw_fd_ostream OS(Temp->FD, /*shouldClose*/ false);
157152

158-
WriteBitcodeToFile(Program, OS, PreserveBitcodeUseListOrder);
153+
WriteBitcodeToFile(Program, OS, /* ShouldPreserveUseListOrder */ true);
159154
OS.flush();
160155
if (OS.has_error()) {
161156
errs() << "Error writing bitcode file: " << Temp->TmpName << "\n";

llvm/tools/llvm-as/llvm-as.cpp

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,6 @@ static cl::opt<bool>
5757
cl::desc("Do not run verifier on input LLVM (dangerous!)"),
5858
cl::cat(AsCat));
5959

60-
static cl::opt<bool> PreserveBitcodeUseListOrder(
61-
"preserve-bc-uselistorder",
62-
cl::desc("Preserve use-list order when writing LLVM bitcode."),
63-
cl::init(true), cl::Hidden, cl::cat(AsCat));
64-
6560
static cl::opt<std::string> ClDataLayout("data-layout",
6661
cl::desc("data layout string to use"),
6762
cl::value_desc("layout-string"),
@@ -100,7 +95,7 @@ static void WriteOutputFile(const Module *M, const ModuleSummaryIndex *Index) {
10095
// any non-null Index along with it as a per-module Index.
10196
// If both are empty, this will give an empty module block, which is
10297
// the expected behavior.
103-
WriteBitcodeToFile(*M, Out->os(), PreserveBitcodeUseListOrder,
98+
WriteBitcodeToFile(*M, Out->os(), /* ShouldPreserveUseListOrder */ true,
10499
IndexToWrite, EmitModuleHash);
105100
else
106101
// Otherwise, with an empty Module but non-empty Index, we write a

llvm/tools/llvm-dis/llvm-dis.cpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -80,11 +80,6 @@ static cl::opt<bool>
8080
cl::desc("Add informational comments to the .ll file"),
8181
cl::cat(DisCategory));
8282

83-
static cl::opt<bool> PreserveAssemblyUseListOrder(
84-
"preserve-ll-uselistorder",
85-
cl::desc("Preserve use-list order when writing LLVM assembly."),
86-
cl::init(false), cl::Hidden, cl::cat(DisCategory));
87-
8883
static cl::opt<bool>
8984
MaterializeMetadata("materialize-metadata",
9085
cl::desc("Load module without materializing metadata, "
@@ -255,7 +250,8 @@ int main(int argc, char **argv) {
255250
if (!DontPrint) {
256251
if (M) {
257252
M->removeDebugIntrinsicDeclarations();
258-
M->print(Out->os(), Annotator.get(), PreserveAssemblyUseListOrder);
253+
M->print(Out->os(), Annotator.get(),
254+
/* ShouldPreserveUseListOrder */ false);
259255
}
260256
if (Index)
261257
Index->print(Out->os());

llvm/tools/llvm-extract/llvm-extract.cpp

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -129,16 +129,6 @@ static cl::opt<bool> OutputAssembly("S",
129129
cl::desc("Write output as LLVM assembly"),
130130
cl::Hidden, cl::cat(ExtractCat));
131131

132-
static cl::opt<bool> PreserveBitcodeUseListOrder(
133-
"preserve-bc-uselistorder",
134-
cl::desc("Preserve use-list order when writing LLVM bitcode."),
135-
cl::init(true), cl::Hidden, cl::cat(ExtractCat));
136-
137-
static cl::opt<bool> PreserveAssemblyUseListOrder(
138-
"preserve-ll-uselistorder",
139-
cl::desc("Preserve use-list order when writing LLVM assembly."),
140-
cl::init(false), cl::Hidden, cl::cat(ExtractCat));
141-
142132
int main(int argc, char **argv) {
143133
InitLLVM X(argc, argv);
144134

@@ -421,9 +411,11 @@ int main(int argc, char **argv) {
421411
}
422412

423413
if (OutputAssembly)
424-
PM.addPass(PrintModulePass(Out.os(), "", PreserveAssemblyUseListOrder));
414+
PM.addPass(
415+
PrintModulePass(Out.os(), "", /* ShouldPreserveUseListOrder */ false));
425416
else if (Force || !CheckBitcodeOutputToConsole(Out.os()))
426-
PM.addPass(BitcodeWriterPass(Out.os(), PreserveBitcodeUseListOrder));
417+
PM.addPass(
418+
BitcodeWriterPass(Out.os(), /* ShouldPreserveUseListOrder */ true));
427419

428420
PM.run(*M, MAM);
429421

llvm/tools/llvm-link/llvm-link.cpp

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -110,16 +110,6 @@ static cl::opt<bool> SuppressWarnings("suppress-warnings",
110110
cl::desc("Suppress all linking warnings"),
111111
cl::init(false), cl::cat(LinkCategory));
112112

113-
static cl::opt<bool> PreserveBitcodeUseListOrder(
114-
"preserve-bc-uselistorder",
115-
cl::desc("Preserve use-list order when writing LLVM bitcode."),
116-
cl::init(true), cl::Hidden, cl::cat(LinkCategory));
117-
118-
static cl::opt<bool> PreserveAssemblyUseListOrder(
119-
"preserve-ll-uselistorder",
120-
cl::desc("Preserve use-list order when writing LLVM assembly."),
121-
cl::init(false), cl::Hidden, cl::cat(LinkCategory));
122-
123113
static cl::opt<bool> NoVerify("disable-verify",
124114
cl::desc("Do not run the verifier"), cl::Hidden,
125115
cl::cat(LinkCategory));
@@ -525,9 +515,10 @@ int main(int argc, char **argv) {
525515
errs() << "Writing bitcode...\n";
526516
Composite->removeDebugIntrinsicDeclarations();
527517
if (OutputAssembly) {
528-
Composite->print(Out.os(), nullptr, PreserveAssemblyUseListOrder);
518+
Composite->print(Out.os(), nullptr, /* ShouldPreserveUseListOrder */ false);
529519
} else if (Force || !CheckBitcodeOutputToConsole(Out.os())) {
530-
WriteBitcodeToFile(*Composite, Out.os(), PreserveBitcodeUseListOrder);
520+
WriteBitcodeToFile(*Composite, Out.os(),
521+
/* ShouldPreserveUseListOrder */ true);
531522
}
532523

533524
// Declare success.

llvm/tools/opt/optdriver.cpp

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -232,16 +232,6 @@ static cl::opt<std::string> ClDataLayout("data-layout",
232232
cl::value_desc("layout-string"),
233233
cl::init(""));
234234

235-
static cl::opt<bool> PreserveBitcodeUseListOrder(
236-
"preserve-bc-uselistorder",
237-
cl::desc("Preserve use-list order when writing LLVM bitcode."),
238-
cl::init(true), cl::Hidden);
239-
240-
static cl::opt<bool> PreserveAssemblyUseListOrder(
241-
"preserve-ll-uselistorder",
242-
cl::desc("Preserve use-list order when writing LLVM assembly."),
243-
cl::init(false), cl::Hidden);
244-
245235
static cl::opt<bool> RunTwice("run-twice",
246236
cl::desc("Run all passes twice, re-using the "
247237
"same pass manager (legacy PM only)."),
@@ -753,9 +743,9 @@ extern "C" int optMain(
753743
return runPassPipeline(
754744
argv[0], *M, TM.get(), &TLII, Out.get(), ThinLinkOut.get(),
755745
RemarksFile.get(), Pipeline, PluginList, PassBuilderCallbacks,
756-
OK, VK, PreserveAssemblyUseListOrder,
757-
PreserveBitcodeUseListOrder, EmitSummaryIndex, EmitModuleHash,
758-
EnableDebugify, VerifyDebugInfoPreserve,
746+
OK, VK, /* ShouldPreserveAssemblyUseListOrder */ false,
747+
/* ShouldPreserveBitcodeUseListOrder */ true, EmitSummaryIndex,
748+
EmitModuleHash, EnableDebugify, VerifyDebugInfoPreserve,
759749
EnableProfileVerification, UnifiedLTO)
760750
? 0
761751
: 1;
@@ -877,9 +867,11 @@ extern "C" int optMain(
877867
OS = BOS.get();
878868
}
879869
if (OutputAssembly)
880-
Passes.add(createPrintModulePass(*OS, "", PreserveAssemblyUseListOrder));
870+
Passes.add(createPrintModulePass(
871+
*OS, "", /* ShouldPreserveAssemblyUseListOrder */ false));
881872
else
882-
Passes.add(createBitcodeWriterPass(*OS, PreserveBitcodeUseListOrder));
873+
Passes.add(createBitcodeWriterPass(
874+
*OS, /* ShouldPreserveBitcodeUseListOrder */ true));
883875
}
884876

885877
// Before executing passes, print the final values of the LLVM options.

0 commit comments

Comments
 (0)