Skip to content

low.invoke

← low dialect

Source-typed call edge to an explicitly selected target-Low function. Source-to-Low lowering maps the source operands and results to the helper register signature, proves the helper argument predicates, and normalizes the edge to low.func.call. Argument carriers may be converted when source facts prove a target-supported lossless conversion. The native call returns the helper's declared carriers; lowering converts them to source result storage when needed to preserve each lane's observation across divergent control. This does not change source-type matching for ordinary calls. Each source value maps to one register-typed value. Views require storage and layout information beyond that carrier and are not accepted as operands or results; use a source helper taking views or pass buffers and offsets explicitly. Authored temperature and inline policy have the same meaning as on low.func.call; targets without a Low call ABI may require the normalized edge to inline before emission.

Operation contract

Property Value
Semantic phase executable
Traits UnknownEffects, NoAncestor(low.func.def), NoAncestor(low.kernel.def)
Interfaces CallLike

Signature

Kind Name Type Cardinality Description
Operand operands any variadic —
Result results any variadic —
Attribute callee symbol (callable) required —
Attribute effect_contract enum EffectContract optional —
Attribute temperature enum Temperature optional —
Attribute inline_policy enum InlinePolicy optional —

Examples

%result = low.invoke @extern_add(%lhs, %rhs) : (i32, i32) -> (i32)
%result = low.invoke pure @extern_add(%lhs, %rhs) : (i32, i32) -> (i32)