From 30483b0c8473dbdc0a09ae8a44034200799d67ec Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sat, 16 Oct 2004 18:13:05 +0000 Subject: [PATCH] Teach the X86 backend about unreachable and undef. Among other things, we now compile: 'foo() {}' into "ret" instead of "mov EAX, 0; ret" git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@17049 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/X86/X86ISelSimple.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/Target/X86/X86ISelSimple.cpp b/lib/Target/X86/X86ISelSimple.cpp index a938bae3fc7..926492e31f5 100644 --- a/lib/Target/X86/X86ISelSimple.cpp +++ b/lib/Target/X86/X86ISelSimple.cpp @@ -175,6 +175,7 @@ namespace { // Control flow operators void visitReturnInst(ReturnInst &RI); void visitBranchInst(BranchInst &BI); + void visitUnreachableInst(UnreachableInst &UI) {} struct ValueRecord { Value *Val; @@ -447,7 +448,20 @@ unsigned X86ISel::getFixedSizedAllocaFI(AllocaInst *AI) { void X86ISel::copyConstantToRegister(MachineBasicBlock *MBB, MachineBasicBlock::iterator IP, Constant *C, unsigned R) { - if (ConstantExpr *CE = dyn_cast(C)) { + if (isa(C)) { + switch (getClassB(C->getType())) { + case cFP: + // FIXME: SHOULD TEACH STACKIFIER ABOUT UNDEF VALUES! + BuildMI(*MBB, IP, X86::FLD0, 0, R); + return; + case cLong: + BuildMI(*MBB, IP, X86::IMPLICIT_DEF, 0, R+1); + // FALL THROUGH + default: + BuildMI(*MBB, IP, X86::IMPLICIT_DEF, 0, R); + return; + } + } else if (ConstantExpr *CE = dyn_cast(C)) { unsigned Class = 0; switch (CE->getOpcode()) { case Instruction::GetElementPtr: -- 2.11.0