[LLVMdev] Circular dependencies

Reid Spencer reid at x10sys.com
Wed Mar 22 08:22:59 PST 2006


Okay, its not that simple. 

Several files in Transforms/Utils depend on things in lib/Analysis. A
quick grep shows: 

BreakCriticalEdges.cpp:#include "llvm/Analysis/Dominators.h"
BreakCriticalEdges.cpp:#include "llvm/Analysis/LoopInfo.h"
CloneTrace.cpp:#include "llvm/Analysis/Trace.h"
CodeExtractor.cpp:#include "llvm/Analysis/Dominators.h"
CodeExtractor.cpp:#include "llvm/Analysis/LoopInfo.h"
CodeExtractor.cpp:#include "llvm/Analysis/Verifier.h"
InlineFunction.cpp:#include "llvm/Analysis/CallGraph.h"
Local.cpp:#include "llvm/Analysis/ConstantFolding.h"
PromoteMemoryToRegister.cpp:#include "llvm/Analysis/Dominators.h"
PromoteMemoryToRegister.cpp:#include "llvm/Analysis/AliasSetTracker.h"

Am I right in assuming that the goal here is to get libTransformUtils to
depend on nothing in libTransforms or libAnalysis? If so, its going to
take some significant code rearrangement.

Perhaps a lib/Analysis/Utils is in order?

Please advise.

Reid.

On Wed, 2006-03-22 at 08:13 -0800, Reid Spencer wrote:
> Okay, the problem with this cycle is LoopSimplify. It is using
> AliasAnalysis which is where that _ZN4llvm11BasicAAStubEv symbol is
> coming from.  It seems to me that LoopSimplify.cpp is in the wrong
> place.  This file defines the LoopSimplify FunctionPass which doesn't
> seem to me to be a "transform util". I thought the purpose of
> "Transforms/Util" was to provide utilities that are common amongst
> transforms. But, LoopSimplyf *is* a transform. So, I think the solution
> is to move LoopSimplify.cpp out of Transforms/Utils to somewhere else,
> say just "Transforms. By doing this, we probably eliminate the cycle.
> I'm going to validate that shortly.
> 
> Reid.
> 
> On Wed, 2006-03-22 at 09:26 -0500, Eric Kidd wrote:
> > On Mar 21, 2006, at 11:23 PM, Chris Lattner wrote:
> > >>>    LLVMCodeGen.o LLVMSelectionDAG.o libLLVMAnalysis.a  
> > >>> libLLVMTarget.a
> > >>>    libLLVMTransformUtils.a libLLVMipa.a
> > >
> > > CodeGen should depend on Target, but not the other way around.
> > > LLVMIPA should depend on LLVMAnalysis, but certainly nothing in the  
> > > list should depend on LLVMIPA.  If you knew what was pulling in IPA  
> > > that would probably be an easy tie to sever.
> > >
> > > Ideally, none of the above should depend on libLLVMTransformUtils.
> > 
> > Yeah, I'm definitely having headaches with LLVMTransformUtils, which  
> > needs to appear before  LLVMAnalysis and lLLVMTarget.
> > 
> >    -lLLVMTransformUtils -lLLVMAnalysis -lLLVMTarget
> > 
> > If I don't do this, I get link errors on:
> > 
> >    __ZN4llvm11BasicAAStubEv
> > 
> > I think, for now, the only portable workaround is for me to link all  
> > the *.a libraries in that loop twice, and hope we can clean up the  
> > dependencies later.
> > 
> > There's several places where llvm-config could be simplified quite a  
> > bit if we broke the unnecessary dependencies and merged the remaining  
> > loops into single *.a files. In some sense, parts of llvm-config are  
> > re-inventing the system linker. Depending on your point of view, this  
> > might be a bad thing. :-)
> > 
> > Many thanks to everyone who's helped sort this out!
> > 
> > Cheers,
> > Eric
> > 
> > _______________________________________________
> > LLVM Developers mailing list
> > LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20060322/e9d08889/attachment.sig>


More information about the llvm-dev mailing list