r300/compiler: Fix bug in rc_get_variables()
authorTom Stellard <tstellar@gmail.com>
Wed, 11 May 2011 23:12:52 +0000 (16:12 -0700)
committerTom Stellard <tstellar@gmail.com>
Wed, 11 May 2011 23:16:29 +0000 (16:16 -0700)
Variables that share readers were not always being linked together.

https://bugs.freedesktop.org/show_bug.cgi?id=36939

src/mesa/drivers/dri/r300/compiler/radeon_variable.c

index 16fa5d28902dd33e70d3216aab9dbcf7bd62b0ff..5b2295dc7ce4e322478fcfe7d8710aaa00477b27 100644 (file)
@@ -388,17 +388,21 @@ struct rc_list * rc_get_variables(struct radeon_compiler * c)
         */
        while (aborted_list) {
                struct rc_list * search_ptr_next;
+               struct rc_variable * var;
                var_ptr = aborted_list;
+               for (var = var_ptr->Item; var; var = var->Friend) {
 
-               search_ptr = var_ptr->Next;
-               while(search_ptr) {
-                       search_ptr_next = search_ptr->Next;
-                       if (readers_intersect(var_ptr->Item, search_ptr->Item)){
-                               rc_list_remove(&aborted_list, search_ptr);
-                               rc_variable_add_friend(var_ptr->Item,
+                       search_ptr = var_ptr->Next;
+                       while(search_ptr) {
+                               search_ptr_next = search_ptr->Next;
+                               if (readers_intersect(var, search_ptr->Item)){
+                                       rc_list_remove(&aborted_list,
+                                                       search_ptr);
+                                       rc_variable_add_friend(var,
                                                        search_ptr->Item);
+                               }
+                               search_ptr = search_ptr_next;
                        }
-                       search_ptr = search_ptr_next;
                }
                rc_list_remove(&aborted_list, var_ptr);
                rc_list_add(&variable_list, rc_list(