[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