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]
Other format: [Raw text]

Re: [PR78365] ICE in determine_value_range, at tree-ssa-loo p-niter.c:413


Hi,

On Fri, Nov 18, 2016 at 12:38:18PM +1100, kugan wrote:
> Hi,
> 
> I was relying on ipa_get_callee_param_type to get type of parameter and then
> convert arguments to this type while computing jump functions. However, in
> cases like shown in PR78365, ipa_get_callee_param_type, instead of giving
> up, would return the wrong type.

At what stage does this happen?  During analysis
(ipa_compute_jump_functions_for_edge) or at WPA
(propagate_constants_accross_call)?  Both?

> I think the current uses of
> ipa_get_callee_param_type are fine with this.
> 
> Attached patch now uses callee's DECL_ARGUMENTS to get the type. If it
> cannot be found, then I would give up and set the jump function to varying.

But DECL_ARGUMENTS is not available at WPA stage with LTO so your
patch would make our IPA layer to optimize less with LTO.  This was
the reason to go through the hoops of TYPE_ARG_TYPES in the first
place.

If TYPE_ARG_TYPES cannot be trusted, then I'm afraid we are back to
square one and indeed need to put the correct type in jump functions.

If just preferring DECL_ARGUMENTS is enough, then changing
ipa_get_callee_param_type to use that if is is available, as Richi
suggested, would indeed be preferable.  But if even falling back on it
can cause errors, then I am not sure if it helps.

In any event, thanks for diligently dealing with the fallout,

Martin


> 
> Bootstrapped and regression tested on x86_64-linux-gnu with no new
> regressions. Is this OK for trunk?
> 
> Thanks,
> Kugan
> 
> gcc/testsuite/ChangeLog:
> 
> 2016-11-18  Kugan Vivekanandarajah  <kuganv@linaro.org>
> 
> 	PR IPA/78365
> 	* gcc.dg/torture/pr78365.c: New test.
> 
> gcc/ChangeLog:
> 
> 2016-11-18  Kugan Vivekanandarajah  <kuganv@linaro.org>
> 
> 	PR IPA/78365
> 	* ipa-cp.c (propagate_constants_accross_call): get param type from callees
> 	DECL_ARGUMENTS if available.
> 	* ipa-prop.c (ipa_compute_jump_functions_for_edge): Likewise.
> 	(ipcp_update_vr):  Remove now redundant conversion of precision for VR.
> 	* ipa-prop.h: Make ipa_get_callee_param_type local again.


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