Index: llvm/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h =================================================================== --- llvm/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h +++ llvm/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h @@ -788,6 +788,8 @@ /// /// \return a MachineInstrBuilder for the newly created instruction. MachineInstrBuilder buildMerge(const DstOp &Res, ArrayRef Ops); + MachineInstrBuilder buildMerge(const DstOp &Res, + std::initializer_list Ops); /// Build and insert \p Res0, ... = G_UNMERGE_VALUES \p Op /// Index: llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp =================================================================== --- llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp +++ llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp @@ -3393,7 +3393,7 @@ } } - MIRBuilder.buildMerge(MI.getOperand(0), {Lo.getReg(), Hi.getReg()}); + MIRBuilder.buildMerge(MI.getOperand(0), {Lo, Hi}); MI.eraseFromParent(); return Legalized; @@ -3994,7 +3994,7 @@ auto HiCTLZ = B.buildCTLZ_ZERO_UNDEF(NarrowTy, UnmergeSrc.getReg(1)); auto LoOut = B.buildSelect(NarrowTy, HiIsZero, HiIsZeroCTLZ, HiCTLZ); - B.buildMerge(MI.getOperand(0), {LoOut.getReg(0), C_0.getReg(0)}); + B.buildMerge(MI.getOperand(0), {LoOut, C_0}); MI.eraseFromParent(); return Legalized; @@ -4025,7 +4025,7 @@ auto LoCTTZ = B.buildCTTZ_ZERO_UNDEF(NarrowTy, UnmergeSrc.getReg(0)); auto LoOut = B.buildSelect(NarrowTy, LoIsZero, LoIsZeroCTTZ, LoCTTZ); - B.buildMerge(MI.getOperand(0), {LoOut.getReg(0), C_0.getReg(0)}); + B.buildMerge(MI.getOperand(0), {LoOut, C_0}); MI.eraseFromParent(); return Legalized; Index: llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp =================================================================== --- llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp +++ llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp @@ -579,6 +579,13 @@ return buildInstr(TargetOpcode::G_MERGE_VALUES, Res, TmpVec); } +MachineInstrBuilder +MachineIRBuilder::buildMerge(const DstOp &Res, + std::initializer_list Ops) { + assert(Ops.size() > 1); + return buildInstr(TargetOpcode::G_MERGE_VALUES, Res, Ops); +} + MachineInstrBuilder MachineIRBuilder::buildUnmerge(ArrayRef Res, const SrcOp &Op) { // Unfortunately to convert from ArrayRef to ArrayRef, Index: llvm/lib/Target/AArch64/AArch64CallLowering.cpp =================================================================== --- llvm/lib/Target/AArch64/AArch64CallLowering.cpp +++ llvm/lib/Target/AArch64/AArch64CallLowering.cpp @@ -316,8 +316,7 @@ } auto Undef = MIRBuilder.buildUndef({OldLLT}); CurVReg = - MIRBuilder.buildMerge({NewLLT}, {CurVReg, Undef.getReg(0)}) - .getReg(0); + MIRBuilder.buildMerge({NewLLT}, {CurVReg, Undef}).getReg(0); } else { // Just do a vector extend. CurVReg = MIRBuilder.buildInstr(ExtendOp, {NewLLT}, {CurVReg}) Index: llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp =================================================================== --- llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp +++ llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp @@ -1379,7 +1379,7 @@ // extra ptrtoint would be kind of pointless. auto HighAddr = B.buildConstant( LLT::pointer(AMDGPUAS::CONSTANT_ADDRESS_32BIT, 32), AddrHiVal); - B.buildMerge(Dst, {Src, HighAddr.getReg(0)}); + B.buildMerge(Dst, {Src, HighAddr}); MI.eraseFromParent(); return true; } @@ -1536,7 +1536,7 @@ const auto Zero32 = B.buildConstant(S32, 0); // Extend back to 64-bits. - auto SignBit64 = B.buildMerge(S64, {Zero32.getReg(0), SignBit.getReg(0)}); + auto SignBit64 = B.buildMerge(S64, {Zero32, SignBit}); auto Shr = B.buildAShr(S64, FractMask, Exp); auto Not = B.buildNot(S64, Shr); @@ -1613,7 +1613,7 @@ B.buildFPTOUI(S32, FloorMul); auto Lo = B.buildFPTOUI(S32, Fma); - B.buildMerge(Dst, { Lo.getReg(0), Hi.getReg(0) }); + B.buildMerge(Dst, { Lo, Hi }); MI.eraseFromParent(); return true; Index: llvm/unittests/CodeGen/GlobalISel/LegalizerHelperTest.cpp =================================================================== --- llvm/unittests/CodeGen/GlobalISel/LegalizerHelperTest.cpp +++ llvm/unittests/CodeGen/GlobalISel/LegalizerHelperTest.cpp @@ -1037,7 +1037,7 @@ auto Lo = B.buildTrunc(S32, Copies[0]); auto Hi = B.buildTrunc(S32, Copies[1]); - auto Merge = B.buildMerge(P0, {Lo.getReg(0), Hi.getReg(0)}); + auto Merge = B.buildMerge(P0, {Lo, Hi}); EXPECT_EQ(LegalizerHelper::LegalizeResult::Legalized, Helper.widenScalar(*Merge, 1, S64));