[AMDGPU] Use std::make_tuple to make some toolchains happy again
authorBjorn Pettersson <bjorn.a.pettersson@ericsson.com>
Fri, 20 Sep 2019 12:13:12 +0000 (12:13 +0000)
committerBjorn Pettersson <bjorn.a.pettersson@ericsson.com>
Fri, 20 Sep 2019 12:13:12 +0000 (12:13 +0000)
My toolchain stopped working (LLVM 8.0 , libstdc++ 5.4.0) after
r372338.

The same problem was seen in clang-cuda-build buildbots:

clang-cuda-build/llvm/lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp:763:12:
error: chosen constructor is explicit in copy-initialization
    return {Reg, 0, nullptr};
           ^~~~~~~~~~~~~~~~~
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/tuple:479:19:
note: explicit constructor declared here
        constexpr tuple(_UElements&&... __elements)
                  ^

This commit adds explicit calls to std::make_tuple to work around
the problem.

llvm-svn: 372384

llvm/lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp

index 73486b9..103ca2a 100644 (file)
@@ -760,7 +760,7 @@ static std::tuple<Register, unsigned, MachineInstr *>
 getBaseWithConstantOffset(MachineRegisterInfo &MRI, Register Reg) {
   MachineInstr *Def = getDefIgnoringCopies(Reg, MRI);
   if (!Def)
-    return {Reg, 0, nullptr};
+    return std::make_tuple(Reg, 0, nullptr);
 
   if (Def->getOpcode() == AMDGPU::G_CONSTANT) {
     unsigned Offset;
@@ -770,21 +770,21 @@ getBaseWithConstantOffset(MachineRegisterInfo &MRI, Register Reg) {
     else
       Offset = Op.getCImm()->getZExtValue();
 
-    return {Register(), Offset, Def};
+    return std::make_tuple(Register(), Offset, Def);
   }
 
   int64_t Offset;
   if (Def->getOpcode() == AMDGPU::G_ADD) {
     // TODO: Handle G_OR used for add case
     if (mi_match(Def->getOperand(1).getReg(), MRI, m_ICst(Offset)))
-      return {Def->getOperand(0).getReg(), Offset, Def};
+      return std::make_tuple(Def->getOperand(0).getReg(), Offset, Def);
 
     // FIXME: matcher should ignore copies
     if (mi_match(Def->getOperand(1).getReg(), MRI, m_Copy(m_ICst(Offset))))
-      return {Def->getOperand(0).getReg(), Offset, Def};
+      return std::make_tuple(Def->getOperand(0).getReg(), Offset, Def);
   }
 
-  return {Reg, 0, Def};
+  return std::make_tuple(Reg, 0, Def);
 }
 
 static unsigned getBufferStoreOpcode(LLT Ty,
@@ -931,7 +931,7 @@ AMDGPUInstructionSelector::splitBufferOffsets(MachineIRBuilder &B,
     B.setInsertPt(OldMBB, OldInsPt);
   }
 
-  return {BaseReg, ImmOffset, TotalConstOffset};
+  return std::make_tuple(BaseReg, ImmOffset, TotalConstOffset);
 }
 
 bool AMDGPUInstructionSelector::selectStoreIntrinsic(MachineInstr &MI,