diff options
Diffstat (limited to 'source/slang')
| -rw-r--r-- | source/slang/slang-emit-c-like.cpp | 4 | ||||
| -rw-r--r-- | source/slang/slang-ir-restructure.cpp | 6 | ||||
| -rw-r--r-- | source/slang/slang-ir-restructure.h | 22 |
3 files changed, 18 insertions, 14 deletions
diff --git a/source/slang/slang-emit-c-like.cpp b/source/slang/slang-emit-c-like.cpp index 2d30c2109..dccfde7b7 100644 --- a/source/slang/slang-emit-c-like.cpp +++ b/source/slang/slang-emit-c-like.cpp @@ -2508,7 +2508,7 @@ void CLikeSourceEmitter::emitRegion(Region* inRegion) // instead of the current `if(condition) {} else { elseRegion }` m_writer->emit("if("); - emitOperand(ifRegion->condition, getInfo(EmitOp::General)); + emitOperand(ifRegion->getCondition(), getInfo(EmitOp::General)); m_writer->emit(")\n{\n"); m_writer->indent(); emitRegion(ifRegion->thenRegion); @@ -2570,7 +2570,7 @@ void CLikeSourceEmitter::emitRegion(Region* inRegion) // Emit the start of our statement. m_writer->emit("switch("); - emitOperand(switchRegion->condition, getInfo(EmitOp::General)); + emitOperand(switchRegion->getCondition(), getInfo(EmitOp::General)); m_writer->emit(")\n{\n"); auto defaultCase = switchRegion->defaultCase; diff --git a/source/slang/slang-ir-restructure.cpp b/source/slang/slang-ir-restructure.cpp index 5dfb0179a..7ab5b4417 100644 --- a/source/slang/slang-ir-restructure.cpp +++ b/source/slang/slang-ir-restructure.cpp @@ -270,13 +270,12 @@ namespace Slang // region representing an `if` statement. // auto ifInst = (IRIfElse*)terminator; - auto condition = ifInst->getCondition(); auto trueBlock = ifInst->getTrueBlock(); auto falseBlock = ifInst->getFalseBlock(); auto afterBlock = ifInst->getAfterBlock(); - RefPtr<IfRegion> ifRegion = new IfRegion(parentRegion, condition); + RefPtr<IfRegion> ifRegion = new IfRegion(parentRegion, ifInst); // The region for the "then" part of things will consist of // the range of blocks `[trueBlock, afterBlock)`. @@ -461,11 +460,10 @@ namespace Slang // require something like the Relooper algorithm, though. // auto switchInst = (IRSwitch*) terminator; - auto condition = switchInst->getCondition(); auto breakLabel = switchInst->getBreakLabel(); auto defaultLabel = switchInst->getDefaultLabel(); - RefPtr<SwitchRegion> switchRegion = new SwitchRegion(parentRegion, condition); + RefPtr<SwitchRegion> switchRegion = new SwitchRegion(parentRegion, switchInst); // A direct branch to the block after the `switch` can // be emitted as a `break` statement, so we will register diff --git a/source/slang/slang-ir-restructure.h b/source/slang/slang-ir-restructure.h index b7a0569d5..e08dba0d3 100644 --- a/source/slang/slang-ir-restructure.h +++ b/source/slang/slang-ir-restructure.h @@ -3,6 +3,8 @@ #include "../core/slang-basic.h" +#include "slang-ir-insts.h" + namespace Slang { class DiagnosticSink; @@ -107,13 +109,15 @@ namespace Slang class IfRegion : public SeqRegion { public: - IfRegion(Region* parent, IRInst* condition) + IfRegion(Region* parent, IRIfElse* ifElseInst) : SeqRegion(Region::Flavor::If, parent) - , condition(condition) + , ifElseInst(ifElseInst) {} - /// The IR value that controls the conditional branch - IRInst* condition; + /// The IR `ifElse` instruction + IRIfElse* ifElseInst; + + IRInst* getCondition() { return ifElseInst->getCondition(); } /// The region to execute if the `condition` is `true` RefPtr<Region> thenRegion; @@ -182,13 +186,15 @@ namespace Slang class SwitchRegion : public BreakableRegion { public: - SwitchRegion(Region* parent, IRInst* condition) + SwitchRegion(Region* parent, IRSwitch* switchInst) : BreakableRegion(Region::Flavor::Switch, parent) - , condition(condition) + , switchInst(switchInst) {} - /// The IR value that controls the conditional branch - IRInst* condition; + /// The IR `switch` instruction + IRSwitch* switchInst; + + IRInst* getCondition() { return switchInst->getCondition(); } /// A collection of `case`s that share the same code. class Case : public RefObject |
