diff options
author | Ian Romanick <ian.d.romanick@intel.com> | 2010-04-21 11:54:02 -0700 |
---|---|---|
committer | Ian Romanick <ian.d.romanick@intel.com> | 2010-04-28 18:22:54 -0700 |
commit | ae000fcb2e47a88d507a616709ae42d4aefae7a0 (patch) | |
tree | bb96a89220bc770f38bcca6e63893ff7702756ab | |
parent | 73986a7a262807ab2cfd6d46ae17cfc7a30cdfec (diff) |
Implement structures and arrays in ir_dereference::is_lvalue
-rw-r--r-- | ir.cpp | 13 |
1 files changed, 6 insertions, 7 deletions
@@ -260,22 +260,21 @@ ir_dereference::is_lvalue() if (var == NULL) return false; + ir_variable *const as_var = var->as_variable(); if (mode == ir_reference_variable) { - ir_variable *const as_var = var->as_variable(); if (as_var == NULL) return false; if (as_var->type->is_array() && !as_var->array_lvalue) return false; + } + if (as_var != NULL) return !as_var->read_only; - } else if (mode == ir_reference_array) { - /* FINISHME: Walk up the dereference chain and figure out if - * FINISHME: the variable is read-only. - */ - } - return true; + /* Walk up the dereference chain and figure out if the variable is read-only. + */ + return this->var->as_rvalue()->is_lvalue(); } ir_swizzle::ir_swizzle(ir_rvalue *val, unsigned x, unsigned y, unsigned z, |