[LLVMdev] Problem with MemoryDependenceAnalysis

John Criswell criswell at uiuc.edu
Tue Mar 24 07:58:23 PDT 2009


Amr Yehia wrote:
> no .. i am calling a function pass from a module pass, adding other 
> function passes to my module pass works, but when i try to add 
> MemoryDependenceAnalysis it gives error
>   
I'm going to assume that you're running your passes via a specially 
built tool and not as a set of passes loaded into the opt program.  If 
this assumption is wrong, please let me know.

Looking at the assertion, you're creating a TargetData pass without 
passing in either a string describing the target or an LLVM Module * 
from which TargetData can look up the relevant architecture information.

For example, in the hand-written SAFECode tool, the following code 
should cause the same error:

PassManager Passes;
Passes.add (new TargetData());
...
Passes.run (*M.get());

However, the following will fix the problem:

PassManager Passes;
std::auto_ptr<Module> M;
.... <code that reads an LLVM Module into M from a bitcode file>...
Passes.add (new TargetData (M.get()));
...
Passes.run (*M.get());

The comments for the constructors in 
llvm/include/llvm/Target/TargetData.h will help clarify this.

-- John T.

> I want to report a bug but i don't know if this is a real bug or i am 
> doing something wrong, knowing that i am adding other function passe to 
> my module pass and it works fine.
>
> the error i get:
>
> adding callgraph pass ... done
> opt: /net/home/yehia/llvm/llvm-2.4/include/llvm/Target/TargetData.h:114: 
> llvm::TargetData::TargetData(): Assertion `0 && "ERROR: Bad TargetData 
> ctor used.  " "Tool did not specify a TargetData to use?"' failed.
> adding DependenceFlowGraph_FunctionAnalaysis_Pass ... doneopt[0x75627f]
> /lib64/libc.so.6[0x3880a30070]
> /lib64/libc.so.6(gsignal+0x35)[0x3880a30015]
> /lib64/libc.so.6(abort+0x110)[0x3880a31980]
> /lib64/libc.so.6(__assert_fail+0xf6)[0x3880a29726]
> opt[0x6709bd]
> opt(_ZN4llvm17PMTopLevelManager12schedulePassEPNS_4PassE+0x125)[0x6efa75]
> opt(_ZN4llvm17PMTopLevelManager12schedulePassEPNS_4PassE+0x190)[0x6efae0]
> opt(_ZN4llvm13MPPassManager25addLowerLevelRequiredPassEPNS_4PassES2_+0xcc)[0x6f1dfc]
> opt(_ZN4llvm13PMDataManager3addEPNS_4PassEb+0x2a7)[0x6f4237]
> opt(main+0x348)[0x485ac8]
> /lib64/libc.so.6(__libc_start_main+0xf4)[0x3880a1d8a4]
> opt(sinh+0x39)[0x47b1f9]
>
>
>
> Devang Patel wrote:
>   
>> On Mar 20, 2009, at 11:19 AM, Amr Yehia wrote:
>>
>>   
>>     
>>>> I am loading the CallGraph pass before it from my module
>>>>       
>>>>         
>> Aha, so you're actually invoking function pass from a CG pass. See if  
>> my suggestion from
>> 	http://lists.cs.uiuc.edu/pipermail/llvmdev/2009-February/020109.html
>> helps.
>>
>> -
>> Devang
>>
>>   
>> _______________________________________________
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>   
>>     
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>   




More information about the llvm-dev mailing list