eopXD created this revision.
Herald added subscribers: sunshaoce, VincentWu, vkmr, frasercrmck, evandro, 
luismarques, apazos, sameer.abuasal, s.egerton, Jim, benna, psnobl, jocewei, 
PkmX, the_o, brucehoult, MartinMosbeck, rogfer01, edward-jones, zzheng, jrtc27, 
shiva0217, kito-cheng, niosHD, sabuasal, simoncook, johnrusso, rbar, asb, 
arichardson.
Herald added a project: All.
eopXD requested review of this revision.
Herald added subscribers: cfe-commits, pcwang-thead, MaskRay.
Herald added a project: clang.

The current way creates a fallacy that checking for
`PolicyAttrs == TAIL_AGNOSTIC` is implicitly equivalant to
`TAIL_AGNOSTIC_MASK_UNDISTURBED`.

This way of checking is wrong when the default policy is not TAMU.
As this patch-set is changing the default from TAMU to TAMA, we need
to perform this refactoring before chaning the default.

Depends on D141768 <https://reviews.llvm.org/D141768>.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D141789

Files:
  clang/include/clang/Basic/riscv_vector.td
  clang/include/clang/Support/RISCVVIntrinsicUtils.h
  clang/lib/CodeGen/CGBuiltin.cpp

Index: clang/lib/CodeGen/CGBuiltin.cpp
===================================================================
--- clang/lib/CodeGen/CGBuiltin.cpp
+++ clang/lib/CodeGen/CGBuiltin.cpp
@@ -19468,10 +19468,11 @@
 
   Intrinsic::ID ID = Intrinsic::not_intrinsic;
   unsigned NF = 1;
-  constexpr unsigned TAIL_UNDISTURBED = 0;
-  constexpr unsigned TAIL_AGNOSTIC = 1;
-  constexpr unsigned TAIL_AGNOSTIC_MASK_AGNOSTIC = 3;
-  int PolicyAttrs = TAIL_UNDISTURBED;
+  // The 0th bit simulates the `vta` of RVV
+  // The 1st bit simultaes the `vma` of RVV
+  constexpr unsigned RVV_VTA = 0x1;
+  constexpr unsigned RVV_VMA = 0x2;
+  int PolicyAttrs = 0;
   bool IsMasked = false;
 
   // Required for overloaded intrinsics.
