This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: fix for execute/991221-1.c -O1 failure


> *************** range_binop (code, type, arg0, upper0_p,
> *** 3180,3187 ****
>        We can therefore make the transformation of any unbounded range with
>        the value Z, Z being greater than any representable number. This permits
>        us to treat unbounded ranges as equal. */
> !   sgn0 = arg0 != 0 ? 0 : (upper0_p ? 1 : -1);
> !   sgn1 = arg1 != 0 ? 0 : (upper1_p ? 1 : -1);
>     switch (code)
>       {
>       case EQ_EXPR:
> --- 3180,3199 ----
>        We can therefore make the transformation of any unbounded range with
>        the value Z, Z being greater than any representable number. This permits
>        us to treat unbounded ranges as equal. */
> !   sgn0 = (upper0_p
> ! 	  ? ((! arg0
> ! 	      || operand_equal_p (arg0, TYPE_MAX_VALUE (TREE_TYPE (arg0)), 1))
> ! 	     ? 1 : 0)
> ! 	  : ((! arg0
> ! 	      || operand_equal_p (arg0, TYPE_MIN_VALUE (TREE_TYPE (arg0)), 1))
> ! 	     ? -1 : 0));
> !   sgn1 = (upper1_p
> ! 	  ? ((! arg1
> ! 	      || operand_equal_p (arg1, TYPE_MAX_VALUE (TREE_TYPE (arg1)), 1))
> ! 	     ? 1 : 0)
> ! 	  : ((! arg1
> ! 	      || operand_equal_p (arg1, TYPE_MIN_VALUE (TREE_TYPE (arg1)), 1))
> ! 	     ? -1 : 0));
>     switch (code)
>       {
>       case EQ_EXPR:

Hmmm, I forgot to re-generate the patch after I fixed this to actually use
TYPE.

Bu I have a different problem here: the bootstrap fails when compiling reload.
It encounters a pointer_type, and this has no min nor max value.

(gdb) call debug_tree(type)
 <pointer_type 0x4028c280
    type <integer_type 0x4001a300 short int
        permanent HI
        size <integer_cst 0x40019320 constant permanent 16>
        align 16 symtab 8 alias set 24 precision 16
        min <integer_cst 0x400194a0 constant permanent -32768>
        max <integer_cst 0x400194c0 constant permanent 32767>
        pointer_to_this <pointer_type 0x4028c280>>
   
    unsigned permanent SI
    size <integer_cst 0x40019560 type <integer_type 0x4001b580 unsigned int> constant permanent 32>
    align 32 symtab 352 alias set 93>

Should I get the limits from somewhere else?  Or should pointers be treated as
having indeed no bounds?

*************** range_binop (code, type, arg0, upper0_p,
*** 3180,3187 ****
       We can therefore make the transformation of any unbounded range with
       the value Z, Z being greater than any representable number. This permits
       us to treat unbounded ranges as equal. */
!   sgn0 = arg0 != 0 ? 0 : (upper0_p ? 1 : -1);
!   sgn1 = arg1 != 0 ? 0 : (upper1_p ? 1 : -1);
    switch (code)
      {
      case EQ_EXPR:
--- 3180,3195 ----
       We can therefore make the transformation of any unbounded range with
       the value Z, Z being greater than any representable number. This permits
       us to treat unbounded ranges as equal. */
!   sgn0 = (upper0_p
! 	  ? (! arg0 || operand_equal_p (arg0, TYPE_MAX_VALUE (type), 1)
! 	     ? 1 : 0)
! 	  : (! arg0 || operand_equal_p (arg0, TYPE_MIN_VALUE (type), 1)
! 	     ? -1 : 0));
!   sgn1 = (upper1_p
! 	  ? (! arg1 || operand_equal_p (arg1, TYPE_MAX_VALUE (type), 1)
! 	     ? 1 : 0)
! 	  : (! arg1 || operand_equal_p (arg1, TYPE_MIN_VALUE (type), 1)
! 	     ? -1 : 0));
    switch (code)
      {
      case EQ_EXPR:


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]