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>