r300g: Fix bug in OMOD optimization
authorTom Stellard <thomas.stellard@amd.com>
Wed, 20 Mar 2013 02:39:31 +0000 (22:39 -0400)
committerTom Stellard <thomas.stellard@amd.com>
Fri, 12 Apr 2013 15:33:31 +0000 (08:33 -0700)
https://bugs.freedesktop.org/show_bug.cgi?id=60503

NOTE: This is a candidate for the stable branches.

src/gallium/drivers/r300/compiler/radeon_optimize.c

index b626e33540c3ca21567adb26e65b1e95f8a57a98..3bbfe898cc2ad599cc43da9ea73a7e61357b5d9a 100644 (file)
@@ -725,6 +725,7 @@ static int peephole_mul_omod(
        struct rc_list * writer_list;
        struct rc_variable * var;
        struct peephole_mul_cb_data cb_data;
+       unsigned writemask_sum;
 
        for (i = 0; i < 2; i++) {
                unsigned int j;
@@ -832,10 +833,11 @@ static int peephole_mul_omod(
        }
 
        /* Rewrite the instructions */
+       writemask_sum = rc_variable_writemask_sum(writer_list->Item);
        for (var = writer_list->Item; var; var = var->Friend) {
                struct rc_variable * writer = var;
                unsigned conversion_swizzle = rc_make_conversion_swizzle(
-                                       writer->Inst->U.I.DstReg.WriteMask,
+                                       writemask_sum,
                                        inst_mul->U.I.DstReg.WriteMask);
                writer->Inst->U.I.Omod = omod_op;
                writer->Inst->U.I.DstReg.File = inst_mul->U.I.DstReg.File;