Index: lib/CodeGen/GlobalISel/IRTranslator.cpp =================================================================== --- lib/CodeGen/GlobalISel/IRTranslator.cpp +++ lib/CodeGen/GlobalISel/IRTranslator.cpp @@ -1586,7 +1586,9 @@ for (auto &VArg : VRegArgs) { // If the argument is an unsplit scalar then don't use unpackRegs to avoid // creating redundant copies. - if (!valueIsSplit(*ArgIt, VMap.getOffsets(*ArgIt))) { + // If Offsets for a type is already stored, do not supply it. + auto *Offsets = VMap.getOffsets(*ArgIt); + if (!valueIsSplit(*ArgIt, Offsets->empty() ? Offsets : nullptr)) { auto &VRegs = *VMap.getVRegs(cast(*ArgIt)); assert(VRegs.empty() && "VRegs already populated?"); VRegs.push_back(VArg);