summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-ir-spirv-legalize.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-ir-spirv-legalize.cpp')
-rw-r--r--source/slang/slang-ir-spirv-legalize.cpp18
1 files changed, 6 insertions, 12 deletions
diff --git a/source/slang/slang-ir-spirv-legalize.cpp b/source/slang/slang-ir-spirv-legalize.cpp
index 965d6dc9b..97649f4ad 100644
--- a/source/slang/slang-ir-spirv-legalize.cpp
+++ b/source/slang/slang-ir-spirv-legalize.cpp
@@ -184,13 +184,7 @@ struct SPIRVLegalizationContext : public SourceEmitterBase
//
OrderedHashSet<IRInst*> workList;
- void addToWorkList(IRInst* inst)
- {
- if (workList.add(inst))
- {
- addUsersToWorkList(inst);
- }
- }
+ void addToWorkList(IRInst* inst) { workList.add(inst); }
void addUsersToWorkList(IRInst* inst)
{
@@ -1692,8 +1686,6 @@ struct SPIRVLegalizationContext : public SourceEmitterBase
}
};
- void processBranch(IRInst* branch) { addToWorkList(branch->getOperand(0)); }
-
void processPtrLit(IRInst* inst)
{
IRBuilder builder(inst);
@@ -1844,9 +1836,11 @@ struct SPIRVLegalizationContext : public SourceEmitterBase
case kIROp_PtrLit:
processPtrLit(inst);
break;
- case kIROp_UnconditionalBranch:
- processBranch(inst);
- break;
+ // kIROp_UnconditionalBranch is handled in default case that only
+ // adds children inst and not target inst to work list.
+ // Branch target should be added to work list via its parent,
+ // to avoid cycle when branch target block has branch to the block
+ // that's parent of this branch inst.
case kIROp_SPIRVAsm:
processSPIRVAsm(as<IRSPIRVAsm>(inst));
break;