Several miscellaneous fixes to runtime optimization: * Constant fold float*triple and triple*float (previously we only folded   f*f and t*t). * Make constant folding of division follow the (A/B == 0) rule that OSL   does in the runtime interpreter. * New optimization: turn component assignment (triple[i] = c) into nop   if the triple is known to already have that value at that position! * When "collapsing" out the unused symbols and nops, we weren't properly   adjusting init ops ranges.  Oops. http://codereview.appspot.com/1015042/show Review by: ckulla
Several miscellaneous fixes to runtime optimization:
* Constant fold float*triple and triple*float (previously we only folded
  f*f and t*t).
* Make constant folding of division follow the (A/B == 0) rule that OSL
  does in the runtime interpreter.
* New optimization: turn component assignment (triple[i] = c) into nop
  if the triple is known to already have that value at that position!
* When "collapsing" out the unused symbols and nops, we weren't properly
  adjusting init ops ranges.  Oops.
http://codereview.appspot.com/1015042/show
Review by: ckulla


h3rb/openshadinglanguage,tectronics/openshadinglanguage,tectronics/openshadinglanguage,qdtk/openshadinglanguage,h3rb/openshadinglanguage,qdtk/openshadinglanguage,qdtk/openshadinglanguage,h3rb/openshadinglanguage,h3rb/openshadinglanguage,tectronics/openshadinglanguage,tectronics/openshadinglanguage,qdtk/openshadinglanguage