[llvm-commits] [llvm] r70729 - in /llvm/trunk/lib/Target/MSP430: MSP430AsmPrinter.cpp MSP430InstrInfo.td
Anton Korobeynikov
asl at math.spbu.ru
Sun May 3 06:08:13 PDT 2009
Author: asl
Date: Sun May 3 08:08:13 2009
New Revision: 70729
URL: http://llvm.org/viewvc/llvm-project?rev=70729&view=rev
Log:
Some early full call lowering draft for direct calls
Modified:
llvm/trunk/lib/Target/MSP430/MSP430AsmPrinter.cpp
llvm/trunk/lib/Target/MSP430/MSP430InstrInfo.td
Modified: llvm/trunk/lib/Target/MSP430/MSP430AsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/MSP430/MSP430AsmPrinter.cpp?rev=70729&r1=70728&r2=70729&view=diff
==============================================================================
--- llvm/trunk/lib/Target/MSP430/MSP430AsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/MSP430/MSP430AsmPrinter.cpp Sun May 3 08:08:13 2009
@@ -127,19 +127,33 @@
const MachineOperand &MO = MI->getOperand(OpNum);
switch (MO.getType()) {
case MachineOperand::MO_Register:
- if (TargetRegisterInfo::isPhysicalRegister(MO.getReg()))
- O << TM.getRegisterInfo()->get(MO.getReg()).AsmName;
- else
- assert(0 && "not implemented");
- break;
+ assert (TargetRegisterInfo::isPhysicalRegister(MO.getReg()) &&
+ "Virtual registers should be already mapped!");
+ O << TM.getRegisterInfo()->get(MO.getReg()).AsmName;
+ return;
case MachineOperand::MO_Immediate:
if (!Modifier || strcmp(Modifier, "nohash"))
O << '#';
O << MO.getImm();
- break;
+ return;
case MachineOperand::MO_MachineBasicBlock:
printBasicBlockLabel(MO.getMBB());
- break;
+ return;
+ case MachineOperand::MO_GlobalAddress: {
+ bool isMemOp = Modifier && !strcmp(Modifier, "mem");
+ bool isCallOp = Modifier && !strcmp(Modifier, "call");
+ std::string Name = Mang->getValueName(MO.getGlobal());
+ assert(MO.getOffset() == 0 && "No offsets allowed!");
+
+ if (isCallOp)
+ O << '#';
+ else if (isMemOp)
+ O << '&';
+
+ O << Name;
+
+ return;
+ }
default:
assert(0 && "Not implemented yet!");
}
Modified: llvm/trunk/lib/Target/MSP430/MSP430InstrInfo.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/MSP430/MSP430InstrInfo.td?rev=70729&r1=70728&r2=70729&view=diff
==============================================================================
--- llvm/trunk/lib/Target/MSP430/MSP430InstrInfo.td (original)
+++ llvm/trunk/lib/Target/MSP430/MSP430InstrInfo.td Sun May 3 08:08:13 2009
@@ -106,10 +106,12 @@
// registers are added manually.
let Defs = [R12W, R13W, R14W, R15W, SRW],
Uses = [SPW] in {
- def CALL32r : Pseudo<(outs), (ins GR16:$dst, variable_ops),
- "call\t{*}$dst", [(MSP430call GR16:$dst)]>;
- def CALL32m : Pseudo<(outs), (ins memsrc:$dst, variable_ops),
- "call\t{*}$dst", [(MSP430call (load addr:$dst))]>;
+ def CALLi : Pseudo<(outs), (ins i16imm:$dst, variable_ops),
+ "call\t${dst:call}", [(MSP430call imm:$dst)]>;
+ def CALLr : Pseudo<(outs), (ins GR16:$dst, variable_ops),
+ "call\t$dst", [(MSP430call GR16:$dst)]>;
+ def CALLm : Pseudo<(outs), (ins memsrc:$dst, variable_ops),
+ "call\t${dst:mem}", [(MSP430call (load addr:$dst))]>;
}
@@ -608,3 +610,9 @@
// truncs
def : Pat<(i8 (trunc GR16:$src)),
(EXTRACT_SUBREG GR16:$src, subreg_8bit)>;
+
+// calls
+def : Pat<(MSP430call (i16 tglobaladdr:$dst)),
+ (CALLi tglobaladdr:$dst)>;
+def : Pat<(MSP430call (i16 texternalsym:$dst)),
+ (CALLi texternalsym:$dst)>;
More information about the llvm-commits
mailing list