i965/fs: Add fs_reg::is_zero() and is_one(); use for opt_algebraic().
authorKenneth Graunke <kenneth@whitecape.org>
Sat, 17 Nov 2012 23:10:53 +0000 (15:10 -0800)
committerEric Anholt <eric@anholt.net>
Fri, 30 Nov 2012 21:15:39 +0000 (13:15 -0800)
commit8d0bb74a11f1905e32f6db23fbf8bb29ff8fa367
tree8d4bc5ca7bfec4d7c4b1a71c0b7d2bbaa3863e88
parent4cedb65a43ae81c7ac71e631c854b7404dd2b61b
i965/fs: Add fs_reg::is_zero() and is_one(); use for opt_algebraic().

These helper macros save you from writing nasty expressions like:

   if ((inst->src[1].type == BRW_REGISTER_TYPE_F &&
         inst->src[1].imm.f == 1.0) ||
        ((inst->src[1].type == BRW_REGISTER_TYPE_D ||
          inst->src[1].type == BRW_REGISTER_TYPE_UD) &&
         inst->src[1].imm.u == 1)) {

Instead, you simply get to write inst->src[1].is_one().  Simple.
Also, this makes the FS backend match the VS backend (which has these).

This patch also converts opt_algebraic to use the new helper functions.
As a consequence, it will now also optimize integer-typed expressions.

Reviewed-by: Eric Anholt <eric@anholt.net>
src/mesa/drivers/dri/i965/brw_fs.cpp
src/mesa/drivers/dri/i965/brw_fs.h