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 Andricvoid 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 Andricbool 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