<div dir="ltr"><div>Hi Johannes,</div><div><br></div><div>Sorry for the typo. I meant 'Silly me'.</div><div><br></div><div>BR,</div><div>Terry</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Jul 24, 2020 at 12:15 AM Terry Guo <<a href="mailto:flameroc@gmail.com">flameroc@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">  Hi Johannes,<div><br></div><div>Silly as me. I just figured out how to correctly use 'alias' metadata. I should define them in IR like below:</div><div><br></div><div>!3 = !{!3}<br>!4 = !{!4}<br><br>!5 = !{!5, !3}<br>!6 = !{!6, !4}<br></div><div><br></div><div>And then use !5 and !6.  The below usage is wrong:</div><div><br></div><div>!3 = !{!3}<br>!4 = !{!4}<br>Then use !3 and !4 in IR.</div><div><br></div><div>BR,</div><div>Terry</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Jul 24, 2020 at 12:12 AM Johannes Doerfert <<a href="mailto:johannesdoerfert@gmail.com" target="_blank">johannesdoerfert@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">`noalias` metadata is more complex than this:<br>
<br>
<a href="https://llvm.org/docs/LangRef.html#noalias-and-alias-scope-metadata" rel="noreferrer" target="_blank">https://llvm.org/docs/LangRef.html#noalias-and-alias-scope-metadata</a><br>
<br>
I doubt the below was accepted by the AliasAnalysis as valid annotations <br>
and consequently ignored.<br>
<br>
<br>
On 7/23/20 10:48 AM, Terry Guo wrote:<br>
> Hi Johannes,<br>
><br>
> Thanks for your help. I tried with something like below and nothing<br>
> changes. Maybe I am doing something wrong?<br>
><br>
> 246001 check_exce_succ59:                                ; preds =<br>
> %check_exce_succ40<br>
> **246002   %mem_base60 = load i8*, i8** %mem_base_addr_ptr, align 8,<br>
> !alias.scope !3<br>
> 246003   %offset161 = add i32 %call56, 4<br>
> 246004   %12 = sext i32 %offset161 to i64<br>
> 246005   %maddr62 = getelementptr inbounds i8, i8* %mem_base60, i64 %12<br>
> 246006   %data_ptr63 = bitcast i8* %maddr62 to i64*<br>
> **246007   store i64 0, i64* %data_ptr63, align 1, !noalias !3<br>
> **246008   %mem_base66 = load i8*, i8** %mem_base_addr_ptr, align 8,<br>
> !alias.scope !3<br>
> 246009   %offset167 = add i32 %call56, 12<br>
> 246010   %13 = sext i32 %offset167 to i64<br>
> ....<br>
> 382681 !3 = !{!3}<br>
> 382682 !4 = !{!4}<br>
><br>
> BR,<br>
> Terry<br>
><br>
> On Thu, Jul 23, 2020 at 11:43 PM Johannes Doerfert <<br>
> <a href="mailto:johannesdoerfert@gmail.com" target="_blank">johannesdoerfert@gmail.com</a>> wrote:<br>
><br>
>> Hi Terry,<br>
>><br>
>><br>
>> various LLVM passes that run with O3 would do this for you, assuming<br>
>> they could prove correctness.<br>
>><br>
>> FWIW, the address is the same, so it is (most likely) an aliasing<br>
>> problem. I assume<br>
>><br>
>>     store i64 0, i64* %data_ptr63, align 8<br>
>><br>
>> might clobber the loaded location so we do not reuse the first load. You<br>
>> use alias metadata in IR or<br>
>><br>
>> `noalias` (in IR) [= `restrict` (in C/C++)] attributes for arguments to<br>
>> help the alias analysis.<br>
>><br>
>><br>
>> Is this what you were looking for?<br>
>><br>
>><br>
>> ~ Johannes<br>
>><br>
>><br>
>> On 7/23/20 10:25 AM, Terry Guo via llvm-dev wrote:<br>
>>> Hi there,<br>
>>><br>
>>> The raw input IR is composed by my tool and the below one is produced by<br>
>>> llvm opt tool with O3 optimization level. I am pretty sure that the two<br>
>>> load instructions( %mem_base60  and  %mem_base66) are referring to the<br>
>> same<br>
>>> memory location. How can I instruct llvm optimization pass to optimize<br>
>> out<br>
>>> the  %mem_base66 and make the subsequent code reuse the  %mem_base60? I<br>
>>> tried with metadata 'alias.scope' and 'noalias' and it doesn't help.<br>
>> Thanks<br>
>>> for any advice.<br>
>>><br>
>>> 392542 check_exce_succ59:                                ; preds =<br>
>>> %check_exce_succ40<br>
>>> **392543   %mem_base60 = load i8*, i8** %mem_base_addr_ptr, align 8<br>
>>> 392544   %offset161 = add i32 %call56, 4<br>
>>> 392545   %11 = sext i32 %offset161 to i64<br>
>>> 392546   %maddr62 = getelementptr inbounds i8, i8* %mem_base60, i64 %11<br>
>>> 392547   %data_ptr63 = bitcast i8* %maddr62 to i64*<br>
>>> 392548   store i64 0, i64* %data_ptr63, align 8<br>
>>> **392549   %mem_base66 = load i8*, i8** %mem_base_addr_ptr, align 8<br>
>>> 392550   %offset167 = add i32 %call56, 12<br>
>>> 392551   %12 = sext i32 %offset167 to i64<br>
>>> 392552   %maddr68 = getelementptr inbounds i8, i8* %mem_base66, i64 %12<br>
>>> 392553   %data_ptr69 = bitcast i8* %maddr68 to i32*<br>
>>> 392554   store i32 %call, i32* %data_ptr69, align 8<br>
>>><br>
>>> BR,<br>
>>> Terry<br>
>>><br>
>>><br>
>>> _______________________________________________<br>
>>> LLVM Developers mailing list<br>
>>> <a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
>>> <a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div>
</blockquote></div></div>