summaryrefslogtreecommitdiffstats
path: root/gnu/llvm/lib/Transforms/Scalar/LowerGuardIntrinsic.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/llvm/lib/Transforms/Scalar/LowerGuardIntrinsic.cpp')
-rw-r--r--gnu/llvm/lib/Transforms/Scalar/LowerGuardIntrinsic.cpp90
1 files changed, 0 insertions, 90 deletions
diff --git a/gnu/llvm/lib/Transforms/Scalar/LowerGuardIntrinsic.cpp b/gnu/llvm/lib/Transforms/Scalar/LowerGuardIntrinsic.cpp
deleted file mode 100644
index 4867b33d671..00000000000
--- a/gnu/llvm/lib/Transforms/Scalar/LowerGuardIntrinsic.cpp
+++ /dev/null
@@ -1,90 +0,0 @@
-//===- LowerGuardIntrinsic.cpp - Lower the guard intrinsic ---------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This pass lowers the llvm.experimental.guard intrinsic to a conditional call
-// to @llvm.experimental.deoptimize. Once this happens, the guard can no longer
-// be widened.
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm/Transforms/Scalar/LowerGuardIntrinsic.h"
-#include "llvm/ADT/SmallVector.h"
-#include "llvm/Analysis/GuardUtils.h"
-#include "llvm/IR/BasicBlock.h"
-#include "llvm/IR/Function.h"
-#include "llvm/IR/InstIterator.h"
-#include "llvm/IR/Instructions.h"
-#include "llvm/IR/Intrinsics.h"
-#include "llvm/IR/Module.h"
-#include "llvm/Pass.h"
-#include "llvm/Transforms/Scalar.h"
-#include "llvm/Transforms/Utils/GuardUtils.h"
-
-using namespace llvm;
-
-namespace {
-struct LowerGuardIntrinsicLegacyPass : public FunctionPass {
- static char ID;
- LowerGuardIntrinsicLegacyPass() : FunctionPass(ID) {
- initializeLowerGuardIntrinsicLegacyPassPass(
- *PassRegistry::getPassRegistry());
- }
-
- bool runOnFunction(Function &F) override;
-};
-}
-
-static bool lowerGuardIntrinsic(Function &F) {
- // Check if we can cheaply rule out the possibility of not having any work to
- // do.
- auto *GuardDecl = F.getParent()->getFunction(
- Intrinsic::getName(Intrinsic::experimental_guard));
- if (!GuardDecl || GuardDecl->use_empty())
- return false;
-
- SmallVector<CallInst *, 8> ToLower;
- for (auto &I : instructions(F))
- if (isGuard(&I))
- ToLower.push_back(cast<CallInst>(&I));
-
- if (ToLower.empty())
- return false;
-
- auto *DeoptIntrinsic = Intrinsic::getDeclaration(
- F.getParent(), Intrinsic::experimental_deoptimize, {F.getReturnType()});
- DeoptIntrinsic->setCallingConv(GuardDecl->getCallingConv());
-
- for (auto *CI : ToLower) {
- makeGuardControlFlowExplicit(DeoptIntrinsic, CI);
- CI->eraseFromParent();
- }
-
- return true;
-}
-
-bool LowerGuardIntrinsicLegacyPass::runOnFunction(Function &F) {
- return lowerGuardIntrinsic(F);
-}
-
-char LowerGuardIntrinsicLegacyPass::ID = 0;
-INITIALIZE_PASS(LowerGuardIntrinsicLegacyPass, "lower-guard-intrinsic",
- "Lower the guard intrinsic to normal control flow", false,
- false)
-
-Pass *llvm::createLowerGuardIntrinsicPass() {
- return new LowerGuardIntrinsicLegacyPass();
-}
-
-PreservedAnalyses LowerGuardIntrinsicPass::run(Function &F,
- FunctionAnalysisManager &AM) {
- if (lowerGuardIntrinsic(F))
- return PreservedAnalyses::none();
-
- return PreservedAnalyses::all();
-}