MCPcopy Create free account
hub / github.com/Inori/GPCS4 / emitControlFlowBlock

Method emitControlFlowBlock

GPCS4/Graphics/Gcn/GcnCompilerFlowControl.cpp:504–528  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

502 }
503
504 void GcnCompiler::emitControlFlowBlock(const GcnToken& token)
505 {
506 // we use do {} while(false); to implement block,
507 // so it's generally a loop.
508
509 // Declare the 'loop' block
510 GcnCfgBlock block;
511 block.type = GcnCfgBlockType::Loop;
512 block.b_loop.labelHeader = m_module.allocateId();
513 block.b_loop.labelBegin = m_module.allocateId();
514 block.b_loop.labelContinue = m_module.allocateId();
515 block.b_loop.labelBreak = m_module.allocateId();
516 m_controlFlowStack.push_back(block);
517
518 m_module.opBranch(block.b_loop.labelHeader);
519 m_module.opLabel(block.b_loop.labelHeader);
520
521 m_module.opLoopMerge(
522 block.b_loop.labelBreak,
523 block.b_loop.labelContinue,
524 spv::LoopControlMaskNone);
525
526 m_module.opBranch(block.b_loop.labelBegin);
527 m_module.opLabel(block.b_loop.labelBegin);
528 }
529
530 void GcnCompiler::emitControlFlowEndBlock(const GcnToken& token)
531 {

Callers 1

compileTokenBlockMethod · 0.95

Calls 5

allocateIdMethod · 0.80
opBranchMethod · 0.80
opLabelMethod · 0.80
opLoopMergeMethod · 0.80
push_backMethod · 0.45

Tested by

no test coverage detected