diff options
| author | Sai Praveen Bangaru <31557731+saipraveenb25@users.noreply.github.com> | 2023-03-15 22:26:58 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-03-15 19:26:58 -0700 |
| commit | 71efd949fa5276e2464416fcf237f8fd2c486281 (patch) | |
| tree | a5b24cd077f2ecc3f74d4dd4671c8260eb6e9b67 /source/slang/slang-ir-ssa.cpp | |
| parent | 38e62199cc75ce34608491c8dd299eb330bde518 (diff) | |
AD: Primal-Hoisting Rework + Checkpoint Policy Framework (#2702)
Diffstat (limited to 'source/slang/slang-ir-ssa.cpp')
| -rw-r--r-- | source/slang/slang-ir-ssa.cpp | 45 |
1 files changed, 32 insertions, 13 deletions
diff --git a/source/slang/slang-ir-ssa.cpp b/source/slang/slang-ir-ssa.cpp index d8246edae..9b50b9c30 100644 --- a/source/slang/slang-ir-ssa.cpp +++ b/source/slang/slang-ir-ssa.cpp @@ -802,6 +802,34 @@ IRInst* readVar( return readVarRec(context, blockInfo, var); } +void collectInstsToRemove( + ConstructSSAContext* context, + IRBlock* block) +{ + IRInst* next = nullptr; + for (auto ii = block->getFirstInst(); ii; ii = next) + { + next = ii->getNextInst(); + + switch (ii->getOp()) + { + default: + // Ordinary instruction -> leave as-is + break; + case kIROp_GetElementPtr: + case kIROp_FieldAddress: + { + auto ptrArg = ii->getOperand(0); + if (auto var = asPromotableVarAccessChain(context, ptrArg)) + { + context->instsToRemove.add(ii); + } + } + break; + } + } +} + void processBlock( ConstructSSAContext* context, IRBlock* block, @@ -877,19 +905,6 @@ void processBlock( } } break; - - case kIROp_GetElementPtr: - case kIROp_FieldAddress: - { - auto ptrArg = ii->getOperand(0); - if (auto var = asPromotableVarAccessChain(context, ptrArg)) - { - context->instsToRemove.add(ii); - } - } - break; - - } } @@ -1078,6 +1093,10 @@ bool constructSSA(ConstructSSAContext* context) context->blockInfos.Add(bb, blockInfo); } + + for(auto bb : globalVal->getBlocks()) + collectInstsToRemove(context, bb); + for(auto bb : globalVal->getBlocks()) { auto blockInfo = * context->blockInfos.TryGetValue(bb); |
