summaryrefslogtreecommitdiff
path: root/src/glsl
diff options
context:
space:
mode:
authorTapani Pälli <tapani.palli@intel.com>2014-09-09 14:56:06 +0300
committerTapani Pälli <tapani.palli@intel.com>2014-09-11 10:09:12 +0300
commit096ee4c3b00cf1038830ee5994dd27e9963c24e8 (patch)
treee508b315da59c82eb7df99ec65de5d9836e3c685 /src/glsl
parent82edcb918be3fdff12af3123269552d0829316ed (diff)
glsl: mark variable as loop constant when it is set read only
Patch modifies is_loop_constant() to take advantage of 'read_only' bit in ir_variable to detect a loop constant. Variables marked read-only are loop constant like mentioned by a comment in the function. v2: remove unnecessary comment (Francisco) Signed-off-by: Tapani Pälli <tapani.palli@intel.com> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=82537 Tested-by: Michel Dänzer <michel.daenzer@amd.com> Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com> Reviewed-by: Francisco Jerez <currojerez@riseup.net>
Diffstat (limited to 'src/glsl')
-rw-r--r--src/glsl/loop_analysis.h9
1 files changed, 2 insertions, 7 deletions
diff --git a/src/glsl/loop_analysis.h b/src/glsl/loop_analysis.h
index 295dc797c09..31be4f3cfa0 100644
--- a/src/glsl/loop_analysis.h
+++ b/src/glsl/loop_analysis.h
@@ -205,10 +205,10 @@ public:
inline bool is_loop_constant() const
{
const bool is_const = (this->num_assignments == 0)
- || ((this->num_assignments == 1)
+ || (((this->num_assignments == 1)
&& !this->conditional_or_nested_assignment
&& !this->read_before_write
- && this->rhs_clean);
+ && this->rhs_clean) || this->var->data.read_only);
/* If the RHS of *the* assignment is clean, then there must be exactly
* one assignment of the variable.
@@ -216,11 +216,6 @@ public:
assert((this->rhs_clean && (this->num_assignments == 1))
|| !this->rhs_clean);
- /* Variables that are marked read-only *MUST* be loop constant.
- */
- assert(!this->var->data.read_only
- || (this->var->data.read_only && is_const));
-
return is_const;
}