From: Aditya Nandakumar Date: Wed, 26 Jul 2017 19:58:03 +0000 (+0000) Subject: [GISel]: Avoid zero length array when building Instrs that don't have X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d5413e8a8f6b50b5b060cdf6670efa62dc40d5c5;p=llvm [GISel]: Avoid zero length array when building Instrs that don't have uses. Also splitting the buildSources part allows more overloads such as adding MachineOperands directly in the arguments for buildInstr. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309163 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h b/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h index 85e6fef1f3c..9b598491c0b 100644 --- a/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h +++ b/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h @@ -70,12 +70,20 @@ class MachineIRBuilder { return getMF().getRegInfo().createVirtualRegister(RC); } - unsigned getRegFromArg(unsigned Reg) { return Reg; } + void addUseFromArg(MachineInstrBuilder &MIB, unsigned Reg) { + MIB.addUse(Reg); + } - unsigned getRegFromArg(const MachineInstrBuilder &MIB) { - return MIB->getOperand(0).getReg(); + void addUseFromArg(MachineInstrBuilder &MIB, const MachineInstrBuilder &UseMIB) { + MIB.addUse(UseMIB->getOperand(0).getReg()); } + void addUsesFromArgs(MachineInstrBuilder &MIB) { } + template + void addUsesFromArgs(MachineInstrBuilder &MIB, UseArgTy &&Arg1, UseArgsTy &&... Args) { + addUseFromArg(MIB, Arg1); + addUsesFromArgs(std::forward(Args)...); + } public: /// Getter for the function we currently build. MachineFunction &getMF() { @@ -146,9 +154,7 @@ public: MachineInstrBuilder buildInstr(unsigned Opc, DstTy &&Ty, UseArgsTy &&... Args) { auto MIB = buildInstr(Opc).addDef(getDestFromArg(Ty)); - unsigned It[] = {(getRegFromArg(Args))...}; - for (const auto &i : It) - MIB.addUse(i); + addUsesFromArgs(MIB, std::forward(Args)...); return MIB; }