[llvm-branch-commits] [llvm-branch] r99814 - in /llvm/branches/Apple/Morbo: ./ lib/Target/X86/X86.td lib/Target/X86/X86InstrFormats.td lib/Target/X86/X86InstrInfo.td lib/Transforms/IPO/FunctionAttrs.cpp test/TableGen/2010-03-24-PrematureDefaults.td utils/TableGen/InstrInfoEmitter.cpp utils/TableGen/Record.cpp utils/TableGen/Record.h
Jakob Stoklund Olesen
stoklund at 2pi.dk
Mon Mar 29 09:37:37 PDT 2010
Author: stoklund
Date: Mon Mar 29 11:37:37 2010
New Revision: 99814
URL: http://llvm.org/viewvc/llvm-project?rev=99814&view=rev
Log:
Merging Tablegen fixes from r99492 and r99539.
$ svn merge -c 99492 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r99492 into '.':
A test/TableGen/2010-03-24-PrematureDefaults.td
U utils/TableGen/Record.cpp
U utils/TableGen/Record.h
$ svn merge -c 99539 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r99539 into '.':
U utils/TableGen/InstrInfoEmitter.cpp
G utils/TableGen/Record.cpp
G utils/TableGen/Record.h
U lib/Target/X86/X86InstrInfo.td
Added:
llvm/branches/Apple/Morbo/test/TableGen/2010-03-24-PrematureDefaults.td
- copied unchanged from r99492, llvm/trunk/test/TableGen/2010-03-24-PrematureDefaults.td
Modified:
llvm/branches/Apple/Morbo/ (props changed)
llvm/branches/Apple/Morbo/lib/Target/X86/X86.td
llvm/branches/Apple/Morbo/lib/Target/X86/X86InstrFormats.td
llvm/branches/Apple/Morbo/lib/Target/X86/X86InstrInfo.td
llvm/branches/Apple/Morbo/lib/Transforms/IPO/FunctionAttrs.cpp (props changed)
llvm/branches/Apple/Morbo/utils/TableGen/InstrInfoEmitter.cpp
llvm/branches/Apple/Morbo/utils/TableGen/Record.cpp
llvm/branches/Apple/Morbo/utils/TableGen/Record.h
Propchange: llvm/branches/Apple/Morbo/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Mar 29 11:37:37 2010
@@ -1,2 +1,2 @@
/llvm/branches/Apple/Hermes:96832,96835,96858,96870,96876,96879
-/llvm/trunk:98602,98604,98612,98615-98616,98675,98686,98743-98744,98773,98778,98780,98810,98835,98839,98845,98855,98862,98881,98920,98977,99032-99033,99043,99223,99263,99282-99284,99306,99319-99321,99324,99336,99378,99418,99423,99429,99455,99463,99465,99469,99484,99490,99493-99494,99537,99544,99570,99575,99629-99630,99671,99692,99695,99697,99722
+/llvm/trunk:98602,98604,98612,98615-98616,98675,98686,98743-98744,98773,98778,98780,98810,98835,98839,98845,98855,98862,98881,98920,98977,99032-99033,99043,99223,99263,99282-99284,99306,99319-99321,99324,99336,99378,99418,99423,99429,99455,99463,99465,99469,99484,99490,99492-99494,99537,99539,99544,99570,99575,99629-99630,99671,99692,99695,99697,99722
Modified: llvm/branches/Apple/Morbo/lib/Target/X86/X86.td
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Morbo/lib/Target/X86/X86.td?rev=99814&r1=99813&r2=99814&view=diff
==============================================================================
--- llvm/branches/Apple/Morbo/lib/Target/X86/X86.td (original)
+++ llvm/branches/Apple/Morbo/lib/Target/X86/X86.td Mon Mar 29 11:37:37 2010
@@ -160,8 +160,8 @@
"hasAdSizePrefix",
"Prefix",
"hasREX_WPrefix",
- "ImmTypeBits",
- "FPFormBits",
+ "ImmT.Value",
+ "FPForm.Value",
"hasLockPrefix",
"SegOvrBits",
"Opcode"];
Modified: llvm/branches/Apple/Morbo/lib/Target/X86/X86InstrFormats.td
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Morbo/lib/Target/X86/X86InstrFormats.td?rev=99814&r1=99813&r2=99814&view=diff
==============================================================================
--- llvm/branches/Apple/Morbo/lib/Target/X86/X86InstrFormats.td (original)
+++ llvm/branches/Apple/Morbo/lib/Target/X86/X86InstrFormats.td Mon Mar 29 11:37:37 2010
@@ -101,7 +101,6 @@
Format Form = f;
bits<6> FormBits = Form.Value;
ImmType ImmT = i;
- bits<3> ImmTypeBits = ImmT.Value;
dag OutOperandList = outs;
dag InOperandList = ins;
@@ -115,8 +114,7 @@
bits<4> Prefix = 0; // Which prefix byte does this inst have?
bit hasREX_WPrefix = 0; // Does this inst requires the REX.W prefix?
- FPFormat FPForm; // What flavor of FP instruction is this?
- bits<3> FPFormBits = 0;
+ FPFormat FPForm = NotFP; // What flavor of FP instruction is this?
bit hasLockPrefix = 0; // Does this inst have a 0xF0 prefix?
bits<2> SegOvrBits = 0; // Segment override prefix.
}
@@ -166,7 +164,7 @@
// FpI_ - Floating Point Psuedo Instruction template. Not Predicated.
class FpI_<dag outs, dag ins, FPFormat fp, list<dag> pattern>
: X86Inst<0, Pseudo, NoImm, outs, ins, ""> {
- let FPForm = fp; let FPFormBits = FPForm.Value;
+ let FPForm = fp;
let Pattern = pattern;
}
Modified: llvm/branches/Apple/Morbo/lib/Target/X86/X86InstrInfo.td
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Morbo/lib/Target/X86/X86InstrInfo.td?rev=99814&r1=99813&r2=99814&view=diff
==============================================================================
--- llvm/branches/Apple/Morbo/lib/Target/X86/X86InstrInfo.td (original)
+++ llvm/branches/Apple/Morbo/lib/Target/X86/X86InstrInfo.td Mon Mar 29 11:37:37 2010
@@ -586,7 +586,7 @@
// Return instructions.
let isTerminator = 1, isReturn = 1, isBarrier = 1,
- hasCtrlDep = 1, FPForm = SpecialFP, FPFormBits = SpecialFP.Value in {
+ hasCtrlDep = 1, FPForm = SpecialFP in {
def RET : I <0xC3, RawFrm, (outs), (ins variable_ops),
"ret",
[(X86retflag 0)]>;
Propchange: llvm/branches/Apple/Morbo/lib/Transforms/IPO/FunctionAttrs.cpp
------------------------------------------------------------------------------
svn:mergeinfo = /llvm/trunk/lib/Transforms/IPO/FunctionAttrs.cpp:99492,99539
Modified: llvm/branches/Apple/Morbo/utils/TableGen/InstrInfoEmitter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Morbo/utils/TableGen/InstrInfoEmitter.cpp?rev=99814&r1=99813&r2=99814&view=diff
==============================================================================
--- llvm/branches/Apple/Morbo/utils/TableGen/InstrInfoEmitter.cpp (original)
+++ llvm/branches/Apple/Morbo/utils/TableGen/InstrInfoEmitter.cpp Mon Mar 29 11:37:37 2010
@@ -343,7 +343,7 @@
IntInit *ShiftInt, raw_ostream &OS) {
if (Val == 0 || ShiftInt == 0)
throw std::string("Illegal value or shift amount in TargetInfo*!");
- RecordVal *RV = R->getValue(Val->getValue());
+ RecordVal *RV = R->getDottedValue(Val->getValue());
int Shift = ShiftInt->getValue();
if (RV == 0 || RV->getValue() == 0) {
Modified: llvm/branches/Apple/Morbo/utils/TableGen/Record.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Morbo/utils/TableGen/Record.cpp?rev=99814&r1=99813&r2=99814&view=diff
==============================================================================
--- llvm/branches/Apple/Morbo/utils/TableGen/Record.cpp (original)
+++ llvm/branches/Apple/Morbo/utils/TableGen/Record.cpp Mon Mar 29 11:37:37 2010
@@ -1118,12 +1118,15 @@
return 0;
}
-Init *VarInit::getFieldInit(Record &R, const std::string &FieldName) const {
+Init *VarInit::getFieldInit(Record &R, const RecordVal *RV,
+ const std::string &FieldName) const {
if (dynamic_cast<RecordRecTy*>(getType()))
- if (const RecordVal *RV = R.getValue(VarName)) {
- Init *TheInit = RV->getValue();
+ if (const RecordVal *Val = R.getValue(VarName)) {
+ if (RV != Val && (RV || dynamic_cast<UnsetInit*>(Val->getValue())))
+ return 0;
+ Init *TheInit = Val->getValue();
assert(TheInit != this && "Infinite loop detected!");
- if (Init *I = TheInit->getFieldInit(R, FieldName))
+ if (Init *I = TheInit->getFieldInit(R, RV, FieldName))
return I;
else
return 0;
@@ -1184,7 +1187,8 @@
return 0;
}
-Init *DefInit::getFieldInit(Record &R, const std::string &FieldName) const {
+Init *DefInit::getFieldInit(Record &R, const RecordVal *RV,
+ const std::string &FieldName) const {
return Def->getValue(FieldName)->getValue();
}
@@ -1195,7 +1199,7 @@
Init *FieldInit::resolveBitReference(Record &R, const RecordVal *RV,
unsigned Bit) {
- if (Init *BitsVal = Rec->getFieldInit(R, FieldName))
+ if (Init *BitsVal = Rec->getFieldInit(R, RV, FieldName))
if (BitsInit *BI = dynamic_cast<BitsInit*>(BitsVal)) {
assert(Bit < BI->getNumBits() && "Bit reference out of range!");
Init *B = BI->getBit(Bit);
@@ -1208,7 +1212,7 @@
Init *FieldInit::resolveListElementReference(Record &R, const RecordVal *RV,
unsigned Elt) {
- if (Init *ListVal = Rec->getFieldInit(R, FieldName))
+ if (Init *ListVal = Rec->getFieldInit(R, RV, FieldName))
if (ListInit *LI = dynamic_cast<ListInit*>(ListVal)) {
if (Elt >= LI->getSize()) return 0;
Init *E = LI->getElement(Elt);
@@ -1225,7 +1229,7 @@
Init *FieldInit::resolveReferences(Record &R, const RecordVal *RV) {
Init *NewRec = RV ? Rec->resolveReferences(R, RV) : Rec;
- Init *BitsVal = NewRec->getFieldInit(R, FieldName);
+ Init *BitsVal = NewRec->getFieldInit(R, RV, FieldName);
if (BitsVal) {
Init *BVR = BitsVal->resolveReferences(R, RV);
return BVR->isComplete() ? BVR : this;
@@ -1313,6 +1317,16 @@
}
}
+RecordVal *Record::getDottedValue(StringRef Name) {
+ size_t pos = Name.find('.');
+ if (pos == StringRef::npos)
+ return getValue(Name);
+ RecordVal *RV = getValue(Name.substr(0, pos));
+ if (!RV) return 0;
+ DefInit *DI = dynamic_cast<DefInit*>(RV->getValue());
+ if (!DI) return 0;
+ return DI->getDef()->getDottedValue(Name.substr(pos+1));
+}
void Record::dump() const { errs() << *this; }
Modified: llvm/branches/Apple/Morbo/utils/TableGen/Record.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Morbo/utils/TableGen/Record.h?rev=99814&r1=99813&r2=99814&view=diff
==============================================================================
--- llvm/branches/Apple/Morbo/utils/TableGen/Record.h (original)
+++ llvm/branches/Apple/Morbo/utils/TableGen/Record.h Mon Mar 29 11:37:37 2010
@@ -503,7 +503,8 @@
/// initializer for the specified field. If getFieldType returns non-null
/// this method should return non-null, otherwise it returns null.
///
- virtual Init *getFieldInit(Record &R, const std::string &FieldName) const {
+ virtual Init *getFieldInit(Record &R, const RecordVal *RV,
+ const std::string &FieldName) const {
return 0;
}
@@ -950,7 +951,8 @@
unsigned Elt);
virtual RecTy *getFieldType(const std::string &FieldName) const;
- virtual Init *getFieldInit(Record &R, const std::string &FieldName) const;
+ virtual Init *getFieldInit(Record &R, const RecordVal *RV,
+ const std::string &FieldName) const;
/// resolveReferences - This method is used by classes that refer to other
/// variables which may not be defined at the time they expression is formed.
@@ -1035,7 +1037,8 @@
//virtual Init *convertInitializerBitRange(const std::vector<unsigned> &Bits);
virtual RecTy *getFieldType(const std::string &FieldName) const;
- virtual Init *getFieldInit(Record &R, const std::string &FieldName) const;
+ virtual Init *getFieldInit(Record &R, const RecordVal *RV,
+ const std::string &FieldName) const;
virtual std::string getAsString() const;
@@ -1259,6 +1262,9 @@
return 0;
}
+ // Like getValue, but allow dotting into members: X.Y
+ RecordVal *getDottedValue(StringRef Name);
+
void addTemplateArg(StringRef Name) {
assert(!isTemplateArg(Name) && "Template arg already defined!");
TemplateArgs.push_back(Name);
More information about the llvm-branch-commits
mailing list