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