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.

Reply via email to