<div dir="rtl"><div dir="ltr">Instead of copy&paste duplication, wouldn't it be better to introduce a .h or .inc file shared by both cpp sources?</div><div dir="ltr"><br></div></div><div class="gmail_extra"><br><div class="gmail_quote"><div dir="ltr">2015-11-22 17:20 GMT+02:00 Krzysztof Parzyszek via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span>:</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: kparzysz<br>
Date: Sun Nov 22 09:20:19 2015<br>
New Revision: 253820<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=253820&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=253820&view=rev</a><br>
Log:<br>
Avoid dependency between TableGen and CodeGen<br>
<br>
Duplicate a few common definitions between DFAPacketizer.cpp and<br>
DFAPacketizerEmitter.cpp to avoid including files from CodeGen<br>
in TableGen.<br>
<br>
Removed:<br>
    llvm/trunk/include/llvm/CodeGen/DFAPacketizerDefs.h<br>
Modified:<br>
    llvm/trunk/include/llvm/CodeGen/DFAPacketizer.h<br>
    llvm/trunk/lib/CodeGen/DFAPacketizer.cpp<br>
    llvm/trunk/utils/TableGen/DFAPacketizerEmitter.cpp<br>
<br>
Modified: llvm/trunk/include/llvm/CodeGen/DFAPacketizer.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/DFAPacketizer.h?rev=253820&r1=253819&r2=253820&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/DFAPacketizer.h?rev=253820&r1=253819&r2=253820&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/CodeGen/DFAPacketizer.h (original)<br>
+++ llvm/trunk/include/llvm/CodeGen/DFAPacketizer.h Sun Nov 22 09:20:19 2015<br>
@@ -27,7 +27,6 @@<br>
 #define LLVM_CODEGEN_DFAPACKETIZER_H<br>
<br>
 #include "llvm/ADT/DenseMap.h"<br>
-#include "llvm/CodeGen/DFAPacketizerDefs.h"<br>
 #include "llvm/CodeGen/MachineBasicBlock.h"<br>
 #include <map><br>
<br>
@@ -41,6 +40,34 @@ class InstrItineraryData;<br>
 class DefaultVLIWScheduler;<br>
 class SUnit;<br>
