The 08/01/2025 14:07, Richard Sandiford wrote:
> Alfie Richards <alfie.richa...@arm.com> writes:
> > On 01/08/2025 11:46, Richard Sandiford wrote:
> >> Sorry, I think I missed the multiple_targets.cc changes in my
> >> previous review.
> >> 
> >> Alfie Richards <alfie.richa...@arm.com> writes:
> >>> +
> >>> +  tree attrs =  remove_attribute ("target_clones",
> >>> +                           DECL_ATTRIBUTES (node->decl));
> >>> +  tree assembler_name = node_v->assembler_name;
> >>> +
> >>> +  /* Change the current node into the default node.  */
> >>> +  if (num_defaults == 1)
> >>>       {
> >>> -      char *attr = attrs[i];
> >>> +      /* Setting new attribute to initial function.  */
> >>> +      tree attributes = make_attribute (new_attr_name, "default", attrs);
> >>> +      DECL_ATTRIBUTES (node->decl) = attributes;
> >>> +      DECL_FUNCTION_VERSIONED (node->decl) = true;
> >>> +
> >>> +      node->is_target_clone = true;
> >>> +      node->local = false;
> >>> +
> >>> +      /* Remangle base node after new target version string set.  */
> >>> +      tree id = targetm.mangle_decl_assembler_name (node->decl, 
> >>> assembler_name);
> >>> +      symtab->change_decl_assembler_name (node->decl, id);
> >>> +    }
> >>> +  else
> >>> +    {
> >>> +      /* Target clones without a default are only allowed for 
> >>> target_version
> >>> +  semantics where we can have target_clones/target_version mixing.  */
> >>> +      gcc_assert (!TARGET_HAS_FMV_TARGET_ATTRIBUTE);
> >>> +
> >>> +      /* If there isn't a default version, can safely remove this 
> >>> version.
> >>> +  The node itself gets removed after the other versions are created.  */
> >>> +      cgraph_function_version_info *temp = node_v;
> >>> +      node_v = node_v->next ? node_v->next : node_v->prev;
> >>> +      cgraph_node::delete_function_version (temp);
> >>> +    }
> >> 
> >> In terms of staging, would it be worth putting the else block in patch 8
> >> instead, along with the corresponding !node_v and num_defaults == 0
> >> handling?  As it stands, this code can't be reached.
> >> 
> >> I don't mind keeping it as-is if you prefer though.  I just found it a
> >> little hard to follow in this context.
> > You're right that this and patch 8 are really intertwined. I developed 
> > them simultaneously and didn't want to split up this logic as it would 
> > have involved writing new logic to delete later.
> >
> > I can do that if you would like. But I'd rather not personally :)>
> 
> No, no need to add temporary logic.  But just so I understand:
> I was thinking that the num_defaults == 0 paths would be purely
> additive.  Is that not the case?

Ah no you're correct, it is purely addetive here. It is only
used from patch 5 onwards.

Appologies, my memory of a lot of this logic isn't very fresh.

> 
> Richard

-- 
Alfie Richards

Reply via email to