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 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 >
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 >
actually i only created a new Module pass and tried to getAnalysis of
MemoryDependenceAnalysis from it, i didn't use TargetData directly
to regenerate the error i am attaching a c file containing an example
code to regenerate the error. with its Makefile
the command line i used is:
opt -time-passes -analyze -load
${LLVM_PATH}/Release/lib/.libs/libMYMODULEPASS.so -MyModulePass < test.bc
i tried the same but from a function pass and it worked.
John Criswell wrote:> 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
>>
>>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: Makefile
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20090324/a3465cdb/attachment.ksh>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: regenerateMDAError.cpp
Type: text/x-c++src
Size: 604 bytes
Desc: not available
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20090324/a3465cdb/attachment.cpp>