[Mesa-dev] [PATCH 1/2] gallivm: fix 2 leaks in disassembly code

2014-04-30 Thread sroland
From: Roland Scheidegger srol...@vmware.com

don't leak the MCSubtargetInfo (not really big, was already fixed with
llvm master) and TargetMachine (big). While this is only used for debugging
the leak is large enough to get you into trouble in some cases.
Tested with llvm 3.1 and master.
Before (llvm 3.1), GALLIVM_DEBUG=asm glxgears:
==14152== LEAK SUMMARY:
==14152==definitely lost: 105,228 bytes in 20 blocks
==14152==indirectly lost: 347,252 bytes in 261 blocks
==14152==  possibly lost: 866,625 bytes in 1,453 blocks
==14152==still reachable: 7,344,677 bytes in 6,494 blocks
==14152== suppressed: 0 bytes in 0 blocks

After:
==13799== LEAK SUMMARY:
==13799==definitely lost: 3,108 bytes in 6 blocks
==13799==indirectly lost: 0 bytes in 0 blocks
==13799==  possibly lost: 804,143 bytes in 1,429 blocks
==13799==still reachable: 7,314,267 bytes in 6,473 blocks
==13799== suppressed: 0 bytes in 0 blocks
---
 src/gallium/auxiliary/gallivm/lp_bld_debug.cpp |9 +
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/gallium/auxiliary/gallivm/lp_bld_debug.cpp 
b/src/gallium/auxiliary/gallivm/lp_bld_debug.cpp
index 541cf9e..7e43b51 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_debug.cpp
+++ b/src/gallium/auxiliary/gallivm/lp_bld_debug.cpp
@@ -36,6 +36,7 @@
 
 #if HAVE_LLVM = 0x0300
 #include llvm/Support/TargetRegistry.h
+#include llvm/MC/MCSubtargetInfo.h
 #else /* HAVE_LLVM  0x0300 */
 #include llvm/Target/TargetRegistry.h
 #endif /* HAVE_LLVM  0x0300 */
@@ -254,7 +255,7 @@ disassemble(const void* func, llvm::raw_ostream  Out)
OwningPtrMCContext MCCtx(new MCContext(AsmInfo.get(), MRI.get(), 0));
OwningPtrconst MCDisassembler DisAsm(T-createMCDisassembler(*STI, 
*MCCtx));
 #elif HAVE_LLVM = 0x0300
-   const MCSubtargetInfo *STI = T-createMCSubtargetInfo(Triple, 
sys::getHostCPUName(), );
+   OwningPtrconst MCSubtargetInfo STI(T-createMCSubtargetInfo(Triple, 
sys::getHostCPUName(), ));
OwningPtrconst MCDisassembler DisAsm(T-createMCDisassembler(*STI));
 #else
OwningPtrconst MCDisassembler DisAsm(T-createMCDisassembler());
@@ -294,11 +295,11 @@ disassemble(const void* func, llvm::raw_ostream  Out)
 #if defined(DEBUG) || defined(PROFILE)
options.NoFramePointerElim = true;
 #endif
-   TargetMachine *TM = T-createTargetMachine(Triple, sys::getHostCPUName(), 
, options);
+   OwningPtrTargetMachine TM(T-createTargetMachine(Triple, 
sys::getHostCPUName(), , options));
 #elif HAVE_LLVM == 0x0300
-   TargetMachine *TM = T-createTargetMachine(Triple, sys::getHostCPUName(), 
);
+   OwningPtrTargetMachine TM(T-createTargetMachine(Triple, 
sys::getHostCPUName(), ));
 #else
-   TargetMachine *TM = T-createTargetMachine(Triple, );
+   OwningPtrTargetMachine TM(T-createTargetMachine(Triple, ));
 #endif
 
const TargetInstrInfo *TII = TM-getInstrInfo();
-- 
1.7.9.5
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 1/2] gallivm: fix 2 leaks in disassembly code

