[llvm-commits] [llvm] r94055 - in /llvm/trunk: include/llvm/CodeGen/MachineModuleInfo.h include/llvm/Function.h lib/CodeGen/AsmPrinter/DwarfException.cpp lib/CodeGen/MachineModuleInfo.cpp lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp lib/CodeGen/SjLjEHPrepare.cpp

Chris Lattner clattner at apple.com
Wed Jan 20 18:16:20 PST 2010


On Jan 20, 2010, at 4:43 PM, Jim Grosbach wrote:

> Author: grosbach
> Date: Wed Jan 20 18:43:30 2010
> New Revision: 94055
>
> URL: http://llvm.org/viewvc/llvm-project?rev=94055&view=rev
> Log:
> Make sure that landing pad entries in the EH call site table are in  
> the proper
> order for SjLj style exception handling.

hi Jim,

> +++ llvm/trunk/include/llvm/Function.h Wed Jan 20 18:43:30 2010
> @@ -24,6 +24,7 @@
> #include "llvm/Argument.h"
> #include "llvm/Attributes.h"
> #include "llvm/Support/Compiler.h"
> +#include "llvm/ADT/DenseMap.h"
>
> namespace llvm {
>
> @@ -86,6 +87,8 @@
>   mutable ArgumentListType ArgumentList;  ///< The formal arguments
>   ValueSymbolTable *SymTab;               ///< Symbol table of args/ 
> instructions
>   AttrListPtr AttributeList;              ///< Parameter attributes
> +  DenseMap<Instruction*, unsigned>
> +    CallSiteNumbering;                    ///< SjLj EH call site  
> numbering

Why are you adding this to llvm::Function?  SjLj EH should not impact  
anything that core to the entire compiler.  Maybe codegen should have  
a DenseMap<Instruction*, unsigned> ?

-Chris

>
>   // HasLazyArguments is stored in Value::SubclassData.
>   /*bool HasLazyArguments;*/
> @@ -165,7 +168,19 @@
>     setValueSubclassData((getSubclassDataFromValue() & 1) |
>                          (static_cast<unsigned>(CC) << 1));
>   }
> -
> +
> +  /// setCallSiteNumber - Set the call site number mapping for an  
> invoke
> +  /// in the function
> +  void setCallSiteNumber(Instruction *II, unsigned Num) {
> +    CallSiteNumbering[II] = Num;
> +  }
> +
> +  /// getCallSiteNumber - Get the call site number for an invoke  
> instruction
> +  unsigned getCallSiteNumber(Instruction *II) {
> +    if (CallSiteNumbering.count(II) == 0) return 0;
> +    return CallSiteNumbering[II];
> +  }
> +
>   /// getAttributes - Return the attribute list for this Function.
>   ///
>   const AttrListPtr &getAttributes() const { return AttributeList; }
>
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfException.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfException.cpp?rev=94055&r1=94054&r2=94055&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfException.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfException.cpp Wed Jan 20  
> 18:43:30 2010
> @@ -590,7 +590,16 @@
>         }
>
>         // Otherwise, create a new call-site.
> -        CallSites.push_back(Site);
> +        if (MAI->getExceptionHandlingType() ==  
> ExceptionHandling::Dwarf)
> +          CallSites.push_back(Site);
> +        else {
> +          // SjLj EH must maintain the call sites in the order  
> assigned
> +          // to them by the SjLjPrepare pass.
> +          unsigned SiteNo = MMI->getCallSiteBeginLabel(BeginLabel);
> +          if (CallSites.size() < SiteNo)
> +            CallSites.resize(SiteNo);
> +          CallSites[SiteNo - 1] = Site;
> +        }
>         PreviousIsInvoke = true;
>       } else {
>         // Create a gap.
>
> Modified: llvm/trunk/lib/CodeGen/MachineModuleInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineModuleInfo.cpp?rev=94055&r1=94054&r2=94055&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/lib/CodeGen/MachineModuleInfo.cpp (original)
> +++ llvm/trunk/lib/CodeGen/MachineModuleInfo.cpp Wed Jan 20 18:43:30  
> 2010
> @@ -71,6 +71,7 @@
>
>   // Clean up exception info.
>   LandingPads.clear();
> +  CallSiteMap.clear();
>   TypeInfos.clear();
>   FilterIds.clear();
>   FilterEnds.clear();
>
> Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp?rev=94055&r1=94054&r2=94055&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp  
> (original)
> +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp Wed  
> Jan 20 18:43:30 2010
> @@ -5049,6 +5049,12 @@
>     // used to detect deletion of the invoke via the  
> MachineModuleInfo.
>     BeginLabel = MMI->NextLabelID();
>
> +    // Keep track of which landing pads go with which invokes. SjLj  
> uses
> +    // this to maintain the ordering of pads in the LSDA. Dwarf  
> ignores it.
> +    Function *F = LandingPad->getParent()->getFunction();
> +    MMI->setCallSiteBeginLabel(BeginLabel,
> +                               F- 
> >getCallSiteNumber(CS.getInstruction()));
> +
>     // Both PendingLoads and PendingExports must be flushed here;
>     // this call might not return.
>     (void)getRoot();
>
> Modified: llvm/trunk/lib/CodeGen/SjLjEHPrepare.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SjLjEHPrepare.cpp?rev=94055&r1=94054&r2=94055&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/lib/CodeGen/SjLjEHPrepare.cpp (original)
> +++ llvm/trunk/lib/CodeGen/SjLjEHPrepare.cpp Wed Jan 20 18:43:30 2010
> @@ -474,8 +474,10 @@
>     // At this point, we are all set up, update the invoke  
> instructions
>     // to mark their call_site values, and fill in the dispatch switch
>     // accordingly.
> -    for (unsigned i = 0, e = Invokes.size(); i != e; ++i)
> +    for (unsigned i = 0, e = Invokes.size(); i != e; ++i) {
> +      F.setCallSiteNumber(Invokes[i], i+1);
>       markInvokeCallSite(Invokes[i], i+1, CallSite, DispatchSwitch);
> +    }
>
>     // The front end has likely added calls to _Unwind_Resume. We need
>     // to find those calls and mark the call_site as -1 immediately  
> prior.
>
>
> _______________________________________________
> 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