1//===-- UnifyFunctionExitNodes.h - Ensure fn's have one return --*- C++ -*-===//
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-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This pass is used to ensure that functions have at most one return and one
10// unreachable instruction in them.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_TRANSFORMS_UTILS_UNIFYFUNCTIONEXITNODES_H
15#define LLVM_TRANSFORMS_UTILS_UNIFYFUNCTIONEXITNODES_H
16
17#include "llvm/IR/PassManager.h"
18#include "llvm/Pass.h"
19
20namespace llvm {
21
22class BasicBlock;
23
24class UnifyFunctionExitNodesLegacyPass : public FunctionPass {
25public:
26 static char ID; // Pass identification, replacement for typeid
27 UnifyFunctionExitNodesLegacyPass();
28
29 // We can preserve non-critical-edgeness when we unify function exit nodes
30 void getAnalysisUsage(AnalysisUsage &AU) const override;
31
32 bool runOnFunction(Function &F) override;
33};
34
35Pass *createUnifyFunctionExitNodesPass();
36
37class UnifyFunctionExitNodesPass
38 : public PassInfoMixin<UnifyFunctionExitNodesPass> {
39public:
40 PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
41};
42
43} // end namespace llvm
44
45#endif // LLVM_TRANSFORMS_UTILS_UNIFYFUNCTIONEXITNODES_H
46