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 << ", ";