Oakfield API Documentation 1.0.0
Numerical core APIs
Loading...
Searching...
No Matches
kernel_ir.h
Go to the documentation of this file.
1
12#ifndef OAKFIELD_KERNEL_IR_H
13#define OAKFIELD_KERNEL_IR_H
14
15#include <stdbool.h>
16#include <stddef.h>
17#include <stdint.h>
18
19#include "field.h"
21#include "operator_identity.h"
22
23#ifdef __cplusplus
24extern "C" {
25#endif
26
28typedef size_t SimIRNodeId;
29
31#define SIM_IR_INVALID_NODE ((SimIRNodeId)SIZE_MAX)
32/* Sentinel for a missing constant pool entry */
33#define SIM_IR_INVALID_CONSTANT_INDEX ((size_t)SIZE_MAX)
34
42
51
61
69
73typedef struct SimIRShape {
74 size_t rank;
75 size_t shape[4];
76 bool has_shape;
78
88
98
106
114
124
140
152
166
176
191
203
228
229struct KernelIR;
233typedef SimResult (*SimIRStatefulEvalFn)(void *userdata, const struct KernelIR *kernel,
234 size_t element_index, size_t component, double *out_value);
235
239#ifndef SIM_IR_SMALL_CONSTANT_CAPACITY
240#define SIM_IR_SMALL_CONSTANT_CAPACITY 4U
241#endif
242
246typedef struct SimIRNode {
253 bool is_local;
254 union {
255 struct {
256 double scalar;
264 size_t field;
265 struct {
269 struct {
271 size_t axis;
272 double dx;
273 double scale;
274 size_t order;
277 double
281 struct {
282 uint32_t seed;
283 double amplitude;
284 double variance;
288 struct {
290 double bias;
291 double delta;
292 double lambda;
293 double tolerance;
297 struct {
300 struct {
304 struct {
308 struct {
312 struct {
315 struct {
316 size_t field;
317 size_t axis;
319 struct {
321 void *userdata;
322 const char *label;
326
327struct SimWarpSampleSpec;
328
338
339SimResult sim_ir_warp_sample_response(const struct SimWarpSampleSpec *spec,
340 SimIRWarpProfile profile, double tolerance,
341 SimSpecialFallbackFn fallback, void *fallback_userdata,
342 double *out_response);
343
347typedef struct SimIRBuilder {
349 size_t count;
350 size_t capacity;
352 /* Constant pool to store per-lane vector constants.
353 * Flattened layout of all vector constant values. */
362
370
378
385
393void sim_ir_builder_apply_opcode(SimIRBuilder *builder, SimIROpcode opcode, bool preserve_existing);
394
405 bool preserve_existing, const SimIRNodeId *roots,
406 size_t root_count);
407
418 size_t root_count, unsigned char *out_reachable,
419 size_t reachable_count);
420
428
435
444
449
454
459 SimWarpLevel warp_class);
460
465
470
475 SimIRType type);
476
481 size_t components, SimIRType type);
482
486SimIRNodeId sim_ir_builder_constant_complex(SimIRBuilder *builder, double real, double imag);
487
495 size_t components);
496
504
513
518
523
528
533
538
542SimIRNodeId sim_ir_builder_coord(SimIRBuilder *builder, size_t field_id, size_t axis);
547
556
567 SimIRNodeId rhs);
568
573
578
589SimIRNodeId sim_ir_builder_diff(SimIRBuilder *builder, SimIRNodeId operand, size_t axis, double dx,
590 double scale);
591
596
601
606 const char *label);
607
616SimIRNodeId sim_ir_builder_noise(SimIRBuilder *builder, uint32_t seed, double amplitude);
617
622
627 SimIRWarpProfile profile, double bias, double delta, double lambda);
628
633
638 SimIRNodeId angle);
639
644
649
653SimIRType sim_ir_type_vector(size_t components);
654
659
664
669
674
678double sim_ir_warp_profile_eval(SimIRWarpProfile profile, double x, double tolerance);
679
683double sim_ir_warp_difference(SimIRWarpProfile profile, double sample, double delta,
684 double tolerance);
685
689typedef SimResult (*SimIRFieldEvalFn)(void *userdata, size_t field_id, SimIRType type,
690 double *out_value);
691
695typedef SimResult (*SimIRDiffEvalFn)(void *userdata, const SimIRBuilder *builder,
696 const SimIRNode *node, SimIRNodeId operand,
697 double operand_value, double *out_value);
698
702typedef SimResult (*SimIRNoiseEvalFn)(void *userdata, const SimIRNode *node, double *out_value);
703
707typedef SimResult (*SimIRParamEvalFn)(void *userdata, SimIRParamKind param, double *out_value);
708
712typedef SimResult (*SimIRFieldEvalFnComplex)(void *userdata, size_t field_id, SimIRType type,
713 SimComplexDouble *out_value);
714
718typedef SimResult (*SimIRDiffEvalFnComplex)(void *userdata, const SimIRBuilder *builder,
719 const SimIRNode *node, SimIRNodeId operand,
720 SimComplexDouble operand_value,
721 SimComplexDouble *out_value);
722
726typedef SimResult (*SimIRNoiseEvalFnComplex)(void *userdata, const SimIRNode *node,
727 SimComplexDouble *out_value);
728
739
752
756typedef SimResult (*SimIRFieldEvalFnDomain)(void *userdata, size_t field_id, SimIRType type,
757 SimScalarDomain domain, SimIRDomainValue *out_value);
758
762typedef SimResult (*SimIRDiffEvalFnDomain)(void *userdata, const SimIRBuilder *builder,
763 const SimIRNode *node, SimIRNodeId operand,
764 SimScalarDomain domain, SimIRDomainValue operand_value,
765 SimIRDomainValue *out_value);
766
770typedef SimResult (*SimIRNoiseEvalFnDomain)(void *userdata, const SimIRNode *node,
771 SimScalarDomain domain, SimIRDomainValue *out_value);
772
776typedef SimResult (*SimIRParamEvalFnDomain)(void *userdata, SimIRParamKind param,
777 SimScalarDomain domain, SimIRDomainValue *out_value);
778
789
797 const SimIREvaluatorDomain *evaluator,
798 SimIRDomainValue *out_value);
799
804 const SimIREvaluator *evaluator, double *out_value);
805
810 const SimIREvaluatorComplex *evaluator,
811 SimComplexDouble *out_value);
812
813#ifdef __cplusplus
814}
815#endif
816
817#endif /* OAKFIELD_KERNEL_IR_H */
Multidimensional contiguous field abstraction with configurable layout.
SimResult
Return codes shared by libsimcore modules.
Definition field.h:29
SimIRWarpProfile
Supported analytic warp profiles for dedicated IR nodes.
Definition kernel_ir.h:144
@ SIM_IR_WARP_PROFILE_DIGAMMA_7_TAIL
Definition kernel_ir.h:147
@ SIM_IR_WARP_PROFILE_DIGAMMA_5_TAIL
Definition kernel_ir.h:148
@ SIM_IR_WARP_PROFILE_TRIGAMMA
Definition kernel_ir.h:146
@ SIM_IR_WARP_PROFILE_DIGAMMA_MORTICI
Definition kernel_ir.h:150
@ SIM_IR_WARP_PROFILE_DIGAMMA
Definition kernel_ir.h:145
@ SIM_IR_WARP_PROFILE_DIGAMMA_ADAPTIVE
Definition kernel_ir.h:149
SimIRNodeId sim_ir_builder_warp(SimIRBuilder *builder, SimIRNodeId operand, SimIRWarpProfile profile, double bias, double delta, double lambda)
Create an analytic warp node with explicit parameters.
SimIRNodeId sim_ir_builder_constant_vector_typed(SimIRBuilder *builder, const double *values, size_t components, SimIRType type)
Create a vector constant node with explicit type annotation.
SimIRNodeId sim_ir_builder_stateful_spec(SimIRBuilder *builder, const SimIRStatefulSpec *spec)
Create a stateful callback node with extended metadata.
SimIRNodeId sim_ir_builder_complex_pack(SimIRBuilder *builder, SimIRNodeId real, SimIRNodeId imag)
Pack real/imag scalar nodes into a complex-valued vector.
SimWarpLevel sim_ir_builder_node_warp_class(const SimIRBuilder *builder, SimIRNodeId id)
Retrieve the warp classification associated with a node.
SimIRType sim_ir_type_scalar_domain_typed(SimScalarDomain domain)
Construct a scalar value type descriptor for an explicit scalar domain.
SimIRType sim_ir_builder_node_type(const SimIRBuilder *builder, SimIRNodeId id)
Query the value type of a node.
SimIRNodeId sim_ir_builder_mod(SimIRBuilder *builder, SimIRNodeId lhs, SimIRNodeId rhs)
Create a modulo node.
SimResult(* SimIRDiffEvalFnDomain)(void *userdata, const SimIRBuilder *builder, const SimIRNode *node, SimIRNodeId operand, SimScalarDomain domain, SimIRDomainValue operand_value, SimIRDomainValue *out_value)
Evaluate a scalar-domain-aware differential node during IR evaluation.
Definition kernel_ir.h:762
SimIRCallKind
Built-in call identifiers for unary analytic functions.
Definition kernel_ir.h:156
@ SIM_IR_CALL_COS
Definition kernel_ir.h:158
@ SIM_IR_CALL_EXP
Definition kernel_ir.h:159
@ SIM_IR_CALL_LOG
Definition kernel_ir.h:161
@ SIM_IR_CALL_ABS
Definition kernel_ir.h:160
@ SIM_IR_CALL_SINH
Definition kernel_ir.h:163
@ SIM_IR_CALL_SIN
Definition kernel_ir.h:157
@ SIM_IR_CALL_SIGN
Definition kernel_ir.h:164
@ SIM_IR_CALL_TANH
Definition kernel_ir.h:162
SimIRNodeId sim_ir_builder_complex_rotate(SimIRBuilder *builder, SimIRNodeId operand, SimIRNodeId angle)
Create a complex rotation node using a scalar angle.
void sim_ir_builder_destroy(SimIRBuilder *builder)
Release resources held by an IR builder.
SimResult(* SimIRNoiseEvalFnComplex)(void *userdata, const SimIRNode *node, SimComplexDouble *out_value)
Sample a complex-valued stochastic node during IR evaluation.
Definition kernel_ir.h:726
SimIRNodeId sim_ir_builder_noise_spec(SimIRBuilder *builder, const SimIRNoiseSpec *spec)
Create a stochastic noise node with extended metadata.
SimIRType sim_ir_type_scalar(void)
Construct a scalar value type descriptor.
double sim_ir_warp_profile_eval(SimIRWarpProfile profile, double x, double tolerance)
Evaluate a warp profile at the provided sample.
SimResult sim_ir_evaluate_domain(const SimIRBuilder *builder, SimIRNodeId root, const SimIREvaluatorDomain *evaluator, SimIRDomainValue *out_value)
Evaluate an IR expression using a unified scalar-domain evaluator surface.
SimResult(* SimIRParamEvalFn)(void *userdata, SimIRParamKind param, double *out_value)
Resolve a real-valued runtime parameter during IR evaluation.
Definition kernel_ir.h:707
SimIRNodeId sim_ir_builder_pow(SimIRBuilder *builder, SimIRNodeId lhs, SimIRNodeId rhs)
Create a power node (pow for real, cpow for complex).
SimIRNodeId sim_ir_builder_floor(SimIRBuilder *builder, SimIRNodeId operand)
Create a floor node.
SimResult(* SimIRDiffEvalFnComplex)(void *userdata, const SimIRBuilder *builder, const SimIRNode *node, SimIRNodeId operand, SimComplexDouble operand_value, SimComplexDouble *out_value)
Evaluate a complex-valued differential node during IR evaluation.
Definition kernel_ir.h:718
SimResult(* SimIRParamEvalFnDomain)(void *userdata, SimIRParamKind param, SimScalarDomain domain, SimIRDomainValue *out_value)
Resolve a scalar-domain-aware runtime parameter during IR evaluation.
Definition kernel_ir.h:776
SimIRNodeId sim_ir_builder_constant_typed(SimIRBuilder *builder, double value, SimIRType type)
Create a constant node with explicit type annotation.
SimResult sim_ir_collect_reachable(const SimIRBuilder *builder, const SimIRNodeId *roots, size_t root_count, unsigned char *out_reachable, size_t reachable_count)
Mark nodes reachable from a set of roots.
SimResult(* SimIRNoiseEvalFnDomain)(void *userdata, const SimIRNode *node, SimScalarDomain domain, SimIRDomainValue *out_value)
Sample a scalar-domain-aware stochastic node during IR evaluation.
Definition kernel_ir.h:770
SimIRNodeId sim_ir_builder_diff_spec(SimIRBuilder *builder, const SimIRDiffSpec *spec)
Create a differential term node using an extended specification.
SimIRType sim_ir_type_complex(void)
Construct a complex scalar value type descriptor (2 lanes).
SimIRNodeId sim_ir_builder_noise(SimIRBuilder *builder, uint32_t seed, double amplitude)
Create a stochastic noise node.
SimResult sim_ir_builder_init(SimIRBuilder *builder)
Initialize an empty IR builder.
SimIRNodeId sim_ir_builder_call(SimIRBuilder *builder, SimIRCallKind kind, SimIRNodeId operand)
Create a unary analytic call node (elementwise for vector values).
#define SIM_IR_SMALL_CONSTANT_CAPACITY
Generic IR node representation.
Definition kernel_ir.h:240
SimResult(* SimIRFieldEvalFnDomain)(void *userdata, size_t field_id, SimIRType type, SimScalarDomain domain, SimIRDomainValue *out_value)
Resolve a scalar-domain-aware field reference during IR evaluation.
Definition kernel_ir.h:756
SimResult(* SimIRNoiseEvalFn)(void *userdata, const SimIRNode *node, double *out_value)
Sample a real-valued stochastic node during IR evaluation.
Definition kernel_ir.h:702
SimIRParamKind
Runtime parameter identifiers referenced by PARAM nodes.
Definition kernel_ir.h:118
@ SIM_IR_PARAM_TIME
Definition kernel_ir.h:122
@ SIM_IR_PARAM_STEP_INDEX
Definition kernel_ir.h:120
@ SIM_IR_PARAM_SQRT_DT
Definition kernel_ir.h:121
@ SIM_IR_PARAM_DT
Definition kernel_ir.h:119
SimIRBoundaryPolicy
Boundary handling policy for differential operators.
Definition kernel_ir.h:82
@ SIM_IR_BOUNDARY_PERIODIC
Definition kernel_ir.h:85
@ SIM_IR_BOUNDARY_NEUMANN
Definition kernel_ir.h:83
@ SIM_IR_BOUNDARY_REFLECTIVE
Definition kernel_ir.h:86
@ SIM_IR_BOUNDARY_DIRICHLET
Definition kernel_ir.h:84
SimResult(* SimIRStatefulEvalFn)(void *userdata, const struct KernelIR *kernel, size_t element_index, size_t component, double *out_value)
Callback signature for stateful IR nodes.
Definition kernel_ir.h:233
SimIRNodeId sim_ir_builder_binary(SimIRBuilder *builder, SimIRNodeType type, SimIRNodeId lhs, SimIRNodeId rhs)
Create a binary operation node.
SimIRNoiseLaw
Noise law describing the stochastic calculus interpretation.
Definition kernel_ir.h:102
@ SIM_IR_NOISE_LAW_STRATONOVICH
Definition kernel_ir.h:104
@ SIM_IR_NOISE_LAW_ITO
Definition kernel_ir.h:103
SimIRNodeId sim_ir_builder_warp_spec(SimIRBuilder *builder, const SimIRWarpSpec *spec)
Create an analytic warp node using the extended specification.
SimScalarDomain sim_ir_type_scalar_domain(SimIRType type)
Return the scalar-domain descriptor attached to an IR type.
SimIRNodeId sim_ir_builder_stateful(SimIRBuilder *builder, SimIRStatefulEvalFn eval, void *userdata, const char *label)
Create a stateful callback node with a scalar result type.
SimResult(* SimIRFieldEvalFnComplex)(void *userdata, size_t field_id, SimIRType type, SimComplexDouble *out_value)
Resolve a complex-valued field reference during IR evaluation.
Definition kernel_ir.h:712
void sim_ir_diff_spec_init(SimIRDiffSpec *spec, const SimIRBuilder *builder)
Initialize a diff spec with safe defaults.
bool sim_ir_type_is_scalar(SimIRType type)
Return true if the provided type describes a scalar expression.
SimIRNodeId sim_ir_builder_index(SimIRBuilder *builder)
Create a linear element-index node.
SimIRNodeId sim_ir_builder_diff(SimIRBuilder *builder, SimIRNodeId operand, size_t axis, double dx, double scale)
Create a differential term node.
SimIRNodeType
Enumerates IR node categories.
Definition kernel_ir.h:207
@ SIM_IR_NODE_FLOOR
Definition kernel_ir.h:223
@ SIM_IR_NODE_PARAM
Definition kernel_ir.h:218
@ SIM_IR_NODE_SUB
Definition kernel_ir.h:211
@ SIM_IR_NODE_STATEFUL
Definition kernel_ir.h:226
@ SIM_IR_NODE_MUL
Definition kernel_ir.h:212
@ SIM_IR_NODE_ADD
Definition kernel_ir.h:210
@ SIM_IR_NODE_CALL
Definition kernel_ir.h:222
@ SIM_IR_NODE_INDEX
Definition kernel_ir.h:221
@ SIM_IR_NODE_MOD
Definition kernel_ir.h:224
@ SIM_IR_NODE_WARP
Definition kernel_ir.h:217
@ SIM_IR_NODE_CONSTANT
Definition kernel_ir.h:208
@ SIM_IR_NODE_COMPLEX_ROTATE
Definition kernel_ir.h:220
@ SIM_IR_NODE_DIV
Definition kernel_ir.h:213
@ SIM_IR_NODE_POW
Definition kernel_ir.h:214
@ SIM_IR_NODE_NOISE
Definition kernel_ir.h:216
@ SIM_IR_NODE_COMPLEX_PACK
Definition kernel_ir.h:219
@ SIM_IR_NODE_COORD
Definition kernel_ir.h:225
@ SIM_IR_NODE_DIFF
Definition kernel_ir.h:215
@ SIM_IR_NODE_FIELD_REF
Definition kernel_ir.h:209
SimIRNodeId sim_ir_builder_param(SimIRBuilder *builder, SimIRParamKind param)
Create a runtime parameter node.
SimIRNodeId sim_ir_builder_constant_vector(SimIRBuilder *builder, const double *values, size_t components)
Add a per-lane constant vector to the builder and return a node id.
void sim_ir_builder_apply_opcode(SimIRBuilder *builder, SimIROpcode opcode, bool preserve_existing)
Apply a semantic opcode to nodes stored in a builder.
void sim_ir_builder_reset(SimIRBuilder *builder)
Reset builder counts while retaining allocated storage.
SimResult(* SimIRFieldEvalFn)(void *userdata, size_t field_id, SimIRType type, double *out_value)
Resolve a real-valued field reference during IR evaluation.
Definition kernel_ir.h:689
SimIRNodeId sim_ir_builder_field_ref(SimIRBuilder *builder, size_t field_id)
Create a field reference node.
bool sim_ir_kernel_has_unsupported_complex_semantics(const struct KernelIR *kernel)
Query whether a kernel contains true complex-domain nodes whose semantics are not representable by th...
SimIRNodeId sim_ir_builder_constant(SimIRBuilder *builder, double value)
Create a constant node.
SimIRValueKind
Enumerates the value category for an IR expression.
Definition kernel_ir.h:38
@ SIM_IR_VALUE_VECTOR
Definition kernel_ir.h:40
@ SIM_IR_VALUE_SCALAR
Definition kernel_ir.h:39
void sim_ir_builder_set_default_boundary(SimIRBuilder *builder, SimIRBoundaryPolicy boundary)
Set the default boundary policy used by shorthand differential helpers.
SimResult sim_ir_builder_apply_opcode_reachable(SimIRBuilder *builder, SimIROpcode opcode, bool preserve_existing, const SimIRNodeId *roots, size_t root_count)
Apply a semantic opcode to reachable nodes starting from the provided roots.
SimResult sim_ir_evaluate(const SimIRBuilder *builder, SimIRNodeId root, const SimIREvaluator *evaluator, double *out_value)
Evaluate an IR expression recursively using user-provided callbacks.
SimResult(* SimIRDiffEvalFn)(void *userdata, const SimIRBuilder *builder, const SimIRNode *node, SimIRNodeId operand, double operand_value, double *out_value)
Evaluate a real-valued differential node during IR evaluation.
Definition kernel_ir.h:695
double sim_ir_warp_difference(SimIRWarpProfile profile, double sample, double delta, double tolerance)
Compute the symmetric warp difference f(x+δ) − f(x−δ).
SimIRNodeId sim_ir_builder_coord(SimIRBuilder *builder, size_t field_id, size_t axis)
Create a coordinate lookup node.
SimIRNoiseDistribution
Probability distribution used when sampling stochastic nodes.
Definition kernel_ir.h:110
@ SIM_IR_NOISE_DISTRIBUTION_GAUSSIAN
Definition kernel_ir.h:112
@ SIM_IR_NOISE_DISTRIBUTION_UNIFORM
Definition kernel_ir.h:111
SimResult sim_ir_evaluate_complex(const SimIRBuilder *builder, SimIRNodeId root, const SimIREvaluatorComplex *evaluator, SimComplexDouble *out_value)
Evaluate an IR expression recursively using complex-valued callbacks.
SimIRNodeId sim_ir_builder_constant_complex(SimIRBuilder *builder, double real, double imag)
Create a complex constant node from real/imag components.
bool sim_ir_type_equal(SimIRType lhs, SimIRType rhs)
Compare two type descriptors for equality.
const SimIRNode * sim_ir_builder_get(const SimIRBuilder *builder, SimIRNodeId id)
Retrieve an immutable pointer to a node.
size_t SimIRNodeId
Definition kernel_ir.h:28
SimIRNodeId sim_ir_builder_constant_u64_typed(SimIRBuilder *builder, uint64_t value, SimIRType type)
Create an exact unsigned integer constant node with explicit type annotation.
SimIRType sim_ir_type_vector(size_t components)
Construct a vector value type descriptor with the requested lane count.
SimIRNodeId sim_ir_builder_field_ref_typed(SimIRBuilder *builder, size_t field_id, SimIRType type)
Create a field reference node with an explicit value type.
SimIRNodeId sim_ir_builder_constant_i64_typed(SimIRBuilder *builder, int64_t value, SimIRType type)
Create an exact signed integer constant node with explicit type annotation.
SimIRDiffMethod
Finite-difference stencil selection for differential operators.
Definition kernel_ir.h:92
@ SIM_IR_DIFF_METHOD_AUTO
Definition kernel_ir.h:93
@ SIM_IR_DIFF_METHOD_BACKWARD
Definition kernel_ir.h:96
@ SIM_IR_DIFF_METHOD_CENTRAL
Definition kernel_ir.h:94
@ SIM_IR_DIFF_METHOD_FORWARD
Definition kernel_ir.h:95
SimResult sim_ir_builder_set_node_warp_class(SimIRBuilder *builder, SimIRNodeId id, SimWarpLevel warp_class)
Assign a warp classification to a node for downstream code generation.
Core-owned operator identity metadata shared by execution and IR.
SimWarpLevel
Public classification for analytic warp operators.
Definition operator_identity.h:17
SimIROpcode
Semantic operator category opcodes for KernelIR nodes.
Definition operator_identity.h:27
Analytic special functions, finite ladder helpers, and q-analogs.
SimResult(* SimSpecialFallbackFn)(void *userdata, const SimSpecialEvalReport *report, SimComplexDouble *value_out)
Callback signature used to provide fallback values on failure.
Definition special_functions.h:420
KernelIR package describing the executable graph for a backend.
Definition backend.h:97
Explicit in-memory representation for a complex double scalar (re, im)
Definition field.h:175
Monotonic arena for IR node allocation.
Definition kernel_ir.h:347
size_t * constants_offsets
Definition kernel_ir.h:355
size_t constants_count
Definition kernel_ir.h:357
SimIRBoundaryPolicy default_boundary
Definition kernel_ir.h:351
size_t capacity
Definition kernel_ir.h:350
size_t count
Definition kernel_ir.h:349
size_t constants_data_used
Definition kernel_ir.h:360
size_t constants_capacity
Definition kernel_ir.h:358
size_t * constants_components
Definition kernel_ir.h:356
double * constants_data
Definition kernel_ir.h:354
SimIRNode * nodes
Definition kernel_ir.h:348
size_t constants_data_capacity
Definition kernel_ir.h:359
Optional metadata for creating differential nodes.
Definition kernel_ir.h:128
SimIRBoundaryPolicy boundary
Definition kernel_ir.h:137
size_t axis
Definition kernel_ir.h:130
double scale
Definition kernel_ir.h:132
SimIRNodeId operand
Definition kernel_ir.h:129
size_t stencil_order
Definition kernel_ir.h:134
size_t order
Definition kernel_ir.h:133
SimIRType result_type
Definition kernel_ir.h:138
SimIRDiffMethod method
Definition kernel_ir.h:135
double consistency_constant
Definition kernel_ir.h:136
double dx
Definition kernel_ir.h:131
Scalar-domain-aware evaluation result.
Definition kernel_ir.h:65
SimScalarDomain domain
Definition kernel_ir.h:66
SimIRDomainPayload value
Definition kernel_ir.h:67
Callback surface for evaluating complex-valued IR expressions.
Definition kernel_ir.h:732
SimIRFieldEvalFnComplex field_value_c
Definition kernel_ir.h:733
SimIRDiffEvalFnComplex differential_c
Definition kernel_ir.h:734
SimIRParamEvalFn param_value
Definition kernel_ir.h:736
void * userdata
Definition kernel_ir.h:737
SimIRNoiseEvalFnComplex noise_c
Definition kernel_ir.h:735
Callback surface for evaluating scalar-domain-aware IR expressions.
Definition kernel_ir.h:782
SimIRParamEvalFnDomain param_value
Definition kernel_ir.h:786
void * userdata
Definition kernel_ir.h:787
SimIRFieldEvalFnDomain field_value
Definition kernel_ir.h:783
SimIRDiffEvalFnDomain differential
Definition kernel_ir.h:784
SimIRNoiseEvalFnDomain noise
Definition kernel_ir.h:785
Callback surface for evaluating real-valued IR expressions.
Definition kernel_ir.h:743
void * userdata
Definition kernel_ir.h:750
SimIRDiffEvalFn differential
Definition kernel_ir.h:747
SimIRParamEvalFn param_value
Definition kernel_ir.h:749
SimIRFieldEvalFn field_value
Definition kernel_ir.h:745
SimIRNoiseEvalFn noise
Definition kernel_ir.h:748
Node record in a symbolic kernel IR expression graph.
Definition kernel_ir.h:246
double lambda
Definition kernel_ir.h:292
SimIRNodeId real
Definition kernel_ir.h:305
void * userdata
Definition kernel_ir.h:321
SimIRNodeId id
Definition kernel_ir.h:248
SimIRNoiseDistribution distribution
Definition kernel_ir.h:286
SimIROpcode opcode
Definition kernel_ir.h:250
struct SimIRNode::@1::@9 complex_pack
union SimIRNode::@1 data
double delta
Definition kernel_ir.h:291
double scalar
Definition kernel_ir.h:256
double dx
Definition kernel_ir.h:272
SimIRNodeType type
Definition kernel_ir.h:247
SimIRBoundaryPolicy boundary
Definition kernel_ir.h:279
int64_t signed_scalar
Definition kernel_ir.h:257
struct SimIRNode::@1::@11 unary
SimIRCallKind kind
Definition kernel_ir.h:310
SimIRNodeId lhs
Definition kernel_ir.h:266
struct SimIRNode::@1::@8 complex_rotate
bool exact_integer
Definition kernel_ir.h:259
double small[SIM_IR_SMALL_CONSTANT_CAPACITY]
Definition kernel_ir.h:261
SimWarpLevel warp_class
Definition kernel_ir.h:252
struct SimIRNode::@1::@4 diff
const char * label
Definition kernel_ir.h:322
double amplitude
Definition kernel_ir.h:283
SimIRDiffMethod method
Definition kernel_ir.h:276
double scale
Definition kernel_ir.h:273
SimIRNodeId operand
Definition kernel_ir.h:270
size_t axis
Definition kernel_ir.h:271
struct SimIRNode::@1::@6 warp
struct SimIRNode::@1::@13 stateful
SimIRShape inferred_shape
Definition kernel_ir.h:251
struct SimIRNode::@1::@2 constant
size_t order
Definition kernel_ir.h:274
SimIRWarpProfile profile
Definition kernel_ir.h:294
double tolerance
Definition kernel_ir.h:293
double variance
Definition kernel_ir.h:284
uint64_t unsigned_scalar
Definition kernel_ir.h:258
SimIRWarpGuard guard
Definition kernel_ir.h:295
SimIRNodeId imag
Definition kernel_ir.h:306
SimIRNoiseLaw law
Definition kernel_ir.h:285
struct SimIRNode::@1::@10 call
size_t field
Definition kernel_ir.h:264
SimIRStatefulEvalFn eval
Definition kernel_ir.h:320
struct SimIRNode::@1::@12 coord
struct SimIRNode::@1::@5 noise
double bias
Definition kernel_ir.h:290
size_t stencil_order
Definition kernel_ir.h:275
size_t constant_index
Definition kernel_ir.h:260
SimIRType value_type
Definition kernel_ir.h:249
SimIRParamKind param
Definition kernel_ir.h:298
uint32_t seed
Definition kernel_ir.h:282
double consistency_constant
Definition kernel_ir.h:278
bool is_local
Definition kernel_ir.h:253
struct SimIRNode::@1::@3 binary
SimIRNodeId angle
Definition kernel_ir.h:302
SimIRNodeId rhs
Definition kernel_ir.h:267
Optional metadata for creating stochastic noise nodes.
Definition kernel_ir.h:195
double variance
Definition kernel_ir.h:198
SimIRType value_type
Definition kernel_ir.h:201
uint32_t seed
Definition kernel_ir.h:196
SimIRNoiseLaw law
Definition kernel_ir.h:199
SimIRNoiseDistribution distribution
Definition kernel_ir.h:200
double amplitude
Definition kernel_ir.h:197
Maximum rank supported by shape descriptors.
Definition kernel_ir.h:73
size_t shape[4]
Definition kernel_ir.h:75
size_t rank
Definition kernel_ir.h:74
bool has_shape
Definition kernel_ir.h:76
Metadata for creating stateful IR nodes.
Definition kernel_ir.h:332
void * userdata
Definition kernel_ir.h:334
SimIRStatefulEvalFn eval
Definition kernel_ir.h:333
const char * label
Definition kernel_ir.h:335
SimIRType value_type
Definition kernel_ir.h:336
Type descriptor carried by each IR node.
Definition kernel_ir.h:46
SimIRValueKind kind
Definition kernel_ir.h:47
SimScalarDomain scalar_domain
Definition kernel_ir.h:49
size_t components
Definition kernel_ir.h:48
Continuity guard metadata attached to warp specifications.
Definition kernel_ir.h:170
int mode
Definition kernel_ir.h:171
double clamp_max
Definition kernel_ir.h:173
double clamp_min
Definition kernel_ir.h:172
double tolerance
Definition kernel_ir.h:174
Metadata for creating analytic warp nodes.
Definition kernel_ir.h:180
double delta
Definition kernel_ir.h:183
double bias
Definition kernel_ir.h:182
SimIRWarpGuard guard
Definition kernel_ir.h:188
SimIRNodeId operand
Definition kernel_ir.h:181
double tolerance
Definition kernel_ir.h:185
SimIRType result_type
Definition kernel_ir.h:189
SimWarpLevel warp_class
Definition kernel_ir.h:187
double lambda
Definition kernel_ir.h:184
SimIRWarpProfile profile
Definition kernel_ir.h:186
Unified scalar-domain descriptor.
Definition field.h:116
Exact scalar payload used by scalar-domain-aware evaluators.
Definition kernel_ir.h:55
int64_t as_i64
Definition kernel_ir.h:58
SimComplexDouble as_complex
Definition kernel_ir.h:56
uint64_t as_u64
Definition kernel_ir.h:59
double as_f64
Definition kernel_ir.h:57