• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)22 void 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)34 bool detail::PtrUseVisitorBase::adjustOffsetForGEP(GetElementPtrInst &GEPI) {
35   if (!IsOffsetKnown)
36     return false;
37 
38   return GEPI.accumulateConstantOffset(DL, Offset);
39 }
40