@@ -1143,7 +1143,13 @@ struct AAPointerInfoImpl
11431143 (reachesReturn()
11441144 ? (" (returned:" +
11451145 join(map_range(ReturnedOffsets,
1146- [](int64_t O) { return std::to_string(O); }),
1146+ [](AA::RangeTy O) {
1147+ return std::string("(") +
1148+ std::to_string(O.Offset) +
1149+ std::string(",") +
1150+ std::to_string(O.Size) +
1151+ std::string(")");
1152+ }),
11471153 ", ") +
11481154 ")")
11491155 : "");
@@ -1160,26 +1166,27 @@ struct AAPointerInfoImpl
11601166 bool reachesReturn() const override {
11611167 return !ReturnedOffsets.isUnassigned();
11621168 }
1163- void addReturnedOffsetsTo(OffsetInfo &OI) const override {
1169+ void addReturnedOffsetsTo(OffsetInfo &OI, Value &Origin ) const override {
11641170 if (ReturnedOffsets.isUnknown()) {
1165- OI.setUnknown();
1171+ OI.setUnknown(Origin );
11661172 return;
11671173 }
11681174
11691175 OffsetInfo MergedOI;
11701176 for (auto Offset : ReturnedOffsets) {
11711177 OffsetInfo TmpOI = OI;
1172- TmpOI.addToAll(Offset);
1178+ TmpOI.addToAll(Offset.Offset );
11731179 MergedOI.merge(TmpOI);
11741180 }
11751181 OI = std::move(MergedOI);
11761182 }
11771183
1178- ChangeStatus setReachesReturn(const OffsetInfo &ReachedReturnedOffsets) {
1184+ ChangeStatus setReachesReturn(const OffsetInfo &ReachedReturnedOffsets,
1185+ Value &V) {
11791186 if (ReturnedOffsets.isUnknown())
11801187 return ChangeStatus::UNCHANGED;
11811188 if (ReachedReturnedOffsets.isUnknown()) {
1182- ReturnedOffsets.setUnknown();
1189+ ReturnedOffsets.setUnknown(V );
11831190 return ChangeStatus::CHANGED;
11841191 }
11851192 if (ReturnedOffsets.merge(ReachedReturnedOffsets))
@@ -1486,7 +1493,7 @@ struct AAPointerInfoImpl
14861493 ChangeStatus Changed = ChangeStatus::UNCHANGED;
14871494 const auto &OtherAAImpl = static_cast<const AAPointerInfoImpl &>(OtherAA);
14881495 bool IsByval = OtherAAImpl.getAssociatedArgument()->hasByValAttr();
1489- Changed |= setReachesReturn(OtherAAImpl.ReturnedOffsets);
1496+ Changed |= setReachesReturn(OtherAAImpl.ReturnedOffsets, CB );
14901497
14911498 // Combine the accesses bin by bin.
14921499 const auto &State = OtherAAImpl.getState();
@@ -1829,7 +1836,7 @@ ChangeStatus AAPointerInfoFloating::updateImpl(Attributor &A) {
18291836 if (auto *RI = dyn_cast<ReturnInst>(Usr)) {
18301837 if (RI->getFunction() == getAssociatedFunction()) {
18311838 auto &PtrOI = OffsetInfoMap[CurPtr];
1832- Changed |= setReachesReturn(PtrOI);
1839+ Changed |= setReachesReturn(PtrOI, *CurPtr );
18331840 return true;
18341841 }
18351842 return false;
@@ -2087,7 +2094,7 @@ ChangeStatus AAPointerInfoFloating::updateImpl(Attributor &A) {
20872094 if (!CSRetPI)
20882095 return false;
20892096 OffsetInfo OI = OffsetInfoMap[CurPtr];
2090- CSArgPI->addReturnedOffsetsTo(OI);
2097+ CSArgPI->addReturnedOffsetsTo(OI, *CurPtr );
20912098 Changed =
20922099 translateAndAddState(A, *CSRetPI, OI, *CB, IsRetMustAcc) | Changed;
20932100 return isValidState();
@@ -13703,8 +13710,9 @@ struct AAAllocationInfoImpl : public AAAllocationInfo {
1370313710 [](DenseMap<Instruction *, DenseMap<AA::RangeTy, AA::RangeTy>> &Map,
1370413711 Instruction *LocalInst, const AA::RangeTy &OldRange,
1370513712 const AA::RangeTy &NewRange) {
13713+ auto [It, Inserted] = Map.try_emplace(LocalInst);
1370613714 DenseMap<AA::RangeTy, AA::RangeTy> &NewBinsForInstruction =
13707- Map.getOrInsertDefault(LocalInst) ;
13715+ It->second ;
1370813716
1370913717 NewBinsForInstruction.insert(std::make_pair(OldRange, NewRange));
1371013718 };
@@ -14036,11 +14044,12 @@ struct AAAllocationInfoImpl : public AAAllocationInfo {
1403614044 if (OldOffset == NewComputedOffset)
1403714045 return false;
1403814046
14039- AA::RangeTy &NewRange = NewComputedOffsets.getOrInsertDefault(OldRange);
14047+ auto [It, Inserted] = NewComputedOffsets.try_emplace(OldRange);
14048+ AA::RangeTy &NewRange = It->second;
1404014049 NewRange.Offset = NewComputedOffset;
1404114050 NewRange.Size = Size;
1404214051
14043- return true ;
14052+ return Inserted ;
1404414053 }
1404514054
1404614055 // A helper function to check if simplified values exists for the current
0 commit comments