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)>; _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits