Files
revng-revng/lib/InlineHelpers/PostInlineHelpersVerifyPass.cpp
T
Andrea Gussoni 06733a9f3a InlineHelpers: split into link / inline / delete
Split the `InlineHelpers` pass into the three phases:

- `link-helpers-to-inline` links the missing `revng_inline` helper
  bodies from the `libtcg-helpers-to-inline-arch` module.
- `inline-helpers` inlines, in every function except those tagged
  `Root` or `Helper`, the calls to `revng_inline` helpers whose
  critical arguments on the call site are constant.
- `delete-helper-bodies` drops from the module the body of every
  `revng_inline` function, leaving only the declaration.

The three passes live in a dedicated `revngInlineHelpers` library
(`lib/InlineHelpers/` + `include/revng/InlineHelpers/`), so that
libraries which do not depend on `revngFunctionIsolation` can use them
without creating cyclic dependencies.
2026-06-19 15:35:18 +02:00

35 lines
867 B
C++

//
// This file is distributed under the MIT License. See LICENSE.md for details.
//
#include "llvm/IR/Function.h"
#include "llvm/IR/InstIterator.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/Module.h"
#include "revng/Model/FunctionTags.h"
#include "revng/Support/Assert.h"
#include "revng/Support/IRHelpers.h"
#include "PostInlineHelpersVerifyPass.h"
using namespace llvm;
bool PostInlineHelpersVerifyPass::runOnModule(Module &M) {
for (Function &F : M) {
if (not FunctionTags::Isolated.isTagOf(&F))
continue;
for (Instruction &I : instructions(F))
if (isa<GetElementPtrInst>(&I))
revng_abort(("post-inline-helpers-verify: "
"getelementptr in Isolated function "
+ F.getName().str())
.c_str());
}
return false;
}
char PostInlineHelpersVerifyPass::ID;