summaryrefslogtreecommitdiff
path: root/source/slang/slang-ir-addr-inst-elimination.cpp
diff options
context:
space:
mode:
authorvenkataram-nv <vedavamadath@nvidia.com>2024-09-18 20:42:07 -0700
committerGitHub <noreply@github.com>2024-09-18 20:42:07 -0700
commitb808aa4df50d46eaa569561f7e464c55c1c2d72a (patch)
tree5483a3f9e73a401ff82d66fd1ac3729a9a84a97c /source/slang/slang-ir-addr-inst-elimination.cpp
parent3240799c00488858afc7eeac9d1dc479609a1040 (diff)
Report AD checkpoint contexts (#5058)
* Transferring source locations when creating phi instructions * Tracking for simple variables * Deriving source locations for loop counters * Printing checkpoint structure breakdown * More readable output format * Special behavior for loop counters * Writing report to file * Add slangc option to enable checkpoint reports * Display types of checkpointed fields * Message in case there are no checkpointing contexts * Catch source locations for function calls * Source cleanup * Fix compilation warnings * Remove stray dump() * Provide the report through diagnostic notes * Add missing path for sourceLoc during unzip pass * Add tests for reporting intermediates * Include more transfer cases for source locations * Fix ordering in address elimination * Fill in more holes with source location transfer * Remove debugging line * Reverting changes to diagnostic sink * Simplify address elimination using source location RAII contexts * Eliminating manual source loc transfers in forward transcription * Fix local var adaptation to use RAII location setter * Simplify primal hoisting logic for source location transfer * Simplify unzipping with RAII location scopes * Simplify transpose logic * Cleaning up for rev.cpp * Reverting spacing changes * Fix mistake with source loc RAII instantiation * Fix formatting issues
Diffstat (limited to 'source/slang/slang-ir-addr-inst-elimination.cpp')
-rw-r--r--source/slang/slang-ir-addr-inst-elimination.cpp18
1 files changed, 9 insertions, 9 deletions
diff --git a/source/slang/slang-ir-addr-inst-elimination.cpp b/source/slang/slang-ir-addr-inst-elimination.cpp
index 8a48936d7..b55f6b93d 100644
--- a/source/slang/slang-ir-addr-inst-elimination.cpp
+++ b/source/slang/slang-ir-addr-inst-elimination.cpp
@@ -69,30 +69,28 @@ struct AddressInstEliminationContext
}
}
- void transformLoadAddr(IRUse* use)
+ void transformLoadAddr(IRBuilder& builder, IRUse* use)
{
auto addr = use->get();
auto load = as<IRLoad>(use->getUser());
- IRBuilder builder(module);
builder.setInsertBefore(use->getUser());
auto value = getValue(builder, addr);
load->replaceUsesWith(value);
load->removeAndDeallocate();
}
- void transformStoreAddr(IRUse* use)
+ void transformStoreAddr(IRBuilder& builder, IRUse* use)
{
auto addr = use->get();
auto store = as<IRStore>(use->getUser());
- IRBuilder builder(module);
builder.setInsertBefore(use->getUser());
storeValue(builder, addr, store->getVal());
store->removeAndDeallocate();
}
- void transformCallAddr(IRUse* use)
+ void transformCallAddr(IRBuilder& builder, IRUse* use)
{
auto addr = use->get();
auto call = as<IRCall>(use->getUser());
@@ -103,7 +101,6 @@ struct AddressInstEliminationContext
return;
}
- IRBuilder builder(module);
builder.setInsertBefore(call);
auto tempVar = builder.emitVar(cast<IRPtrTypeBase>(addr->getFullType())->getValueType());
@@ -155,17 +152,20 @@ struct AddressInstEliminationContext
use = nextUse;
continue;
}
+
+ IRBuilder transformBuilder(module);
+ IRBuilderSourceLocRAII sourceLocationScope(&transformBuilder, use->getUser()->sourceLoc);
switch (use->getUser()->getOp())
{
case kIROp_Load:
- transformLoadAddr(use);
+ transformLoadAddr(transformBuilder, use);
break;
case kIROp_Store:
- transformStoreAddr(use);
+ transformStoreAddr(transformBuilder, use);
break;
case kIROp_Call:
- transformCallAddr(use);
+ transformCallAddr(transformBuilder, use);
break;
case kIROp_GetElementPtr:
case kIROp_FieldAddress: