I have used the follwing command, opt -load LLVComMan.so -ComMan -memdep -tbaa -mem2reg maptest.ll -S What option other than -mem2reg should be included in this case to get the right results? Does the order in which I specify the optimizations to be run make a difference? Duncan Sands wrote:> > Hi Adarsh, > >> I want to check if the values a and b in the program alias. >> >> int main() { >> int *a,*b; >> a=(int *)malloc(sizeof(int)); >> b=(int *)malloc(sizeof(int)); >> *a=10; >> *b=8; >> return 0; >> } >> >> I use the below code for this (getAnalysisUsage method has been defined) >> >> AliasAnalysis::Location loc1=AliasAnalysis::Location(k1); //a >> AliasAnalysis::Location loc2=AliasAnalysis::Location(k2); //b >> AliasAnalysis::AliasResult ar=AA.alias(loc1,loc2); >> >> But I get ar=1 i.e May Alias result. Where am I going wrong? > > did you run a basic set of optimizers first? Alias analysis assumes that > at least mem2reg has been run. Otherwise it returns conservatively > correct > but useless answers for everything. > > > I have included >> -basicaa option in the opt command for running this. > > Ciao, Duncan. > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > >-- View this message in context: http://old.nabble.com/Incorrect-result-in-LLVM-Alias-Analysis-tp33642041p33668704.html Sent from the LLVM - Dev mailing list archive at Nabble.com.
Hi Adarsh,> I have used the follwing command, > opt -load LLVComMan.so -ComMan -memdep -tbaa -mem2reg maptest.ll -S > What option other than -mem2reg should be included in this case to get the > right results? Does the order in which I specify the optimizations to be run > make a difference?what is in maptest.ll? Ciao, Duncan.
It contains the bitcode file(without any optimization) of the below program, void map(int *a) { *a=20; } int main(){ int *a=(int *)malloc(sizeof(int)); *a=15; map(a); return 0; } I want to check if the pointer operand of each store instruction aliases with the function's arguments. I have used below code for this, virtual void getAnalysisUsage(AnalysisUsage &AU) const { AU.addRequiredTransitive<AliasAnalysis>(); AU.addPreserved<AliasAnalysis>(); } virtual bool runOnFunction(Function &F) { AliasAnalysis &AA = getAnalysis<AliasAnalysis>(); for(Function::iterator i=F.begin();i!=F.end();++i){ for(BasicBlock::iterator j=i->begin();j!=i->end();++j) { if(dyn_cast<StoreInst>(j)) { StoreInst *SI=dyn_cast<StoreInst>(j); AliasAnalysis::Location LocA = AA.getLocation(SI); for(Function::arg_iterator k=F.arg_begin(); k!=F.arg_end();++k) { Value *v=dyn_cast<Value>(k); AliasAnalysis::Location loc=AliasAnalysis::Location(v); AliasAnalysis::AliasResult ar=AA.alias(LocA,loc); } } } } But I get 'May Alias' result for the store instruction that assigns the value of 'a' to 20 in the 'map' function.Is the result not supposed to be 'Must alias'? Duncan Sands wrote:> > Hi Adarsh, > >> I have used the follwing command, >> opt -load LLVComMan.so -ComMan -memdep -tbaa -mem2reg maptest.ll -S >> What option other than -mem2reg should be included in this case to get >> the >> right results? Does the order in which I specify the optimizations to be >> run >> make a difference? > > what is in maptest.ll? > > Ciao, Duncan. > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > >-- View this message in context: http://old.nabble.com/Incorrect-result-in-LLVM-Alias-Analysis-tp33642041p33682791.html Sent from the LLVM - Dev mailing list archive at Nabble.com.
Hi Adarsh,>> I have used the follwing command, >> opt -load LLVComMan.so -ComMan -memdep -tbaa -mem2reg maptest.ll -S >> What option other than -mem2reg should be included in this case to get the >> right results? Does the order in which I specify the optimizations to be run >> make a difference?you should be using -basicaa not -tbaa. TBAA won't do anything here because you don't have any tbaa metadata. Also, specifying tbaa won't automagically cause basicaa to be used too: if you want them both (and to chain to each other) then you need to specify both of them AFAIK. Notice "must alias" in what follows. $ opt -basicaa -mem2reg adarsh.ll -disable-output -aa-eval ===== Alias Analysis Evaluator Report ==== 1 Total Alias Queries Performed 0 no alias responses (0.0%) 0 may alias responses (0.0%) 0 partial alias responses (0.0%) 1 must alias responses (100.0%) Alias Analysis Evaluator Pointer Alias Summary: 0%/0%/0%/100% 6 Total ModRef Queries Performed 0 no mod/ref responses (0.0%) 0 mod responses (0.0%) 0 ref responses (0.0%) 6 mod & ref responses (100.0%) Alias Analysis Evaluator Mod/Ref Summary: 0%/0%/0%/100% Ciao, Duncan.