[llvm-commits] [llvm] r55865 - in /llvm/trunk: include/llvm/Analysis/CallGraph.h lib/Analysis/IPA/CallGraph.cpp lib/CodeGen/SelectionDAG/FastISel.cpp lib/Transforms/IPO/PruneEH.cpp lib/Transforms/Utils/InlineFunction.cpp

Owen Anderson resistor at mac.com
Fri Sep 5 16:46:39 PDT 2008


Erm, not the build, but several tests in MultiSource.

--Owen

On Sep 5, 2008, at 4:36 PM, Owen Anderson wrote:

> Author: resistor
> Date: Fri Sep  5 18:36:01 2008
> New Revision: 55865
>
> URL: http://llvm.org/viewvc/llvm-project?rev=55865&view=rev
> Log:
> Revert r55859.  This is breaking the build in the abscence of its  
> companion commit.
>
> Modified:
>    llvm/trunk/include/llvm/Analysis/CallGraph.h
>    llvm/trunk/lib/Analysis/IPA/CallGraph.cpp
>    llvm/trunk/lib/CodeGen/SelectionDAG/FastISel.cpp
>    llvm/trunk/lib/Transforms/IPO/PruneEH.cpp
>    llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp
>
> Modified: llvm/trunk/include/llvm/Analysis/CallGraph.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/CallGraph.h?rev=55865&r1=55864&r2=55865&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/include/llvm/Analysis/CallGraph.h (original)
> +++ llvm/trunk/include/llvm/Analysis/CallGraph.h Fri Sep  5 18:36:01  
> 2008
> @@ -214,12 +214,17 @@
>     CalledFunctions.clear();
>   }
>
> -  /// addCalledFunction - Add a function to the list of functions  
> called by this
> +  /// addCalledFunction add a function to the list of functions  
> called by this
>   /// one.
>   void addCalledFunction(CallSite CS, CallGraphNode *M) {
>     CalledFunctions.push_back(std::make_pair(CS, M));
>   }
>
> +  /// removeCallEdgeTo - This method removes a *single* edge to the  
> specified
> +  /// callee function.  Note that this method takes linear time, so  
> it should be
> +  /// used sparingly.
> +  void removeCallEdgeTo(CallGraphNode *Callee);
> +
>   /// removeCallEdgeFor - This method removes the edge in the node  
> for the
>   /// specified call site.  Note that this method takes linear time,  
> so it
>   /// should be used sparingly.
>
> Modified: llvm/trunk/lib/Analysis/IPA/CallGraph.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/IPA/CallGraph.cpp?rev=55865&r1=55864&r2=55865&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/lib/Analysis/IPA/CallGraph.cpp (original)
> +++ llvm/trunk/lib/Analysis/IPA/CallGraph.cpp Fri Sep  5 18:36:01 2008
> @@ -282,6 +282,16 @@
>
> void CallGraphNode::dump() const { print(cerr); }
>
> +void CallGraphNode::removeCallEdgeTo(CallGraphNode *Callee) {
> +  for (unsigned i = CalledFunctions.size(); ; --i) {
> +    assert(i && "Cannot find callee to remove!");
> +    if (CalledFunctions[i-1].second == Callee) {
> +      CalledFunctions.erase(CalledFunctions.begin()+i-1);
> +      return;
> +    }
> +  }
> +}
> +
> /// removeCallEdgeFor - This method removes the edge in the node for  
> the
> /// specified call site.  Note that this method takes linear time,  
> so it
> /// should be used sparingly.
>
> Modified: llvm/trunk/lib/CodeGen/SelectionDAG/FastISel.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/FastISel.cpp?rev=55865&r1=55864&r2=55865&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/lib/CodeGen/SelectionDAG/FastISel.cpp (original)
> +++ llvm/trunk/lib/CodeGen/SelectionDAG/FastISel.cpp Fri Sep  5  
> 18:36:01 2008
> @@ -35,7 +35,8 @@
>   MVT::SimpleValueType VT = TLI.getValueType(V- 
> >getType()).getSimpleVT();
>   if (ConstantInt *CI = dyn_cast<ConstantInt>(V)) {
>     if (CI->getValue().getActiveBits() > 64)
> -      return 0;
> +      return TargetMaterializeConstant(CI,
> +                                       MBB->getParent()- 
> >getConstantPool());
>     // Don't cache constant materializations.  To do so would require
>     // tracking what uses they dominate.
>     Reg = FastEmit_i(VT, VT, ISD::Constant, CI->getZExtValue());
> @@ -52,16 +53,19 @@
>       uint32_t IntBitWidth = IntVT.getSizeInBits();
>       if (Flt.convertToInteger(x, IntBitWidth, /*isSigned=*/true,
>                                APFloat::rmTowardZero) !=  
> APFloat::opOK)
> -        return 0;
> +        return TargetMaterializeConstant(CF,
> +                                         MBB->getParent()- 
> >getConstantPool());
>       APInt IntVal(IntBitWidth, 2, x);
>
>       unsigned IntegerReg = FastEmit_i(IntVT.getSimpleVT(),  
> IntVT.getSimpleVT(),
>                                        ISD::Constant,  
> IntVal.getZExtValue());
>       if (IntegerReg == 0)
> -        return 0;
> +        return TargetMaterializeConstant(CF,
> +                                         MBB->getParent()- 
> >getConstantPool());
>       Reg = FastEmit_r(IntVT.getSimpleVT(), VT, ISD::SINT_TO_FP,  
> IntegerReg);
>       if (Reg == 0)
> -        return 0;
> +        return TargetMaterializeConstant(CF,
> +                                         MBB->getParent()- 
> >getConstantPool());;
>     }
>   } else if (ConstantExpr *CE = dyn_cast<ConstantExpr>(V)) {
>     if (!SelectOperator(CE, CE->getOpcode())) return 0;
> @@ -73,6 +77,10 @@
>     return 0;
>   }
>
> +  if (!Reg && isa<Constant>(V))
> +    return TargetMaterializeConstant(cast<Constant>(V),
> +                                     MBB->getParent()- 
> >getConstantPool());
> +
>   LocalValueMap[V] = Reg;
>   return Reg;
> }
>
> Modified: llvm/trunk/lib/Transforms/IPO/PruneEH.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/PruneEH.cpp?rev=55865&r1=55864&r2=55865&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/lib/Transforms/IPO/PruneEH.cpp (original)
> +++ llvm/trunk/lib/Transforms/IPO/PruneEH.cpp Fri Sep  5 18:36:01 2008
> @@ -222,10 +222,13 @@
>   CallGraphNode *CGN = CG[BB->getParent()];
>   for (BasicBlock::iterator I = BB->end(), E = BB->begin(); I !=  
> E; ) {
>     --I;
> -    if (CallInst *CI = dyn_cast<CallInst>(I))
> -      CGN->removeCallEdgeFor(CI);
> -    else if (InvokeInst *II = dyn_cast<InvokeInst>(I))
> -      CGN->removeCallEdgeFor(II);
> +    if (CallInst *CI = dyn_cast<CallInst>(I)) {
> +      if (Function *Callee = CI->getCalledFunction())
> +        CGN->removeCallEdgeTo(CG[Callee]);
> +    } else if (InvokeInst *II = dyn_cast<InvokeInst>(I)) {
> +      if (Function *Callee = II->getCalledFunction())
> +        CGN->removeCallEdgeTo(CG[Callee]);
> +    }
>     if (!I->use_empty())
>       I->replaceAllUsesWith(UndefValue::get(I->getType()));
>   }
>
> Modified: llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp?rev=55865&r1=55864&r2=55865&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp (original)
> +++ llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp Fri Sep  5  
> 18:36:01 2008
> @@ -143,18 +143,16 @@
> /// UpdateCallGraphAfterInlining - Once we have cloned code over  
> from a callee
> /// into the caller, update the specified callgraph to reflect the  
> changes we
> /// made.  Note that it's possible that not all code was copied  
> over, so only
> -/// some edges of the callgraph may remain.
> -static void UpdateCallGraphAfterInlining(CallSite CS,
> +/// some edges of the callgraph will be remain.
> +static void UpdateCallGraphAfterInlining(const Function *Caller,
> +                                         const Function *Callee,
>                                          Function::iterator  
> FirstNewBlock,
>                                        DenseMap<const Value*,  
> Value*> &ValueMap,
>                                          CallGraph &CG) {
> -  const Function *Caller = CS.getInstruction()->getParent()- 
> >getParent();
> -  const Function *Callee = CS.getCalledFunction();
> -
>   // Update the call graph by deleting the edge from Callee to Caller
>   CallGraphNode *CalleeNode = CG[Callee];
>   CallGraphNode *CallerNode = CG[Caller];
> -  CallerNode->removeCallEdgeFor(CS);
> +  CallerNode->removeCallEdgeTo(CalleeNode);
>
>   // Since we inlined some uninlined call sites in the callee into  
> the caller,
>   // add edges from the caller to all of the callees of the callee.
> @@ -304,7 +302,8 @@
>
>     // Update the callgraph if requested.
>     if (CG)
> -      UpdateCallGraphAfterInlining(CS, FirstNewBlock, ValueMap, *CG);
> +      UpdateCallGraphAfterInlining(Caller, CalledFunc,  
> FirstNewBlock, ValueMap,
> +                                   *CG);
>   }
>
>   // If there are any alloca instructions in the block that used to  
> be the entry
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 2624 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20080905/4fec7b8c/attachment.bin>


More information about the llvm-commits mailing list