64 auto i = offsetData_.find(pop.
poId());
65 if (i != offsetData_.end()) {
66 return i->second.first != INT_MAX;
69 bool analyzable = getStackOffset(ddg, pop, tmp, tmp2, sp_);
71 offsetData_[pop.
poId()] = std::make_pair(tmp,tmp2);
74 offsetData_[pop.
poId()] = std::make_pair(INT_MAX,tmp2);
92 long& stackOffset,
long& loopIncrement,
const TCEString& sp) {
99 const MoveNode* mn = addressOperandMove(pop);
104 findTwoPartAddressOperands(pop);
106 case TwoPartAddressOperandDetection::ADD:
109 case TwoPartAddressOperandDetection::SUB:
112 case TwoPartAddressOperandDetection::NOT_FOUND:
118 if (addr1Set.
count() != 1) {
121 if (addr2Set.
count() != 1) {
129 stackOffset += (offsetMul * offsetVal);
135 stackOffset += (offsetMul * offsetVal);
140 while(mn != NULL && mn->
isMove()) {
149 if (prevSrc == NULL) {
153 if (!findIncrement(*loopSrc, loopIncrement)) {
160 const MoveNode* incrementInput = findIncrement(*mn, stackOffset);
188 auto i = offsetData_.find(pop1.
poId());
189 if (i != offsetData_.end()) {
190 if (i->second.first != INT_MAX) {
191 addr1 = i->second.first;
192 incr1 = i->second.second;
194 return ALIAS_UNKNOWN;
197 if (!(getStackOffset(ddg, pop1, addr1, incr1, sp_))) {
198 offsetData_[pop1.
poId()] = std::make_pair(INT_MAX, incr1);
199 return ALIAS_UNKNOWN;
201 offsetData_[pop1.
poId()] = std::make_pair(addr1, incr1);
205 i = offsetData_.find(pop2.
poId());
206 if (i != offsetData_.end()) {
207 if (i->second.first != INT_MAX) {
208 addr2 = i->second.first;
209 incr2 = i->second.second;
211 return ALIAS_UNKNOWN;
214 if (!(getStackOffset(ddg, pop2, addr2, incr2, sp_))) {
215 offsetData_[pop2.
poId()] = std::make_pair(INT_MAX, incr2);
216 return ALIAS_UNKNOWN;
218 offsetData_[pop2.
poId()] = std::make_pair(addr2, incr2);
223 if (incr1 != incr2) {
224 return ALIAS_UNKNOWN;
228 return compareIndeces(addr1, addr2, pop1, pop2);
230 return compareIndeces(addr1 + incr1, addr2, pop1, pop2);