mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-31 10:34:17 +00:00
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
This commit is contained in:
parent
a9d12c0a56
commit
30483b0c84
@ -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<ConstantExpr>(C)) {
|
||||
if (isa<UndefValue>(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<ConstantExpr>(C)) {
|
||||
unsigned Class = 0;
|
||||
switch (CE->getOpcode()) {
|
||||
case Instruction::GetElementPtr:
|
||||
|
Loading…
x
Reference in New Issue
Block a user