[llvm-commits] [llvm] r64428 - in /llvm/trunk/lib: CodeGen/SelectionDAG/FastISel.cpp CodeGen/SelectionDAG/LegalizeDAG.cpp CodeGen/SelectionDAG/SelectionDAGBuild.cpp CodeGen/VirtRegMap.cpp Target/X86/X86RegisterInfo.cpp
Nick Lewycky
nicholas at mxc.ca
Thu Feb 12 20:18:00 PST 2009
Bill Wendling wrote:
> Author: void
> Date: Thu Feb 12 20:16:35 2009
> New Revision: 64428
>
> URL: http://llvm.org/viewvc/llvm-project?rev=64428&view=rev
> Log:
> Revert this. It was breaking stuff.
Revert what?
Nick
>
> Modified:
> llvm/trunk/lib/CodeGen/SelectionDAG/FastISel.cpp
> llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
> llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp
> llvm/trunk/lib/CodeGen/VirtRegMap.cpp
> llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp
>
> Modified: llvm/trunk/lib/CodeGen/SelectionDAG/FastISel.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/FastISel.cpp?rev=64428&r1=64427&r2=64428&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/SelectionDAG/FastISel.cpp (original)
> +++ llvm/trunk/lib/CodeGen/SelectionDAG/FastISel.cpp Thu Feb 12 20:16:35 2009
> @@ -323,21 +323,32 @@
> CU.getFilename());
> unsigned Line = SPI->getLine();
> unsigned Col = SPI->getColumn();
> + unsigned ID = DW->RecordSourceLine(Line, Col, SrcFile);
> unsigned Idx = MF.getOrCreateDebugLocID(SrcFile, Line, Col);
> setCurDebugLoc(DebugLoc::get(Idx));
> + const TargetInstrDesc &II = TII.get(TargetInstrInfo::DBG_LABEL);
> + BuildMI(MBB, DL, II).addImm(ID);
> }
> return true;
> }
> case Intrinsic::dbg_region_start: {
> DbgRegionStartInst *RSI = cast<DbgRegionStartInst>(I);
> - if (DW && DW->ValidDebugInfo(RSI->getContext()))
> - DW->RecordRegionStart(cast<GlobalVariable>(RSI->getContext()));
> + if (DW && DW->ValidDebugInfo(RSI->getContext())) {
> + unsigned ID =
> + DW->RecordRegionStart(cast<GlobalVariable>(RSI->getContext()));
> + const TargetInstrDesc &II = TII.get(TargetInstrInfo::DBG_LABEL);
> + BuildMI(MBB, DL, II).addImm(ID);
> + }
> return true;
> }
> case Intrinsic::dbg_region_end: {
> DbgRegionEndInst *REI = cast<DbgRegionEndInst>(I);
> - if (DW && DW->ValidDebugInfo(REI->getContext()))
> - DW->RecordRegionEnd(cast<GlobalVariable>(REI->getContext()));
> + if (DW && DW->ValidDebugInfo(REI->getContext())) {
> + unsigned ID =
> + DW->RecordRegionEnd(cast<GlobalVariable>(REI->getContext()));
> + const TargetInstrDesc &II = TII.get(TargetInstrInfo::DBG_LABEL);
> + BuildMI(MBB, DL, II).addImm(ID);
> + }
> return true;
> }
> case Intrinsic::dbg_func_start: {
> @@ -357,14 +368,42 @@
> // function start. It will be emitted at asm emission time. However,
> // create a label if this is a beginning of inlined function.
> unsigned Line = Subprogram.getLineNumber();
> + unsigned LabelID = DW->RecordSourceLine(Line, 0, SrcFile);
> setCurDebugLoc(DebugLoc::get(MF.getOrCreateDebugLocID(SrcFile, Line, 0)));
> +
> + if (DW->getRecordSourceLineCount() != 1) {
> + const TargetInstrDesc &II = TII.get(TargetInstrInfo::DBG_LABEL);
> + BuildMI(MBB, DL, II).addImm(LabelID);
> + }
> }
>
> return true;
> }
> - case Intrinsic::dbg_declare:
> - // FIXME: Do something correct here when declare stuff is working again.
> + case Intrinsic::dbg_declare: {
> + DbgDeclareInst *DI = cast<DbgDeclareInst>(I);
> + Value *Variable = DI->getVariable();
> + if (DW && DW->ValidDebugInfo(Variable)) {
> + // Determine the address of the declared object.
> + Value *Address = DI->getAddress();
> + if (BitCastInst *BCI = dyn_cast<BitCastInst>(Address))
> + Address = BCI->getOperand(0);
> + AllocaInst *AI = dyn_cast<AllocaInst>(Address);
> + // Don't handle byval struct arguments or VLAs, for example.
> + if (!AI) break;
> + DenseMap<const AllocaInst*, int>::iterator SI =
> + StaticAllocaMap.find(AI);
> + if (SI == StaticAllocaMap.end()) break; // VLAs.
> + int FI = SI->second;
> +
> + // Determine the debug globalvariable.
> + GlobalValue *GV = cast<GlobalVariable>(Variable);
> +
> + // Build the DECLARE instruction.
> + const TargetInstrDesc &II = TII.get(TargetInstrInfo::DECLARE);
> + BuildMI(MBB, DL, II).addFrameIndex(FI).addGlobalAddress(GV);
> + }
> return true;
> + }
> case Intrinsic::eh_exception: {
> MVT VT = TLI.getValueType(I->getType());
> switch (TLI.getOperationAction(ISD::EXCEPTIONADDR, VT)) {
>
> Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp?rev=64428&r1=64427&r2=64428&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp (original)
> +++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Thu Feb 12 20:16:35 2009
> @@ -1274,9 +1274,38 @@
> switch (TLI.getOperationAction(ISD::DBG_STOPPOINT, MVT::Other)) {
> case TargetLowering::Promote:
> default: assert(0 && "This action is not supported yet!");
> - case TargetLowering::Expand:
> - Result = Tmp1; // chain
> + case TargetLowering::Expand: {
> + DwarfWriter *DW = DAG.getDwarfWriter();
> + bool useDEBUG_LOC = TLI.isOperationLegalOrCustom(ISD::DEBUG_LOC,
> + MVT::Other);
> + bool useLABEL = TLI.isOperationLegalOrCustom(ISD::DBG_LABEL, MVT::Other);
> +
> + const DbgStopPointSDNode *DSP = cast<DbgStopPointSDNode>(Node);
> + GlobalVariable *CU_GV = cast<GlobalVariable>(DSP->getCompileUnit());
> + if (DW && (useDEBUG_LOC || useLABEL) && !CU_GV->isDeclaration()) {
> + DICompileUnit CU(cast<GlobalVariable>(DSP->getCompileUnit()));
> + unsigned SrcFile = DW->RecordSource(CU.getDirectory(),
> + CU.getFilename());
> +
> + unsigned Line = DSP->getLine();
> + unsigned Col = DSP->getColumn();
> +
> + // A bit self-referential to have DebugLoc on Debug_Loc nodes, but
> + // it won't hurt anything.
> + if (useDEBUG_LOC) {
> + SDValue Ops[] = { Tmp1, DAG.getConstant(Line, MVT::i32),
> + DAG.getConstant(Col, MVT::i32),
> + DAG.getConstant(SrcFile, MVT::i32) };
> + Result = DAG.getNode(ISD::DEBUG_LOC, dl, MVT::Other, Ops, 4);
> + } else {
> + unsigned ID = DW->RecordSourceLine(Line, Col, SrcFile);
> + Result = DAG.getLabel(ISD::DBG_LABEL, dl, Tmp1, ID);
> + }
> + } else {
> + Result = Tmp1; // chain
> + }
> break;
> + }
> case TargetLowering::Legal: {
> LegalizeAction Action = getTypeAction(Node->getOperand(1).getValueType());
> if (Action == Legal && Tmp1 == Node->getOperand(0))
>
> Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp?rev=64428&r1=64427&r2=64428&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp (original)
> +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp Thu Feb 12 20:16:35 2009
> @@ -3912,18 +3912,24 @@
> case Intrinsic::dbg_region_start: {
> DwarfWriter *DW = DAG.getDwarfWriter();
> DbgRegionStartInst &RSI = cast<DbgRegionStartInst>(I);
> -
> - if (DW && DW->ValidDebugInfo(RSI.getContext()))
> - DW->RecordRegionStart(cast<GlobalVariable>(RSI.getContext()));
> + if (DW && DW->ValidDebugInfo(RSI.getContext())) {
> + unsigned LabelID =
> + DW->RecordRegionStart(cast<GlobalVariable>(RSI.getContext()));
> + DAG.setRoot(DAG.getLabel(ISD::DBG_LABEL, getCurDebugLoc(),
> + getRoot(), LabelID));
> + }
>
> return 0;
> }
> case Intrinsic::dbg_region_end: {
> DwarfWriter *DW = DAG.getDwarfWriter();
> DbgRegionEndInst &REI = cast<DbgRegionEndInst>(I);
> -
> - if (DW && DW->ValidDebugInfo(REI.getContext()))
> - DW->RecordRegionEnd(cast<GlobalVariable>(REI.getContext()));
> + if (DW && DW->ValidDebugInfo(REI.getContext())) {
> + unsigned LabelID =
> + DW->RecordRegionEnd(cast<GlobalVariable>(REI.getContext()));
> + DAG.setRoot(DAG.getLabel(ISD::DBG_LABEL, getCurDebugLoc(),
> + getRoot(), LabelID));
> + }
>
> return 0;
> }
> @@ -3944,15 +3950,27 @@
> // function start. It will be emitted at asm emission time. However,
> // create a label if this is a beginning of inlined function.
> unsigned Line = Subprogram.getLineNumber();
> + unsigned LabelID = DW->RecordSourceLine(Line, 0, SrcFile);
> +
> + if (DW->getRecordSourceLineCount() != 1)
> + DAG.setRoot(DAG.getLabel(ISD::DBG_LABEL, getCurDebugLoc(),
> + getRoot(), LabelID));
> +
> setCurDebugLoc(DebugLoc::get(DAG.getMachineFunction().
> - getOrCreateDebugLocID(SrcFile, Line, 0)));
> + getOrCreateDebugLocID(SrcFile, Line, 0)));
> }
>
> return 0;
> }
> - case Intrinsic::dbg_declare:
> - // FIXME: Do something correct here when declare stuff is working again.
> + case Intrinsic::dbg_declare: {
> + DwarfWriter *DW = DAG.getDwarfWriter();
> + DbgDeclareInst &DI = cast<DbgDeclareInst>(I);
> + Value *Variable = DI.getVariable();
> + if (DW && DW->ValidDebugInfo(Variable))
> + DAG.setRoot(DAG.getNode(ISD::DECLARE, dl, MVT::Other, getRoot(),
> + getValue(DI.getAddress()), getValue(Variable)));
> return 0;
> + }
>
> case Intrinsic::eh_exception: {
> if (!CurMBB->isLandingPad()) {
>
> Modified: llvm/trunk/lib/CodeGen/VirtRegMap.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/VirtRegMap.cpp?rev=64428&r1=64427&r2=64428&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/VirtRegMap.cpp (original)
> +++ llvm/trunk/lib/CodeGen/VirtRegMap.cpp Thu Feb 12 20:16:35 2009
> @@ -1278,7 +1278,7 @@
> }
>
> /// rewriteMBB - Keep track of which spills are available even after the
> -/// register allocator is done with them. If possible, avoid reloading vregs.
> +/// register allocator is done with them. If possible, avid reloading vregs.
> void LocalSpiller::RewriteMBB(MachineBasicBlock &MBB, VirtRegMap &VRM,
> AvailableSpills &Spills) {
> DOUT << "\n**** Local spiller rewriting MBB '"
>
> Modified: llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp?rev=64428&r1=64427&r2=64428&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp Thu Feb 12 20:16:35 2009
> @@ -785,6 +785,12 @@
> BuildMI(MBB, MBBI, DL, TII.get(Is64Bit ? X86::PUSH64r : X86::PUSH32r))
> .addReg(FramePtr, /*isDef=*/false, /*isImp=*/false, /*isKill=*/true);
>
> + if (needsFrameMoves) {
> + // Mark effective beginning of when frame pointer becomes valid.
> + FrameLabelId = MMI->NextLabelID();
> + BuildMI(MBB, MBBI, DL, TII.get(X86::DBG_LABEL)).addImm(FrameLabelId);
> + }
> +
> // Update EBP with the new base value...
> BuildMI(MBB, MBBI, DL,
> TII.get(Is64Bit ? X86::MOV64rr : X86::MOV32rr), FramePtr)
> @@ -808,9 +814,11 @@
> NumBytes = StackSize - X86FI->getCalleeSavedFrameSize();
>
> unsigned ReadyLabelId = 0;
> - if (needsFrameMoves)
> + if (needsFrameMoves) {
> // Mark effective beginning of when frame pointer is ready.
> ReadyLabelId = MMI->NextLabelID();
> + BuildMI(MBB, MBBI, DL, TII.get(X86::DBG_LABEL)).addImm(ReadyLabelId);
> + }
>
> // Skip the callee-saved push instructions.
> while (MBBI != MBB.end() &&
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
More information about the llvm-commits
mailing list