Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. /*
  2.  * Copyright © 2010 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
  21.  * DEALINGS IN THE SOFTWARE.
  22.  */
  23.  
  24.  
  25. /**
  26.  * \file ir_optimization.h
  27.  *
  28.  * Prototypes for optimization passes to be called by the compiler and drivers.
  29.  */
  30.  
  31. /* Operations for lower_instructions() */
  32. #define SUB_TO_ADD_NEG 0x01
  33. #define DIV_TO_MUL_RCP 0x02
  34. #define EXP_TO_EXP2    0x04
  35. #define POW_TO_EXP2    0x08
  36. #define LOG_TO_LOG2    0x10
  37. #define MOD_TO_FRACT   0x20
  38.  
  39. bool do_common_optimization(exec_list *ir, bool linked, unsigned max_unroll_iterations);
  40.  
  41. bool do_algebraic(exec_list *instructions);
  42. bool do_constant_folding(exec_list *instructions);
  43. bool do_constant_variable(exec_list *instructions);
  44. bool do_constant_variable_unlinked(exec_list *instructions);
  45. bool do_copy_propagation(exec_list *instructions);
  46. bool do_constant_propagation(exec_list *instructions);
  47. bool do_dead_code(exec_list *instructions);
  48. bool do_dead_code_local(exec_list *instructions);
  49. bool do_dead_code_unlinked(exec_list *instructions);
  50. bool do_dead_functions(exec_list *instructions);
  51. bool do_function_inlining(exec_list *instructions);
  52. bool do_lower_jumps(exec_list *instructions, bool pull_out_jumps = true, bool lower_sub_return = true, bool lower_main_return = false, bool lower_continue = false, bool lower_break = false);
  53. bool do_lower_texture_projection(exec_list *instructions);
  54. bool do_if_simplification(exec_list *instructions);
  55. bool do_discard_simplification(exec_list *instructions);
  56. bool lower_if_to_cond_assign(exec_list *instructions, unsigned max_depth = 0);
  57. bool do_mat_op_to_vec(exec_list *instructions);
  58. bool do_mod_to_fract(exec_list *instructions);
  59. bool do_noop_swizzle(exec_list *instructions);
  60. bool do_structure_splitting(exec_list *instructions);
  61. bool do_sub_to_add_neg(exec_list *instructions);
  62. bool do_swizzle_swizzle(exec_list *instructions);
  63. bool do_tree_grafting(exec_list *instructions);
  64. bool do_vec_index_to_cond_assign(exec_list *instructions);
  65. bool do_vec_index_to_swizzle(exec_list *instructions);
  66. bool lower_discard(exec_list *instructions);
  67. bool lower_instructions(exec_list *instructions, unsigned what_to_lower);
  68. bool lower_noise(exec_list *instructions);
  69. bool lower_variable_index_to_cond_assign(exec_list *instructions,
  70.     bool lower_input, bool lower_output, bool lower_temp, bool lower_uniform);
  71. bool lower_quadop_vector(exec_list *instructions, bool dont_lower_swz);
  72. bool optimize_redundant_jumps(exec_list *instructions);
  73.