171 for (
size_t n = 0; n < structnode->nsubregions(); n++)
180 auto constant_output =
dynamic_cast<rvsdg::NodeOutput *
>(node->input(0)->origin());
183 &constant_output->node()->GetOperation());
185 JLM_ASSERT(constant_operation->Representation().to_uint() == 1);
187 auto at = std::dynamic_pointer_cast<const llvm::ArrayType>(po->allocatedType());
192 auto mem_outs = LocalMemoryOperation::create(at, node->region());
193 auto resp_outs = LocalMemoryResponseOperation::create(*mem_outs[0], ta.
load_nodes.size());
194 std::cout <<
"alloca converted " << at->debug_string() << std::endl;
197 std::vector<jlm::rvsdg::Output *> load_addrs;
202 resp_outs.erase(resp_outs.begin());
203 std::vector<jlm::rvsdg::Output *> states;
204 for (
size_t i = 1; i < l->ninputs(); ++i)
206 states.push_back(l->input(i)->origin());
208 auto load_outs = LocalLoadOperation::create(*index, states, *response);
210 for (
size_t i = 0; i < l->noutputs(); ++i)
216 load_addrs.push_back(addr);
218 std::vector<jlm::rvsdg::Output *> store_operands;
222 std::vector<jlm::rvsdg::Output *> states;
223 for (
size_t i = 2; i < s->ninputs(); ++i)
225 states.push_back(s->input(i)->origin());
227 auto store_outs = LocalStoreOperation::create(*index, *s->input(1)->origin(), states);
229 for (
size_t i = 0; i < s->noutputs(); ++i)
236 store_operands.push_back(addr);
237 store_operands.push_back(data);
242 auto req_outs = LocalMemoryRequestOperation::create(*mem_outs[1], load_addrs, store_operands);
247 auto & merge_in = *node->output(1)->Users().begin();
248 auto merge_node = rvsdg::TryGetOwnerNode<rvsdg::Node>(merge_in);
253 auto other_index = merge_in.index() ? 0 : 1;
254 merge_node->output(0)->divert_users(merge_node->input(other_index)->origin());
A variable routed into all gamma regions.