[llvm-commits] [llvm] r132963 - in /llvm/trunk: test/CodeGen/X86/2007-09-27-LDIntrinsics.ll test/MC/X86/x86-64.s utils/TableGen/AsmWriterEmitter.cpp
Bill Wendling
isanbard at gmail.com
Mon Jun 13 20:17:20 PDT 2011
Author: void
Date: Mon Jun 13 22:17:20 2011
New Revision: 132963
URL: http://llvm.org/viewvc/llvm-project?rev=132963&view=rev
Log:
Heuristic: If the number of operands in the alias are more than the number of
operands in the aliasee, don't print the alias.
Modified:
llvm/trunk/test/CodeGen/X86/2007-09-27-LDIntrinsics.ll
llvm/trunk/test/MC/X86/x86-64.s
llvm/trunk/utils/TableGen/AsmWriterEmitter.cpp
Modified: llvm/trunk/test/CodeGen/X86/2007-09-27-LDIntrinsics.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2007-09-27-LDIntrinsics.ll?rev=132963&r1=132962&r2=132963&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/2007-09-27-LDIntrinsics.ll (original)
+++ llvm/trunk/test/CodeGen/X86/2007-09-27-LDIntrinsics.ll Mon Jun 13 22:17:20 2011
@@ -22,7 +22,7 @@
; CHECK: bar:
; CHECK: fldt 4(%esp)
; CHECK-NEXT: fld %st(0)
-; CHECK-NEXT: fmul %st(1), %st(0)
+; CHECK-NEXT: fmul %st(1)
; CHECK-NEXT: fmulp
; CHECK-NEXT: ret
}
Modified: llvm/trunk/test/MC/X86/x86-64.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/X86/x86-64.s?rev=132963&r1=132962&r2=132963&view=diff
==============================================================================
--- llvm/trunk/test/MC/X86/x86-64.s (original)
+++ llvm/trunk/test/MC/X86/x86-64.s Mon Jun 13 22:17:20 2011
@@ -232,10 +232,10 @@
// rdar://8407928
// CHECK: inb $127, %al
-// CHECK: inw %dx
+// CHECK: inw %dx, %ax
// CHECK: outb %al, $127
-// CHECK: outw %dx
-// CHECK: inl %dx
+// CHECK: outw %ax, %dx
+// CHECK: inl %dx, %eax
inb $0x7f
inw %dx
outb $0x7f
@@ -244,12 +244,12 @@
// PR8114
-// CHECK: outb %dx
-// CHECK: outb %dx
-// CHECK: outw %dx
-// CHECK: outw %dx
-// CHECK: outl %dx
-// CHECK: outl %dx
+// CHECK: outb %al, %dx
+// CHECK: outb %al, %dx
+// CHECK: outw %ax, %dx
+// CHECK: outw %ax, %dx
+// CHECK: outl %eax, %dx
+// CHECK: outl %eax, %dx
out %al, (%dx)
outb %al, (%dx)
@@ -258,12 +258,12 @@
out %eax, (%dx)
outl %eax, (%dx)
-// CHECK: inb %dx
-// CHECK: inb %dx
-// CHECK: inw %dx
-// CHECK: inw %dx
-// CHECK: inl %dx
-// CHECK: inl %dx
+// CHECK: inb %dx, %al
+// CHECK: inb %dx, %al
+// CHECK: inw %dx, %ax
+// CHECK: inw %dx, %ax
+// CHECK: inl %dx, %eax
+// CHECK: inl %dx, %eax
in (%dx), %al
inb (%dx), %al
@@ -308,10 +308,10 @@
fucomi %st(2)
fucomi %st(2), %st
-// CHECK: fnstsw %ax
-// CHECK: fnstsw %ax
-// CHECK: fnstsw %ax
-// CHECK: fnstsw %ax
+// CHECK: fnstsw
+// CHECK: fnstsw
+// CHECK: fnstsw
+// CHECK: fnstsw
fnstsw
fnstsw %ax
@@ -457,7 +457,7 @@
// rdar://8456378 and PR7557 - fstsw
fstsw %ax
// CHECK: wait
-// CHECK: fnstsw %ax
+// CHECK: fnstsw
fstsw (%rax)
// CHECK: wait
// CHECK: fnstsw (%rax)
Modified: llvm/trunk/utils/TableGen/AsmWriterEmitter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/AsmWriterEmitter.cpp?rev=132963&r1=132962&r2=132963&view=diff
==============================================================================
--- llvm/trunk/utils/TableGen/AsmWriterEmitter.cpp (original)
+++ llvm/trunk/utils/TableGen/AsmWriterEmitter.cpp Mon Jun 13 22:17:20 2011
@@ -830,10 +830,26 @@
O << "}\n\n";
}
+static unsigned CountNumOperands(StringRef AsmString) {
+ unsigned NumOps = 0;
+ std::pair<StringRef, StringRef> ASM = AsmString.split(' ');
+
+ while (!ASM.second.empty()) {
+ ++NumOps;
+ ASM = ASM.second.split(' ');
+ }
+
+ return NumOps;
+}
+
+
void AsmWriterEmitter::EmitPrintAliasInstruction(raw_ostream &O) {
CodeGenTarget Target(Records);
Record *AsmWriter = Target.getAsmWriter();
+ if (!AsmWriter->getValueAsBit("isMCAsmWriter"))
+ return;
+
O << "\n#ifdef PRINT_ALIAS_INSTR\n";
O << "#undef PRINT_ALIAS_INSTR\n\n";
@@ -842,9 +858,6 @@
// Emit the method that prints the alias instruction.
std::string ClassName = AsmWriter->getValueAsString("AsmWriterClassName");
- bool isMC = AsmWriter->getValueAsBit("isMCAsmWriter");
- const char *MachineInstrClassName = isMC ? "MCInst" : "MachineInstr";
-
std::vector<Record*> AllInstAliases =
Records.getAllDerivedDefinitions("InstAlias");
@@ -873,13 +886,16 @@
for (std::vector<CodeGenInstAlias*>::iterator
II = Aliases.begin(), IE = Aliases.end(); II != IE; ++II) {
const CodeGenInstAlias *CGA = *II;
+ unsigned LastOpNo = CGA->ResultInstOperandIndex.size();
+
+ // Don't emit the alias if it has more operands than what it's aliasing.
+ if (LastOpNo < CountNumOperands(CGA->AsmString))
+ continue;
+
IAPrinter *IAP = new IAPrinter(AWI, CGA->Result->getAsString(),
CGA->AsmString);
-
IAP->addReqFeatures(CGA->TheDef->getValueAsListOfDefs("Predicates"));
- unsigned LastOpNo = CGA->ResultInstOperandIndex.size();
-
std::string Cond;
Cond = std::string("MI->getNumOperands() == ") + llvm::utostr(LastOpNo);
IAP->addCond(Cond);
@@ -914,7 +930,7 @@
}
} else {
assert(Rec->isSubClassOf("Operand") && "Unexpected operand!");
- // FIXME: We need to handle these situations.
+ // FIXME: We may need to handle these situations.
delete IAP;
IAP = 0;
CantHandle = true;
@@ -952,7 +968,7 @@
raw_string_ostream HeaderO(Header);
HeaderO << "bool " << Target.getName() << ClassName
- << "::printAliasInstr(const " << MachineInstrClassName
+ << "::printAliasInstr(const MCInst"
<< " *MI, raw_ostream &OS) {\n";
std::string Cases;
@@ -995,7 +1011,7 @@
CasesO.indent(4) << "return false;\n";
}
- if (CasesO.str().empty() || !isMC) {
+ if (CasesO.str().empty()) {
O << HeaderO.str();
O << " return false;\n";
O << "}\n\n";
More information about the llvm-commits
mailing list