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