mirror of
https://forge.sourceware.org/marek/gcc.git
synced 2026-02-22 03:47:02 -05:00
arm: [MVE intrinsics] add mode_after_pred helper in function_shape
This new helper returns true if the mode suffix goes after the predicate suffix. This is true in most cases, so the base implementations in nonoverloaded_base and overloaded_base return true. For instance: vaddq_m_n_s32. This will be useful in later patches to implement vstr?q_scatter_offset_p (_p appears after _offset). gcc/ChangeLog: * config/arm/arm-mve-builtins-shapes.cc (struct nonoverloaded_base): Implement mode_after_pred. (struct overloaded_base): Likewise. * config/arm/arm-mve-builtins.cc (function_builder::get_name): Call mode_after_pred as needed. * config/arm/arm-mve-builtins.h (function_shape): Add mode_after_pred.
This commit is contained in:
@@ -387,6 +387,12 @@ struct nonoverloaded_base : public function_shape
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
mode_after_pred () const override
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
tree
|
||||
resolve (function_resolver &) const override
|
||||
{
|
||||
@@ -417,6 +423,12 @@ struct overloaded_base : public function_shape
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
mode_after_pred () const override
|
||||
{
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
/* <T0>_t vfoo[_t0](<T0>_t, <T0>_t)
|
||||
|
||||
@@ -886,11 +886,18 @@ function_builder::get_name (const function_instance &instance,
|
||||
if (preserve_user_namespace)
|
||||
append_name ("__arm_");
|
||||
append_name (instance.base_name);
|
||||
append_name (pred_suffixes[instance.pred]);
|
||||
|
||||
if (instance.shape->mode_after_pred ())
|
||||
append_name (pred_suffixes[instance.pred]);
|
||||
|
||||
if (!overloaded_p
|
||||
|| instance.shape->explicit_mode_suffix_p (instance.pred,
|
||||
instance.mode_suffix_id))
|
||||
append_name (instance.mode_suffix ().string);
|
||||
|
||||
if (!instance.shape->mode_after_pred ())
|
||||
append_name (pred_suffixes[instance.pred]);
|
||||
|
||||
for (unsigned int i = 0; i < 2; ++i)
|
||||
if (!overloaded_p
|
||||
|| instance.shape->explicit_type_suffix_p (i, instance.pred,
|
||||
|
||||
@@ -580,6 +580,7 @@ public:
|
||||
enum mode_suffix_index) const = 0;
|
||||
virtual bool skip_overload_p (enum predication_index,
|
||||
enum mode_suffix_index) const = 0;
|
||||
virtual bool mode_after_pred () const = 0;
|
||||
|
||||
/* Define all functions associated with the given group. */
|
||||
virtual void build (function_builder &,
|
||||
|
||||
Reference in New Issue
Block a user