https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118945
--- Comment #4 from Vineet Gupta <vineetg at gcc dot gnu.org> ---
The following hack does prevent the fusion
+ inline bool tail_policy_eq2_p (const vsetvl_info &prev,
+ const vsetvl_info &next)
+ {
+ return (((prev.get_policy_demand () == policy_demand_type::ignore_policy)
+ || (next.get_policy_demand () ==
policy_demand_type::ignore_policy))
+ && tail_policy_eq_p (prev, next));
+ }
-DEF_POLICY_RULE (tail_policy_only, ignore_policy, tail_policy_only,
always_true,
+DEF_POLICY_RULE (tail_policy_only, ignore_policy, tail_policy_only,
tail_policy_eq2_p,
-DEF_POLICY_RULE (ignore_policy, tail_policy_only, tail_policy_only,
always_true,
+DEF_POLICY_RULE (ignore_policy, tail_policy_only, tail_policy_only,
tail_policy_eq2_p,
although the ta mf2 might not be desirable.
test:
ble a1,zero,.L4
vsetvli a5,zero,e32,m2,ta,ma
vmv.v.i v2,0
.L3:
vsetvli a5,a1,e8,mf2,ta,ma
vle32.v v4,0(a0)
sub a1,a1,a5
vsetvli zero,zero,e32,m2,tu,ma
sh2add a0,a5,a0
vadd.vv v2,v2,v4