r300/compiler: improve the detection of constants for constant folding
authorMarek Olšák <maraeo@gmail.com>
Tue, 8 Mar 2011 05:37:50 +0000 (06:37 +0100)
committerMarek Olšák <maraeo@gmail.com>
Tue, 8 Mar 2011 05:37:50 +0000 (06:37 +0100)
Now the expression V==0 generates one instruction instead of two.

src/mesa/drivers/dri/r300/compiler/radeon_optimize.c

index 5caff91b00e21090775304d923be6868b759cc8b..3915cb475bec2cdc286e35b8209eaceb43cfe530 100644 (file)
@@ -312,6 +312,13 @@ static void constant_folding(struct radeon_compiler * c, struct rc_instruction *
                struct rc_src_register newsrc;
                int have_real_reference;
 
+               if (inst->U.I.SrcReg[src].Swizzle == RC_SWIZZLE_1111 ||
+                   inst->U.I.SrcReg[src].Swizzle == RC_SWIZZLE_0000 ||
+                   inst->U.I.SrcReg[src].Swizzle == RC_SWIZZLE_HHHH) {
+                       inst->U.I.SrcReg[src].File = RC_FILE_NONE;
+                       continue;
+               }
+
                if (inst->U.I.SrcReg[src].File != RC_FILE_CONSTANT ||
                    inst->U.I.SrcReg[src].RelAddr ||
                    inst->U.I.SrcReg[src].Index >= c->Program.Constants.Count)