diff options
author | Zack Rusin <[email protected]> | 2007-10-26 19:12:02 -0400 |
---|---|---|
committer | Zack Rusin <[email protected]> | 2007-10-26 19:12:56 -0400 |
commit | 789d248558061fe4d65f664d6770a12b90fa2e34 (patch) | |
tree | 51d17829b47536c8a8a0b0c929e8b28532f29ab3 /src/mesa/pipe/llvm/storage.cpp | |
parent | 78c1f8b2decf168d183c52e7b414adb29dd18988 (diff) |
Hold a stack of temporaries so that we can redeclare them
for all defined functions. Fixes crashes in function calls.
Diffstat (limited to 'src/mesa/pipe/llvm/storage.cpp')
-rw-r--r-- | src/mesa/pipe/llvm/storage.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/mesa/pipe/llvm/storage.cpp b/src/mesa/pipe/llvm/storage.cpp index 88ef6711cfb..7300cdfef06 100644 --- a/src/mesa/pipe/llvm/storage.cpp +++ b/src/mesa/pipe/llvm/storage.cpp @@ -369,3 +369,24 @@ void Storage::popArguments() m_CONST = arg.cst; m_argStack.pop(); } + +void Storage::pushTemps() +{ + m_tempStack.push(m_temps); + std::vector<llvm::Value*> oldTemps = m_temps; + m_temps = std::vector<llvm::Value*>(32); + int i = 0; + for (std::vector<llvm::Value*>::iterator itr = oldTemps.begin(); + itr != oldTemps.end(); ++itr) { + if (*itr) { + declareTemp(i); + } + ++i; + } +} + +void Storage::popTemps() +{ + m_temps = m_tempStack.top(); + m_tempStack.pop(); +} |