aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Analysis/BitSetUtils.cpp
diff options
context:
space:
mode:
authorPeter Collingbourne <peter@pcc.me.uk>2016-05-10 17:54:43 +0000
committerPeter Collingbourne <peter@pcc.me.uk>2016-05-10 17:54:43 +0000
commit4d41cb6cc6903978377c871449b6344e80197823 (patch)
treea0e3f5e3d3d231a0a1d7b15988351caedc86aaa0 /llvm/lib/Analysis/BitSetUtils.cpp
parentb6211a0b4f9a6f9a15b86a62594385771500c5d9 (diff)
downloadllvm-4d41cb6cc6903978377c871449b6344e80197823.zip
llvm-4d41cb6cc6903978377c871449b6344e80197823.tar.gz
llvm-4d41cb6cc6903978377c871449b6344e80197823.tar.bz2
Revert r269081 and r269082 while I try to find the right incantation to fix MSVC build.
llvm-svn: 269091
Diffstat (limited to 'llvm/lib/Analysis/BitSetUtils.cpp')
-rw-r--r--llvm/lib/Analysis/BitSetUtils.cpp82
1 files changed, 0 insertions, 82 deletions
diff --git a/llvm/lib/Analysis/BitSetUtils.cpp b/llvm/lib/Analysis/BitSetUtils.cpp
deleted file mode 100644
index d83dca6..0000000
--- a/llvm/lib/Analysis/BitSetUtils.cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-//===- BitSetUtils.cpp - Utilities related to pointer bitsets -------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file contains functions that make it easier to manipulate bitsets for
-// devirtualization.
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm/Analysis/BitSetUtils.h"
-#include "llvm/IR/Intrinsics.h"
-#include "llvm/IR/Module.h"
-
-using namespace llvm;
-
-// Search for virtual calls that call FPtr and add them to DevirtCalls.
-static void
-findCallsAtConstantOffset(SmallVectorImpl<DevirtCallSite> &DevirtCalls,
- Value *FPtr, uint64_t Offset) {
- for (const Use &U : FPtr->uses()) {
- Value *User = U.getUser();
- if (isa<BitCastInst>(User)) {
- findCallsAtConstantOffset(DevirtCalls, User, Offset);
- } else if (auto CI = dyn_cast<CallInst>(User)) {
- DevirtCalls.push_back({Offset, CI});
- } else if (auto II = dyn_cast<InvokeInst>(User)) {
- DevirtCalls.push_back({Offset, II});
- }
- }
-}
-
-// Search for virtual calls that load from VPtr and add them to DevirtCalls.
-static void
-findLoadCallsAtConstantOffset(Module *M,
- SmallVectorImpl<DevirtCallSite> &DevirtCalls,
- Value *VPtr, uint64_t Offset) {
- for (const Use &U : VPtr->uses()) {
- Value *User = U.getUser();
- if (isa<BitCastInst>(User)) {
- findLoadCallsAtConstantOffset(M, DevirtCalls, User, Offset);
- } else if (isa<LoadInst>(User)) {
- findCallsAtConstantOffset(DevirtCalls, User, Offset);
- } else if (auto GEP = dyn_cast<GetElementPtrInst>(User)) {
- // Take into account the GEP offset.
- if (VPtr == GEP->getPointerOperand() && GEP->hasAllConstantIndices()) {
- SmallVector<Value *, 8> Indices(GEP->op_begin() + 1, GEP->op_end());
- uint64_t GEPOffset = M->getDataLayout().getIndexedOffsetInType(
- GEP->getSourceElementType(), Indices);
- findLoadCallsAtConstantOffset(M, DevirtCalls, User, Offset + GEPOffset);
- }
- }
- }
-}
-
-void llvm::findDevirtualizableCalls(
- SmallVectorImpl<DevirtCallSite> &DevirtCalls,
- SmallVectorImpl<CallInst *> &Assumes, CallInst *CI) {
- assert(CI->getCalledFunction()->getIntrinsicID() == Intrinsic::bitset_test);
-
- Module *M = CI->getParent()->getParent()->getParent();
-
- // Find llvm.assume intrinsics for this llvm.bitset.test call.
- for (const Use &CIU : CI->uses()) {
- auto AssumeCI = dyn_cast<CallInst>(CIU.getUser());
- if (AssumeCI) {
- Function *F = AssumeCI->getCalledFunction();
- if (F && F->getIntrinsicID() == Intrinsic::assume)
- Assumes.push_back(AssumeCI);
- }
- }
-
- // If we found any, search for virtual calls based on %p and add them to
- // DevirtCalls.
- if (!Assumes.empty())
- findLoadCallsAtConstantOffset(M, DevirtCalls,
- CI->getArgOperand(0)->stripPointerCasts(), 0);
-}