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. #include "ir.h"
  25. #include "ir_hierarchical_visitor.h"
  26.  
  27. ir_hierarchical_visitor::ir_hierarchical_visitor()
  28. {
  29.    this->base_ir = NULL;
  30.    this->callback = NULL;
  31.    this->data = NULL;
  32.    this->in_assignee = false;
  33. }
  34.  
  35. ir_visitor_status
  36. ir_hierarchical_visitor::visit(ir_variable *ir)
  37. {
  38.    if (this->callback != NULL)
  39.       this->callback(ir, this->data);
  40.  
  41.    return visit_continue;
  42. }
  43.  
  44. ir_visitor_status
  45. ir_hierarchical_visitor::visit(ir_constant *ir)
  46. {
  47.    if (this->callback != NULL)
  48.       this->callback(ir, this->data);
  49.  
  50.    return visit_continue;
  51. }
  52.  
  53. ir_visitor_status
  54. ir_hierarchical_visitor::visit(ir_loop_jump *ir)
  55. {
  56.    if (this->callback != NULL)
  57.       this->callback(ir, this->data);
  58.  
  59.    return visit_continue;
  60. }
  61.  
  62. ir_visitor_status
  63. ir_hierarchical_visitor::visit(ir_dereference_variable *ir)
  64. {
  65.    if (this->callback != NULL)
  66.       this->callback(ir, this->data);
  67.  
  68.    return visit_continue;
  69. }
  70.  
  71. ir_visitor_status
  72. ir_hierarchical_visitor::visit_enter(ir_loop *ir)
  73. {
  74.    if (this->callback != NULL)
  75.       this->callback(ir, this->data);
  76.  
  77.    return visit_continue;
  78. }
  79.  
  80. ir_visitor_status
  81. ir_hierarchical_visitor::visit_leave(ir_loop *ir)
  82. {
  83.    (void) ir;
  84.    return visit_continue;
  85. }
  86.  
  87. ir_visitor_status
  88. ir_hierarchical_visitor::visit_enter(ir_function_signature *ir)
  89. {
  90.    if (this->callback != NULL)
  91.       this->callback(ir, this->data);
  92.  
  93.    return visit_continue;
  94. }
  95.  
  96. ir_visitor_status
  97. ir_hierarchical_visitor::visit_leave(ir_function_signature *ir)
  98. {
  99.    (void) ir;
  100.    return visit_continue;
  101. }
  102.  
  103. ir_visitor_status
  104. ir_hierarchical_visitor::visit_enter(ir_function *ir)
  105. {
  106.    if (this->callback != NULL)
  107.       this->callback(ir, this->data);
  108.  
  109.    return visit_continue;
  110. }
  111.  
  112. ir_visitor_status
  113. ir_hierarchical_visitor::visit_leave(ir_function *ir)
  114. {
  115.    (void) ir;
  116.    return visit_continue;
  117. }
  118.  
  119. ir_visitor_status
  120. ir_hierarchical_visitor::visit_enter(ir_expression *ir)
  121. {
  122.    if (this->callback != NULL)
  123.       this->callback(ir, this->data);
  124.  
  125.    return visit_continue;
  126. }
  127.  
  128. ir_visitor_status
  129. ir_hierarchical_visitor::visit_leave(ir_expression *ir)
  130. {
  131.    (void) ir;
  132.    return visit_continue;
  133. }
  134.  
  135. ir_visitor_status
  136. ir_hierarchical_visitor::visit_enter(ir_texture *ir)
  137. {
  138.    if (this->callback != NULL)
  139.       this->callback(ir, this->data);
  140.  
  141.    return visit_continue;
  142. }
  143.  
  144. ir_visitor_status
  145. ir_hierarchical_visitor::visit_leave(ir_texture *ir)
  146. {
  147.    (void) ir;
  148.    return visit_continue;
  149. }
  150.  
  151. ir_visitor_status
  152. ir_hierarchical_visitor::visit_enter(ir_swizzle *ir)
  153. {
  154.    if (this->callback != NULL)
  155.       this->callback(ir, this->data);
  156.  
  157.    return visit_continue;
  158. }
  159.  
  160. ir_visitor_status
  161. ir_hierarchical_visitor::visit_leave(ir_swizzle *ir)
  162. {
  163.    (void) ir;
  164.    return visit_continue;
  165. }
  166.  
  167. ir_visitor_status
  168. ir_hierarchical_visitor::visit_enter(ir_dereference_array *ir)
  169. {
  170.    if (this->callback != NULL)
  171.       this->callback(ir, this->data);
  172.  
  173.    return visit_continue;
  174. }
  175.  
  176. ir_visitor_status
  177. ir_hierarchical_visitor::visit_leave(ir_dereference_array *ir)
  178. {
  179.    (void) ir;
  180.    return visit_continue;
  181. }
  182.  
  183. ir_visitor_status
  184. ir_hierarchical_visitor::visit_enter(ir_dereference_record *ir)
  185. {
  186.    if (this->callback != NULL)
  187.       this->callback(ir, this->data);
  188.  
  189.    return visit_continue;
  190. }
  191.  
  192. ir_visitor_status
  193. ir_hierarchical_visitor::visit_leave(ir_dereference_record *ir)
  194. {
  195.    (void) ir;
  196.    return visit_continue;
  197. }
  198.  
  199. ir_visitor_status
  200. ir_hierarchical_visitor::visit_enter(ir_assignment *ir)
  201. {
  202.    if (this->callback != NULL)
  203.       this->callback(ir, this->data);
  204.  
  205.    return visit_continue;
  206. }
  207.  
  208. ir_visitor_status
  209. ir_hierarchical_visitor::visit_leave(ir_assignment *ir)
  210. {
  211.    (void) ir;
  212.    return visit_continue;
  213. }
  214.  
  215. ir_visitor_status
  216. ir_hierarchical_visitor::visit_enter(ir_call *ir)
  217. {
  218.    if (this->callback != NULL)
  219.       this->callback(ir, this->data);
  220.  
  221.    return visit_continue;
  222. }
  223.  
  224. ir_visitor_status
  225. ir_hierarchical_visitor::visit_leave(ir_call *ir)
  226. {
  227.    (void) ir;
  228.    return visit_continue;
  229. }
  230.  
  231. ir_visitor_status
  232. ir_hierarchical_visitor::visit_enter(ir_return *ir)
  233. {
  234.    if (this->callback != NULL)
  235.       this->callback(ir, this->data);
  236.  
  237.    return visit_continue;
  238. }
  239.  
  240. ir_visitor_status
  241. ir_hierarchical_visitor::visit_leave(ir_return *ir)
  242. {
  243.    (void) ir;
  244.    return visit_continue;
  245. }
  246.  
  247. ir_visitor_status
  248. ir_hierarchical_visitor::visit_enter(ir_discard *ir)
  249. {
  250.    if (this->callback != NULL)
  251.       this->callback(ir, this->data);
  252.  
  253.    return visit_continue;
  254. }
  255.  
  256. ir_visitor_status
  257. ir_hierarchical_visitor::visit_leave(ir_discard *ir)
  258. {
  259.    (void) ir;
  260.    return visit_continue;
  261. }
  262.  
  263. ir_visitor_status
  264. ir_hierarchical_visitor::visit_enter(ir_if *ir)
  265. {
  266.    if (this->callback != NULL)
  267.       this->callback(ir, this->data);
  268.  
  269.    return visit_continue;
  270. }
  271.  
  272. ir_visitor_status
  273. ir_hierarchical_visitor::visit_leave(ir_if *ir)
  274. {
  275.    (void) ir;
  276.    return visit_continue;
  277. }
  278.  
  279. void
  280. ir_hierarchical_visitor::run(exec_list *instructions)
  281. {
  282.    visit_list_elements(this, instructions);
  283. }
  284.  
  285.  
  286. void
  287. visit_tree(ir_instruction *ir,
  288.            void (*callback)(class ir_instruction *ir, void *data),
  289.            void *data)
  290. {
  291.    ir_hierarchical_visitor v;
  292.  
  293.    v.callback = callback;
  294.    v.data = data;
  295.  
  296.    ir->accept(&v);
  297. }
  298.