On Mon, Mar 21, 2011 at 12:19 PM, Eric Botcazou <ebotca...@adacore.com> wrote: > Hi, > > the attached patch makes a couple of tweaks to the gimplifier in order to help > Ada, but I think that they are of general usefulness: > > 1) Set TREE_THIS_NOTRAP on the INDIRECT_REF built for VLA decls. This is > correct since stack memory isn't considered as trapping in the IL.
This is ok. > 2) Improve gimplification of complex conditions in COND_EXPR. They are > naturally generated by the Ada compiler and the patch avoids emitting > redundant branches in GIMPLE, visible at -O0 for the testcase: Shouldn't + /* Remove any COMPOUND_EXPR so the following cases will be caught. */ + STRIP_TYPE_NOPS (TREE_OPERAND (expr, 0)); + if (TREE_CODE (TREE_OPERAND (expr, 0)) == COMPOUND_EXPR) + gimplify_compound_expr (&TREE_OPERAND (expr, 0), pre_p, true); happen in gimple_boolify instead so that other callers also benefit? That is, add a COMPOUND_EXPR case there? > procedure P (B : Boolean; S1, S2 : String) is > begin > if B and then S1 & S2 = "toto" then > raise Program_Error; > end if; > end; So, what does the GENERIC look like here? Thanks, Richard. > @@ -158,21 +158,12 @@ > movl %r12d, %eax > subl %ebx, %eax > cmpl $3, %eax > - jne .L33 > + jne .L18 > .loc 1 3 0 discriminator 1 > movq -40(%rbp), %rax > movl (%rax), %eax > cmpl $1869901684, %eax > - jne .L33 > - .loc 1 3 0 discriminator 2 > - movl $1, %eax > - jmp .L34 > -.L33: > - movl $0, %eax > -.L34: > - .loc 1 3 0 discriminator 3 > - testb %al, %al > - je .L18 > + jne .L18 > .loc 1 4 0 is_stmt 1 > movl $4, %esi > movl $.LC0, %edi > > Bootstrapped/regtested on x86_64-suse-linux, OK for the mainline? > > > 2011-03-21 Eric Botcazou <ebotca...@adacore.com> > > * gimplify.c (gimplify_vla_decl): Set TREE_THIS_NOTRAP flag. > (gimplify_cond_expr): Gimplify COMPOUND_EXPR conditions. > > > -- > Eric Botcazou >