Hi, thanks for the patch.
>> - /* TODO: By default, we choose to use TAIL_ANY which allows
>> - compiler pick up either agnostic or undisturbed. Maybe we
>> - will have a compile option like -mprefer=agnostic to set
>> - this value???. */
>> + if (riscv_prefer_agnostic_p ())
>> + return TAIL_AGNOSTIC;
>> - /* TODO: By default, we choose to use MASK_ANY which allows
>> - compiler pick up either agnostic or undisturbed. Maybe we
>> - will have a compile option like -mprefer=agnostic to set
>> - this value???. */
>>+ if (riscv_prefer_agnostic_p ())
>> + return MASK_AGNOSTIC;
>> return MASK_ANY;
Then changes above look good to me. But I see you have the following changes:
DEF_POLICY_RULE (tail_policy_only, mask_policy_only, tail_mask_policy,
always_true, always_false, use_mask_policy)
-DEF_POLICY_RULE (tail_policy_only, ignore_policy, tail_policy_only,
always_true,
- always_true, nop)
+DEF_POLICY_RULE (tail_policy_only, ignore_policy, tail_policy_only,
tail_policy_eq2_p,
+ tail_policy_eq2_p, nop)
DEF_POLICY_RULE (mask_policy_only, tail_mask_policy, tail_mask_policy,
mask_policy_eq_p, always_false, use_tail_policy)
@@ -141,14 +141,14 @@ DEF_POLICY_RULE (mask_policy_only, tail_policy_only,
tail_mask_policy,
always_true, always_false, use_tail_policy)
DEF_POLICY_RULE (mask_policy_only, mask_policy_only, mask_policy_only,
mask_policy_eq_p, mask_policy_eq_p, use_mask_policy)
-DEF_POLICY_RULE (mask_policy_only, ignore_policy, mask_policy_only,
always_true,
- always_true, nop)
+DEF_POLICY_RULE (mask_policy_only, ignore_policy, mask_policy_only,
mask_policy_eq2_p,
+ mask_policy_eq2_p, nop)
DEF_POLICY_RULE (ignore_policy, tail_mask_policy, tail_mask_policy,
always_true,
always_false, use_tail_mask_policy)
-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,
always_false, use_tail_policy)
-DEF_POLICY_RULE (ignore_policy, mask_policy_only, mask_policy_only,
always_true,
+DEF_POLICY_RULE (ignore_policy, mask_policy_only, mask_policy_only,
mask_policy_eq2_p,
always_false, use_mask_policy)
Could you share me more details why only "get_prefer_tail_policy" and
"get_prefer_mask_policy" don't work for you and why do you need to change
vsetvl PASS ?
Since Originally I designed the VSETVL PASS is able to do fusion under this
condition:
insn 1: TAIL_ANY
insn 2: TAIL_UNDISTURBED
fuse successfully -> TAIL_UNDISTURBED
insn 1: TAIL_AGNOSTIC
insn 2: TAIL_UNDISTURBED
fuse failed
[email protected]