diff options
author | Eric Anholt <[email protected]> | 2012-10-03 13:44:12 -0700 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2012-10-17 12:24:01 -0700 |
commit | 20ebebac5153affcbd44350332678a2fb04d4c96 (patch) | |
tree | 0ff1393d64d9290313a85859a65d4cb828208948 /src/mesa/drivers/dri/i965/brw_vec4_live_variables.h | |
parent | e1a518e2b1490ff4afe2efc69aa64e193bfb1324 (diff) |
i965/vs: Improve live interval calculation.
This is derived from the FS visitor code for the same, but tracks each channel
separately (otherwise, some typical fill-a-channel-at-a-time patterns would
produce excessive live intervals across loops and cause spilling).
Reviewed-by: Kenneth Graunke <[email protected]>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=48375
(crash -> failure, can turn into pass by forcing unrolling still)
Diffstat (limited to 'src/mesa/drivers/dri/i965/brw_vec4_live_variables.h')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_vec4_live_variables.h | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_live_variables.h b/src/mesa/drivers/dri/i965/brw_vec4_live_variables.h new file mode 100644 index 00000000000..438a03e45d9 --- /dev/null +++ b/src/mesa/drivers/dri/i965/brw_vec4_live_variables.h @@ -0,0 +1,81 @@ +/* + * Copyright © 2012 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Eric Anholt <[email protected]> + * + */ + +#include "brw_vec4.h" + +namespace brw { + +struct block_data { + /** + * Which variables are defined before being used in the block. + * + * Note that for our purposes, "defined" means unconditionally, completely + * defined. + */ + bool *def; + + /** + * Which variables are used before being defined in the block. + */ + bool *use; + + /** Which defs reach the entry point of the block. */ + bool *livein; + + /** Which defs reach the exit point of the block. */ + bool *liveout; +}; + +class vec4_live_variables { +public: + static void* operator new(size_t size, void *ctx) + { + void *node; + + node = rzalloc_size(ctx, size); + assert(node != NULL); + + return node; + } + + vec4_live_variables(vec4_visitor *v, cfg_t *cfg); + ~vec4_live_variables(); + + void setup_def_use(); + void compute_live_variables(); + + vec4_visitor *v; + cfg_t *cfg; + void *mem_ctx; + + int num_vars; + + /** Per-basic-block information on live variables */ + struct block_data *bd; +}; + +} /* namespace brw */ |