On Mon, Aug 18, 2014 at 4:37 PM, Richard Biener <richard.guent...@gmail.com> wrote: > On Sun, Aug 17, 2014 at 9:50 PM, Prathamesh Kulkarni > <bilbotheelffri...@gmail.com> 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" } } */