2014-04-30 Thread Brian Paul

On 04/30/2014 04:41 PM, srol...@vmware.com wrote:

From: Roland Scheidegger srol...@vmware.com

don't leak the MCSubtargetInfo (not really big, was already fixed with
llvm master) and TargetMachine (big). While this is only used for debugging
the leak is large enough to get you into trouble in some cases.
Tested with llvm 3.1 and master.
Before (llvm 3.1), GALLIVM_DEBUG=asm glxgears:
==14152== LEAK SUMMARY:
==14152==definitely lost: 105,228 bytes in 20 blocks
==14152==indirectly lost: 347,252 bytes in 261 blocks
==14152==  possibly lost: 866,625 bytes in 1,453 blocks
==14152==still reachable: 7,344,677 bytes in 6,494 blocks
==14152== suppressed: 0 bytes in 0 blocks

After:
==13799== LEAK SUMMARY:
==13799==definitely lost: 3,108 bytes in 6 blocks
==13799==indirectly lost: 0 bytes in 0 blocks
==13799==  possibly lost: 804,143 bytes in 1,429 blocks
==13799==still reachable: 7,314,267 bytes in 6,473 blocks
==13799== suppressed: 0 bytes in 0 blocks
---
  src/gallium/auxiliary/gallivm/lp_bld_debug.cpp |9 +
  1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/gallium/auxiliary/gallivm/lp_bld_debug.cpp 
b/src/gallium/auxiliary/gallivm/lp_bld_debug.cpp
index 541cf9e..7e43b51 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_debug.cpp
+++ b/src/gallium/auxiliary/gallivm/lp_bld_debug.cpp
@@ -36,6 +36,7 @@

  #if HAVE_LLVM = 0x0300
  #include llvm/Support/TargetRegistry.h
+#include llvm/MC/MCSubtargetInfo.h
  #else /* HAVE_LLVM  0x0300 */
  #include llvm/Target/TargetRegistry.h
  #endif /* HAVE_LLVM  0x0300 */
@@ -254,7 +255,7 @@ disassemble(const void* func, llvm::raw_ostream  Out)
 OwningPtrMCContext MCCtx(new MCContext(AsmInfo.get(), MRI.get(), 0));
 OwningPtrconst MCDisassembler DisAsm(T-createMCDisassembler(*STI, 
*MCCtx));
  #elif HAVE_LLVM = 0x0300
-   const MCSubtargetInfo *STI = T-createMCSubtargetInfo(Triple, sys::getHostCPUName(), 
);
+   OwningPtrconst MCSubtargetInfo STI(T-createMCSubtargetInfo(Triple, 
sys::getHostCPUName(), ));
 OwningPtrconst MCDisassembler DisAsm(T-createMCDisassembler(*STI));
  #else
 OwningPtrconst MCDisassembler DisAsm(T-createMCDisassembler());
@@ -294,11 +295,11 @@ disassemble(const void* func, llvm::raw_ostream  Out)
  #if defined(DEBUG) || defined(PROFILE)
 options.NoFramePointerElim = true;
  #endif
-   TargetMachine *TM = T-createTargetMachine(Triple, sys::getHostCPUName(), 
, options);
+   OwningPtrTargetMachine TM(T-createTargetMachine(Triple, sys::getHostCPUName(), 
, options));
  #elif HAVE_LLVM == 0x0300
-   TargetMachine *TM = T-createTargetMachine(Triple, sys::getHostCPUName(), 
);
+   OwningPtrTargetMachine TM(T-createTargetMachine(Triple, sys::getHostCPUName(), 
));
  #else
-   TargetMachine *TM = T-createTargetMachine(Triple, );
+   OwningPtrTargetMachine TM(T-createTargetMachine(Triple, ));
  #endif

 const TargetInstrInfo *TII = TM-getInstrInfo();



I'm not too familiar with that code, but looks OK AFAICT.

Reviewed-by: Brian Paul bri...@vmware.com


___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev