<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>