brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.7 KiB · d34a3c6 Raw
46 lines · cpp
1//===- ObjCARCAnalysisUtils.cpp -------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// This file implements common infrastructure for libLLVMObjCARCOpts.a, which10// implements several scalar transformations over the LLVM intermediate11// representation, including the C bindings for that library.12//13//===----------------------------------------------------------------------===//14 15#include "llvm/Analysis/ObjCARCAnalysisUtils.h"16#include "llvm/Analysis/AliasAnalysis.h"17#include "llvm/Support/CommandLine.h"18 19using namespace llvm;20using namespace llvm::objcarc;21 22/// A handy option to enable/disable all ARC Optimizations.23bool llvm::objcarc::EnableARCOpts;24static cl::opt<bool, true> EnableARCOptimizations(25    "enable-objc-arc-opts", cl::desc("enable/disable all ARC Optimizations"),26    cl::location(EnableARCOpts), cl::init(true), cl::Hidden);27 28bool llvm::objcarc::IsPotentialRetainableObjPtr(const Value *Op,29                                                AAResults &AA) {30  // First make the rudimentary check.31  if (!IsPotentialRetainableObjPtr(Op))32    return false;33 34  // Objects in constant memory are not reference-counted.35  if (AA.pointsToConstantMemory(Op))36    return false;37 38  // Pointers in constant memory are not pointing to reference-counted objects.39  if (const LoadInst *LI = dyn_cast<LoadInst>(Op))40    if (AA.pointsToConstantMemory(LI->getPointerOperand()))41      return false;42 43  // Otherwise assume the worst.44  return true;45}46