[llvm-commits] [llvm] r62045 - /llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Thu Jan 15 14:01:20 PST 2009


Hi Chris,

Chris Lattner wrote:
> On Jan 14, 2009, at 8:01 AM, Nicolas Geoffray wrote:
>   
>> Hi Chris,
>>
>> Quick question folllowing this patch. Getting the size of a type is
>> platform dependent, and since InstCombine makes lots of uses of
>> getTypeSize, InstCombine is therefore platform dependent. Is this  
>> OK? I
>> know this patch did not introduce the platform-dependency, but I was
>> just curious if that's OK, and if LLVM considers transformation passes
>> strongly platform dependent.
>>     
>
> Hi Nicolas,
>
> In the current state of LLVM, this is definitely the right thing to do.
>
>   

OK.

> However, I don't think that the current state is really what we want.

Agree.

>    
> target data info is *optional* in a module.  It is always specified by  
> (e.g.) llvm-gcc, but I don't think that target-independent languages  
> like Java should have to specify it. 

Agree.

> In my ideal world, not  
> specifying a target data string would transparently turn off the  
> subset of optimizations that depend on target data info only (not all  
> instcombines).
>
> Pragmatically speaking, the way I would like to (someday) implement  
> this is to change "opt" (and friends) to only add TargetData to the  
> passmanager if the module's targetdata string is non-empty.  Doing  
> this today would break all passes that addRequired<TargetData>().   
> This means that before we can do this, we have to change these passes  
> (like instcombine) to not have a hard requirement on targetdata.
>
> IMO, mid-level optimizations that we want to run from "opt" or "llvm- 
> ld" should never call addRequired<TargetData>/ 
> getAnalysis<TargetData>.  Instead, they should call  
> getAnalysisToUpdate<TargetData>().  This method returns a pointer if  
> TargetData is around, or returns null if not.  That would mean that  
> passes (like instcombine) that want to use targetdata would (for  
> xforms that need it) check to see if the pointer is non-null, then try  
> to do the xform in question.
>
> Does this seem reasonable?
>   

Yes it does. VMKit outputs a portable .bc from Java or C#, and it's 
unfortunate opt is changing it to a non-portable .bc file.

Nicolas



More information about the llvm-commits mailing list