@@ -2278,7 +2278,7 @@ class PromotableInstructions {
22782278 SmallVectorImpl<AvailableValue> &allAvailableValues;
22792279
22802280 SmallVector<SILInstruction *> promotableInsts;
2281- SmallVector<unsigned , 8 > availableValueStartOffsets ;
2281+ SmallVector<std::pair< unsigned , unsigned >, 8 > availableValueOffsets ;
22822282
22832283public:
22842284 PromotableInstructions (SmallVectorImpl<AvailableValue> &allAvailableValues)
@@ -2296,9 +2296,12 @@ class PromotableInstructions {
22962296 initializeAvailableValues (SILInstruction *instruction,
22972297 SmallVectorImpl<AvailableValue> &&availableValues) {
22982298
2299- unsigned nextInstIdx = availableValueStartOffsets .size ();
2299+ unsigned nextInstIdx = availableValueOffsets .size ();
23002300 assert (instruction == promotableInsts[nextInstIdx]);
2301- availableValueStartOffsets.push_back (allAvailableValues.size ());
2301+
2302+ unsigned startOffset = allAvailableValues.size ();
2303+ unsigned endOffset = startOffset + availableValues.size ();
2304+ availableValueOffsets.push_back ({startOffset, endOffset});
23022305 std::move (availableValues.begin (), availableValues.end (),
23032306 std::back_inserter (allAvailableValues));
23042307 return nextInstIdx;
@@ -2311,11 +2314,8 @@ class PromotableInstructions {
23112314 }
23122315
23132316 MutableArrayRef<AvailableValue> mutableAvailableValues (unsigned index) {
2314- unsigned startOffset = availableValueStartOffsets[index];
2315- unsigned endOffset = allAvailableValues.size ();
2316- if (index + 1 < size ()) {
2317- endOffset = availableValueStartOffsets[index + 1 ];
2318- }
2317+ unsigned startOffset, endOffset;
2318+ std::tie (startOffset, endOffset) = availableValueOffsets[index];
23192319 return {allAvailableValues.begin () + startOffset,
23202320 allAvailableValues.begin () + endOffset};
23212321 }
0 commit comments