37 bool isTopLevelComposition;
43 vector<VuoPort *> modelInputPorts;
46 vector<VuoPort *> modelOutputPorts;
49 map<VuoCompilerTriggerPort *, vector<VuoCompilerChain *> > chainsForTrigger;
52 map<VuoCompilerTriggerPort *, vector<VuoCompilerNode *> > downstreamNodesForTrigger;
55 vector<VuoCompilerNode *> orderedNodes;
58 vector<VuoCompilerType *> orderedTypes;
61 set<string> dependencies;
70 map<VuoCompilerNode *, Function *> executionFunctionForNode;
73 map<VuoCompilerNode *, Function *> transmissionFunctionForNode;
76 map<VuoCompilerTriggerPort *, Function *> topLevelTriggerFunctions;
79 map<string, map<size_t, map<VuoCompilerTriggerDescription *, Function *> > > subcompositionTriggerFunctions;
84 void makeOrderedNodes(
void);
85 void sortNodes(vector<VuoCompilerNode *> &nodes);
88 void makeOrderedTypes(
void);
89 void makePortContextInfo(
void);
90 void makeSubcompositionModelPorts(
void);
91 void makeDependencies(
void);
92 void generateShouldShowSplashWindowFunction(
bool shouldShow);
93 void generateCompositionMetadata(
void);
94 void generateCompositionAddNodeMetadataFunction(
void);
95 void generateCompositionCreateContextForNodeFunction(
void);
96 void generateCompositionPerformDataOnlyTransmissionsFunction(
void);
97 void generateCompositionReleasePortDataFunction(
void);
98 void generateSetInputDataFromNodeFunctionArguments(Function *
function, BasicBlock *&block, Value *compositionStateValue, map<VuoPort *, size_t> indexOfParameter, map<VuoPort *, size_t> indexOfEventParameter,
bool shouldWaitForDataOnlyDownstreamNodes,
bool shouldUpdateTriggers,
bool shouldSendTelemetry);
99 void generateNodeEventFunction(
bool isStatefulComposition);
100 void generateNodeInstanceInitFunction(
void);
101 void generateNodeInstanceFiniFunction(
void);
102 void generateNodeInstanceTriggerStartFunction(
void);
103 void generateNodeInstanceTriggerStopFunction(
void);
104 void generateNodeInstanceTriggerUpdateFunction(
void);
105 void generateLockNodes(Module *module, BasicBlock *block, Value *compositionStateValue, vector<VuoCompilerNode *> nodes, Value *eventIdValue = NULL);
106 void generateUnlockNodes(Module *module, BasicBlock *block, Value *compositionStateValue, vector<VuoCompilerNode *> nodes);
107 void generateCompositionGetPortValueFunction(
void);
108 void generateCompositionSetPortValueFunction(
void);
109 void generateSetInputPortValueFunction(
void);
110 void generateCompositionFireTriggerPortEventFunction(
void);
111 void generateGetPublishedPortCountFunction(
bool input);
112 void generateGetPublishedPortNamesFunction(
bool input);
113 void generateGetPublishedPortTypesFunction(
bool input);
114 void generateGetPublishedPortDetailsFunction(
bool input);
115 void generateFunctionReturningStringArray(
string functionName, vector<string> stringValues);
116 void generateFirePublishedInputPortEventFunction(
void);
117 void generateGetPublishedPortValueFunction(
bool input);
118 void generateCompositionSetPublishedInputPortValueFunction(
void);
119 void generateSetPublishedInputPortValueFunction(
void);
120 void generateTransmissionFromOutputPort(Function *
function, BasicBlock *¤tBlock, Value *compositionStateValue,
VuoCompilerNode *outputNode,
VuoCompilerPort *outputPort, Value *eventValue, Value *dataPointer,
bool requiresEvent =
true,
bool shouldSendTelemetry =
true);
121 void generateTransmissionFromNode(Function *
function, BasicBlock *¤tBlock, Value *compositionStateValue, Value *nodeContextValue,
VuoCompilerNode *node,
bool requiresEvent =
true,
bool shouldSendTelemetry =
true);
122 void generateTelemetryFromPublishedOutputNode(Function *
function, BasicBlock *¤tBlock, Value *compositionStateValue, Value *nodeContextValue,
VuoCompilerNode *node);
123 void generateDataOnlyTransmissionFromNode(Function *
function, BasicBlock *¤tBlock, Value *compositionStateValue,
VuoCompilerNode *node,
bool shouldWaitForDownstreamNodes,
bool shouldUpdateTriggers,
bool shouldSendTelemetry);
124 void generateNodeExecution(Function *
function, BasicBlock *¤tBlock, Value *compositionStateValue,
VuoCompilerNode *node,
bool shouldSendTelemetry =
true);
125 void generateAllocation(
void);
126 void generateSetupFunction(
bool isStatefulComposition);
127 void generateCleanupFunction(
void);
128 void generateInstanceInitFunction(
bool isStatefulComposition);
129 void generateInstanceFiniFunction(
bool isStatefulComposition);
130 void generateInstanceTriggerStartFunction(
bool isStatefulComposition);
131 void generateInstanceTriggerStopFunction(
bool isStatefulComposition);
132 void generateTriggerFunctions(
void);
133 Function * generateTriggerSchedulerFunction(
VuoType *dataType,
string compositionIdentifier,
size_t nodeIndex,
134 string portIdentifier,
int portContextIndex,
bool canDropEvents,
bool isPublishedInputTrigger,
bool isSpinOff,
int minThreadsNeeded,
int maxThreadsNeeded,
int chainCount,
135 Function *workerFunction);
137 void generateAndScheduleChainWorkerFunctions(BasicBlock *schedulerBlock, Value *compositionStateValueInScheduler, Value *contextValueInScheduler,
const vector<VuoCompilerChain *> &chainsToSchedule,
VuoCompilerTriggerPort *trigger,
const vector<VuoCompilerChain *> &allChains,
138 const map<
VuoCompilerChain *, vector<VuoCompilerChain *> > &chainsImmediatelyDownstream,
const map<
VuoCompilerChain *, vector<VuoCompilerChain *> > &chainsImmediatelyUpstream,
139 set<VuoCompilerChain *> &chainsScheduled);
140 void generateAndScheduleChainWorkerFunction(BasicBlock *schedulerBlock, Value *compositionStateValueInScheduler, Value *contextValueInScheduler,
VuoCompilerChain *chain,
VuoCompilerTriggerPort *trigger,
const vector<VuoCompilerChain *> &allChains,
141 const map<
VuoCompilerChain *, vector<VuoCompilerChain *> > &chainsImmediatelyDownstream,
const map<
VuoCompilerChain *, vector<VuoCompilerChain *> > &chainsImmediatelyUpstream,
142 set<VuoCompilerChain *> &chainsScheduled);
143 void generateChainExecution(Function *
function, BasicBlock *&block, Value *compositionStateValue, Value *contextValue, Value *eventIdValue,
VuoCompilerChain *chain,
VuoCompilerTriggerPort *trigger,
const vector<VuoCompilerChain *> &allChains,
144 const map<
VuoCompilerChain *, vector<VuoCompilerChain *> > &chainsImmediatelyDownstream,
const map<
VuoCompilerChain *, vector<VuoCompilerChain *> > &chainsImmediatelyUpstream,
145 set<VuoCompilerChain *> &chainsScheduled);
146 Function * generateNodeExecutionFunction(Module *module,
VuoCompilerNode *node);
147 Function * generateNodeTransmissionFunction(Module *module,
VuoCompilerNode *node);
149 friend class TestVuoCompilerBitcodeGenerator;
150 friend class TestVuoCompilerGraphExecution;
151 friend class TestControlAndTelemetry;
152 friend class TestNodeExecutionOrderRunnerDelegate;
156 bool isTopLevelComposition,
163 #include "pro/VuoCompilerBitcodeGenerator_Pro.hh"