nir: Release per-block metadata in nir_sweep
authorIan Romanick <ian.d.romanick@intel.com>
Mon, 26 Nov 2018 23:12:30 +0000 (15:12 -0800)
committerIan Romanick <ian.d.romanick@intel.com>
Sun, 16 Dec 2018 22:39:56 +0000 (14:39 -0800)
nir_sweep already marks all metadata invalid, so it is safe to release
the memory here too.

mean soft fp64 using uint64:   1,342,759,331 => 1,010,670,475
gfxbench5 aztec ruins high 11:    63,555,571 =>    61,889,811
deus ex mankind divided 148:      62,845,304 =>    62,829,640
deus ex mankind divided 2890:     71,922,686 =>    71,922,686
dirt showdown 676:                69,238,607 =>    69,238,607
dolphin ubershaders 210:          77,822,072 =>    77,822,072

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/compiler/nir/nir_sweep.c

index aab641388dbcf40df906533e2749870da5b4aefe..b6b56aa078c91599fdee911286f39b12d3f1a3b5 100644 (file)
@@ -63,6 +63,15 @@ sweep_block(nir_shader *nir, nir_block *block)
 {
    ralloc_steal(nir, block);
 
+   /* sweep_impl will mark all metadata invalid.  We can safely release all of
+    * this here.
+    */
+   ralloc_free(block->live_in);
+   block->live_in = NULL;
+
+   ralloc_free(block->live_out);
+   block->live_out = NULL;
+
    nir_foreach_instr(instr, block) {
       ralloc_steal(nir, instr);