void RValue::extractElements(SmallVectorImpl<RValue> &elements) && { assert(isComplete() && "rvalue is not complete"); CanTupleType tupleTy = dyn_cast<TupleType>(type); if (!tupleTy) { unsigned to = getRValueSize(type); assert(to == values.size()); // We use push_back instead of emplace_back since emplace_back can not // invoke the private constructor we are attempting to invoke. elements.push_back({nullptr, llvm::makeArrayRef(values).slice(0, to), type}); makeUsed(); return; } unsigned from = 0; for (auto eltType : tupleTy.getElementTypes()) { unsigned to = from + getRValueSize(eltType); // We use push_back instead of emplace_back since emplace_back can not // invoke the private constructor we are attempting to invoke. elements.push_back({nullptr, llvm::makeArrayRef(values).slice(from, to - from), eltType}); from = to; } assert(from == values.size()); makeUsed(); }
void RValue::extractElements(SmallVectorImpl<RValue> &elements) && { assert(isComplete() && "rvalue is not complete"); CanTupleType tupleTy = dyn_cast<TupleType>(type); if (!tupleTy) { unsigned to = getRValueSize(type); assert(to == values.size()); elements.push_back({llvm::makeArrayRef(values).slice(0, to), type}); makeUsed(); return; } unsigned from = 0; for (auto eltType : tupleTy.getElementTypes()) { unsigned to = from + getRValueSize(eltType); elements.push_back({llvm::makeArrayRef(values).slice(from, to - from), eltType}); from = to; } assert(from == values.size()); makeUsed(); }