On Sun, Aug 7, 2016 at 3:19 PM, Prasad Ghangal <prasad.ghan...@gmail.com> wrote: > On 4 August 2016 at 18:29, Richard Biener <richard.guent...@gmail.com> wrote: >> On Thu, Aug 4, 2016 at 1:31 PM, Prasad Ghangal <prasad.ghan...@gmail.com> >> wrote: >>> On 2 August 2016 at 14:29, Richard Biener <richard.guent...@gmail.com> >>> wrote: >>>> On Mon, Aug 1, 2016 at 4:52 PM, Prasad Ghangal <prasad.ghan...@gmail.com> >>>> wrote: >>>>> Hi, >>>>> >>>>> I am trying to replace c_parser_paren_condition (parser) in >>>>> c_parser_gimple_if_stmt by c_parser_gimple_paren_condition (parser) as >>>>> described in the patch >>>>> >>>>> I am trying test case >>>>> void __GIMPLE () foo () >>>>> { >>>>> int a; >>>>> bb_2: >>>>> if (a == 2) >>>>> goto bb_3; >>>>> else >>>>> goto bb_4; >>>>> bb_3: >>>>> a_2 = 4; >>>>> bb_4: >>>>> return; >>>>> } >>>>> >>>>> but it fails to parse gimple expression and produces error as >>>>> /home/prasad/test3.c: In function ‘foo’: >>>>> /home/prasad/test3.c:1:18: error: invalid operands in gimple comparison >>>>> void __GIMPLE () foo () >>>>> ^~~ >>>>> if (<<< Unknown tree: c_maybe_const_expr >>>>> >>>>> a >>> == 2) goto bb_3; else goto bb_4; >>>>> /home/prasad/test3.c:1:18: internal compiler error: verify_gimple failed >>>>> >>>>> I failed to debug where it is setting to C_MAYBE_CONST_EXPR >>>> >>>> It's in parsing the binary expression. Btw, you don't need >>>> lvalue_to_rvalue >>>> conversion or truthvalue conversion - source that would require this would >>>> not be valid GIMPLE. Let me try to debug: >>>> >>>> >>>> (gdb) p debug_tree (cond.value) >>>> <eq_expr 0x7ffff6997960 >>>> type <integer_type 0x7ffff688b7e0 int public SI >>>> size <integer_cst 0x7ffff6887ee8 constant 32> >>>> unit size <integer_cst 0x7ffff6887f00 constant 4> >>>> align 32 symtab 0 alias set -1 canonical type 0x7ffff688b7e0 >>>> precision 32 min <integer_cst 0x7ffff6887ea0 -2147483648> max >>>> <integer_cst 0x7ffff6887eb8 2147483647> >>>> pointer_to_this <pointer_type 0x7ffff68a5930>> >>>> >>>> arg 0 <c_maybe_const_expr 0x7ffff6997938 type <integer_type >>>> 0x7ffff688b7e0 int> >>>> >>>> arg 1 <var_decl 0x7ffff7fefcf0 a type <integer_type 0x7ffff688b7e0 >>>> int> >>>> used SI file t.c line 3 col 7 size <integer_cst >>>> 0x7ffff6887ee8 32> unit size <integer_cst 0x7ffff6887f00 4> >>>> align 32 context <function_decl 0x7ffff699c500 foo>>> >>>> arg 1 <integer_cst 0x7ffff68a4318 type <integer_type >>>> 0x7ffff688b7e0 int> constant 2> >>>> t.c:5:9 start: t.c:5:7 finish: t.c:5:12> >>>> $5 = void >>>> (gdb) b ggc-page.c:1444 if result == 0x7ffff6997938 >>>> Breakpoint 6 at 0x8a0d3e: file >>>> /space/rguenther/src/gcc_gimple_fe/gcc/ggc-page.c, line 1444. >>>> (gdb) run >>>> >>>> Breakpoint 6, ggc_internal_alloc (size=40, f=0x0, s=0, n=1) >>>> at /space/rguenther/src/gcc_gimple_fe/gcc/ggc-page.c:1444 >>>> 1444 return result; >>>> (gdb) fin (a few times) >>>> Run till exit from #0 0x00000000011821b7 in build2_stat ( >>>> code=C_MAYBE_CONST_EXPR, tt=<integer_type 0x7ffff688b7e0 int>, >>>> arg0=<tree 0x0>, arg1=<var_decl 0x7ffff7fefcf0 a>) >>>> at /space/rguenther/src/gcc_gimple_fe/gcc/tree.c:4466 >>>> 0x000000000081d263 in c_wrap_maybe_const (expr=<var_decl 0x7ffff7fefcf0 a>, >>>> non_const=false) >>>> at /space/rguenther/src/gcc_gimple_fe/gcc/c-family/c-common.c:4359 >>>> 4359 expr = build2 (C_MAYBE_CONST_EXPR, TREE_TYPE (expr), NULL, expr); >>>> Value returned is $11 = (tree_node *) 0x7ffff6997938 >>>> (gdb) up >>>> #1 0x00000000007b8e81 in build_binary_op (location=176833, code=EQ_EXPR, >>>> orig_op0=<var_decl 0x7ffff7fefcf0 a>, >>>> orig_op1=<integer_cst 0x7ffff68a4318>, convert_p=1) >>>> at /space/rguenther/src/gcc_gimple_fe/gcc/c/c-typeck.c:11549 >>>> 11549 op0 = c_wrap_maybe_const (op0, >>>> !op0_maybe_const); >>>> >>>> and this is guarded by !in_late_binary_op (which also seems to guard >>>> folding). >>>> So I suggest to somewhere at the start of parsing to set in_late_binary_op >>>> to >>>> true for -fgimple. Not sure if it works for everything, but you >>>> should have accumulated >>>> quite some tests for -fgimple in the testsuite to make sure it doesn't >>>> regress anything. >>>> >>> I did bootstrap build for the trunk and testing is in progress. How >>> can I test with -fgimple flag enabled? >> >> You can do >> >> make check-gcc RUNTESTFLAGS="--target_board=unix/-fgimple" >> >> Richard. >> > I was comparing result from latest commit and "gcc initial version". I > found most of the testcases failed due to modified gimple dump.
Good, that's expected. Can you wrap up as for how is the status on the project schedule? As said, adding more testcases would be good for the SSA parsing feature. A big part missing is now is parsing of function calls? Thanks, Richard. > > Thanks, > Prasad > >>> >>> Thanks, >>> Prasad >>>> The following works for me: >>>> >>>> diff --git a/gcc/c/c-parser.c b/gcc/c/c-parser.c >>>> index 70800a2..c8c087a 100644 >>>> --- a/gcc/c/c-parser.c >>>> +++ b/gcc/c/c-parser.c >>>> @@ -2158,7 +2159,10 @@ c_parser_declaration_or_fndef (c_parser >>>> *parser, bool fndef_ok, >>>> >>>> if (gimple_body_p && flag_gimple) >>>> { >>>> + bool saved = in_late_binary_op; >>>> + in_late_binary_op = true; >>>> c_parser_parse_gimple_body (parser); >>>> + in_late_binary_op = saved; >>>> cgraph_node::finalize_function (current_function_decl, false); >>>> timevar_pop (tv); >>>> return; >>>> >>>> >>>> Richard. >>>> >>>>> >>>>> Thanks, >>>>> Prasad