[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