On Mon, Aug 18, 2014 at 4:37 PM, Richard Biener
<[email protected]> wrote:
> On Sun, Aug 17, 2014 at 9:50 PM, Prathamesh Kulkarni
> <[email protected]> wrote:
>> Hi,
>> Apparently this pattern is not getting fired (even in isolation).
>>
>> /* x % 1 -> 0 */
>> (simplify
>> (trunc_mod @0 integer_onep)
>> { build_zero_cst (type); })
>>
>> I tried with this test-case:
>> int f(int x)
>> {
>> int t1 = 1;
>> int t2 = x % t1;
>> return t2;
>> }
>>
>> I get the following output in ccp1 dump file:
>> http://pastebin.com/B6HjptkC
>
> It shows (and I also see that):
>
> Visiting statement:
> t2_3 = x_2(D) % t1_1;
> which is likely CONSTANT
> Match-and-simplified x_2(D) % t1_1 to 0
> Lattice value changed to CONSTANT 0. Adding SSA edges to worklist.
>
> so it works as expected? Or what do you miss?
>
> Note that the function is simplified all the way to return 0; and
> intermediate statemens are removed.
oops, I got mixed up -:)
sorry for the noise.
This patch adds the test-case for that pattern.
testsuite/
* match-constant-folding.c: Add new test-case.
Thanks,
Prathamesh
>
> Thanks,
> Richard.
>
>> and the following output is generated in gimple-match.c:
>> http://pastebin.com/tmi0cpxv
>>
>> I guess the generated code appears to be correct for the above pattern,
>> so we are not doing anything wrong in genmatch ?
>>
>> Thanks,
>> Prathamesh
Index: match-constant-folding.c
===================================================================
--- match-constant-folding.c (revision 214095)
+++ match-constant-folding.c (working copy)
@@ -118,5 +118,13 @@ int c13(int x)
}
/* { dg-final { scan-tree-dump "Match-and-simplified x_\\d\+\\(D\\) \\^ t1_\\d\+ to x_\\d\+\\(D\\)" "ccp1" } } */
+/* x % 1 -> 0 */
+int c14(int x)
+{
+ int t1 = 1;
+ int c14_val = x % t1;
+ return c14_val;
+}
+/* { dg-final { scan-tree-dump "Match-and-simplified x_\\d\+\\(D\\) % t1_\\d\+ to 0" "ccp1" } } */
/* { dg-final { cleanup-tree-dump "forwprop2" } } */