Index: clang/include/clang/Support/RISCVVIntrinsicUtils.h
===================================================================
--- clang/include/clang/Support/RISCVVIntrinsicUtils.h
+++ clang/include/clang/Support/RISCVVIntrinsicUtils.h
@@ -423,12 +423,13 @@
     return PolicyAttrs;
   }
   unsigned getPolicyAttrsBits() const {
-    // Return following value.
-    // constexpr unsigned TAIL_UNDISTURBED = 0;
-    // constexpr unsigned TAIL_AGNOSTIC = 1;
-    // constexpr unsigned TAIL_AGNOSTIC_MASK_AGNOSTIC = 3;
-    // FIXME: how about value 2
-    // int PolicyAttrs = TAIL_UNDISTURBED;
+    // CGBuiltin.cpp
+    // The 0th bit simulates the `vta` of RVV
+    // The 1st bit simultaes the `vma` of RVV
+    // constexpr unsigned RVV_VTA = 0x1;
+    // constexpr unsigned RVV_VMA = 0x2;
+    // int PolicyAttrs = 0;
+
     assert(PolicyAttrs.IsUnspecified == false);
 
     if (PolicyAttrs.isTUMAPolicy())
@@ -439,10 +440,6 @@
       return 0;
     if (PolicyAttrs.isTAMUPolicy())
       return 1;
-    if (PolicyAttrs.isTUPolicy())
-      return 0;
-    if (PolicyAttrs.isTAPolicy())
-      return 1;
 
     llvm_unreachable("unsupport policy");
     return 0;
Index: clang/include/clang/Basic/riscv_vector.td
===================================================================
--- clang/include/clang/Basic/riscv_vector.td
+++ clang/include/clang/Basic/riscv_vector.td
@@ -467,10 +467,10 @@
     ManualCodegen = [{
       if (IsMasked) {
         std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
-        if (PolicyAttrs == TAIL_AGNOSTIC_MASK_AGNOSTIC)
+        if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
           Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
       } else {
-        if (PolicyAttrs == TAIL_AGNOSTIC)
+        if (PolicyAttrs & RVV_VTA)
           Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
       }
 
@@ -649,12 +649,12 @@
         if (IsMasked) {
           // Move mask to right before vl.
           std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
-          if (PolicyAttrs == TAIL_AGNOSTIC_MASK_AGNOSTIC)
+          if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
             Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
           Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
           IntrinsicTypes = {ResultType, Ops[4]->getType()};
         } else {
-          if (PolicyAttrs == TAIL_AGNOSTIC)
+          if (PolicyAttrs & RVV_VTA)
             Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
           IntrinsicTypes = {ResultType, Ops[3]->getType()};
         }
@@ -939,8 +939,8 @@
       SmallVector<llvm::Value*, 12> Operands;
 
       // Please refer to comment under 'defvar NFList' in this file
-      if ((IsMasked && PolicyAttrs == TAIL_AGNOSTIC_MASK_AGNOSTIC) ||
-          (!IsMasked && PolicyAttrs == TAIL_AGNOSTIC))
+      if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
+          (!IsMasked && PolicyAttrs & RVV_VTA))
         Operands.append(NF, llvm::PoisonValue::get(ResultType));
       else {
         if (IsMasked)
@@ -949,8 +949,8 @@
           Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
       }
       unsigned PtrOperandIdx = IsMasked ?
-        (PolicyAttrs == TAIL_AGNOSTIC_MASK_AGNOSTIC) ? NF + 1 : 2 * NF + 1 :
-        (PolicyAttrs == TAIL_AGNOSTIC) ? NF : 2 * NF;
+        ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
+        (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
       Value *PtrOperand = Ops[PtrOperandIdx];
       Value *VLOperand = Ops[PtrOperandIdx + 1];
       Operands.push_back(PtrOperand);
@@ -1004,8 +1004,8 @@
       SmallVector<llvm::Value*, 12> Operands;
 
       // Please refer to comment under 'defvar NFList' in this file
-      if ((IsMasked && PolicyAttrs == TAIL_AGNOSTIC_MASK_AGNOSTIC) ||
-          (!IsMasked && PolicyAttrs == TAIL_AGNOSTIC))
+      if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
+          (!IsMasked && PolicyAttrs & RVV_VTA))
         Operands.append(NF, llvm::PoisonValue::get(ResultType));
       else {
         if (IsMasked)
@@ -1014,8 +1014,8 @@
           Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
       }
       unsigned PtrOperandIdx = IsMasked ?
-        (PolicyAttrs == TAIL_AGNOSTIC_MASK_AGNOSTIC) ? NF + 1 : 2 * NF + 1 :
-        (PolicyAttrs == TAIL_AGNOSTIC) ? NF : 2 * NF;
+        ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
+        (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
       Value *PtrOperand = Ops[PtrOperandIdx];
       Value *NewVLOperand = Ops[PtrOperandIdx + 1];
       Value *VLOperand = Ops[PtrOperandIdx + 2];
@@ -1071,8 +1071,8 @@
       SmallVector<llvm::Value*, 12> Operands;
 
       // Please refer to comment under 'defvar NFList' in this file
-      if ((IsMasked && PolicyAttrs == TAIL_AGNOSTIC_MASK_AGNOSTIC) ||
-          (!IsMasked && PolicyAttrs == TAIL_AGNOSTIC))
+      if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
+          (!IsMasked && PolicyAttrs & RVV_VTA))
         Operands.append(NF, llvm::PoisonValue::get(ResultType));
       else {
         if (IsMasked)
@@ -1081,8 +1081,8 @@
           Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
       }
       unsigned PtrOperandIdx = IsMasked ?
-        (PolicyAttrs == TAIL_AGNOSTIC_MASK_AGNOSTIC) ? NF + 1 : 2 * NF + 1 :
-        (PolicyAttrs == TAIL_AGNOSTIC) ? NF : 2 * NF;
+        ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
+        (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
       Value *PtrOperand = Ops[PtrOperandIdx];
       Value *StrideOperand = Ops[PtrOperandIdx + 1];
       Value *VLOperand = Ops[PtrOperandIdx + 2];
@@ -1133,8 +1133,8 @@
       SmallVector<llvm::Value*, 12> Operands;
 
       // Please refer to comment under 'defvar NFList' in this file
-      if ((IsMasked && PolicyAttrs == TAIL_AGNOSTIC_MASK_AGNOSTIC) ||
-          (!IsMasked && PolicyAttrs == TAIL_AGNOSTIC))
+      if ((IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
+          (!IsMasked && PolicyAttrs & RVV_VTA))
         Operands.append(NF, llvm::PoisonValue::get(ResultType));
       else {
         if (IsMasked)
@@ -1143,8 +1143,8 @@
           Operands.append(Ops.begin() + NF, Ops.begin() + 2 * NF);
       }
       unsigned PtrOperandIdx = IsMasked ?
-        (PolicyAttrs == TAIL_AGNOSTIC_MASK_AGNOSTIC) ? NF + 1 : 2 * NF + 1 :
-        (PolicyAttrs == TAIL_AGNOSTIC) ? NF : 2 * NF;
+        ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ? NF + 1 : 2 * NF + 1 :
+        (PolicyAttrs & RVV_VTA) ? NF : 2 * NF;
       Value *PtrOperand = Ops[PtrOperandIdx];
       Value *IndexOperand = Ops[PtrOperandIdx + 1];
       Value *VLOperand = Ops[PtrOperandIdx + 2];
@@ -1333,10 +1333,10 @@
       {
         if (IsMasked) {
           std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
-          if (PolicyAttrs == TAIL_AGNOSTIC_MASK_AGNOSTIC)
+          if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
             Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
         } else {
-          if (PolicyAttrs == TAIL_AGNOSTIC)
+          if (PolicyAttrs & RVV_VTA)
             Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
         }
         auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
@@ -1366,10 +1366,10 @@
       {
         if (IsMasked) {
           std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
-          if (PolicyAttrs == TAIL_AGNOSTIC_MASK_AGNOSTIC)
+          if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
             Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
         } else {
-          if (PolicyAttrs == TAIL_AGNOSTIC)
+          if (PolicyAttrs & RVV_VTA)
             Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
         }
         auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
@@ -1421,7 +1421,7 @@
       {
         if (IsMasked) {
           std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
-          if (PolicyAttrs == TAIL_AGNOSTIC_MASK_AGNOSTIC)
+          if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
             Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
           Ops.insert(Ops.begin() + 2, Ops[1]);
           Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
@@ -1430,7 +1430,7 @@
                             Ops[2]->getType(),
                             Ops.back()->getType()};
         } else {
-          if (PolicyAttrs == TAIL_AGNOSTIC)
+          if (PolicyAttrs & RVV_VTA)
             Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
           // op1, po2, vl
           IntrinsicTypes = {ResultType,
@@ -1456,10 +1456,10 @@
       {
         if (IsMasked) {
           std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
-          if (PolicyAttrs == TAIL_AGNOSTIC_MASK_AGNOSTIC)
+          if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
             Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
         } else {
-          if (PolicyAttrs == TAIL_AGNOSTIC)
+          if (PolicyAttrs & RVV_VTA)
             Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
         }
         auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
@@ -1498,10 +1498,10 @@
       {
         if (IsMasked) {
           std::rotate(Ops.begin(), Ops.begin() + 1, Ops.end() - 1);
-          if (PolicyAttrs == TAIL_AGNOSTIC_MASK_AGNOSTIC)
+          if ((PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA))
             Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
         } else {
-          if (PolicyAttrs == TAIL_AGNOSTIC)
+          if (PolicyAttrs & RVV_VTA)
             Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
         }
         Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(Ops.back()->getType())); 
@@ -1901,7 +1901,7 @@
     MaskedPolicyScheme = NonePolicy,
     ManualCodegen = [{
       // insert poison passthru
-      if (PolicyAttrs == TAIL_AGNOSTIC)
+      if (PolicyAttrs & RVV_VTA)
         Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
       IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
     }] in {
@@ -2043,7 +2043,7 @@
     MaskedPolicyScheme = NonePolicy,
     ManualCodegen = [{
       // insert poison passthru
-      if (PolicyAttrs == TAIL_AGNOSTIC)
+      if (PolicyAttrs & RVV_VTA)
         Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
       IntrinsicTypes = {ResultType, Ops[2]->getType(), Ops.back()->getType()};
     }] in {
@@ -2240,7 +2240,7 @@
     MaskedPolicyScheme = NonePolicy,
     ManualCodegen = [{
       // insert poison passthru
-      if (PolicyAttrs == TAIL_AGNOSTIC)
+      if (PolicyAttrs & RVV_VTA)
         Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
       IntrinsicTypes = {ResultType, Ops.back()->getType()};
     }] in {
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to