1. You can't assume VUSE's are must-aliases.  The fact that there is a
vuse for something does not imply it is must-used, it implies it is
may-used.

We do not differentiate may-use from must-use in our alias system. You
can do some trivial must-use analysis if you like (by computing
cardinality of points-to set as either single or multiple and
propagating/meeting it in the right place).

Must-use is actually quite rare.

2. " if (!gimple_references_memory_p (def))
+       return;
+"
Is nonsensical the SSA_NAME_DEF_STMT of a vuse must contain a vdef,
and thus must access memory.




On Thu, Aug 14, 2008 at 2:16 PM, Manuel López-Ibáñez
<[EMAIL PROTECTED]> wrote:
> Dear all,
>
> In order to fix PR 179, I need help either understanding why exactly
> the warning is triggered or obtaining a small self-contained testcase
> to reproduce it.
>
> Thanks in advance,
>
> Manuel.
>
> The attached patch triggers the warnings:
>
> /home/manuel/src/trunk/gcc/builtins.c: In function 'fold_builtin_strchr':
> /home/manuel/src/trunk/gcc/builtins.c:11095: error: 'c' is used
> uninitialized in this function
> /home/manuel/src/trunk/gcc/builtins.c: In function 'fold_builtin_memchr':
> /home/manuel/src/trunk/gcc/builtins.c:8963: error: 'c' is used
> uninitialized in this function
>
> Uncommenting  the following avoids the warning:
>
> +  /*
> +  if (is_call_clobbered (var))
> +    {
> +      var_ann_t va = var_ann (var);
> +      unsigned int escape_mask = va->escape_mask;
> +      if (escape_mask & ESCAPE_TO_ASM)
> +       return false;
> +      if (escape_mask & ESCAPE_IS_GLOBAL)
> +       return false;
> +      if (escape_mask & ESCAPE_IS_PARM)
> +       return false;
> +    }
> +  */
>
> The alias dump is:
>
> fold_builtin_strchr (union tree_node * s1D.68612, union tree_node *
> s2D.68613, union tree_node * typeD.68614)
> {
>  union tree_node * temD.68620;
>  const charD.1 * rD.68619;
>  charD.1 cD.68618;
>  const charD.1 * p1D.68617;
>  union tree_node * D.68650;
>  union tree_node * D.68649;
>  long intD.2 D.68648;
>  long intD.2 p1.2917D.68647;
>  long intD.2 r.2916D.68646;
>  union tree_node * D.68644;
>  intD.0 D.68641;
>  charD.1 c.2915D.68640;
>  intD.0 D.68637;
>  short unsigned intD.8 D.68631;
>  union tree_node * D.68630;
>  unsigned charD.10 D.68629;
>  unsigned charD.10 D.68627;
>
>  # BLOCK 2 freq:10000
>  # PRED: ENTRY [100.0%]  (fallthru,exec)
>  [/home/manuel/src/trunk/gcc/builtins.c : 11095] # VUSE
> <cD.68618_34(D)> { cD.68618 }
>  D.68627_3 = validate_argD.45737 (s1D.68612_2(D), 10);
>  [/home/manuel/src/trunk/gcc/builtins.c : 11095] if (D.68627_3 == 0)
>    goto <bb 10>;
>  else
>    goto <bb 3>;
>  # SUCC: 10 [95.7%]  (true,exec) 3 [4.3%]  (false,exec)
>
>  # BLOCK 3 freq:434
>  # PRED: 2 [4.3%]  (false,exec)
>  [/home/manuel/src/trunk/gcc/builtins.c : 11095] # VUSE
> <cD.68618_34(D)> { cD.68618 }
>  D.68629_5 = validate_argD.45737 (s2D.68613_4(D), 8);
>  [/home/manuel/src/trunk/gcc/builtins.c : 11095] if (D.68629_5 == 0)
>    goto <bb 10>;
>  else
>    goto <bb 4>;
>  # SUCC: 10 [90.0%]  (true,exec) 4 [10.0%]  (false,exec)
>
>  # BLOCK 4 freq:43
>  # PRED: 3 [10.0%]  (false,exec)
>  [/home/manuel/src/trunk/gcc/builtins.c : 11102] # VUSE
> <cD.68618_34(D), SMT.3811D.75594_35(D)> { cD.68618 SMT.3811D.75594 }
>  D.68631_6 = s2D.68613_4(D)->baseD.20795.codeD.19700;
>  [/home/manuel/src/trunk/gcc/builtins.c : 11102] if (D.68631_6 != 23)
>    goto <bb 10>;
>  else
>    goto <bb 5>;
>  # SUCC: 10 [98.3%]  (true,exec) 5 [1.7%]  (false,exec)
>
>  # BLOCK 5 freq:1
>  # PRED: 4 [1.7%]  (false,exec)
>  [/home/manuel/src/trunk/gcc/builtins.c : 11105] # cD.68618_37 = VDEF
> <cD.68618_34(D)>
>  # SMT.3811D.75594_38 = VDEF <SMT.3811D.75594_35(D)>
>  # SMT.3812D.75595_39 = VDEF <SMT.3812D.75595_36(D)> { cD.68618
> SMT.3811D.75594 SMT.3812D.75595 }
>  p1D.68617_8 = c_getstrD.45477 (s1D.68612_2(D));
>  [/home/manuel/src/trunk/gcc/builtins.c : 11106] if (p1D.68617_8 != 0B)
>    goto <bb 6>;
>  else
>    goto <bb 10>;
>  # SUCC: 6 [20.5%]  (true,exec) 10 [79.5%]  (false,exec)
>
>  # BLOCK 6
>  # PRED: 5 [20.5%]  (true,exec)
>  [/home/manuel/src/trunk/gcc/builtins.c : 11112] # cD.68618_40 = VDEF
> <cD.68618_37>
>  # SMT.3811D.75594_41 = VDEF <SMT.3811D.75594_38>
>  # SMT.3812D.75595_42 = VDEF <SMT.3812D.75595_39> { cD.68618
> SMT.3811D.75594 SMT.3812D.75595 }
>  D.68637_10 = target_char_castD.45483 (s2D.68613_4(D), &cD.68618);
>  [/home/manuel/src/trunk/gcc/builtins.c : 11112] if (D.68637_10 != 0)
>    goto <bb 10>;
>  else
>    goto <bb 7>;
>  # SUCC: 10 [39.0%]  (true,exec) 7 [61.0%]  (false,exec)
>
>  # BLOCK 7
>  # PRED: 6 [61.0%]  (false,exec)
>  [/home/manuel/src/trunk/gcc/builtins.c : 11115] # VUSE <cD.68618_40>
> { cD.68618 }
>  c.2915D.68640_12 = cD.68618;
>  [/home/manuel/src/trunk/gcc/builtins.c : 11115] D.68641_13 =
> (intD.0) c.2915D.68640_12;
>  [/home/manuel/src/trunk/gcc/builtins.c : 11115] # VUSE <cD.68618_40>
> { cD.68618 }
>  rD.68619_14 = strchrD.689 (p1D.68617_8, D.68641_13);
>  [/home/manuel/src/trunk/gcc/builtins.c : 11117] if (rD.68619_14 == 0B)
>    goto <bb 8>;
>  else
>    goto <bb 9>;
>  # SUCC: 8 [10.1%]  (true,exec) 9 [89.9%]  (false,exec)
>
>  # BLOCK 9
>  # PRED: 7 [89.9%]  (false,exec)
>  [/home/manuel/src/trunk/gcc/builtins.c : 11121] r.2916D.68646_20 =
> (long intD.2) rD.68619_14;
>  [/home/manuel/src/trunk/gcc/builtins.c : 11121] p1.2917D.68647_21 =
> (long intD.2) p1D.68617_8;
>  [/home/manuel/src/trunk/gcc/builtins.c : 11121] D.68648_22 =
> r.2916D.68646_20 - p1.2917D.68647_21;
>  [/home/manuel/src/trunk/gcc/builtins.c : 11121] # cD.68618_46 = VDEF
> <cD.68618_40>
>  # SMT.3811D.75594_47 = VDEF <SMT.3811D.75594_41>
>  # SMT.3812D.75595_48 = VDEF <SMT.3812D.75595_42> { cD.68618
> SMT.3811D.75594 SMT.3812D.75595 }
>  D.68649_23 = size_int_kindD.21427 (D.68648_22, 0);
>  [/home/manuel/src/trunk/gcc/builtins.c : 11121] # VUSE <cD.68618_46,
> SMT.3811D.75594_47> { cD.68618 SMT.3811D.75594 }
>  D.68650_26 = s1D.68612_2(D)->commonD.20796.typeD.19731;
>  [/home/manuel/src/trunk/gcc/builtins.c : 11121] # cD.68618_49 = VDEF
> <cD.68618_46>
>  # SMT.3811D.75594_50 = VDEF <SMT.3811D.75594_47>
>  # SMT.3812D.75595_51 = VDEF <SMT.3812D.75595_48> { cD.68618
> SMT.3811D.75594 SMT.3812D.75595 }
>  temD.68620_27 = fold_build2_statD.21716 (67, D.68650_26,
> s1D.68612_2(D), D.68649_23);
>  [/home/manuel/src/trunk/gcc/builtins.c : 11123] # cD.68618_52 = VDEF
> <cD.68618_49>
>  # SMT.3811D.75594_53 = VDEF <SMT.3811D.75594_50>
>  # SMT.3812D.75595_54 = VDEF <SMT.3812D.75595_51> { cD.68618
> SMT.3811D.75594 SMT.3812D.75595 }
>  D.68630_30 = fold_convertD.21753 (typeD.68614_29(D), temD.68620_27);
>  # SUCC: 10 [100.0%]  (fallthru,exec)
>
>  # BLOCK 10 freq:10000, starting at line 0
>  # PRED: 3 [90.0%]  (true,exec) 4 [98.3%]  (true,exec) 6 [39.0%]
> (true,exec) 8 [100.0%]  (fallthru,exec) 9 [100.0%]  (fallthru,exec) 5
> [79.5%]  (false,exec) 2 [95.7%]\
>  (true,exec)
>  # D.68630_1 = PHI <0B(3), 0B(4), 0B(6), D.68630_18(8),
> D.68630_30(9), 0B(5), 0B(2)>
>  return D.68630_1;
>  # SUCC: EXIT [100.0%]
>
> }
>

Reply via email to