> After the propagation of constants and value ranges, it turns out
> that the propagation of known bits also needs to be made aware of any
> intermediate types in which any arithmetic operations are made and
> must limit its precision there.  This implements just that, using the
> newly collected and streamed types of the operations involved.
> 
> Bootstrapped and tested and LTO bootstrapped on x86_64-linux. OK for
> master?
> 
> Thanks,
> 
> Martin
> 
> 
> gcc/ChangeLog:
> 
> 2025-03-20  Martin Jambor  <mjam...@suse.cz>
> 
>       PR ipa/119318
>       * ipa-cp.cc (ipcp_bits_lattice::meet_with_1): Set all mask bits
>       not covered by precision to one.
>       (ipcp_bits_lattice::meet_with): Likewise.
>       (propagate_bits_across_jump_function): Use the first operand type
>       rather than the final parameter one to perform meet with other
>       lattices.  Check the operation conforms with
>       expr_type_first_operand_type_p.
>       * tree.cc (expr_type_first_operand_type_p): Add POINTER_PLUS_EXPR.
> 
> gcc/testsuite/ChangeLog:
> 
> 2025-03-18  Martin Jambor  <mjam...@suse.cz>
> 
>       PR ipa/119318
>       * gcc.dg/ipa/pr119318.c: New test.
> +       if (!op_type)
> +         {
> +           op_type = ipa_get_type (caller_info, src_idx);
> +           if (!op_type)
> +             {
> +               if (dump_file && (dump_flags & TDF_DETAILS))
> +                 fprintf (dump_file, "Setting dest_lattice to bottom, "
> +                          "because the operation involved in computing "
> +                          "param %i of %s is in an unknown type.\n",
> +                          idx, cs->callee->dump_name ());
> +               return dest_lattice->set_to_bottom ();
> +             }
> +         }

When this can happen?
I can see that get_ipa_type returns NULL when there are no descriptor or
respective descriptor has NULL type, but I wonder in what cases this
happens in practice...
Honza

Reply via email to