Line data Source code
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 :
22 291074 : void detail::PtrUseVisitorBase::enqueueUsers(Instruction &I) {
23 1128593 : for (Use &U : I.uses()) {
24 837519 : if (VisitedUses.insert(&U).second) {
25 : UseToVisit NewU = {
26 837499 : UseToVisit::UseAndIsOffsetKnownPair(&U, IsOffsetKnown),
27 837499 : Offset
28 : };
29 837499 : Worklist.push_back(std::move(NewU));
30 : }
31 : }
32 291074 : }
33 :
34 35031 : bool detail::PtrUseVisitorBase::adjustOffsetForGEP(GetElementPtrInst &GEPI) {
35 35031 : if (!IsOffsetKnown)
36 : return false;
37 :
38 35017 : return GEPI.accumulateConstantOffset(DL, Offset);
39 : }
|