[PATCH] D141768: [11/15][Clang][RISCV][NFC] Remove Policy::PolicyType::Omit

Yueh-Ting (eop) Chen via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Jan 18 02:40:43 PST 2023


eopXD added inline comments.


================
Comment at: clang/lib/Support/RISCVVIntrinsicUtils.cpp:1032
+    if (IsMasked) {
+      if (PolicyAttrs.isTUMAPolicy() && !HasMaskPolicy)
+        appendPolicySuffix("_tum");
----------------
craig.topper wrote:
> If you hadn't just removed Omit, it somewhat feels like Omit should be part of Policy and this code to pick the policy suffix string should be inside the Policy class. But I'll defer to your judgement.
Good idea, I will encapsulate logics into `Policy`. Considering the next patch-set, to simplify the policy suffixes, `IsUnspecified` can be further removed. Eventually we can have something like:

```
void RVVIntrinsic::updateNamesAndPolicy(bool IsMasked, bool HasPolicy,
                                        std::string &Name,
                                        std::string &BuiltinName,
                                        std::string &OverloadedName,
                                        Policy &PolicyAttrs) {
  std::string PolicySuffix =
    PolicyAttrs.getPolicySuffix(IsMasked, HasPolicy);
  Name += PolicySuffix;
  BuiltinName += PolicySuffix;
  OverloadedName += PolicySuffix;
}
```

I will create a separate revision so we won't be distracted towards the goal of this patch-set.

---

On the other hand, here is my thought process when considering the removal of `Omit` as a legit refactoring.

Logics to deal with `Omit` occurs under here (`updateNamesAndPolicy`), `computeBuiltinTypes`, and `getPolicyAttrs`. The `Omit` state specified to a `Policy` implies it has to be corrected to something specific (either Agnostic or Undisturbed) before calling `getPolicyAttrs`, which will set the values in `riscv_vector_cg` (called under `RISCVVEmitter.cpp`. This blocks the possibility of setting `TailPolicy`, `MaskPolicy` as constant members.

I picked `HasTailPolicy` and `HasMaskPolicy` for the predicates because it was exactly how `riscv_vector.td` defined the intrinsics. They are necessary as conditions now with the current policy suffix naming rules. With the next patch-set, `HasTailPolicy` and `HasMaskPolicy` will only be called by `getSupportedUnMaskedPolicies` and `getSupportedMaskedPolicies`. This is because the policy suffix logics here can be simplified to something like: (this does not contradict with the encapsulating topic above)

```
if (PolicyAttrs.isUnspecified()) {
  if (IsMasked) {
    Name += "_m";
    if (HasPolicy)
      BuiltinName += "_tama";
    else
      BuiltinName += "_m";
  } else {
    if (HasPolicy)
      BuiltinName += "_ta";
  }
} else {
  if (IsMasked) {
    if (PolicyAttrs.isTAMUPolicy())
      appendPolicySuffix("_mu")
    else if (PolicyAttrs.isTUMAPolicy())
      appendPolicySuffix("_tum")
    else if (PolicyAttrs.isTUMUPolicy())
      appendPolicySuffix("_tumu")
    else
      llvm_unreachable("Unhandled policy condition");
  } else {
    if (PolicyAttrs.isTUPolicy())
      appendPolicySuffix("_tu");
    else
      llvm_unreachable("Unhandled policy condition");
  }
}
```  




Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D141768/new/

https://reviews.llvm.org/D141768



More information about the cfe-commits mailing list