summaryrefslogtreecommitdiffstats
path: root/gnu/llvm/lib/Transforms/Scalar/LowerGuardIntrinsic.cpp
diff options
context:
space:
mode:
authorpatrick <patrick@openbsd.org>2020-08-03 15:06:44 +0000
committerpatrick <patrick@openbsd.org>2020-08-03 15:06:44 +0000
commitb64793999546ed8adebaeebd9d8345d18db8927d (patch)
tree4357c27b561d73b0e089727c6ed659f2ceff5f47 /gnu/llvm/lib/Transforms/Scalar/LowerGuardIntrinsic.cpp
parentAdd support for UTF-8 DISPLAY-HINTs with octet length. For now only (diff)
downloadwireguard-openbsd-b64793999546ed8adebaeebd9d8345d18db8927d.tar.xz
wireguard-openbsd-b64793999546ed8adebaeebd9d8345d18db8927d.zip
Remove LLVM 8.0.1 files.
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();
-}