Jlm
Loading...
Searching...
No Matches
TestRvsdgs.cpp
Go to the documentation of this file.
1/*
2 * Copyright 2026 Magnus Sjalander <work@sjalander.com>
3 * See COPYING for terms of redistribution.
4 */
5
18#include <jlm/rvsdg/graph.hpp>
19#include <jlm/rvsdg/lambda.hpp>
20
21namespace jlm::mlir
22{
23
24std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
26{
27 using namespace jlm::llvm;
28 using namespace jlm::rvsdg;
29
30 auto fcttype = rvsdg::FunctionType::Create(
31 { MemoryStateType::Create(), PointerType::Create() },
32 { jlm::rvsdg::BitType::Create(32), MemoryStateType::Create() });
33
34 auto module = LlvmRvsdgModule::Create(jlm::util::FilePath(""), "", "");
35 auto graph = &module->Rvsdg();
36
39 llvm::LlvmLambdaOperation::Create(fcttype, "f", Linkage::externalLinkage));
40 auto memoryStateArgument = fct->GetFunctionArguments()[0];
41 auto pointerArgument = fct->GetFunctionArguments()[1];
42
43 auto load = LoadNonVolatileOperation::Create(
44 pointerArgument,
45 { memoryStateArgument },
46 BitType::Create(32),
47 4);
48
49 fct->finalize({ load[0], load[1] });
50
51 GraphExport::Create(*fct->output(), "f");
52
53 this->lambda = fct;
55
56 return module;
57}
58
59std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
61{
62 using namespace jlm::llvm;
63 using namespace jlm::rvsdg;
64
65 auto fcttype = rvsdg::FunctionType::Create(
66 { IOStateType::Create(), MemoryStateType::Create(), PointerType::Create() },
67 { jlm::rvsdg::BitType::Create(32), IOStateType::Create(), MemoryStateType::Create() });
68
69 auto module = LlvmRvsdgModule::Create(jlm::util::FilePath(""), "", "");
70 auto graph = &module->Rvsdg();
71
74 llvm::LlvmLambdaOperation::Create(fcttype, "f", Linkage::externalLinkage));
75 auto iOStateArgument = fct->GetFunctionArguments()[0];
76 auto memoryStateArgument = fct->GetFunctionArguments()[1];
77 auto pointerArgument = fct->GetFunctionArguments()[2];
78
79 auto & loadNode = LoadVolatileOperation::CreateNode(
80 *pointerArgument,
81 *iOStateArgument,
82 { memoryStateArgument },
83 BitType::Create(32),
84 4);
85
86 fct->finalize({ loadNode.output(0), loadNode.output(1), loadNode.output(2) });
87
88 GraphExport::Create(*fct->output(), "f");
89
90 this->lambda = fct;
91 this->load = &loadNode;
92
93 return module;
94}
95
96std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
98{
99 using namespace jlm::llvm;
100 using namespace jlm::rvsdg;
101
102 auto fcttype = rvsdg::FunctionType::Create(
103 { MemoryStateType::Create(), PointerType::Create(), jlm::rvsdg::BitType::Create(32) },
104 { MemoryStateType::Create() });
105
106 auto module = LlvmRvsdgModule::Create(jlm::util::FilePath(""), "", "");
107 auto graph = &module->Rvsdg();
108
109 auto fct = rvsdg::LambdaNode::Create(
111 llvm::LlvmLambdaOperation::Create(fcttype, "f", Linkage::externalLinkage));
112 auto memoryStateArgument = fct->GetFunctionArguments()[0];
113 auto pointerArgument = fct->GetFunctionArguments()[1];
114 auto valueArgument = fct->GetFunctionArguments()[2];
115
116 auto store =
117 StoreNonVolatileOperation::Create(pointerArgument, valueArgument, { memoryStateArgument }, 4);
118
119 fct->finalize({ store[0] });
120
121 GraphExport::Create(*fct->output(), "f");
122
123 this->lambda = fct;
125
126 return module;
127}
128
129std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
131{
132 using namespace jlm::llvm;
133 using namespace jlm::rvsdg;
134
135 auto fcttype = rvsdg::FunctionType::Create(
136 { IOStateType::Create(),
137 MemoryStateType::Create(),
138 PointerType::Create(),
140 { IOStateType::Create(), MemoryStateType::Create() });
141
142 auto module = LlvmRvsdgModule::Create(jlm::util::FilePath(""), "", "");
143 auto graph = &module->Rvsdg();
144
145 auto fct = rvsdg::LambdaNode::Create(
147 llvm::LlvmLambdaOperation::Create(fcttype, "f", Linkage::externalLinkage));
148 auto iOStateArgument = fct->GetFunctionArguments()[0];
149 auto memoryStateArgument = fct->GetFunctionArguments()[1];
150 auto pointerArgument = fct->GetFunctionArguments()[2];
151 auto valueArgument = fct->GetFunctionArguments()[3];
152
153 auto & storeNode = StoreVolatileOperation::CreateNode(
154 *pointerArgument,
155 *valueArgument,
156 *iOStateArgument,
157 { memoryStateArgument },
158 4);
159
160 fct->finalize({ storeNode.output(0), storeNode.output(1) });
161
162 GraphExport::Create(*fct->output(), "f");
163
164 this->lambda = fct;
165 this->store = &storeNode;
166
167 return module;
168}
169
170std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
172{
173 using namespace jlm::llvm;
174 using namespace jlm::rvsdg;
175
176 auto fcttype = rvsdg::FunctionType::Create(
177 { IOStateType::Create(), MemoryStateType::Create(), PointerType::Create() },
178 { BitType::Create(32), IOStateType::Create(), MemoryStateType::Create() });
179
180 auto module = LlvmRvsdgModule::Create(jlm::util::FilePath(""), "", "");
181 auto graph = &module->Rvsdg();
182
183 auto fct = rvsdg::LambdaNode::Create(
185 llvm::LlvmLambdaOperation::Create(fcttype, "f", Linkage::externalLinkage));
186 auto iOStateArgument = fct->GetFunctionArguments()[0];
187 auto memoryStateArgument = fct->GetFunctionArguments()[1];
188 auto pointerArgument = fct->GetFunctionArguments()[2];
189
190 // A non-volatile load, but one whose address is sequentialized by a memory hoist barrier.
191 auto & memoryHoistBarrierNode =
192 MemoryHoistBarrierOperation::createNode(*pointerArgument, *iOStateArgument, 4);
193
194 auto load = LoadNonVolatileOperation::Create(
195 memoryHoistBarrierNode.output(0),
196 { memoryStateArgument },
197 BitType::Create(32),
198 4);
199
200 fct->finalize({ load[0], iOStateArgument, load[1] });
201
202 GraphExport::Create(*fct->output(), "f");
203
204 this->lambda = fct;
205 this->memoryHoistBarrier = &memoryHoistBarrierNode;
206
207 return module;
208}
209
210std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
212{
213 using namespace jlm::llvm;
214 using namespace jlm::rvsdg;
215
216 auto bitType64 = BitType::Create(64);
217 auto bitType32 = BitType::Create(32);
218 auto functionType = FunctionType::Create({ bitType32 }, { bitType32 });
219
220 auto module = LlvmRvsdgModule::Create(jlm::util::FilePath(""), "", "");
221 auto graph = &module->Rvsdg();
222
223 auto fct = rvsdg::LambdaNode::Create(
225 llvm::LlvmLambdaOperation::Create(functionType, "f", Linkage::externalLinkage));
226 auto valueArgument = fct->GetFunctionArguments()[0];
227
228 auto & sextNode = SExtOperation::createNode(64, *valueArgument);
229 auto & truncNode = TruncOperation::createNode(*sextNode.output(0), bitType32);
230
231 fct->finalize({ truncNode.output(0) });
232
233 GraphExport::Create(*fct->output(), "f");
234
235 this->lambda = fct;
236 this->sext = &sextNode;
237 this->trunc = &truncNode;
238
239 return module;
240}
241
242std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
244{
245 using namespace jlm::llvm;
246 using namespace jlm::rvsdg;
247
248 auto floatType = FloatingPointType::Create(fpsize::dbl);
249 auto functionType =
250 FunctionType::Create({ floatType, floatType }, { floatType, floatType, floatType });
251
252 auto module = LlvmRvsdgModule::Create(jlm::util::FilePath(""), "", "");
253 auto graph = &module->Rvsdg();
254
255 auto fct = rvsdg::LambdaNode::Create(
257 llvm::LlvmLambdaOperation::Create(functionType, "f", Linkage::externalLinkage));
258 auto lhsArgument = fct->GetFunctionArguments()[0];
259 auto rhsArgument = fct->GetFunctionArguments()[1];
260
261 auto & sum = CreateOpNode<FBinaryOperation>({ lhsArgument, rhsArgument }, fpop::add, floatType);
262 auto & difference =
263 CreateOpNode<FBinaryOperation>({ lhsArgument, rhsArgument }, fpop::sub, floatType);
264 auto & product =
265 CreateOpNode<FBinaryOperation>({ lhsArgument, rhsArgument }, fpop::mul, floatType);
266 auto & quotient =
267 CreateOpNode<FBinaryOperation>({ sum.output(0), difference.output(0) }, fpop::div, floatType);
268 auto & remainder =
269 CreateOpNode<FBinaryOperation>({ product.output(0), sum.output(0) }, fpop::mod, floatType);
270
271 auto & first =
272 CreateOpNode<FBinaryOperation>({ sum.output(0), difference.output(0) }, fpop::add, floatType);
273 auto & second = CreateOpNode<FBinaryOperation>(
274 { product.output(0), quotient.output(0) },
275 fpop::add,
276 floatType);
277 auto & third = CreateOpNode<FBinaryOperation>(
278 { second.output(0), remainder.output(0) },
279 fpop::add,
280 floatType);
281
282 fct->finalize({ first.output(0), second.output(0), third.output(0) });
283
284 GraphExport::Create(*fct->output(), "f");
285
286 this->lambda = fct;
287
288 return module;
289}
290
291std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
293{
294 using namespace jlm::llvm;
295 using namespace jlm::rvsdg;
296
297 auto doubleType = FloatingPointType::Create(fpsize::dbl);
298 auto floatType = FloatingPointType::Create(fpsize::flt);
299 auto bitType64 = BitType::Create(64);
300 auto functionType =
301 FunctionType::Create({ doubleType, floatType, bitType64 }, { doubleType, doubleType });
302
303 auto module = LlvmRvsdgModule::Create(jlm::util::FilePath(""), "", "");
304 auto graph = &module->Rvsdg();
305
306 auto fct = rvsdg::LambdaNode::Create(
308 llvm::LlvmLambdaOperation::Create(functionType, "f", Linkage::externalLinkage));
309 auto doubleArgument = fct->GetFunctionArguments()[0];
310 auto floatArgument = fct->GetFunctionArguments()[1];
311 auto integerArgument = fct->GetFunctionArguments()[2];
312
313 auto & constant = CreateOpNode<ConstantFP>(*fct->subregion(), fpsize::dbl, ::llvm::APFloat(2.0));
314
315 auto & extended = CreateOpNode<FPExtOperation>({ floatArgument }, floatType, doubleType);
316
317 auto & sum = CreateOpNode<FBinaryOperation>(
318 { extended.output(0), constant.output(0) },
319 fpop::add,
320 doubleType);
321
322 auto & negated = CreateOpNode<FNegOperation>({ sum.output(0) }, doubleType);
323
324 auto & converted = CreateOpNode<SIToFPOperation>({ integerArgument }, bitType64, doubleType);
325
326 auto & fused = CreateOpNode<FMulAddIntrinsicOperation>(
327 { doubleArgument, doubleArgument, converted.output(0) },
328 doubleType);
329
330 auto & first = CreateOpNode<FBinaryOperation>(
331 { negated.output(0), converted.output(0) },
332 fpop::add,
333 doubleType);
334 auto & second = CreateOpNode<FBinaryOperation>(
335 { converted.output(0), fused.output(0) },
336 fpop::add,
337 doubleType);
338
339 fct->finalize({ first.output(0), second.output(0) });
340
341 GraphExport::Create(*fct->output(), "f");
342
343 this->lambda = fct;
344
345 return module;
346}
347
348std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
350{
351 using namespace jlm::llvm;
352 using namespace jlm::rvsdg;
353
354 auto doubleType = FloatingPointType::Create(fpsize::dbl);
355 auto pointerType = PointerType::Create();
356 auto bitType32 = BitType::Create(32);
357 auto functionType = FunctionType::Create(
358 { doubleType, doubleType, pointerType, pointerType },
359 { bitType32, bitType32 });
360
361 auto module = LlvmRvsdgModule::Create(jlm::util::FilePath(""), "", "");
362 auto graph = &module->Rvsdg();
363
364 auto fct = rvsdg::LambdaNode::Create(
366 llvm::LlvmLambdaOperation::Create(functionType, "f", Linkage::externalLinkage));
367 auto lhsArgument = fct->GetFunctionArguments()[0];
368 auto rhsArgument = fct->GetFunctionArguments()[1];
369 auto lhsPointerArgument = fct->GetFunctionArguments()[2];
370 auto rhsPointerArgument = fct->GetFunctionArguments()[3];
371
372 auto & floatCompareNode =
373 CreateOpNode<FCmpOperation>({ lhsArgument, rhsArgument }, fpcmp::olt, fpsize::dbl);
374
375 auto zero = &IntegerConstantOperation::Create(*fct->subregion(), { 32, 0 });
376 auto one = &IntegerConstantOperation::Create(*fct->subregion(), { 32, 1 });
377
378 auto & firstSelect = CreateOpNode<SelectOperation>(
379 { floatCompareNode.output(0), one->output(0), zero->output(0) },
380 bitType32);
381
382 auto & pointerCompareNode = CreateOpNode<PtrCmpOperation>(
383 { lhsPointerArgument, rhsPointerArgument },
384 pointerType,
385 ICmpPredicate::Slt);
386
387 auto & secondSelect = CreateOpNode<SelectOperation>(
388 { pointerCompareNode.output(0), one->output(0), zero->output(0) },
389 bitType32);
390
391 fct->finalize({ firstSelect.output(0), secondSelect.output(0) });
392
393 GraphExport::Create(*fct->output(), "f");
394
395 this->lambda = fct;
396 this->fcmp = &floatCompareNode;
397 this->ptrcmp = &pointerCompareNode;
398
399 return module;
400}
401
402std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
404{
405 using namespace jlm::llvm;
406 using namespace jlm::rvsdg;
407
408 auto bitType32 = BitType::Create(32);
409 auto functionType = FunctionType::Create(
410 { IOStateType::Create(), bitType32 },
411 { IOStateType::Create(), bitType32 });
412
413 auto module = LlvmRvsdgModule::Create(jlm::util::FilePath(""), "", "");
414 auto graph = &module->Rvsdg();
415
416 auto fct = rvsdg::LambdaNode::Create(
418 llvm::LlvmLambdaOperation::Create(functionType, "f", Linkage::externalLinkage));
419 auto iOStateArgument = fct->GetFunctionArguments()[0];
420 auto valueArgument = fct->GetFunctionArguments()[1];
421
422 auto & barrierNode = IOBarrierOperation::createNode(*valueArgument, *iOStateArgument);
423
424 auto constant = &IntegerConstantOperation::Create(*fct->subregion(), { 32, 1 });
425 auto & addNode =
426 IntegerAddOperation::createNode(32, *barrierNode.output(0), *constant->output(0));
427
428 fct->finalize({ iOStateArgument, addNode.output(0) });
429
430 GraphExport::Create(*fct->output(), "f");
431
432 this->lambda = fct;
433 this->barrier = &barrierNode;
434 this->add = rvsdg::TryGetOwnerNode<SimpleNode>(*addNode.output(0));
435
436 return module;
437}
438
439std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
441{
442 using namespace jlm::llvm;
443 using namespace jlm::rvsdg;
444
445 auto bitType32 = BitType::Create(32);
446
447 auto module = LlvmRvsdgModule::Create(jlm::util::FilePath(""), "", "");
448 auto graph = &module->Rvsdg();
449
450 auto mutableDelta = DeltaNode::Create(
452 LlvmDeltaOperation::Create(
453 bitType32,
454 "mutableGlobal",
455 Linkage::externalLinkage,
456 "mysection",
457 false,
458 4));
459 auto mutableConstant =
460 IntegerConstantOperation::Create(*mutableDelta->subregion(), 32, 1).output(0);
461 auto & mutableOutput = mutableDelta->finalize(mutableConstant);
462 GraphExport::Create(mutableOutput, "mutableGlobal");
463
464 auto constantDelta = DeltaNode::Create(
466 LlvmDeltaOperation::Create(
467 bitType32,
468 "constantGlobal",
469 Linkage::externalLinkage,
470 "mysection",
471 true,
472 4));
473 auto constantConstant =
474 IntegerConstantOperation::Create(*constantDelta->subregion(), 32, 1).output(0);
475 auto & constantOutput = constantDelta->finalize(constantConstant);
476 GraphExport::Create(constantOutput, "constantGlobal");
477
480
481 return module;
482}
483
484std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
486{
487 using namespace jlm::llvm;
488 using namespace jlm::rvsdg;
489
490 auto bitType32 = BitType::Create(32);
491 auto arrayType = ArrayType::Create(bitType32, 2);
492
493 auto module = LlvmRvsdgModule::Create(jlm::util::FilePath(""), "", "");
494 auto graph = &module->Rvsdg();
495
496 auto initDelta = DeltaNode::Create(
498 LlvmDeltaOperation::Create(arrayType, "initArray", Linkage::externalLinkage, "", false, 4));
499 auto one = &IntegerConstantOperation::Create(*initDelta->subregion(), { 32, 1 });
500 auto two = &IntegerConstantOperation::Create(*initDelta->subregion(), { 32, 2 });
501 auto constantDataArray = ConstantDataArrayOperation::Create({ one->output(0), two->output(0) });
502 auto & initOutput = initDelta->finalize(constantDataArray);
503 GraphExport::Create(initOutput, "initArray");
504
505 auto zeroDelta = DeltaNode::Create(
507 LlvmDeltaOperation::Create(arrayType, "zeroArray", Linkage::externalLinkage, "", false, 4));
509 ConstantAggregateZeroOperation::Create(*zeroDelta->subregion(), arrayType);
510 auto & zeroOutput = zeroDelta->finalize(constantAggregateZero);
511 GraphExport::Create(zeroOutput, "zeroArray");
512
513 this->initDelta = initDelta;
514 this->zeroDelta = zeroDelta;
517
518 return module;
519}
520
521std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
523{
524 using namespace jlm::llvm;
525 using namespace jlm::rvsdg;
526
527 auto bitType64 = BitType::Create(64);
528 auto pointerType = PointerType::Create();
529 auto functionType = FunctionType::Create(
530 { IOStateType::Create(), MemoryStateType::Create() },
531 { pointerType, pointerType, IOStateType::Create(), MemoryStateType::Create() });
532
533 auto module = LlvmRvsdgModule::Create(jlm::util::FilePath(""), "", "");
534 auto graph = &module->Rvsdg();
535
536 auto fct = rvsdg::LambdaNode::Create(
538 llvm::LlvmLambdaOperation::Create(functionType, "f", Linkage::externalLinkage));
539 auto iOStateArgument = fct->GetFunctionArguments()[0];
540 auto memoryStateArgument = fct->GetFunctionArguments()[1];
541
542 auto size = &IntegerConstantOperation::Create(*fct->subregion(), { 64, 128 });
543 auto & mallocNode = MallocOperation::createNode(*size->output(0), *iOStateArgument);
544
545 auto count = &IntegerConstantOperation::Create(*fct->subregion(), { 32, 1 });
546 auto & allocaNode = AllocaOperation::createNode(bitType64, *count->output(0), 8);
547
548 auto memoryState = MemoryStateMergeOperation::Create(
549 std::vector<jlm::rvsdg::Output *>{ memoryStateArgument,
550 &MallocOperation::memoryStateOutput(mallocNode),
551 &AllocaOperation::getMemoryStateOutput(allocaNode) });
552
553 fct->finalize({ &MallocOperation::addressOutput(mallocNode),
554 allocaNode.output(0),
555 &MallocOperation::ioStateOutput(mallocNode),
556 memoryState });
557
558 GraphExport::Create(*fct->output(), "f");
559
560 this->lambda = fct;
561 this->malloc = &mallocNode;
562 this->alloca = &allocaNode;
563
564 return module;
565}
566
567std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
569{
570 using namespace jlm::llvm;
571 using namespace jlm::rvsdg;
572
573 auto module = LlvmRvsdgModule::Create(jlm::util::FilePath(""), "", "");
574 auto graph = &module->Rvsdg();
575
576 auto constant = &IntegerConstantOperation::Create(graph->GetRootRegion(), { 64, 16 });
577 GraphExport::Create(*constant->output(0), "constant");
578
579 auto first = &IntegerConstantOperation::Create(graph->GetRootRegion(), { 64, 1 });
580 auto second = &IntegerConstantOperation::Create(graph->GetRootRegion(), { 64, 2 });
581 auto variadicArgumentList = VariadicArgumentListOperation::Create(
583 { first->output(0), second->output(0) });
584 GraphExport::Create(*variadicArgumentList, "argumentList");
585
588
589 return module;
590}
591
592}
static std::unique_ptr< LlvmLambdaOperation > Create(std::shared_ptr< const jlm::rvsdg::FunctionType > type, std::string name, const jlm::llvm::Linkage &linkage, jlm::llvm::CallingConvention callingConvention, jlm::llvm::AttributeSet attributes)
Definition lambda.hpp:84
const rvsdg::Graph & graph()
jlm::rvsdg::SimpleNode * fcmp
jlm::rvsdg::LambdaNode * lambda
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::SimpleNode * ptrcmp
jlm::rvsdg::DeltaNode * constantDelta
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::DeltaNode * mutableDelta
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::LambdaNode * lambda
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::LambdaNode * lambda
jlm::rvsdg::DeltaNode * initDelta
jlm::rvsdg::SimpleNode * constantAggregateZero
jlm::rvsdg::DeltaNode * zeroDelta
jlm::rvsdg::SimpleNode * constantDataArray
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::SimpleNode * add
jlm::rvsdg::SimpleNode * barrier
jlm::rvsdg::LambdaNode * lambda
jlm::rvsdg::SimpleNode * sext
jlm::rvsdg::LambdaNode * lambda
jlm::rvsdg::SimpleNode * trunc
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::LambdaNode * lambda
jlm::rvsdg::SimpleNode * load
jlm::rvsdg::LambdaNode * lambda
jlm::rvsdg::SimpleNode * load
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::LambdaNode * lambda
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::SimpleNode * memoryHoistBarrier
jlm::rvsdg::SimpleNode * variadicArgumentList
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::SimpleNode * constant
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::SimpleNode * store
jlm::rvsdg::LambdaNode * lambda
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::LambdaNode * lambda
jlm::rvsdg::SimpleNode * store
jlm::rvsdg::SimpleNode * alloca
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::LambdaNode * lambda
jlm::rvsdg::SimpleNode * malloc
static std::shared_ptr< const BitType > Create(std::size_t nbits)
Creates bit type of specified width.
Definition type.cpp:45
rvsdg::Region * subregion() const noexcept
Definition delta.hpp:234
rvsdg::Output & finalize(rvsdg::Output *result)
Definition delta.cpp:122
static std::shared_ptr< const FunctionType > Create(std::vector< std::shared_ptr< const jlm::rvsdg::Type > > argumentTypes, std::vector< std::shared_ptr< const jlm::rvsdg::Type > > resultTypes)
Region & GetRootRegion() const noexcept
Definition graph.hpp:99
static LambdaNode * Create(rvsdg::Region &parent, std::unique_ptr< LambdaOperation > operation)
Definition lambda.cpp:141
NodeOutput * output(size_t index) const noexcept
Global memory state passed between functions.
NodeType * TryGetOwnerNode(const rvsdg::Input &input) noexcept
Checks if this is an input to a node of specified type.
Definition node.hpp:872