mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-07 14:33:15 +00:00
Move dbg_value generation to target-independent FastISel,
as X86 is currently the only FastISel target. Per review. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97255 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
91c38417cf
commit
45df761652
@ -350,6 +350,34 @@ bool FastISel::SelectCall(User *I) {
|
|||||||
(void)TargetSelectInstruction(cast<Instruction>(I));
|
(void)TargetSelectInstruction(cast<Instruction>(I));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
case Intrinsic::dbg_value: {
|
||||||
|
// This requires target support, but right now X86 is the only Fast target.
|
||||||
|
DbgValueInst *DI = cast<DbgValueInst>(I);
|
||||||
|
const TargetInstrDesc &II = TII.get(TargetOpcode::DBG_VALUE);
|
||||||
|
Value *V = DI->getValue();
|
||||||
|
if (!V) {
|
||||||
|
// Currently the optimizer can produce this; insert an undef to
|
||||||
|
// help debugging. Probably the optimizer should not do this.
|
||||||
|
BuildMI(MBB, DL, II).addReg(0U).addImm(DI->getOffset()).
|
||||||
|
addMetadata(DI->getVariable());
|
||||||
|
} else if (ConstantInt *CI = dyn_cast<ConstantInt>(V)) {
|
||||||
|
BuildMI(MBB, DL, II).addImm(CI->getZExtValue()).addImm(DI->getOffset()).
|
||||||
|
addMetadata(DI->getVariable());
|
||||||
|
} else if (ConstantFP *CF = dyn_cast<ConstantFP>(V)) {
|
||||||
|
BuildMI(MBB, DL, II).addFPImm(CF).addImm(DI->getOffset()).
|
||||||
|
addMetadata(DI->getVariable());
|
||||||
|
} else if (unsigned Reg = lookUpRegForValue(V)) {
|
||||||
|
BuildMI(MBB, DL, II).addReg(Reg, RegState::Debug).addImm(DI->getOffset()).
|
||||||
|
addMetadata(DI->getVariable());
|
||||||
|
} else {
|
||||||
|
// We can't yet handle anything else here because it would require
|
||||||
|
// generating code, thus altering codegen because of debug info.
|
||||||
|
// Insert an undef so we can see what we dropped.
|
||||||
|
BuildMI(MBB, DL, II).addReg(0U).addImm(DI->getOffset()).
|
||||||
|
addMetadata(DI->getVariable());
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
case Intrinsic::eh_exception: {
|
case Intrinsic::eh_exception: {
|
||||||
EVT VT = TLI.getValueType(I->getType());
|
EVT VT = TLI.getValueType(I->getType());
|
||||||
switch (TLI.getOperationAction(ISD::EXCEPTIONADDR, VT)) {
|
switch (TLI.getOperationAction(ISD::EXCEPTIONADDR, VT)) {
|
||||||
|
@ -1167,35 +1167,6 @@ bool X86FastISel::X86VisitIntrinsicCall(IntrinsicInst &I) {
|
|||||||
addMetadata(DI->getVariable());
|
addMetadata(DI->getVariable());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case Intrinsic::dbg_value: {
|
|
||||||
// FIXME this should eventually be moved to FastISel, when all targets
|
|
||||||
// are able to cope with DBG_VALUE. There is nothing target dependent here.
|
|
||||||
DbgValueInst *DI = cast<DbgValueInst>(&I);
|
|
||||||
const TargetInstrDesc &II = TII.get(TargetOpcode::DBG_VALUE);
|
|
||||||
Value *V = DI->getValue();
|
|
||||||
if (!V) {
|
|
||||||
// Currently the optimizer can produce this; insert an undef to
|
|
||||||
// help debugging. Probably the optimizer should not do this.
|
|
||||||
BuildMI(MBB, DL, II).addReg(0U).addImm(DI->getOffset()).
|
|
||||||
addMetadata(DI->getVariable());
|
|
||||||
} else if (ConstantInt *CI = dyn_cast<ConstantInt>(V)) {
|
|
||||||
BuildMI(MBB, DL, II).addImm(CI->getZExtValue()).addImm(DI->getOffset()).
|
|
||||||
addMetadata(DI->getVariable());
|
|
||||||
} else if (ConstantFP *CF = dyn_cast<ConstantFP>(V)) {
|
|
||||||
BuildMI(MBB, DL, II).addFPImm(CF).addImm(DI->getOffset()).
|
|
||||||
addMetadata(DI->getVariable());
|
|
||||||
} else if (unsigned Reg = lookUpRegForValue(V)) {
|
|
||||||
BuildMI(MBB, DL, II).addReg(Reg, RegState::Debug).addImm(DI->getOffset()).
|
|
||||||
addMetadata(DI->getVariable());
|
|
||||||
} else {
|
|
||||||
// We can't yet handle anything else here because it would require
|
|
||||||
// generating code, thus altering codegen because of debug info.
|
|
||||||
// Insert an undef so we can see what we dropped.
|
|
||||||
BuildMI(MBB, DL, II).addReg(0U).addImm(DI->getOffset()).
|
|
||||||
addMetadata(DI->getVariable());
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
case Intrinsic::trap: {
|
case Intrinsic::trap: {
|
||||||
BuildMI(MBB, DL, TII.get(X86::TRAP));
|
BuildMI(MBB, DL, TII.get(X86::TRAP));
|
||||||
return true;
|
return true;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user