Richard, As you know I'm working on a structure reorganization optimization. The particular one I'm working on is called instance interleaving. For the particular case I'm working on now, there is a single array of structures being transformed, a pointer to an element of the array is transformed into an index into what is now a structure of arrays. Note, I did share my HL design document with you so there are more details in there if you need them. So what all this means is for this example
typedef struct fu fu_t; struct fu { char x; int y; double z; }; : : fu_t *fubar = (fu_t*)malloc(...); fu_t *baz; That fubar and baz no longer are pointer types and need to be transformed into some integer type (say _index_fu_t.) Thus if I encounter an ssa_name of type "fu_t *", I'll need to modify its type be _index_fu_t. This is of course equivalent to replacing that ssa name with a new one of type _index_fu_t. Now, how do I actually do either of these? My attempts at former all failed and the later seems equally difficult for the default defs. Note, prefer modifying them to replacing them because it seems more reasonable and it also seems to work except for the default defs. I really need some help with this Richard. Thanks, Gary ________________________________ From: Richard Biener <richard.guent...@gmail.com> Sent: Saturday, July 25, 2020 10:48 PM To: Gary Oblock <g...@amperecomputing.com>; gcc@gcc.gnu.org <gcc@gcc.gnu.org> Subject: Re: Problems with changing the type of an ssa name [EXTERNAL EMAIL NOTICE: This email originated from an external sender. Please be mindful of safe email handling and proprietary information protection practices.] On July 25, 2020 10:47:59 PM GMT+02:00, Gary Oblock <g...@amperecomputing.com> wrote: >Richard, > >I suppose that might be doable but aren't there any ramifications >from the fact that the problematic ssa_names are the default defs? >I can imagine easily replacing all the ssa names except those that >are default defs. Well, just changing the SSA names doesn't make it less ramifications. You have to know what you are doing. So - what's the reason you need to change those SSA name types? Richard. >Gary >________________________________ >From: Richard Biener <richard.guent...@gmail.com> >Sent: Friday, July 24, 2020 11:16 PM >To: Gary Oblock <g...@amperecomputing.com>; Gary Oblock via Gcc ><gcc@gcc.gnu.org>; gcc@gcc.gnu.org <gcc@gcc.gnu.org> >Subject: Re: Problems with changing the type of an ssa name > >[EXTERNAL EMAIL NOTICE: This email originated from an external sender. >Please be mindful of safe email handling and proprietary information >protection practices.] > > >On July 25, 2020 7:30:48 AM GMT+02:00, Gary Oblock via Gcc ><gcc@gcc.gnu.org> wrote: >>If you've followed what I've been up to via my questions >>on the mailing list, I finally traced my latest big problem >>back to to my own code. In a nut shell here is what >>I'm doing. >> >>I'm creating a new type exaactly like this: >> >> tree pointer_rep = >> make_signed_type ( TYPE_PRECISION ( pointer_sized_int_node)); >> TYPE_MAIN_VARIANT ( pointer_rep) = >> TYPE_MAIN_VARIANT ( pointer_sized_int_node); >> const char *gcc_name = >>identifier_to_locale ( IDENTIFIER_POINTER ( TYPE_NAME ( >>ri->gcc_type))); >> size_t len = >> strlen ( REORG_SP_PTR_PREFIX) + strlen ( gcc_name); >> char *name = ( char *)alloca(len + 1); >> strcpy ( name, REORG_SP_PTR_PREFIX); >> strcat ( name, gcc_name); >> TYPE_NAME ( pointer_rep) = get_identifier ( name); >> >>I detect an ssa_name that I want to change to have this type >>and change it thusly. Note, this particular ssa_name is a >>default def which I seems to be very pertinent (since it's >>the only case that fails.) >> >> modify_ssa_name_type ( an_ssa_name, pointer_rep); >> >>void >>modify_ssa_name_type ( tree ssa_name, tree type) >>{ >> // This rips off the code in make_ssa_name_fn with a >> // modification or two. >> >> if ( TYPE_P ( type) ) >> { >> TREE_TYPE ( ssa_name) = TYPE_MAIN_VARIANT ( type); >> if ( ssa_defined_default_def_p ( ssa_name) ) >> { >> // I guessing which I know is a terrible thing to do... >> SET_SSA_NAME_VAR_OR_IDENTIFIER ( ssa_name, TYPE_MAIN_VARIANT ( >type)); >> } >> else >> { >> // The following breaks defaults defs hence the check >above. >> SET_SSA_NAME_VAR_OR_IDENTIFIER ( ssa_name, NULL_TREE); >> } >> } >> else >> { >> TREE_TYPE ( ssa_name) = TREE_TYPE ( type); >> SET_SSA_NAME_VAR_OR_IDENTIFIER ( ssa_name, type); >> } >>} >> >>After this it dies when trying to call print_generic_expr with the ssa >>name. >> >>Here's the bottom most complaint from the internal error: >> >>tree check: expected tree that contains ‘decl minimal’ structure, have >>‘integer_type’ in dump_generic_node, at tree-pretty-print.c:3154 >> >>Can anybody tell what I'm doing wrong? > >Do not modify existing SSA names, instead create a new one and replace >uses of the old. > >Richard. > >>Thank, >> >>Gary >> >> >> >> >>CONFIDENTIALITY NOTICE: This e-mail message, including any >attachments, >>is for the sole use of the intended recipient(s) and contains >>information that is confidential and proprietary to Ampere Computing >or >>its subsidiaries. It is to be used solely for the purpose of >furthering >>the parties' business relationship. Any review, copying, or >>distribution of this email (or any attachments thereto) is strictly >>prohibited. If you are not the intended recipient, please contact the >>sender immediately and permanently delete the original and any copies >>of this email and any attachments thereto.