glsl: Fix constant-folding for reciprocal expressions
authorChad Versace <chad.versace@intel.com>
Tue, 1 Feb 2011 17:09:33 +0000 (09:09 -0800)
committerChad Versace <chad.versace@intel.com>
Wed, 2 Feb 2011 17:54:52 +0000 (09:54 -0800)
commitb3cf92aa916ee0537ee37723c23a9897ac9cd3e0
tree3945b1153b23fd36e40f7f076a7f0bdc5d385d70
parent50278c0901d07d0b6c8b883683b1f3d96378bdb5
glsl: Fix constant-folding for reciprocal expressions

Do not constant-fold a reciprocal if any component of the reciprocated
expression is 0. For example, do not constant-fold `1 / vec4(0, 1, 2, 3)`.

Incorrect, previous behavior
----------------------------
Reciprocals were constant-folded even when some component of the
reciprocated expression was 0. The incorrectly applied arithmetic was:
   1 / 0 := 0
For example,
   1 / vec4(0, 1, 2, 3) = vec4(0, 1, 1/2, 1/3)

NOTE: This is a candidate for the 7.9 and 7.10 branches.
src/glsl/ir_constant_expression.cpp