[llvm] ff1ebcc - DecoderEmitter: Simplify addOneOperandFields. NFC

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Sun Nov 13 01:16:00 PST 2022


Author: Fangrui Song
Date: 2022-11-13T01:15:54-08:00
New Revision: ff1ebcc5fe19c7f9a3da9d505e66f07ac89700b4

URL: https://github.com/llvm/llvm-project/commit/ff1ebcc5fe19c7f9a3da9d505e66f07ac89700b4
DIFF: https://github.com/llvm/llvm-project/commit/ff1ebcc5fe19c7f9a3da9d505e66f07ac89700b4.diff

LOG: DecoderEmitter: Simplify addOneOperandFields. NFC

Follow-up to d1fbdf5bf79219549bc1fde255186d02f646a46f

Added: 
    

Modified: 
    llvm/utils/TableGen/DecoderEmitter.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/utils/TableGen/DecoderEmitter.cpp b/llvm/utils/TableGen/DecoderEmitter.cpp
index fe53350be5c2..087875b7ef9e 100644
--- a/llvm/utils/TableGen/DecoderEmitter.cpp
+++ b/llvm/utils/TableGen/DecoderEmitter.cpp
@@ -1918,55 +1918,29 @@ static void addOneOperandFields(const Record &EncodingDef, const BitsInit &Bits,
           if (OpBit->getValue())
             OpInfo.InitValue |= 1ULL << I;
 
-  unsigned Base = ~0U;
-  unsigned Width = 0;
-  unsigned Offset = 0;
-
-  for (unsigned bi = 0; bi < Bits.getNumBits(); ++bi) {
-    VarInit *Var = nullptr;
-    VarBitInit *BI = dyn_cast<VarBitInit>(Bits.getBit(bi));
-    if (BI)
-      Var = dyn_cast<VarInit>(BI->getBitVar());
-    else
-      Var = dyn_cast<VarInit>(Bits.getBit(bi));
-
-    if (!Var) {
-      if (Base != ~0U) {
-        OpInfo.addField(Base, Width, Offset);
-        Base = ~0U;
-        Width = 0;
-        Offset = 0;
-      }
-      continue;
-    }
-
-    if ((Var->getName() != OpName &&
-         Var->getName() != TiedNames[std::string(OpName)])) {
-      if (Base != ~0U) {
-        OpInfo.addField(Base, Width, Offset);
-        Base = ~0U;
-        Width = 0;
-        Offset = 0;
+  for (unsigned I = 0, J = 0; I != Bits.getNumBits(); I = J) {
+    VarInit *Var;
+    unsigned Offset = 0;
+    for (; J != Bits.getNumBits(); ++J) {
+      VarBitInit *BJ = dyn_cast<VarBitInit>(Bits.getBit(J));
+      if (BJ) {
+        Var = dyn_cast<VarInit>(BJ->getBitVar());
+        if (I == J)
+          Offset = BJ->getBitNum();
+        else if (BJ->getBitNum() != Offset + J - I)
+          break;
+      } else {
+        Var = dyn_cast<VarInit>(Bits.getBit(J));
       }
-      continue;
-    }
-
-    if (Base == ~0U) {
-      Base = bi;
-      Width = 1;
-      Offset = BI ? BI->getBitNum() : 0;
-    } else if (BI && BI->getBitNum() != Offset + Width) {
-      OpInfo.addField(Base, Width, Offset);
-      Base = bi;
-      Width = 1;
-      Offset = BI->getBitNum();
-    } else {
-      ++Width;
+      if (!Var || (Var->getName() != OpName &&
+                   Var->getName() != TiedNames[std::string(OpName)]))
+        break;
     }
+    if (I == J)
+      ++J;
+    else
+      OpInfo.addField(I, J - I, Offset);
   }
-
-  if (Base != ~0U)
-    OpInfo.addField(Base, Width, Offset);
 }
 
 static unsigned


        


More information about the llvm-commits mailing list