[llvm-commits] CVS: llvm/lib/Target/SparcV8/SparcV8AsmPrinter.cpp SparcV8InstrInfo.td

Chris Lattner lattner at cs.uiuc.edu
Sun Jan 15 01:26:39 PST 2006



Changes in directory llvm/lib/Target/SparcV8:

SparcV8AsmPrinter.cpp updated: 1.49 -> 1.50
SparcV8InstrInfo.td updated: 1.102 -> 1.103
---
Log message:

Don't print a label for the first MBB in a function.

Compile this:

%_2E_str_8 = external global [75 x sbyte]
implementation   ; Functions:
declare int %printf(sbyte*, ...)
void %test()
        %tmp.101 = call int (sbyte*, ...)* %printf( sbyte* getelementptr ([75 x sbyte]* %_2E_str_8, int 0, int 0) )             ; <int> [#uses=0]
        unreachable
}

to this:

main_endif_2E_8:
        save -96, %o6, %o6
        sethi %hi(_2E_str_8), %l0
        add %l0, %lo(_2E_str_8), %o0
        call printf
        nop

instead of this:

main_endif_2E_8:
        save -96, %o6, %o6
        sethi %hi(_2E_str_8), %l0
        or %g0, %lo(_2E_str_8), %l1   ;; extra instruction
        add %l1, %l0, %o0
        call printf
        nop




---
Diffs of the changes:  (+13 -5)

 SparcV8AsmPrinter.cpp |   11 ++++++-----
 SparcV8InstrInfo.td   |    7 +++++++
 2 files changed, 13 insertions(+), 5 deletions(-)


Index: llvm/lib/Target/SparcV8/SparcV8AsmPrinter.cpp
diff -u llvm/lib/Target/SparcV8/SparcV8AsmPrinter.cpp:1.49 llvm/lib/Target/SparcV8/SparcV8AsmPrinter.cpp:1.50
--- llvm/lib/Target/SparcV8/SparcV8AsmPrinter.cpp:1.49	Sun Dec 18 17:36:45 2005
+++ llvm/lib/Target/SparcV8/SparcV8AsmPrinter.cpp	Sun Jan 15 03:26:27 2006
@@ -112,9 +112,10 @@
   for (MachineFunction::const_iterator I = MF.begin(), E = MF.end();
        I != E; ++I) {
     // Print a label for the basic block.
-    O << ".LBB" << Mang->getValueName(MF.getFunction ())
-      << "_" << I->getNumber () << ":\t! "
-      << I->getBasicBlock ()->getName () << "\n";
+    if (I != MF.begin())
+      O << ".LBB" << Mang->getValueName(MF.getFunction ())
+        << "_" << I->getNumber () << ":\t! "
+        << I->getBasicBlock ()->getName () << "\n";
     for (MachineBasicBlock::const_iterator II = I->begin(), E = I->end();
          II != E; ++II) {
       // Print the assembly for the instruction.
@@ -135,8 +136,8 @@
   if (MI->getOpcode() == V8::SETHIi && !MO.isRegister() && !MO.isImmediate()) {
     O << "%hi(";
     CloseParen = true;
-  } else if (MI->getOpcode() ==V8::ORri &&!MO.isRegister() &&!MO.isImmediate())
-  {
+  } else if ((MI->getOpcode() == V8::ORri || MI->getOpcode() == V8::ADDri)
+             && !MO.isRegister() && !MO.isImmediate()) {
     O << "%lo(";
     CloseParen = true;
   }


Index: llvm/lib/Target/SparcV8/SparcV8InstrInfo.td
diff -u llvm/lib/Target/SparcV8/SparcV8InstrInfo.td:1.102 llvm/lib/Target/SparcV8/SparcV8InstrInfo.td:1.103
--- llvm/lib/Target/SparcV8/SparcV8InstrInfo.td:1.102	Thu Jan 12 11:05:32 2006
+++ llvm/lib/Target/SparcV8/SparcV8InstrInfo.td	Sun Jan 15 03:26:27 2006
@@ -724,6 +724,13 @@
 def : Pat<(V8hi tconstpool:$in), (SETHIi tconstpool:$in)>;
 def : Pat<(V8lo tconstpool:$in), (ORri G0, tconstpool:$in)>;
 
+// Add reg, lo.  This is used when taking the addr of a global/constpool entry.
+def : Pat<(add IntRegs:$r, (V8lo tglobaladdr:$in)),
+          (ADDri IntRegs:$r, tglobaladdr:$in)>;
+def : Pat<(add IntRegs:$r, (V8lo tconstpool:$in)),
+          (ADDri IntRegs:$r, tconstpool:$in)>;
+
+
 // Calls: 
 def : Pat<(call tglobaladdr:$dst),
           (CALL tglobaladdr:$dst)>;






More information about the llvm-commits mailing list