<br>
+// --------------------------------------------------------------------<br>
+// Definitions shared between DFAPacketizer.cpp and DFAPacketizerEmitter.cpp<br>
+<br>
+// DFA_MAX_RESTERMS * DFA_MAX_RESOURCES must fit within sizeof DFAInput.<br>
+// This is verified in DFAPacketizer.cpp:DFAPacketizer::DFAPacketizer.<br>
+//<br>
+// e.g. terms x resource bit combinations that fit in uint32_t:<br>
+//      4 terms x 8  bits = 32 bits<br>
+//      3 terms x 10 bits = 30 bits<br>
+//      2 terms x 16 bits = 32 bits<br>
+//<br>
+// e.g. terms x resource bit combinations that fit in uint64_t:<br>
+//      8 terms x 8  bits = 64 bits<br>
+//      7 terms x 9  bits = 63 bits<br>
+//      6 terms x 10 bits = 60 bits<br>
+//      5 terms x 12 bits = 60 bits<br>
+//      4 terms x 16 bits = 64 bits <--- current<br>
+//      3 terms x 21 bits = 63 bits<br>
+//      2 terms x 32 bits = 64 bits<br>
+//<br>
+#define DFA_MAX_RESTERMS        4   // The max # of AND'ed resource terms.<br>
+#define DFA_MAX_RESOURCES       16  // The max # of resource bits in one term.<br>
+<br>
+typedef uint64_t                DFAInput;<br>
+typedef int64_t                 DFAStateInput;<br>
+#define DFA_TBLTYPE             "int64_t" // For generating DFAStateInputTable.<br>
+// --------------------------------------------------------------------<br>
+<br>
 class DFAPacketizer {<br>
 private:<br>
   typedef std::pair<unsigned, DFAInput> UnsignPair;<br>
@@ -69,9 +96,7 @@ public:<br>
   DFAInput getInsnInput(unsigned InsnClass);<br>
<br>
   // getInsnInput - Return the DFAInput for an instruction class input vector.<br>
-  static DFAInput getInsnInput(const std::vector<unsigned> &InsnClass) {<br>
-    return getDFAInsnInput(InsnClass);<br>
-  }<br>
+  static DFAInput getInsnInput(const std::vector<unsigned> &InsnClass);<br>
<br>
   // canReserveResources - Check if the resources occupied by a MCInstrDesc<br>
   // are available in the current state.<br>
<br>
Removed: llvm/trunk/include/llvm/CodeGen/DFAPacketizerDefs.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/DFAPacketizerDefs.h?rev=253819&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/DFAPacketizerDefs.h?rev=253819&view=auto</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/CodeGen/DFAPacketizerDefs.h (original)<br>
+++ llvm/trunk/include/llvm/CodeGen/DFAPacketizerDefs.h (removed)<br>
@@ -1,63 +0,0 @@<br>
-//=- llvm/CodeGen/DFAPacketizerDefs.h - DFA Packetizer for VLIW ---*- C++ -*-=//<br>
-//<br>
-//                     The LLVM Compiler Infrastructure<br>
-//<br>
-// This file is distributed under the University of Illinois Open Source<br>
-// License. See LICENSE.TXT for details.<br>
-//<br>
-//===----------------------------------------------------------------------===//<br>
-// Common definitions used by TableGen and the DFAPacketizer in CodeGen.<br>
-//===----------------------------------------------------------------------===//<br>
-<br>
-#ifndef LLVM_CODEGEN_DFAPACKETIZERDEFS_H<br>
-#define LLVM_CODEGEN_DFAPACKETIZERDEFS_H<br>
-<br>
-#include <vector><br>
-<br>
-namespace llvm {<br>
-<br>
-// DFA_MAX_RESTERMS * DFA_MAX_RESOURCES must fit within sizeof DFAInput.<br>
-// This is verified in DFAPacketizer.cpp:DFAPacketizer::DFAPacketizer.<br>
-//<br>
-// e.g. terms x resource bit combinations that fit in uint32_t:<br>
-//      4 terms x 8  bits = 32 bits<br>
-//      3 terms x 10 bits = 30 bits<br>
-//      2 terms x 16 bits = 32 bits<br>
-//<br>
-// e.g. terms x resource bit combinations that fit in uint64_t:<br>
-//      8 terms x 8  bits = 64 bits<br>
-//      7 terms x 9  bits = 63 bits<br>
-//      6 terms x 10 bits = 60 bits<br>
-//      5 terms x 12 bits = 60 bits<br>
-//      4 terms x 16 bits = 64 bits <--- current<br>
-//      3 terms x 21 bits = 63 bits<br>
-//      2 terms x 32 bits = 64 bits<br>
-//<br>
-#define DFA_MAX_RESTERMS        4   // The max # of AND'ed resource terms.<br>
-#define DFA_MAX_RESOURCES       16  // The max # of resource bits in one term.<br>
-<br>
-typedef uint64_t                DFAInput;<br>
-typedef int64_t                 DFAStateInput;<br>
-#define DFA_TBLTYPE             "int64_t" // For generating DFAStateInputTable.<br>
-<br>
-namespace {<br>
-  DFAInput addDFAFuncUnits(DFAInput Inp, unsigned FuncUnits) {<br>
-    return (Inp << DFA_MAX_RESOURCES) | FuncUnits;<br>
-  }<br>
-<br>
-  /// Return the DFAInput for an instruction class input vector.<br>
-  /// This function is used in both DFAPacketizer.cpp and in<br>
-  /// DFAPacketizerEmitter.cpp.<br>
-  DFAInput getDFAInsnInput(const std::vector<unsigned> &InsnClass) {<br>
-    DFAInput InsnInput = 0;<br>
-    assert ((InsnClass.size() <= DFA_MAX_RESTERMS) &&<br>
-            "Exceeded maximum number of DFA terms");<br>
-    for (auto U : InsnClass)<br>
-      InsnInput = addDFAFuncUnits(InsnInput, U);<br>
-    return InsnInput;<br>
-  }<br>
-}<br>
-<br>
-}<br>
-<br>
-#endif<br>
<br>
Modified: llvm/trunk/lib/CodeGen/DFAPacketizer.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/DFAPacketizer.cpp?rev=253820&r1=253819&r2=253820&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/DFAPacketizer.cpp?rev=253820&r1=253819&r2=253820&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/DFAPacketizer.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/DFAPacketizer.cpp Sun Nov 22 09:20:19 2015<br>
@@ -31,6 +31,28 @@<br>
 #include "llvm/Target/TargetInstrInfo.h"<br>
 using namespace llvm;<br>
<br>
+// --------------------------------------------------------------------<br>
+// Definitions shared between DFAPacketizer.cpp and DFAPacketizerEmitter.cpp<br>
+<br>
+namespace {<br>
+  DFAInput addDFAFuncUnits(DFAInput Inp, unsigned FuncUnits) {<br>
+    return (Inp << DFA_MAX_RESOURCES) | FuncUnits;<br>
+  }<br>
+<br>
+  /// Return the DFAInput for an instruction class input vector.<br>
+  /// This function is used in both DFAPacketizer.cpp and in<br>
+  /// DFAPacketizerEmitter.cpp.<br>
+  DFAInput getDFAInsnInput(const std::vector<unsigned> &InsnClass) {<br>
+    DFAInput InsnInput = 0;<br>
+    assert ((InsnClass.size() <= DFA_MAX_RESTERMS) &&<br>
+            "Exceeded maximum number of DFA terms");<br>
+    for (auto U : InsnClass)<br>
+      InsnInput = addDFAFuncUnits(InsnInput, U);<br>
+    return InsnInput;<br>
+  }<br>
+}<br>
+// --------------------------------------------------------------------<br>
+<br>
 DFAPacketizer::DFAPacketizer(const InstrItineraryData *I,<br>
                              const DFAStateInput (*SIT)[2],<br>
                              const unsigned *SET):<br>
@@ -82,6 +104,11 @@ DFAInput DFAPacketizer::getInsnInput(uns<br>
   return InsnInput;<br>
 }<br>
<br>
+// getInsnInput - Return the DFAInput for an instruction class input vector.<br>
+DFAInput DFAPacketizer::getInsnInput(const std::vector<unsigned> &InsnClass) {<br>
+  return getDFAInsnInput(InsnClass);<br>
+}<br>
+<br>
 // canReserveResources - Check if the resources occupied by a MCInstrDesc<br>
 // are available in the current state.<br>
 bool DFAPacketizer::canReserveResources(const llvm::MCInstrDesc *MID) {<br>
<br>
Modified: llvm/trunk/utils/TableGen/DFAPacketizerEmitter.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/DFAPacketizerEmitter.cpp?rev=253820&r1=253819&r2=253820&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/DFAPacketizerEmitter.cpp?rev=253820&r1=253819&r2=253820&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/utils/TableGen/DFAPacketizerEmitter.cpp (original)<br>
+++ llvm/trunk/utils/TableGen/DFAPacketizerEmitter.cpp Sun Nov 22 09:20:19 2015<br>
@@ -21,7 +21,6 @@<br>
 #include "llvm/ADT/DenseSet.h"<br>
 #include "llvm/ADT/STLExtras.h"<br>
 #include "llvm/ADT/StringExtras.h"<br>
-#include "llvm/CodeGen/DFAPacketizerDefs.h"<br>
 #include "llvm/TableGen/Record.h"<br>
 #include "llvm/TableGen/TableGenBackend.h"<br>
 #include "llvm/Support/Debug.h"<br>
@@ -31,6 +30,52 @@<br>
 #include <queue><br>
 using namespace llvm;<br>
<br>
+// --------------------------------------------------------------------<br>
+// Definitions shared between DFAPacketizer.cpp and DFAPacketizerEmitter.cpp<br>
+<br>
+// DFA_MAX_RESTERMS * DFA_MAX_RESOURCES must fit within sizeof DFAInput.<br>
+// This is verified in DFAPacketizer.cpp:DFAPacketizer::DFAPacketizer.<br>
+//<br>
+// e.g. terms x resource bit combinations that fit in uint32_t:<br>
+//      4 terms x 8  bits = 32 bits<br>
+//      3 terms x 10 bits = 30 bits<br>
+//      2 terms x 16 bits = 32 bits<br>
+//<br>
+// e.g. terms x resource bit combinations that fit in uint64_t:<br>
+//      8 terms x 8  bits = 64 bits<br>
+//      7 terms x 9  bits = 63 bits<br>
+//      6 terms x 10 bits = 60 bits<br>
+//      5 terms x 12 bits = 60 bits<br>
+//      4 terms x 16 bits = 64 bits <--- current<br>
+//      3 terms x 21 bits = 63 bits<br>
+//      2 terms x 32 bits = 64 bits<br>
+//<br>
+#define DFA_MAX_RESTERMS        4   // The max # of AND'ed resource terms.<br>
+#define DFA_MAX_RESOURCES       16  // The max # of resource bits in one term.<br>
+<br>
+typedef uint64_t                DFAInput;<br>
+typedef int64_t                 DFAStateInput;<br>
+#define DFA_TBLTYPE             "int64_t" // For generating DFAStateInputTable.<br>
+<br>
+namespace {<br>
+  DFAInput addDFAFuncUnits(DFAInput Inp, unsigned FuncUnits) {<br>
+    return (Inp << DFA_MAX_RESOURCES) | FuncUnits;<br>
+  }<br>
+<br>
+  /// Return the DFAInput for an instruction class input vector.<br>
+  /// This function is used in both DFAPacketizer.cpp and in<br>
+  /// DFAPacketizerEmitter.cpp.<br>
+  DFAInput getDFAInsnInput(const std::vector<unsigned> &InsnClass) {<br>
+    DFAInput InsnInput = 0;<br>
+    assert ((InsnClass.size() <= DFA_MAX_RESTERMS) &&<br>
+            "Exceeded maximum number of DFA terms");<br>
+    for (auto U : InsnClass)<br>
+      InsnInput = addDFAFuncUnits(InsnInput, U);<br>
+    return InsnInput;<br>
+  }<br>
+}<br>
+// --------------------------------------------------------------------<br>
+<br>
 #ifndef NDEBUG<br>
 // To enable debugging, run llvm-tblgen with: "-debug-only dfa-emitter".<br>
 //<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>