summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-ir.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-ir.cpp')
-rw-r--r--source/slang/slang-ir.cpp30
1 files changed, 29 insertions, 1 deletions
diff --git a/source/slang/slang-ir.cpp b/source/slang/slang-ir.cpp
index 3c2d5d2d1..63d3766ab 100644
--- a/source/slang/slang-ir.cpp
+++ b/source/slang/slang-ir.cpp
@@ -2,6 +2,7 @@
#include "slang-ir.h"
#include "../core/slang-basic.h"
+#include "../core/slang-platform.h"
#include "../core/slang-writer.h"
#include "slang-ir-dominators.h"
#include "slang-ir-insts.h"
@@ -1738,8 +1739,21 @@ void IRBuilder::_maybeSetSourceLoc(IRInst* inst)
}
#if SLANG_ENABLE_IR_BREAK_ALLOC
-SLANG_API uint32_t _slangIRAllocBreak = 0xFFFFFFFF;
+uint32_t _slangIRAllocBreak = 0xFFFFFFFF;
+bool _slangIRPrintStackAtBreak = false;
static bool _slangIRAllocBreakFirst = true;
+static uint32_t _slangInstBeingCloned = 0xFFFFFFFF;
+
+void _debugSetInstBeingCloned(uint32_t uid)
+{
+ _slangInstBeingCloned = uid;
+}
+
+void _debugResetInstBeingCloned()
+{
+ _slangInstBeingCloned = 0xFFFFFFFF;
+}
+
uint32_t& _debugGetIRAllocCounter()
{
static uint32_t counter = 0;
@@ -1758,6 +1772,20 @@ uint32_t _debugGetAndIncreaseInstCounter()
#if _WIN32 && defined(_MSC_VER)
__debugbreak();
#endif
+ if (_slangIRPrintStackAtBreak)
+ {
+ fprintf(stdout, "BEGIN IR Trace\nInstruction #%u created at:\n", _slangIRAllocBreak);
+ PlatformUtil::backtrace();
+ if (_slangInstBeingCloned != 0xFFFFFFFF)
+ {
+ fprintf(
+ stdout,
+ "Inst #%u is a clone of Inst #%u.\n",
+ _slangIRAllocBreak,
+ _slangInstBeingCloned);
+ }
+ fprintf(stdout, "END IR Trace\n");
+ }
}
return _debugGetIRAllocCounter()++;
}