22 auto callOperation =
dynamic_cast<const CallOperation *
>(&other);
23 return callOperation && FunctionType_ == callOperation->
FunctionType_;
32 std::unique_ptr<rvsdg::Operation>
35 return std::make_unique<CallOperation>(*
this);
46 std::unique_ptr<CallTypeClassifier>
52 if (rvsdg::TryGetOwnerNode<rvsdg::LambdaNode>(output))
57 if (
auto phi = rvsdg::TryGetRegionParentNode<rvsdg::PhiNode>(output))
59 if (
auto fix = phi->MapArgumentFixVar(output))
85 return graphImport->Name() ==
"_setjmp";
100 return graphImport->Name().rfind(
"llvm.va_start", 0) == 0;
~CallOperation() override
std::shared_ptr< const rvsdg::FunctionType > FunctionType_
static rvsdg::Input & GetFunctionInput(const rvsdg::Node &node) noexcept
std::unique_ptr< Operation > copy() const override
static std::unique_ptr< CallTypeClassifier > ClassifyCall(const rvsdg::SimpleNode &callNode)
Classifies a call node.
static rvsdg::Output & TraceFunctionInput(const rvsdg::SimpleNode &callNode)
Traces function input of call node.
bool operator==(const Operation &other) const noexcept override
std::string debug_string() const override
bool IsExternalCall() const noexcept
Determines whether call is an external call.
static std::unique_ptr< CallTypeClassifier > CreateExternalCallClassifier(rvsdg::RegionArgument &argument)
Classify callee as external.
static std::unique_ptr< CallTypeClassifier > CreateIndirectCallClassifier(jlm::rvsdg::Output &output)
Classify callee as inderict.
static std::unique_ptr< CallTypeClassifier > CreateNonRecursiveDirectCallClassifier(rvsdg::Output &output)
Classify callee as non-recursive.
rvsdg::RegionArgument & GetImport() const noexcept
Returns the imported function.
static std::unique_ptr< CallTypeClassifier > CreateRecursiveDirectCallClassifier(rvsdg::Output &output)
Classify callee as recursive.
Represents the argument of a region.
const std::shared_ptr< const rvsdg::Type > & argument(size_t index) const noexcept
Global memory state passed between functions.
rvsdg::Output & traceOutput(rvsdg::Output &output)