1139f7f9bSDimitry Andric //===- PtrUseVisitor.cpp - InstVisitors over a pointers uses --------------===//
2139f7f9bSDimitry Andric //
3139f7f9bSDimitry Andric //                     The LLVM Compiler Infrastructure
4139f7f9bSDimitry Andric //
5139f7f9bSDimitry Andric // This file is distributed under the University of Illinois Open Source
6139f7f9bSDimitry Andric // License. See LICENSE.TXT for details.
7139f7f9bSDimitry Andric //
8139f7f9bSDimitry Andric //===----------------------------------------------------------------------===//
9*2cab237bSDimitry Andric //
10139f7f9bSDimitry Andric /// \file
11139f7f9bSDimitry Andric /// Implementation of the pointer use visitors.
12*2cab237bSDimitry Andric //
13139f7f9bSDimitry Andric //===----------------------------------------------------------------------===//
14139f7f9bSDimitry Andric 
15139f7f9bSDimitry Andric #include "llvm/Analysis/PtrUseVisitor.h"
16*2cab237bSDimitry Andric #include "llvm/IR/Instruction.h"
17*2cab237bSDimitry Andric #include "llvm/IR/Instructions.h"
18*2cab237bSDimitry Andric #include <algorithm>
19139f7f9bSDimitry Andric 
20139f7f9bSDimitry Andric using namespace llvm;
21139f7f9bSDimitry Andric 
enqueueUsers(Instruction & I)22139f7f9bSDimitry Andric void detail::PtrUseVisitorBase::enqueueUsers(Instruction &I) {
2391bc56edSDimitry Andric   for (Use &U : I.uses()) {
2439d628a0SDimitry Andric     if (VisitedUses.insert(&U).second) {
25139f7f9bSDimitry Andric       UseToVisit NewU = {
2691bc56edSDimitry Andric         UseToVisit::UseAndIsOffsetKnownPair(&U, IsOffsetKnown),
27139f7f9bSDimitry Andric         Offset
28139f7f9bSDimitry Andric       };
2991bc56edSDimitry Andric       Worklist.push_back(std::move(NewU));
30139f7f9bSDimitry Andric     }
31139f7f9bSDimitry Andric   }
32139f7f9bSDimitry Andric }
33139f7f9bSDimitry Andric 
adjustOffsetForGEP(GetElementPtrInst & GEPI)34139f7f9bSDimitry Andric bool detail::PtrUseVisitorBase::adjustOffsetForGEP(GetElementPtrInst &GEPI) {
35139f7f9bSDimitry Andric   if (!IsOffsetKnown)
36139f7f9bSDimitry Andric     return false;
37139f7f9bSDimitry Andric 
38139f7f9bSDimitry Andric   return GEPI.accumulateConstantOffset(DL, Offset);
39139f7f9bSDimitry Andric }
40