Major bug fix though it happened rarely (only on a compare after an
integer overflow):
We need to use %icc and not %xcc for comparisons on 32-bit or smaller
integer values.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7111 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Target/SparcV9/SparcV9AsmPrinter.cpp b/lib/Target/SparcV9/SparcV9AsmPrinter.cpp
index f66b36f..829a3b8 100644
--- a/lib/Target/SparcV9/SparcV9AsmPrinter.cpp
+++ b/lib/Target/SparcV9/SparcV9AsmPrinter.cpp
@@ -393,12 +393,27 @@
   
   switch (mop.getType())
     {
-    case MachineOperand::MO_VirtualRegister:
     case MachineOperand::MO_CCRegister:
+      {
+        // We need to print %icc or %xcc as %ccr for certain opcodes.
+        int regNum = (int)mop.getAllocatedRegNum();
+        if (regNum != Target.getRegInfo().getInvalidRegNum() &&
+            Target.getRegInfo().getRegClassIDOfReg(regNum)
+            == UltraSparcRegInfo::IntCCRegClassID)
+          {
+            if (opCode == V9::RDCCR || opCode == V9::WRCCRi || opCode == V9::WRCCRr)
+              {
+                toAsm << "%" << Target.getRegInfo().getMachineRegClass(UltraSparcRegInfo::IntCCRegClassID)->getRegName(SparcIntCCRegClass::ccr);
+                break;
+              }
+          }
+        // all other cases can be handled like any other register
+      }
+
+    case MachineOperand::MO_VirtualRegister:
     case MachineOperand::MO_MachineRegister:
       {
         int regNum = (int)mop.getAllocatedRegNum();
-        
         if (regNum == Target.getRegInfo().getInvalidRegNum()) {
           // better to print code with NULL registers than to die
           toAsm << "<NULL VALUE>";