@@ -2278,7 +2278,7 @@ class PromotableInstructions {
2278
2278
SmallVectorImpl<AvailableValue> &allAvailableValues;
2279
2279
2280
2280
SmallVector<SILInstruction *> promotableInsts;
2281
- SmallVector<unsigned , 8 > availableValueStartOffsets ;
2281
+ SmallVector<std::pair< unsigned , unsigned >, 8 > availableValueOffsets ;
2282
2282
2283
2283
public:
2284
2284
PromotableInstructions (SmallVectorImpl<AvailableValue> &allAvailableValues)
@@ -2296,9 +2296,12 @@ class PromotableInstructions {
2296
2296
initializeAvailableValues (SILInstruction *instruction,
2297
2297
SmallVectorImpl<AvailableValue> &&availableValues) {
2298
2298
2299
- unsigned nextInstIdx = availableValueStartOffsets .size ();
2299
+ unsigned nextInstIdx = availableValueOffsets .size ();
2300
2300
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});
2302
2305
std::move (availableValues.begin (), availableValues.end (),
2303
2306
std::back_inserter (allAvailableValues));
2304
2307
return nextInstIdx;
@@ -2311,11 +2314,8 @@ class PromotableInstructions {
2311
2314
}
2312
2315
2313
2316
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];
2319
2319
return {allAvailableValues.begin () + startOffset,
2320
2320
allAvailableValues.begin () + endOffset};
2321
2321
}
0 commit comments