On Tue, May 13, 2014 at 11:06 PM, Prathamesh Kulkarni <bilbotheelffri...@gmail.com> wrote: > On Tue, May 13, 2014 at 2:36 PM, Richard Biener > <richard.guent...@gmail.com> wrote: >> On Sun, May 11, 2014 at 5:00 PM, Prathamesh Kulkarni >> <bilbotheelffri...@gmail.com> wrote: >>> On Sun, May 11, 2014 at 8:10 PM, Andreas Schwab <sch...@linux-m68k.org> >>> wrote: >>>> Prathamesh Kulkarni <bilbotheelffri...@gmail.com> writes: >>>> >>>>> a) I am not able to follow why 3 slashes are required here >>>>> in x_.\\\(D\\\) ? Why does x_.\(D\) not work ? >>>> >>>> Two of the three backslashes are eaten by the tcl parser. But actually >>>> only two backslashes are needed, since the parens are not special to tcl >>>> (but are special to the regexp engine, so you want a single backslash >>>> surviving the tcl parser). >>>> >>>>> b) The expression after folding would be of the form: >>>>> t2_<digit> = x_<digit>(D) - y_<digit>(D) >>>>> I have used the operator "." in the pattern to match digit. >>>>> While that works in the above case, I think a better >>>>> idea would be to match using [0-9]. >>>>> I tried the following but it does not work: >>>>> t_[0-9] = x_[0-9]\\\(D\\\) - y_[0-9]\\\(D\\\) >>>>> Neither does \\\[ and \\\] work. >>>> >>>> Brackets are special in tcl (including inside double quotes), so they >>>> need to be quoted. But you want the brackets to appear unquoted to the >>>> regexp engine, so a single backslash will do the Right Thing. >>>> >>>> See tcl(n) for the tcl parsing rules. >>>> >>> Thanks. Now I get it, the double backslash \\ is an escape sequence >>> for \, and special characters like (, [ >>> retain their meaning in quotes, so to match input text: (D), the >>> pattern has to be written as: "\\(D\\)". >>> I believe "\(D\)" would only match D in the input ? >>> I have modified the test-case. Is this version correct ? >> >> I usually verify that by running the testcase in isolation on a GCC version >> that should FAIL it and on one that should PASS it (tcl quoting is also >> try-and-error for me most of the time...). >> >> Thus I do >> >> gcc/> make check-gcc RUNTESTFLAGS="tree-ssa.exp=match-2.c" >> <test should FAIL> >> <patch source tree> >> gcc/> make cc1 >> ... compiles cc1 ... >> gcc/> make check-gcc RUNTESTFLAGS="tree-ssa.exp=match-2.c" >> <test should PASS> >> >> A more complete matching for an SSA name would be (allowing >> for SSA name versions > 9) _\\d\+ with \\(D\\) appended if >> suitable (that's usually known from the testcase). \\d\+ should match >> at least one decimal digit. > I thought that SSA name version wouldn't exceed 9 for that test-case, > so I decided for matching only one digit. I will change it to match > one or more digits. > > * I have written test-cases for patterns in match.pd (attached patch), which > result in PASS. Could you review them for me ?
Sure. It looks good to me, though you can look at the changed match-1.c testcase on the branch where I've changed the matching to look for the debug output the forwprop pass dumps with -fdump-tree-forwprop1-details, that makes sure no other pass before did the transform (you can also move the individual dg-final lines after the testcase function to more easily associate them with a function). At some point the testcase should be split up as well. How do you manage your sources at the moment? Just a svn checkout of the branch with local modifications? Thanks, Richard.