summaryrefslogtreecommitdiffstats
path: root/source/slang
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang')
-rw-r--r--source/slang/slang-emit-c-like.cpp4
-rw-r--r--source/slang/slang-ir-restructure.cpp6
-rw-r--r--source/slang/slang-ir-restructure.h22
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