glsl: Separate overlapping sentinel nodes in exec_list.

I do appreciate the cleverness, but unfortunately it prevents a lot more
cleverness in the form of additional compiler optimizations brought on
by -fstrict-aliasing.

No difference in OglBatch7 (n=20).

Co-authored-by: Davin McCall <davmac@davmac.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
Matt Turner
2016-06-27 14:42:57 -07:00
parent 5d76690f17
commit d1f6f65697
25 changed files with 165 additions and 137 deletions

View File

@@ -208,7 +208,7 @@ ir_reader::read_function(s_expression *expr, bool skip_body)
/* Skip over "function" tag and function name (which are guaranteed to be
* present by the above PARTIAL_MATCH call).
*/
exec_node *node = ((s_list *) expr)->subexpressions.head->next->next;
exec_node *node = ((s_list *) expr)->subexpressions.get_head_raw()->next->next;
for (/* nothing */; !node->is_tail_sentinel(); node = node->next) {
s_expression *s_sig = (s_expression *) node;
read_function_sig(f, s_sig, skip_body);
@@ -251,7 +251,7 @@ ir_reader::read_function_sig(ir_function *f, s_expression *expr, bool skip_body)
state->symbols->push_scope();
/* Skip over the "parameters" tag. */
exec_node *node = paramlist->subexpressions.head->next;
exec_node *node = paramlist->subexpressions.get_head_raw()->next;
for (/* nothing */; !node->is_tail_sentinel(); node = node->next) {
ir_variable *var = read_declaration((s_expression *) node);
if (var == NULL)