Clean up floating point instruction selection.
Change int->float cast code to put conversion constants in constant pool.
Shorten code sequence for constant pool fp loads.
Remove LOADLoDirect/LOADLoIndirect psuedo instructions and tweak asmwriter
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15913 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Target/PowerPC/PPCAsmPrinter.cpp b/lib/Target/PowerPC/PPCAsmPrinter.cpp
index 07aaa49..1d31e3b 100644
--- a/lib/Target/PowerPC/PPCAsmPrinter.cpp
+++ b/lib/Target/PowerPC/PPCAsmPrinter.cpp
@@ -289,6 +289,7 @@
std::cerr << "Error: untranslated conditional branch psuedo instruction!\n";
abort();
} else if (Opcode == PPC::IMPLICIT_DEF) {
+ --EmittedInsts; // Not an actual machine instruction
O << "; IMPLICIT DEF ";
printOp(MI->getOperand(0));
O << "\n";
@@ -306,6 +307,7 @@
O << "\n";
return;
} else if (Opcode == PPC::MovePCtoLR) {
+ ++EmittedInsts; // Actually two machine instructions
// FIXME: should probably be converted to cout.width and cout.fill
O << "bl \"L0000" << LabelNumber << "$pb\"\n";
O << "\"L0000" << LabelNumber << "$pb\":\n";
@@ -316,7 +318,18 @@
}
O << TII.getName(Opcode) << " ";
- if (Opcode == PPC::LOADLoDirect || Opcode == PPC::LOADLoIndirect) {
+ if (Opcode == PPC::LOADHiAddr) {
+ printOp(MI->getOperand(0));
+ O << ", ";
+ if (MI->getOperand(1).getReg() == PPC::R0)
+ O << "0";
+ else
+ printOp(MI->getOperand(1));
+ O << ", ha16(" ;
+ printOp(MI->getOperand(2), true /* LoadAddrOp */);
+ O << "-\"L0000" << LabelNumber << "$pb\")\n";
+ } else if (ArgCount == 3 && (MI->getOperand(2).isConstantPoolIndex()
+ || MI->getOperand(2).isGlobalAddress())) {
printOp(MI->getOperand(0));
O << ", lo16(";
printOp(MI->getOperand(2), true /* LoadAddrOp */);
@@ -327,16 +340,6 @@
else
printOp(MI->getOperand(1));
O << ")\n";
- } else if (Opcode == PPC::LOADHiAddr) {
- printOp(MI->getOperand(0));
- O << ", ";
- if (MI->getOperand(1).getReg() == PPC::R0)
- O << "0";
- else
- printOp(MI->getOperand(1));
- O << ", ha16(" ;
- printOp(MI->getOperand(2), true /* LoadAddrOp */);
- O << "-\"L0000" << LabelNumber << "$pb\")\n";
} else if (ArgCount == 3 && ArgType[1] == PPCII::Disimm16) {
printOp(MI->getOperand(0));
O << ", ";