[LLVMdev] Incorrect result in LLVM Alias Analysis
Adarsh HV
adarsh.hv99 at gmail.com
Sat Apr 14 03:26:40 PDT 2012
Here's the bitcode of maptest.ll.
; ModuleID = 'maptest.c'
target datalayout =
"e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32-n8:16:32"
target triple = "i386-pc-linux-gnu"
define void @map(i32* %a) nounwind {
%1 = alloca i32*, align 4
store i32* %a, i32** %1, align 4
%2 = load i32** %1, align 4
store i32 20, i32* %2
ret void
}
define i32 @main() nounwind {
%1 = alloca i32, align 4
%a = alloca i32*, align 4
store i32 0, i32* %1
%2 = call i8* @malloc(i32 4)
%3 = bitcast i8* %2 to i32*
store i32* %3, i32** %a, align 4
%4 = load i32** %a, align 4
store i32 15, i32* %4
%5 = load i32** %a, align 4
call void @map(i32* %5)
ret i32 0
}
declare noalias i8* @malloc(i32) nounwind
Regards,
Adarsh H.V.
Adarsh HV wrote:
>
> 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-tp33642041p33686354.html
Sent from the LLVM - Dev mailing list archive at Nabble.com.
More information about the llvm-dev
mailing list