Home | History | Annotate | Download | only in i965
      1 /*
      2  * Copyright  2012 Intel Corporation
      3  *
      4  * Permission is hereby granted, free of charge, to any person obtaining a
      5  * copy of this software and associated documentation files (the "Software"),
      6  * to deal in the Software without restriction, including without limitation
      7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
      8  * and/or sell copies of the Software, and to permit persons to whom the
      9  * Software is furnished to do so, subject to the following conditions:
     10  *
     11  * The above copyright notice and this permission notice (including the next
     12  * paragraph) shall be included in all copies or substantial portions of the
     13  * Software.
     14  *
     15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
     18  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
     20  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
     21  * IN THE SOFTWARE.
     22  *
     23  * Authors:
     24  *    Eric Anholt <eric (at) anholt.net>
     25  *
     26  */
     27 
     28 #include "brw_fs.h"
     29 
     30 namespace brw {
     31 
     32 struct block_data {
     33    /**
     34     * Which variables are defined before being used in the block.
     35     *
     36     * Note that for our purposes, "defined" means unconditionally, completely
     37     * defined.
     38     */
     39    bool *def;
     40 
     41    /**
     42     * Which variables are used before being defined in the block.
     43     */
     44    bool *use;
     45 
     46    /** Which defs reach the entry point of the block. */
     47    bool *livein;
     48 
     49    /** Which defs reach the exit point of the block. */
     50    bool *liveout;
     51 };
     52 
     53 class fs_live_variables {
     54 public:
     55    static void* operator new(size_t size, void *ctx)
     56    {
     57       void *node;
     58 
     59       node = rzalloc_size(ctx, size);
     60       assert(node != NULL);
     61 
     62       return node;
     63    }
     64 
     65    fs_live_variables(fs_visitor *v, fs_cfg *cfg);
     66    ~fs_live_variables();
     67 
     68    void setup_def_use();
     69    void compute_live_variables();
     70 
     71    fs_visitor *v;
     72    fs_cfg *cfg;
     73    void *mem_ctx;
     74 
     75    int num_vars;
     76 
     77    /** Per-basic-block information on live variables */
     78    struct block_data *bd;
     79 };
     80 
     81 } /* namespace brw */
     82