This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH (3/7)] Widening multiply-and-accumulate pattern matching
On Fri, Jul 8, 2011 at 2:44 PM, Andrew Stubbs <ams@codesourcery.com> wrote:
> On 07/07/11 13:37, Richard Guenther wrote:
>>>
>>> I'll cook up a quick patch for VRP.
>>
>> Like the attached. ?I'll finish and properly test it.
>
> Your patch appears to do the wrong thing for this test case:
>
> int
> foo (int a, short b, short c)
> {
> ?int bc = b * c;
> ?return a + (short)bc;
> }
>
> With your patch, the input to the widening-mult pass now looks like this:
>
> foo (int a, short int b, short int c)
> {
> ?int bc;
> ?int D.2016;
> ?int D.2015;
> ?int D.2014;
>
> <bb 2>:
> ?D.2014_2 = (int) b_1(D);
> ?D.2015_4 = (int) c_3(D);
> ?bc_5 = D.2014_2 * D.2015_4;
> ?D.2016_9 = bc_5 + a_8(D);
> ?return D.2016_9;
>
> }
>
> It looks like when the user tries to deliberately break the maths your patch
> seems to unbreak it.
Yeah, I fixed that in the checked in version.
Richard.
> Andrew
>