[PATCH 1/3] Fix PR46029: reimplement if-convert stores.
Sebastian Pop
sebpop@gmail.com
Mon Jan 3 21:39:00 GMT 2011
Hi Richi,
On Tue, Nov 16, 2010 at 08:09, Richard Guenther <rguenther@suse.de> wrote:
> On Tue, 16 Nov 2010, Richard Guenther wrote:
>
>> On Mon, 15 Nov 2010, Sebastian Pop wrote:
>>
>> > Hi Richi,
>> >
>> > fixes to your review are posted separately, see below for the details.
>> > See 0001-Fix-PR46029-reimplement-if-convert-stores.patch for the
>> > combined patch.
>>
>> + tree base = create_tmp_var (array_type, "scratch_pad");
>> + tree a0 = build4 (ARRAY_REF, elt_type, base, integer_zero_node,
>> NULL_TREE,
>> + NULL_TREE);
>>
>> you can drop creating the ARRAY_REF and do
>>
>> + return insert_address_of (base, build_pointer_type (elt_type), &gsi);
>>
>>
>> The patches are ok with the above change.
>
> Btw, in insert_address_of you might want to add
>
> struct ptr_info_def *pi = get_ptr_info (address_of_ai);
> pt_solution_set_var (&pi->pt, SSA_NAME_VAR (address_of_ai));
>
In four tests of the SPEC benchmarks I am getting this kind of errors:
results.f:19:0: error: address taken, but ADDRESSABLE bit not set
scratch_pad.1438
f951: note: in statement
_ifc_.1454_733 = [cond_expr] D.2525_407 != 0 ? _ifc_.1453_797 :
&scratch_pad.1438;
results.f:19:0: error: address taken, but ADDRESSABLE bit not set
vkl
f951: note: in statement
_ifc_.1450_7837 = [cond_expr] prephitmp.1376_7987 > 1 ? &vkl[11] :
&scratch_pad.1438;
If I'm watching the addressable field of the vkl or scratch_pad decls,
I see that TREE_ADDRESSABLE is cleared in maybe_optimize_var
if (TREE_ADDRESSABLE (var)
/* Do not change TREE_ADDRESSABLE if we need to preserve var as
a non-register. Otherwise we are confused and forget to
add virtual operands for it. */
&& (!is_gimple_reg_type (TREE_TYPE (var))
|| !bitmap_bit_p (not_reg_needs, DECL_UID (var))))
{
TREE_ADDRESSABLE (var) = 0;
this is in pass_fold_builtins executed after the loop optimizer is done.
If I'm disabling this optimization, the above ICE disappears.
Any idea how to fix this issue?
Thanks,
Sebastian
PS: With the previous code building an alloca call to allocate the scratch_pad,
I do not see the ICE on the scratch_pad.1438 but I still see the other error
on the vkl array.
More information about the Gcc-patches
mailing list