]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/lib/Analysis/PtrUseVisitor.cpp
Merge libc++ trunk r338150, and resolve conflicts.
[FreeBSD/FreeBSD.git] / contrib / llvm / lib / Analysis / PtrUseVisitor.cpp
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 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
34 bool detail::PtrUseVisitorBase::adjustOffsetForGEP(GetElementPtrInst &GEPI) {
35   if (!IsOffsetKnown)
36     return false;
37
38   return GEPI.accumulateConstantOffset(DL, Offset);
39 }