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