![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /proc/self/root/usr/lib/llvm-10/include/llvm/Transforms/Utils/ |
Upload File : |
//===-- UnifyFunctionExitNodes.h - Ensure fn's have one return --*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This pass is used to ensure that functions have at most one return and one // unwind instruction in them. Additionally, it keeps track of which node is // the new exit node of the CFG. If there are no return or unwind instructions // in the function, the getReturnBlock/getUnwindBlock methods will return a null // pointer. // //===----------------------------------------------------------------------===// #ifndef LLVM_TRANSFORMS_UTILS_UNIFYFUNCTIONEXITNODES_H #define LLVM_TRANSFORMS_UTILS_UNIFYFUNCTIONEXITNODES_H #include "llvm/Pass.h" #include "llvm/PassRegistry.h" namespace llvm { struct UnifyFunctionExitNodes : public FunctionPass { BasicBlock *ReturnBlock = nullptr; BasicBlock *UnwindBlock = nullptr; BasicBlock *UnreachableBlock; public: static char ID; // Pass identification, replacement for typeid UnifyFunctionExitNodes(); // We can preserve non-critical-edgeness when we unify function exit nodes void getAnalysisUsage(AnalysisUsage &AU) const override; // getReturn|Unwind|UnreachableBlock - Return the new single (or nonexistent) // return, unwind, or unreachable basic blocks in the CFG. // BasicBlock *getReturnBlock() const { return ReturnBlock; } BasicBlock *getUnwindBlock() const { return UnwindBlock; } BasicBlock *getUnreachableBlock() const { return UnreachableBlock; } bool runOnFunction(Function &F) override; }; Pass *createUnifyFunctionExitNodesPass(); } // end namespace llvm #endif // LLVM_TRANSFORMS_UTILS_UNIFYFUNCTIONEXITNODES_H