Message ID | 555CF12C.7080300@redhat.com |
---|---|
State | New |
Headers | show |
> > commit 8824b5ecba26cef065e47b34609c72677c3c36fc > Author: Aldy Hernandez <aldyh@redhat.com> > Date: Wed May 20 16:31:14 2015 -0400 > > Set DECL_IGNORED_P on temporary arrays created in the switch > conversion pass. > > diff --git a/gcc/tree-switch-conversion.c b/gcc/tree-switch-conversion.c > index 6b68a16..a4bcdba 100644 > --- a/gcc/tree-switch-conversion.c > +++ b/gcc/tree-switch-conversion.c > @@ -1097,6 +1097,7 @@ build_one_array (gswitch *swtch, int num, tree > arr_index_type, > DECL_ARTIFICIAL (decl) = 1; > TREE_CONSTANT (decl) = 1; > TREE_READONLY (decl) = 1; > + DECL_IGNORED_P (decl) = 1; > varpool_node::finalize_decl (decl); This looks obvious enough to me. Technically speaking the array type constructed probalby should be TREE_ARTIFICAIL, but probably it does not matter. If you grep for finalize_decl, there are several other calls: asan.c: varpool_node::finalize_decl (var); asan.c: varpool_node::finalize_decl (var); cgraphbuild.c: varpool_node::finalize_decl (decl); cgraphunit.c: - varpool_finalize_decl cgraphunit.c: varpool_node::finalize_decl (decl); cgraphunit.c:varpool_node::finalize_decl (tree decl) coverage.c: varpool_node::finalize_decl (var); coverage.c: varpool_node::finalize_decl (var); coverage.c: varpool_node::finalize_decl (fn_info_ary); coverage.c: varpool_node::finalize_decl (gcov_info_var); omp-low.c: varpool_node::finalize_decl (t); omp-low.c: varpool_node::finalize_decl (t); omp-low.c: varpool_node::finalize_decl (decl); omp-low.c: varpool_node::finalize_decl (vars_decl); omp-low.c: varpool_node::finalize_decl (funcs_decl); passes.c: varpool_node::finalize_decl (decl); tree-chkp.c: varpool_node::finalize_decl (var); tree-chkp.c: varpool_node::finalize_decl (bnd_var); tree-profile.c: varpool_node::finalize_decl (ic_void_ptr_var); tree-profile.c: varpool_node::finalize_decl (ic_gcov_type_ptr_var); tree-switch-conversion.c: varpool_node::finalize_decl (decl); ubsan.c: varpool_node::finalize_decl (decl); ubsan.c: varpool_node::finalize_decl (var); ubsan.c: varpool_node::finalize_decl (array); varasm.c: varpool_node::finalize_decl (decl); varpool.c: Unlike finalize_decl function is intended to be used varpool.c: varpool_node::finalize_decl (decl); I would say most of them needs similar treatment (I am not 100% sure about OMP ones that may be user visible) Honza > > fetch = build4 (ARRAY_REF, value_type, decl, tidx, NULL_TREE,
On 05/20/2015 05:01 PM, Jan Hubicka wrote: >> >> commit 8824b5ecba26cef065e47b34609c72677c3c36fc >> Author: Aldy Hernandez <aldyh@redhat.com> >> Date: Wed May 20 16:31:14 2015 -0400 >> >> Set DECL_IGNORED_P on temporary arrays created in the switch >> conversion pass. >> >> diff --git a/gcc/tree-switch-conversion.c b/gcc/tree-switch-conversion.c >> index 6b68a16..a4bcdba 100644 >> --- a/gcc/tree-switch-conversion.c >> +++ b/gcc/tree-switch-conversion.c >> @@ -1097,6 +1097,7 @@ build_one_array (gswitch *swtch, int num, tree >> arr_index_type, >> DECL_ARTIFICIAL (decl) = 1; >> TREE_CONSTANT (decl) = 1; >> TREE_READONLY (decl) = 1; >> + DECL_IGNORED_P (decl) = 1; >> varpool_node::finalize_decl (decl); > > This looks obvious enough to me. Technically speaking the array type constructed > probalby should be TREE_ARTIFICAIL, but probably it does not matter. Yeah, that's what I thought. I ignored the type because it won't make it to the debugging back end if we stop things at the DECL itself. FWIW, Ada is filled with these temporaries and/or types that should really be ignored, and are currently causing grief. > If you grep for finalize_decl, there are several other calls: > asan.c: varpool_node::finalize_decl (var); > asan.c: varpool_node::finalize_decl (var); > cgraphbuild.c: varpool_node::finalize_decl (decl); > cgraphunit.c: - varpool_finalize_decl > cgraphunit.c: varpool_node::finalize_decl (decl); > cgraphunit.c:varpool_node::finalize_decl (tree decl) > coverage.c: varpool_node::finalize_decl (var); > coverage.c: varpool_node::finalize_decl (var); Etc etc. Hmmm, I bet mainline is generating dwarf for all this. I don't feel comfortable touching all this (ok, I'm lazy), but it would seem like almost all of these calls would benefit from DECL_IGNORED_P. Perhaps we could add an argument to finalize_decl() and do it in there. Aldy > coverage.c: varpool_node::finalize_decl (fn_info_ary); > coverage.c: varpool_node::finalize_decl (gcov_info_var); > omp-low.c: varpool_node::finalize_decl (t); > omp-low.c: varpool_node::finalize_decl (t); > omp-low.c: varpool_node::finalize_decl (decl); > omp-low.c: varpool_node::finalize_decl (vars_decl); > omp-low.c: varpool_node::finalize_decl (funcs_decl); > passes.c: varpool_node::finalize_decl (decl); > tree-chkp.c: varpool_node::finalize_decl (var); > tree-chkp.c: varpool_node::finalize_decl (bnd_var); > tree-profile.c: varpool_node::finalize_decl (ic_void_ptr_var); > tree-profile.c: varpool_node::finalize_decl (ic_gcov_type_ptr_var); > tree-switch-conversion.c: varpool_node::finalize_decl (decl); > ubsan.c: varpool_node::finalize_decl (decl); > ubsan.c: varpool_node::finalize_decl (var); > ubsan.c: varpool_node::finalize_decl (array); > varasm.c: varpool_node::finalize_decl (decl); > varpool.c: Unlike finalize_decl function is intended to be used > varpool.c: varpool_node::finalize_decl (decl); > > I would say most of them needs similar treatment (I am not 100% sure about OMP > ones that may be user visible) > > Honza >> >> fetch = build4 (ARRAY_REF, value_type, decl, tidx, NULL_TREE,
> FWIW, Ada is filled with these temporaries and/or types that should > really be ignored, and are currently causing grief. It's a little hard to believe that types created in a front-end should be marked ignored. Either they are used by some objects and thus can be needed in the debug info, or they aren't and will be discarded by -feliminate-unused- debug-types. And those not present in the source should be marked artificial.
On Wed, May 20, 2015 at 11:45 PM, Aldy Hernandez <aldyh@redhat.com> wrote: > On 05/20/2015 05:01 PM, Jan Hubicka wrote: >>> >>> >>> commit 8824b5ecba26cef065e47b34609c72677c3c36fc >>> Author: Aldy Hernandez <aldyh@redhat.com> >>> Date: Wed May 20 16:31:14 2015 -0400 >>> >>> Set DECL_IGNORED_P on temporary arrays created in the switch >>> conversion pass. >>> >>> diff --git a/gcc/tree-switch-conversion.c b/gcc/tree-switch-conversion.c >>> index 6b68a16..a4bcdba 100644 >>> --- a/gcc/tree-switch-conversion.c >>> +++ b/gcc/tree-switch-conversion.c >>> @@ -1097,6 +1097,7 @@ build_one_array (gswitch *swtch, int num, tree >>> arr_index_type, >>> DECL_ARTIFICIAL (decl) = 1; >>> TREE_CONSTANT (decl) = 1; >>> TREE_READONLY (decl) = 1; >>> + DECL_IGNORED_P (decl) = 1; >>> varpool_node::finalize_decl (decl); >> >> >> This looks obvious enough to me. Technically speaking the array type >> constructed >> probalby should be TREE_ARTIFICAIL, but probably it does not matter. Fine to commit to trunk btw. > > Yeah, that's what I thought. I ignored the type because it won't make it to > the debugging back end if we stop things at the DECL itself. > > FWIW, Ada is filled with these temporaries and/or types that should really > be ignored, and are currently causing grief. > >> If you grep for finalize_decl, there are several other calls: >> asan.c: varpool_node::finalize_decl (var); >> asan.c: varpool_node::finalize_decl (var); >> cgraphbuild.c: varpool_node::finalize_decl (decl); >> cgraphunit.c: - varpool_finalize_decl >> cgraphunit.c: varpool_node::finalize_decl (decl); >> cgraphunit.c:varpool_node::finalize_decl (tree decl) >> coverage.c: varpool_node::finalize_decl (var); >> coverage.c: varpool_node::finalize_decl (var); > > > Etc etc. > > Hmmm, I bet mainline is generating dwarf for all this. I don't feel > comfortable touching all this (ok, I'm lazy), but it would seem like almost > all of these calls would benefit from DECL_IGNORED_P. Perhaps we could add > an argument to finalize_decl() and do it in there. The only issue are in passes using build_decl directly. I guess we'd want a middle-end-ish "create new global static" similar to what we have for locals (create_tmp_var). Some of the callers above already set DECL_IGNORED_P properly. Richard. > Aldy > > >> coverage.c: varpool_node::finalize_decl (fn_info_ary); >> coverage.c: varpool_node::finalize_decl (gcov_info_var); >> omp-low.c: varpool_node::finalize_decl (t); >> omp-low.c: varpool_node::finalize_decl (t); >> omp-low.c: varpool_node::finalize_decl (decl); >> omp-low.c: varpool_node::finalize_decl (vars_decl); >> omp-low.c: varpool_node::finalize_decl (funcs_decl); >> passes.c: varpool_node::finalize_decl (decl); >> tree-chkp.c: varpool_node::finalize_decl (var); >> tree-chkp.c: varpool_node::finalize_decl (bnd_var); >> tree-profile.c: varpool_node::finalize_decl (ic_void_ptr_var); >> tree-profile.c: varpool_node::finalize_decl (ic_gcov_type_ptr_var); >> tree-switch-conversion.c: varpool_node::finalize_decl (decl); >> ubsan.c: varpool_node::finalize_decl (decl); >> ubsan.c: varpool_node::finalize_decl (var); >> ubsan.c: varpool_node::finalize_decl (array); >> varasm.c: varpool_node::finalize_decl (decl); >> varpool.c: Unlike finalize_decl function is intended to be used >> varpool.c: varpool_node::finalize_decl (decl); >> >> I would say most of them needs similar treatment (I am not 100% sure about >> OMP >> ones that may be user visible) >> >> Honza >>> >>> >>> fetch = build4 (ARRAY_REF, value_type, decl, tidx, NULL_TREE, > >
On 05/22/2015 07:26 AM, Richard Biener wrote: > On Wed, May 20, 2015 at 11:45 PM, Aldy Hernandez <aldyh@redhat.com> wrote: >> On 05/20/2015 05:01 PM, Jan Hubicka wrote: >>>> >>>> >>>> commit 8824b5ecba26cef065e47b34609c72677c3c36fc >>>> Author: Aldy Hernandez <aldyh@redhat.com> >>>> Date: Wed May 20 16:31:14 2015 -0400 >>>> >>>> Set DECL_IGNORED_P on temporary arrays created in the switch >>>> conversion pass. >>>> >>>> diff --git a/gcc/tree-switch-conversion.c b/gcc/tree-switch-conversion.c >>>> index 6b68a16..a4bcdba 100644 >>>> --- a/gcc/tree-switch-conversion.c >>>> +++ b/gcc/tree-switch-conversion.c >>>> @@ -1097,6 +1097,7 @@ build_one_array (gswitch *swtch, int num, tree >>>> arr_index_type, >>>> DECL_ARTIFICIAL (decl) = 1; >>>> TREE_CONSTANT (decl) = 1; >>>> TREE_READONLY (decl) = 1; >>>> + DECL_IGNORED_P (decl) = 1; >>>> varpool_node::finalize_decl (decl); >>> >>> >>> This looks obvious enough to me. Technically speaking the array type >>> constructed >>> probalby should be TREE_ARTIFICAIL, but probably it does not matter. > > Fine to commit to trunk btw. Tested independently on trunk, and committed there. Thanks.
diff --git a/gcc/tree-switch-conversion.c b/gcc/tree-switch-conversion.c index 6b68a16..a4bcdba 100644 --- a/gcc/tree-switch-conversion.c +++ b/gcc/tree-switch-conversion.c @@ -1097,6 +1097,7 @@ build_one_array (gswitch *swtch, int num, tree arr_index_type, DECL_ARTIFICIAL (decl) = 1; TREE_CONSTANT (decl) = 1; TREE_READONLY (decl) = 1; + DECL_IGNORED_P (decl) = 1; varpool_node::finalize_decl (decl);