1 //===- PtrUseVisitor.cpp - InstVisitors over a pointers uses --------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 /// \file 11 /// Implementation of the pointer use visitors. 12 // 13 //===----------------------------------------------------------------------===// 14 15 #include "llvm/Analysis/PtrUseVisitor.h" 16 #include "llvm/IR/Instruction.h" 17 #include "llvm/IR/Instructions.h" 18 #include <algorithm> 19 20 using namespace llvm; 21 enqueueUsers(Instruction & I)22void detail::PtrUseVisitorBase::enqueueUsers(Instruction &I) { 23 for (Use &U : I.uses()) { 24 if (VisitedUses.insert(&U).second) { 25 UseToVisit NewU = { 26 UseToVisit::UseAndIsOffsetKnownPair(&U, IsOffsetKnown), 27 Offset 28 }; 29 Worklist.push_back(std::move(NewU)); 30 } 31 } 32 } 33 adjustOffsetForGEP(GetElementPtrInst & GEPI)34bool detail::PtrUseVisitorBase::adjustOffsetForGEP(GetElementPtrInst &GEPI) { 35 if (!IsOffsetKnown) 36 return false; 37 38 return GEPI.accumulateConstantOffset(DL, Offset); 39 } 40