aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/IR/AsmWriter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/IR/AsmWriter.cpp')
-rw-r--r--llvm/lib/IR/AsmWriter.cpp237
1 files changed, 96 insertions, 141 deletions
diff --git a/llvm/lib/IR/AsmWriter.cpp b/llvm/lib/IR/AsmWriter.cpp
index 1a51830..54b92c9 100644
--- a/llvm/lib/IR/AsmWriter.cpp
+++ b/llvm/lib/IR/AsmWriter.cpp
@@ -516,19 +516,15 @@ static void PrintShuffleMask(raw_ostream &Out, Type *Ty, ArrayRef<int> Mask) {
if (isa<ScalableVectorType>(Ty))
Out << "vscale x ";
Out << Mask.size() << " x i32> ";
- bool FirstElt = true;
if (all_of(Mask, [](int Elt) { return Elt == 0; })) {
Out << "zeroinitializer";
} else if (all_of(Mask, [](int Elt) { return Elt == PoisonMaskElem; })) {
Out << "poison";
} else {
Out << "<";
+ ListSeparator LS;
for (int Elt : Mask) {
- if (FirstElt)
- FirstElt = false;
- else
- Out << ", ";
- Out << "i32 ";
+ Out << LS << "i32 ";
if (Elt == PoisonMaskElem)
Out << "poison";
else
@@ -1700,14 +1696,12 @@ static void WriteConstantInternal(raw_ostream &Out, const Constant *CV,
if (const ConstantArray *CA = dyn_cast<ConstantArray>(CV)) {
Type *ETy = CA->getType()->getElementType();
Out << '[';
- WriterCtx.TypePrinter->print(ETy, Out);
- Out << ' ';
- WriteAsOperandInternal(Out, CA->getOperand(0), WriterCtx);
- for (unsigned i = 1, e = CA->getNumOperands(); i != e; ++i) {
- Out << ", ";
+ ListSeparator LS;
+ for (const Value *Op : CA->operands()) {
+ Out << LS;
WriterCtx.TypePrinter->print(ETy, Out);
Out << ' ';
- WriteAsOperandInternal(Out, CA->getOperand(i), WriterCtx);
+ WriteAsOperandInternal(Out, Op, WriterCtx);
}
Out << ']';
return;
@@ -1725,11 +1719,9 @@ static void WriteConstantInternal(raw_ostream &Out, const Constant *CV,
Type *ETy = CA->getType()->getElementType();
Out << '[';
- WriterCtx.TypePrinter->print(ETy, Out);
- Out << ' ';
- WriteAsOperandInternal(Out, CA->getElementAsConstant(0), WriterCtx);
- for (uint64_t i = 1, e = CA->getNumElements(); i != e; ++i) {
- Out << ", ";
+ ListSeparator LS;
+ for (uint64_t i = 0, e = CA->getNumElements(); i != e; ++i) {
+ Out << LS;
WriterCtx.TypePrinter->print(ETy, Out);
Out << ' ';
WriteAsOperandInternal(Out, CA->getElementAsConstant(i), WriterCtx);
@@ -1742,24 +1734,17 @@ static void WriteConstantInternal(raw_ostream &Out, const Constant *CV,
if (CS->getType()->isPacked())
Out << '<';
Out << '{';
- unsigned N = CS->getNumOperands();
- if (N) {
- Out << ' ';
- WriterCtx.TypePrinter->print(CS->getOperand(0)->getType(), Out);
+ if (CS->getNumOperands() != 0) {
Out << ' ';
-
- WriteAsOperandInternal(Out, CS->getOperand(0), WriterCtx);
-
- for (unsigned i = 1; i < N; i++) {
- Out << ", ";
- WriterCtx.TypePrinter->print(CS->getOperand(i)->getType(), Out);
+ ListSeparator LS;
+ for (const Value *Op : CS->operands()) {
+ Out << LS;
+ WriterCtx.TypePrinter->print(Op->getType(), Out);
Out << ' ';
-
- WriteAsOperandInternal(Out, CS->getOperand(i), WriterCtx);
+ WriteAsOperandInternal(Out, Op, WriterCtx);
}
Out << ' ';
}
-
Out << '}';
if (CS->getType()->isPacked())
Out << '>';
@@ -1787,11 +1772,9 @@ static void WriteConstantInternal(raw_ostream &Out, const Constant *CV,
}
Out << '<';
- WriterCtx.TypePrinter->print(ETy, Out);
- Out << ' ';
- WriteAsOperandInternal(Out, CV->getAggregateElement(0U), WriterCtx);
- for (unsigned i = 1, e = CVVTy->getNumElements(); i != e; ++i) {
- Out << ", ";
+ ListSeparator LS;
+ for (unsigned i = 0, e = CVVTy->getNumElements(); i != e; ++i) {
+ Out << LS;
WriterCtx.TypePrinter->print(ETy, Out);
Out << ' ';
WriteAsOperandInternal(Out, CV->getAggregateElement(i), WriterCtx);
@@ -1848,13 +1831,12 @@ static void WriteConstantInternal(raw_ostream &Out, const Constant *CV,
Out << ", ";
}
- for (User::const_op_iterator OI = CE->op_begin(); OI != CE->op_end();
- ++OI) {
- WriterCtx.TypePrinter->print((*OI)->getType(), Out);
+ ListSeparator LS;
+ for (const Value *Op : CE->operands()) {
+ Out << LS;
+ WriterCtx.TypePrinter->print(Op->getType(), Out);
Out << ' ';
- WriteAsOperandInternal(Out, *OI, WriterCtx);
- if (OI+1 != CE->op_end())
- Out << ", ";
+ WriteAsOperandInternal(Out, Op, WriterCtx);
}
if (CE->isCast()) {
@@ -1875,11 +1857,12 @@ static void WriteConstantInternal(raw_ostream &Out, const Constant *CV,
static void writeMDTuple(raw_ostream &Out, const MDTuple *Node,
AsmWriterContext &WriterCtx) {
Out << "!{";
- for (unsigned mi = 0, me = Node->getNumOperands(); mi != me; ++mi) {
- const Metadata *MD = Node->getOperand(mi);
- if (!MD)
+ ListSeparator LS;
+ for (const Metadata *MD : Node->operands()) {
+ Out << LS;
+ if (!MD) {
Out << "null";
- else if (auto *MDV = dyn_cast<ValueAsMetadata>(MD)) {
+ } else if (auto *MDV = dyn_cast<ValueAsMetadata>(MD)) {
Value *V = MDV->getValue();
WriterCtx.TypePrinter->print(V->getType(), Out);
Out << ' ';
@@ -1888,8 +1871,6 @@ static void writeMDTuple(raw_ostream &Out, const MDTuple *Node,
WriteAsOperandInternal(Out, MD, WriterCtx);
WriterCtx.onWriteMetadataAsOperand(MD);
}
- if (mi + 1 != me)
- Out << ", ";
}
Out << "}";
@@ -1897,24 +1878,9 @@ static void writeMDTuple(raw_ostream &Out, const MDTuple *Node,
namespace {
-struct FieldSeparator {
- bool Skip = true;
- const char *Sep;
-
- FieldSeparator(const char *Sep = ", ") : Sep(Sep) {}
-};
-
-raw_ostream &operator<<(raw_ostream &OS, FieldSeparator &FS) {
- if (FS.Skip) {
- FS.Skip = false;
- return OS;
- }
- return OS << FS.Sep;
-}
-
struct MDFieldPrinter {
raw_ostream &Out;
- FieldSeparator FS;
+ ListSeparator FS;
AsmWriterContext &WriterCtx;
explicit MDFieldPrinter(raw_ostream &Out)
@@ -2051,7 +2017,7 @@ void MDFieldPrinter::printDIFlags(StringRef Name, DINode::DIFlags Flags) {
SmallVector<DINode::DIFlags, 8> SplitFlags;
auto Extra = DINode::splitFlags(Flags, SplitFlags);
- FieldSeparator FlagsFS(" | ");
+ ListSeparator FlagsFS(" | ");
for (auto F : SplitFlags) {
auto StringF = DINode::getFlagString(F);
assert(!StringF.empty() && "Expected valid flag");
@@ -2075,7 +2041,7 @@ void MDFieldPrinter::printDISPFlags(StringRef Name,
SmallVector<DISubprogram::DISPFlags, 8> SplitFlags;
auto Extra = DISubprogram::splitFlags(Flags, SplitFlags);
- FieldSeparator FlagsFS(" | ");
+ ListSeparator FlagsFS(" | ");
for (auto F : SplitFlags) {
auto StringF = DISubprogram::getFlagString(F);
assert(!StringF.empty() && "Expected valid flag");
@@ -2124,7 +2090,7 @@ static void writeGenericDINode(raw_ostream &Out, const GenericDINode *N,
Printer.printString("header", N->getHeader());
if (N->getNumDwarfOperands()) {
Out << Printer.FS << "operands: {";
- FieldSeparator IFS;
+ ListSeparator IFS;
for (auto &I : N->dwarf_operands()) {
Out << IFS;
writeMetadataAsOperand(Out, I, WriterCtx);
@@ -2638,7 +2604,7 @@ static void writeDILabel(raw_ostream &Out, const DILabel *N,
static void writeDIExpression(raw_ostream &Out, const DIExpression *N,
AsmWriterContext &WriterCtx) {
Out << "!DIExpression(";
- FieldSeparator FS;
+ ListSeparator FS;
if (N->isValid()) {
for (const DIExpression::ExprOperand &Op : N->expr_ops()) {
auto OpStr = dwarf::OperationEncodingString(Op.getOp());
@@ -2666,7 +2632,7 @@ static void writeDIArgList(raw_ostream &Out, const DIArgList *N,
assert(FromValue &&
"Unexpected DIArgList metadata outside of value argument");
Out << "!DIArgList(";
- FieldSeparator FS;
+ ListSeparator FS;
MDFieldPrinter Printer(Out, WriterCtx);
for (Metadata *Arg : N->getArgs()) {
Out << FS;
@@ -3073,15 +3039,11 @@ void AssemblyWriter::writeOperandBundles(const CallBase *Call) {
Out << " [ ";
- bool FirstBundle = true;
+ ListSeparator LS;
for (unsigned i = 0, e = Call->getNumOperandBundles(); i != e; ++i) {
OperandBundleUse BU = Call->getOperandBundleAt(i);
- if (!FirstBundle)
- Out << ", ";
- FirstBundle = false;
-
- Out << '"';
+ Out << LS << '"';
printEscapedString(BU.getTagName(), Out);
Out << '"';
@@ -3229,7 +3191,7 @@ void AssemblyWriter::printModuleSummaryIndex() {
Out << "path: \"";
printEscapedString(ModPair.first, Out);
Out << "\", hash: (";
- FieldSeparator FS;
+ ListSeparator FS;
for (auto Hash : ModPair.second)
Out << FS << Hash;
Out << "))\n";
@@ -3347,7 +3309,7 @@ void AssemblyWriter::printTypeIdSummary(const TypeIdSummary &TIS) {
printTypeTestResolution(TIS.TTRes);
if (!TIS.WPDRes.empty()) {
Out << ", wpdResolutions: (";
- FieldSeparator FS;
+ ListSeparator FS;
for (auto &WPDRes : TIS.WPDRes) {
Out << FS;
Out << "(offset: " << WPDRes.first << ", ";
@@ -3362,7 +3324,7 @@ void AssemblyWriter::printTypeIdSummary(const TypeIdSummary &TIS) {
void AssemblyWriter::printTypeIdCompatibleVtableSummary(
const TypeIdCompatibleVtableInfo &TI) {
Out << ", summary: (";
- FieldSeparator FS;
+ ListSeparator FS;
for (auto &P : TI) {
Out << FS;
Out << "(offset: " << P.AddressPointOffset << ", ";
@@ -3374,7 +3336,7 @@ void AssemblyWriter::printTypeIdCompatibleVtableSummary(
void AssemblyWriter::printArgs(const std::vector<uint64_t> &Args) {
Out << "args: (";
- FieldSeparator FS;
+ ListSeparator FS;
for (auto arg : Args) {
Out << FS;
Out << arg;
@@ -3391,7 +3353,7 @@ void AssemblyWriter::printWPDRes(const WholeProgramDevirtResolution &WPDRes) {
if (!WPDRes.ResByArg.empty()) {
Out << ", resByArg: (";
- FieldSeparator FS;
+ ListSeparator FS;
for (auto &ResByArg : WPDRes.ResByArg) {
Out << FS;
printArgs(ResByArg.first);
@@ -3451,7 +3413,7 @@ void AssemblyWriter::printGlobalVarSummary(const GlobalVarSummary *GS) {
if (!VTableFuncs.empty()) {
Out << ", vTableFuncs: (";
- FieldSeparator FS;
+ ListSeparator FS;
for (auto &P : VTableFuncs) {
Out << FS;
Out << "(virtFunc: ^" << Machine.getGUIDSlot(P.FuncVI.getGUID())
@@ -3528,7 +3490,7 @@ void AssemblyWriter::printFunctionSummary(const FunctionSummary *FS) {
if (!FS->calls().empty()) {
Out << ", calls: (";
- FieldSeparator IFS;
+ ListSeparator IFS;
for (auto &Call : FS->calls()) {
Out << IFS;
Out << "(callee: ^" << Machine.getGUIDSlot(Call.first.getGUID());
@@ -3566,22 +3528,22 @@ void AssemblyWriter::printFunctionSummary(const FunctionSummary *FS) {
if (!FS->allocs().empty()) {
Out << ", allocs: (";
- FieldSeparator AFS;
+ ListSeparator AFS;
for (auto &AI : FS->allocs()) {
Out << AFS;
Out << "(versions: (";
- FieldSeparator VFS;
+ ListSeparator VFS;
for (auto V : AI.Versions) {
Out << VFS;
Out << AllocTypeName(V);
}
Out << "), memProf: (";
- FieldSeparator MIBFS;
+ ListSeparator MIBFS;
for (auto &MIB : AI.MIBs) {
Out << MIBFS;
Out << "(type: " << AllocTypeName((uint8_t)MIB.AllocType);
Out << ", stackIds: (";
- FieldSeparator SIDFS;
+ ListSeparator SIDFS;
for (auto Id : MIB.StackIdIndices) {
Out << SIDFS;
Out << TheIndex->getStackIdAtIndex(Id);
@@ -3595,7 +3557,7 @@ void AssemblyWriter::printFunctionSummary(const FunctionSummary *FS) {
if (!FS->callsites().empty()) {
Out << ", callsites: (";
- FieldSeparator SNFS;
+ ListSeparator SNFS;
for (auto &CI : FS->callsites()) {
Out << SNFS;
if (CI.Callee)
@@ -3603,13 +3565,13 @@ void AssemblyWriter::printFunctionSummary(const FunctionSummary *FS) {
else
Out << "(callee: null";
Out << ", clones: (";
- FieldSeparator VFS;
+ ListSeparator VFS;
for (auto V : CI.Clones) {
Out << VFS;
Out << V;
}
Out << "), stackIds: (";
- FieldSeparator SIDFS;
+ ListSeparator SIDFS;
for (auto Id : CI.StackIdIndices) {
Out << SIDFS;
Out << TheIndex->getStackIdAtIndex(Id);
@@ -3625,7 +3587,7 @@ void AssemblyWriter::printFunctionSummary(const FunctionSummary *FS) {
if (!FS->paramAccesses().empty()) {
Out << ", params: (";
- FieldSeparator IFS;
+ ListSeparator IFS;
for (auto &PS : FS->paramAccesses()) {
Out << IFS;
Out << "(param: " << PS.ParamNo;
@@ -3633,7 +3595,7 @@ void AssemblyWriter::printFunctionSummary(const FunctionSummary *FS) {
PrintRange(PS.Use);
if (!PS.Calls.empty()) {
Out << ", calls: (";
- FieldSeparator IFS;
+ ListSeparator IFS;
for (auto &Call : PS.Calls) {
Out << IFS;
Out << "(callee: ^" << Machine.getGUIDSlot(Call.Callee.getGUID());
@@ -3653,11 +3615,11 @@ void AssemblyWriter::printFunctionSummary(const FunctionSummary *FS) {
void AssemblyWriter::printTypeIdInfo(
const FunctionSummary::TypeIdInfo &TIDInfo) {
Out << ", typeIdInfo: (";
- FieldSeparator TIDFS;
+ ListSeparator TIDFS;
if (!TIDInfo.TypeTests.empty()) {
Out << TIDFS;
Out << "typeTests: (";
- FieldSeparator FS;
+ ListSeparator FS;
for (auto &GUID : TIDInfo.TypeTests) {
auto TidIter = TheIndex->typeIds().equal_range(GUID);
if (TidIter.first == TidIter.second) {
@@ -3706,7 +3668,7 @@ void AssemblyWriter::printVFuncId(const FunctionSummary::VFuncId VFId) {
return;
}
// Print all type id that correspond to this GUID.
- FieldSeparator FS;
+ ListSeparator FS;
for (const auto &[GUID, TypeIdPair] : make_range(TidIter)) {
Out << FS;
Out << "vFuncId: (";
@@ -3721,7 +3683,7 @@ void AssemblyWriter::printVFuncId(const FunctionSummary::VFuncId VFId) {
void AssemblyWriter::printNonConstVCalls(
const std::vector<FunctionSummary::VFuncId> &VCallList, const char *Tag) {
Out << Tag << ": (";
- FieldSeparator FS;
+ ListSeparator FS;
for (auto &VFuncId : VCallList) {
Out << FS;
printVFuncId(VFuncId);
@@ -3733,7 +3695,7 @@ void AssemblyWriter::printConstVCalls(
const std::vector<FunctionSummary::ConstVCall> &VCallList,
const char *Tag) {
Out << Tag << ": (";
- FieldSeparator FS;
+ ListSeparator FS;
for (auto &ConstVCall : VCallList) {
Out << FS;
Out << "(";
@@ -3774,7 +3736,7 @@ void AssemblyWriter::printSummary(const GlobalValueSummary &Summary) {
auto RefList = Summary.refs();
if (!RefList.empty()) {
Out << ", refs: (";
- FieldSeparator FS;
+ ListSeparator FS;
for (auto &Ref : RefList) {
Out << FS;
if (Ref.isReadOnly())
@@ -3797,7 +3759,7 @@ void AssemblyWriter::printSummaryInfo(unsigned Slot, const ValueInfo &VI) {
Out << "guid: " << VI.getGUID();
if (!VI.getSummaryList().empty()) {
Out << ", summaries: (";
- FieldSeparator FS;
+ ListSeparator FS;
for (auto &Summary : VI.getSummaryList()) {
Out << FS;
printSummary(*Summary);
@@ -3835,13 +3797,11 @@ void AssemblyWriter::printNamedMDNode(const NamedMDNode *NMD) {
Out << '!';
printMetadataIdentifier(NMD->getName(), Out);
Out << " = !{";
- for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
- if (i)
- Out << ", ";
-
+ ListSeparator LS;
+ for (const MDNode *Op : NMD->operands()) {
+ Out << LS;
// Write DIExpressions inline.
// FIXME: Ban DIExpressions in NamedMDNodes, they will serve no purpose.
- MDNode *Op = NMD->getOperand(i);
if (auto *Expr = dyn_cast<DIExpression>(Op)) {
writeDIExpression(Out, Expr, AsmWriterContext::getEmpty());
continue;
@@ -4192,11 +4152,10 @@ void AssemblyWriter::printFunction(const Function *F) {
// Loop over the arguments, printing them...
if (F->isDeclaration() && !IsForDebug) {
// We're only interested in the type here - don't print argument names.
+ ListSeparator LS;
for (unsigned I = 0, E = FT->getNumParams(); I != E; ++I) {
- // Insert commas as we go... the first arg doesn't get a comma
- if (I)
- Out << ", ";
- // Output type...
+ Out << LS;
+ // Output type.
TypePrinter.print(FT->getParamType(I), Out);
AttributeSet ArgAttrs = Attrs.getParamAttrs(I);
@@ -4207,10 +4166,9 @@ void AssemblyWriter::printFunction(const Function *F) {
}
} else {
// The arguments are meaningful here, print them in detail.
+ ListSeparator LS;
for (const Argument &Arg : F->args()) {
- // Insert commas as we go... the first arg doesn't get a comma
- if (Arg.getArgNo() != 0)
- Out << ", ";
+ Out << LS;
printArgument(&Arg, Attrs.getParamAttrs(Arg.getArgNo()));
}
}
@@ -4332,16 +4290,14 @@ void AssemblyWriter::printBasicBlock(const BasicBlock *BB) {
// Output predecessors for the block.
Out.PadToColumn(50);
Out << ";";
- const_pred_iterator PI = pred_begin(BB), PE = pred_end(BB);
-
- if (PI == PE) {
+ if (pred_empty(BB)) {
Out << " No predecessors!";
} else {
Out << " preds = ";
- writeOperand(*PI, false);
- for (++PI; PI != PE; ++PI) {
- Out << ", ";
- writeOperand(*PI, false);
+ ListSeparator LS;
+ for (const BasicBlock *Pred : predecessors(BB)) {
+ Out << LS;
+ writeOperand(Pred, false);
}
}
}
@@ -4520,9 +4476,9 @@ void AssemblyWriter::printInstruction(const Instruction &I) {
writeOperand(Operand, true);
Out << ", [";
+ ListSeparator LS;
for (unsigned i = 1, e = I.getNumOperands(); i != e; ++i) {
- if (i != 1)
- Out << ", ";
+ Out << LS;
writeOperand(I.getOperand(i), true);
}
Out << ']';
@@ -4531,9 +4487,9 @@ void AssemblyWriter::printInstruction(const Instruction &I) {
TypePrinter.print(I.getType(), Out);
Out << ' ';
+ ListSeparator LS;
for (unsigned op = 0, Eop = PN->getNumIncomingValues(); op < Eop; ++op) {
- if (op) Out << ", ";
- Out << "[ ";
+ Out << LS << "[ ";
writeOperand(PN->getIncomingValue(op), false); Out << ", ";
writeOperand(PN->getIncomingBlock(op), false); Out << " ]";
}
@@ -4570,12 +4526,10 @@ void AssemblyWriter::printInstruction(const Instruction &I) {
Out << " within ";
writeOperand(CatchSwitch->getParentPad(), /*PrintType=*/false);
Out << " [";
- unsigned Op = 0;
+ ListSeparator LS;
for (const BasicBlock *PadBB : CatchSwitch->handlers()) {
- if (Op > 0)
- Out << ", ";
+ Out << LS;
writeOperand(PadBB, /*PrintType=*/true);
- ++Op;
}
Out << "] unwind ";
if (const BasicBlock *UnwindDest = CatchSwitch->getUnwindDest())
@@ -4586,10 +4540,10 @@ void AssemblyWriter::printInstruction(const Instruction &I) {
Out << " within ";
writeOperand(FPI->getParentPad(), /*PrintType=*/false);
Out << " [";
- for (unsigned Op = 0, NumOps = FPI->arg_size(); Op < NumOps; ++Op) {
- if (Op > 0)
- Out << ", ";
- writeOperand(FPI->getArgOperand(Op), /*PrintType=*/true);
+ ListSeparator LS;
+ for (const Value *Op : FPI->arg_operands()) {
+ Out << LS;
+ writeOperand(Op, /*PrintType=*/true);
}
Out << ']';
} else if (isa<ReturnInst>(I) && !Operand) {
@@ -4635,9 +4589,9 @@ void AssemblyWriter::printInstruction(const Instruction &I) {
Out << ' ';
writeOperand(Operand, false);
Out << '(';
+ ListSeparator LS;
for (unsigned op = 0, Eop = CI->arg_size(); op < Eop; ++op) {
- if (op > 0)
- Out << ", ";
+ Out << LS;
writeParamOperand(CI->getArgOperand(op), PAL.getParamAttrs(op));
}
@@ -4683,9 +4637,9 @@ void AssemblyWriter::printInstruction(const Instruction &I) {
Out << ' ';
writeOperand(Operand, false);
Out << '(';
+ ListSeparator LS;
for (unsigned op = 0, Eop = II->arg_size(); op < Eop; ++op) {
- if (op)
- Out << ", ";
+ Out << LS;
writeParamOperand(II->getArgOperand(op), PAL.getParamAttrs(op));
}
@@ -4723,9 +4677,9 @@ void AssemblyWriter::printInstruction(const Instruction &I) {
Out << ' ';
writeOperand(Operand, false);
Out << '(';
+ ListSeparator ArgLS;
for (unsigned op = 0, Eop = CBI->arg_size(); op < Eop; ++op) {
- if (op)
- Out << ", ";
+ Out << ArgLS;
writeParamOperand(CBI->getArgOperand(op), PAL.getParamAttrs(op));
}
@@ -4738,10 +4692,10 @@ void AssemblyWriter::printInstruction(const Instruction &I) {
Out << "\n to ";
writeOperand(CBI->getDefaultDest(), true);
Out << " [";
- for (unsigned i = 0, e = CBI->getNumIndirectDests(); i != e; ++i) {
- if (i != 0)
- Out << ", ";
- writeOperand(CBI->getIndirectDest(i), true);
+ ListSeparator DestLS;
+ for (const BasicBlock *Dest : CBI->getIndirectDests()) {
+ Out << DestLS;
+ writeOperand(Dest, true);
}
Out << ']';
} else if (const AllocaInst *AI = dyn_cast<AllocaInst>(&I)) {
@@ -4824,9 +4778,10 @@ void AssemblyWriter::printInstruction(const Instruction &I) {
}
Out << ' ';
- for (unsigned i = 0, E = I.getNumOperands(); i != E; ++i) {
- if (i) Out << ", ";
- writeOperand(I.getOperand(i), PrintAllTypes);
+ ListSeparator LS;
+ for (const Value *Op : I.operands()) {
+ Out << LS;
+ writeOperand(Op, PrintAllTypes);
}
}