lkml.org 
[lkml]   [2010]   [Nov]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patches in this message
    /
    Date
    From
    SubjectRe: gcc 4.5.1 / as 2.20.51.0.11 miscompiling drivers/char/i8k.c ?
    On Mon, Nov 15, 2010 at 07:58:48PM +0100, Jakub Jelinek wrote:
    > Now, not sure why this happens, as there is
    > case GIMPLE_ASM:
    > for (i = 0; i < gimple_asm_nclobbers (stmt); i++)
    > {
    > tree op = gimple_asm_clobber_op (stmt, i);
    > if (simple_cst_equal(TREE_VALUE (op), memory_identifier_string) == 1)
    > {
    > if (dump_file)
    > fprintf (dump_file, " memory asm clobber is not const/pure");
    > /* Abandon all hope, ye who enter here. */
    > local->pure_const_state = IPA_NEITHER;
    > }
    > }
    > Debugging...

    Ah, the problem is that memory_identifier_string is only initialized in
    ipa-reference.c's initialization, so it can be (and is in this case) NULL in
    ipa-pure-const.c.

    Two possible fixes (the latter is apparently what is used in
    tree-ssa-operands.c, so is probably sufficient). Guess ipa-reference.c
    should be changed to do the same and just drop memory_identifier_string.

    Jakub
    --- gcc/ipa-pure-const.c.jj 2010-08-11 16:06:19.000000000 +0200
    +++ gcc/ipa-pure-const.c 2010-11-15 20:06:36.121310614 +0100
    @@ -460,7 +460,10 @@ check_stmt (gimple_stmt_iterator *gsip,
    for (i = 0; i < gimple_asm_nclobbers (stmt); i++)
    {
    tree op = gimple_asm_clobber_op (stmt, i);
    - if (simple_cst_equal(TREE_VALUE (op), memory_identifier_string) == 1)
    + if (TREE_CODE (TREE_VALUE (op)) == STRING_CST
    + && TREE_STRING_LENGTH (TREE_VALUE (op)) == sizeof ("memory")
    + && memcmp (TREE_STRING_POINTER (TREE_VALUE (op)), "memory",
    + sizeof ("memory")) == 0)
    {
    if (dump_file)
    fprintf (dump_file, " memory asm clobber is not const/pure");--- gcc/ipa-pure-const.c.jj 2010-08-11 16:06:19.000000000 +0200
    +++ gcc/ipa-pure-const.c 2010-11-15 20:07:51.463716989 +0100
    @@ -460,7 +460,7 @@ check_stmt (gimple_stmt_iterator *gsip,
    for (i = 0; i < gimple_asm_nclobbers (stmt); i++)
    {
    tree op = gimple_asm_clobber_op (stmt, i);
    - if (simple_cst_equal(TREE_VALUE (op), memory_identifier_string) == 1)
    + if (strcmp (TREE_STRING_POINTER (TREE_VALUE (link)), "memory") == 0)
    {
    if (dump_file)
    fprintf (dump_file, " memory asm clobber is not const/pure");
    \
     
     \ /
      Last update: 2010-11-15 20:17    [W:0.025 / U:0.052 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site