6363#include " llvm/IR/TypeFinder.h"
6464#include " llvm/IR/TypedPointerType.h"
6565#include " llvm/IR/Use.h"
66+ #include " llvm/IR/UseListOrder.h"
6667#include " llvm/IR/User.h"
6768#include " llvm/IR/Value.h"
6869#include " llvm/Support/AtomicOrdering.h"
@@ -102,10 +103,12 @@ static cl::opt<bool> PrintProfData(
102103 " print-prof-data" , cl::Hidden,
103104 cl::desc (" Pretty print perf data (branch weights, etc) when dumping" ));
104105
105- static cl::opt<bool > PreserveAssemblyUseListOrder (
106- " preserve-ll-uselistorder" ,
107- cl::desc (" Preserve use-list order when writing LLVM assembly." ),
108- cl::init(false ), cl::Hidden);
106+ static cl::opt<std::optional<bool >, /* ExternalStorage=*/ false ,
107+ PreserveUseListOrderOptionParser>
108+ PreserveAssemblyUseListOrder (
109+ " preserve-ll-uselistorder" ,
110+ cl::desc (" Preserve use-list order when writing LLVM assembly." ),
111+ cl::init(std::nullopt ), cl::Hidden, cl::ValueOptional);
109112
110113// Make virtual table appear in this compilation unit.
111114AssemblyAnnotationWriter::~AssemblyAnnotationWriter () = default ;
@@ -2938,8 +2941,8 @@ AssemblyWriter::AssemblyWriter(formatted_raw_ostream &o, SlotTracker &Mac,
29382941 bool IsForDebug, bool ShouldPreserveUseListOrder)
29392942 : Out(o), TheModule(M), Machine(Mac), TypePrinter(M), AnnotationWriter(AAW),
29402943 IsForDebug(IsForDebug),
2941- ShouldPreserveUseListOrder(ShouldPreserveUseListOrder ||
2942- PreserveAssemblyUseListOrder) {
2944+ ShouldPreserveUseListOrder(
2945+ PreserveAssemblyUseListOrder.value_or(ShouldPreserveUseListOrder) ) {
29432946 if (!TheModule)
29442947 return ;
29452948 for (const GlobalObject &GO : TheModule->global_objects ())
@@ -2951,7 +2954,8 @@ AssemblyWriter::AssemblyWriter(formatted_raw_ostream &o, SlotTracker &Mac,
29512954 const ModuleSummaryIndex *Index, bool IsForDebug)
29522955 : Out(o), TheIndex(Index), Machine(Mac), TypePrinter(/* Module=*/ nullptr ),
29532956 IsForDebug(IsForDebug),
2954- ShouldPreserveUseListOrder(PreserveAssemblyUseListOrder) {}
2957+ ShouldPreserveUseListOrder(PreserveAssemblyUseListOrder.value_or(false )) {
2958+ }
29552959
29562960void AssemblyWriter::writeOperand (const Value *Operand, bool PrintType) {
29572961 if (!Operand) {
0 commit comments