glsl/opt_cpe: Kill when the assignment isn't something we recognize.
[mesa.git] / src / glsl / opt_copy_propagation_elements.cpp
index 8541d9a8ee1ca80904b1e261047242211a844f84..1ffbd4da14457a3a9eda310cdbaca3c44a96b994 100644 (file)
@@ -161,9 +161,16 @@ ir_visitor_status
 ir_copy_propagation_elements_visitor::visit_leave(ir_assignment *ir)
 {
    ir_dereference_variable *lhs = ir->lhs->as_dereference_variable();
+   ir_variable *var = ir->lhs->variable_referenced();
+
+   if (var->type->is_scalar() || var->type->is_vector()) {
+      kill_entry *k;
+
+      if (lhs)
+        k = new(mem_ctx) kill_entry(var, ir->write_mask);
+      else
+        k = new(mem_ctx) kill_entry(var, ~0);
 
-   if (lhs && (lhs->type->is_scalar() || lhs->type->is_vector())) {
-      kill_entry *k = new(mem_ctx) kill_entry(lhs->var, ir->write_mask);
       kill(k);
    }