[llvm-commits] CVS: llvm/lib/Target/X86/InstSelectSimple.cpp X86TargetMachine.cpp
Chris Lattner
lattner at cs.uiuc.edu
Sun Oct 5 14:16:10 PDT 2003
Changes in directory llvm/lib/Target/X86:
InstSelectSimple.cpp updated: 1.126 -> 1.127
X86TargetMachine.cpp updated: 1.29 -> 1.30
---
Log message:
Instead of hacking in custom support for Invoke/Unwind, use the LowerInvoke pass
---
Diffs of the changes:
Index: llvm/lib/Target/X86/InstSelectSimple.cpp
diff -u llvm/lib/Target/X86/InstSelectSimple.cpp:1.126 llvm/lib/Target/X86/InstSelectSimple.cpp:1.127
--- llvm/lib/Target/X86/InstSelectSimple.cpp:1.126 Mon Sep 8 14:44:21 2003
+++ llvm/lib/Target/X86/InstSelectSimple.cpp Sun Oct 5 14:15:46 2003
@@ -131,8 +131,6 @@
void doCall(const ValueRecord &Ret, MachineInstr *CallMI,
const std::vector<ValueRecord> &Args);
void visitCallInst(CallInst &I);
- void visitInvokeInst(InvokeInst &II);
- void visitUnwindInst(UnwindInst &UI);
void visitIntrinsicCall(LLVMIntrinsic::ID ID, CallInst &I);
// Arithmetic operators
@@ -996,35 +994,6 @@
doCall(ValueRecord(DestReg, CI.getType()), TheCall, Args);
}
-
-// visitInvokeInst - For now, we don't support the llvm.unwind intrinsic, so
-// invoke's are just calls with an unconditional branch after them!
-void ISel::visitInvokeInst(InvokeInst &II) {
- MachineInstr *TheCall;
- if (Function *F = II.getCalledFunction()) {
- // Emit a CALL instruction with PC-relative displacement.
- TheCall = BuildMI(X86::CALLpcrel32, 1).addGlobalAddress(F, true);
- } else { // Emit an indirect call...
- unsigned Reg = getReg(II.getCalledValue());
- TheCall = BuildMI(X86::CALLr32, 1).addReg(Reg);
- }
-
- std::vector<ValueRecord> Args;
- for (unsigned i = 3, e = II.getNumOperands(); i != e; ++i)
- Args.push_back(ValueRecord(II.getOperand(i)));
-
- unsigned DestReg = II.getType() != Type::VoidTy ? getReg(II) : 0;
- doCall(ValueRecord(DestReg, II.getType()), TheCall, Args);
-
- // If the normal destination is not the next basic block, emit a 'jmp'.
- if (II.getNormalDest() != getBlockAfter(II.getParent()))
- BuildMI(BB, X86::JMP, 1).addPCDisp(II.getNormalDest());
-}
-
-void ISel::visitUnwindInst(UnwindInst &UI) {
- // unwind is not supported yet! Just abort when the unwind inst is executed!
- BuildMI(BB, X86::CALLpcrel32, 1).addExternalSymbol("abort", true);
-}
void ISel::visitIntrinsicCall(LLVMIntrinsic::ID ID, CallInst &CI) {
unsigned TmpReg1, TmpReg2;
Index: llvm/lib/Target/X86/X86TargetMachine.cpp
diff -u llvm/lib/Target/X86/X86TargetMachine.cpp:1.29 llvm/lib/Target/X86/X86TargetMachine.cpp:1.30
--- llvm/lib/Target/X86/X86TargetMachine.cpp:1.29 Thu Oct 2 11:57:49 2003
+++ llvm/lib/Target/X86/X86TargetMachine.cpp Sun Oct 5 14:15:47 2003
@@ -50,6 +50,13 @@
// FIXME: Implement the switch instruction in the instruction selector!
PM.add(createLowerSwitchPass());
+ // FIXME: Implement the invoke/unwind instructions!
+ PM.add(createLowerInvokePass());
+
+ // FIXME: The code generator does not properly handle functions with
+ // unreachable basic blocks.
+ PM.add(createCFGSimplificationPass());
+
if (NoPatternISel)
PM.add(createX86SimpleInstructionSelector(*this));
else
@@ -93,6 +100,13 @@
bool X86TargetMachine::addPassesToJITCompile(FunctionPassManager &PM) {
// FIXME: Implement the switch instruction in the instruction selector!
PM.add(createLowerSwitchPass());
+
+ // FIXME: Implement the invoke/unwind instructions!
+ PM.add(createLowerInvokePass());
+
+ // FIXME: The code generator does not properly handle functions with
+ // unreachable basic blocks.
+ PM.add(createCFGSimplificationPass());
if (NoPatternISel)
PM.add(createX86SimpleInstructionSelector(*this));
More information about the llvm-commits
mailing list