<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.apple-converted-space
        {mso-style-name:apple-converted-space;}
span.E-MailFormatvorlage19
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="DE" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">Hi Matt, <o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US">thanks for your response. I agree that the IR should be generated with the correct AS in the first place. However, for my project this is somehow impossible. I need the same IR with
 everything in AS 0 for CPU execution and again with GPU specific address spaces to avoid performance impacts of the generic address space. Doing this in the front-end means a way more intrusive change to clang and a way I did not want to go in the first place.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US">I have the IR that goes into the pass manager attached to the mail.
<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US">The PM is set up as follows:
<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">  llvm::</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:#2B91AF">TargetOptions</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">
 options;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">  options.UnsafeFPMath =
</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:blue">false</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">  options.NoInfsFPMath =
</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:blue">false</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">  options.NoNaNsFPMath =
</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:blue">false</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">  options.HonorSignDependentRoundingFPMathOption =
</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:blue">false</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">  options.AllowFPOpFusion = FPOpFusion::</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:darkslategray">Fast</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black"> 
</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:#2B91AF">Triple</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black"> TheTriple =
</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:#2B91AF">Triple</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">(</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:gray">M</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">.getTargetTriple());<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">  std::</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:#2B91AF">string</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">
 Error;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black"> 
</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:#2B91AF">SmallString</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black"><128> hsaString;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">  llvm::</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:#2B91AF">raw_svector_ostream</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">
 hsaOS(hsaString);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black"> 
</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:blue">if</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black"> (!_target)<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">    _target =
</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:#2B91AF">TargetRegistry</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">::lookupTarget(</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:#A31515">"amdgcn"</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">,
 TheTriple, Error);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black"> 
</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:blue">if</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black"> (!_target) {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">   
</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:blue">throw</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black"> common::</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:#2B91AF">generic_exception</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">(Error);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">  }<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">  llvm::legacy::</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:#2B91AF">PassManager</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">
 PM;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black"> 
</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:#2B91AF">PassManagerBuilder</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black"> builder;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">  builder.OptLevel = 3;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">  builder.populateModulePassManager(PM);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">  _machine.reset(_target->createTargetMachine(<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">      TheTriple.getTriple(), _cpu, _features, options, Reloc::</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:#2B91AF">Model</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">::</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:darkslategray">Static</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">,<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">     
</span><span style="font-size:9.5pt;font-family:Consolas;color:black">CodeModel::</span><span style="font-size:9.5pt;font-family:Consolas;color:#2B91AF">Model</span><span style="font-size:9.5pt;font-family:Consolas;color:black">::</span><span style="font-size:9.5pt;font-family:Consolas;color:darkslategray">Medium</span><span style="font-size:9.5pt;font-family:Consolas;color:black">,
 CodeGenOpt::</span><span style="font-size:9.5pt;font-family:Consolas;color:darkslategray">Aggressive</span><span style="font-size:9.5pt;font-family:Consolas;color:black">));<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black"> 
</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:blue">if</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black"> (_machine</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:teal">-></span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">addPassesToEmitFile(PM,
 hsaOS,<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">                                   
</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:#2B91AF">TargetMachine</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">::</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:darkslategray">CGFT_ObjectFile</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">,
</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:blue">false</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">)) {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">   
</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:blue">throw</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black"> std::</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:#2B91AF">logic_error</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">(<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">       
</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:#A31515">"target does not support generation of this file type!\n"</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black">);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas;color:black"> 
</span><span style="font-size:9.5pt;font-family:Consolas;color:black">}<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">  PM.run(</span><span style="font-size:9.5pt;font-family:Consolas;color:gray">M</span><span style="font-size:9.5pt;font-family:Consolas;color:black">);</span><span lang="EN-US" style="mso-fareast-language:EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><a name="_MailEndCompose"><span lang="EN-US" style="mso-fareast-language:EN-US"><o:p> </o:p></span></a></p>
<p class="MsoNormal"><span style="mso-bookmark:_MailEndCompose"><span lang="EN-US" style="mso-fareast-language:EN-US">The IR from the original post was dumped after PM has finished its work because I could not figure out where the problem arises with just the
 IR before the PM starts working. Running opt with -O3 on the IR does not change much in the IR and on both versions of the IR I get the same output you did in your first response.
<o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="mso-bookmark:_MailEndCompose"><span lang="EN-US" style="mso-fareast-language:EN-US"><o:p> </o:p></span></span></p>
<p class="MsoNormal"><span style="mso-bookmark:_MailEndCompose"><span lang="EN-US" style="mso-fareast-language:EN-US"><o:p> </o:p></span></span></p>
<p class="MsoNormal"><span style="mso-bookmark:_MailEndCompose"><span lang="EN-US" style="mso-fareast-language:EN-US">DIVERGENT:  %6 = tail call i32 @llvm.amdgcn.workitem.id.x() #0<o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="mso-bookmark:_MailEndCompose"><span lang="EN-US" style="mso-fareast-language:EN-US">DIVERGENT:  %add.i.i.i.i.i = add nsw i32 %mul.i.i.i.i.i, %6<o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="mso-bookmark:_MailEndCompose"><span lang="EN-US" style="mso-fareast-language:EN-US">DIVERGENT:  %idxprom.i.i.i = sext i32 %add.i.i.i.i.i to i64<o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="mso-bookmark:_MailEndCompose"><span lang="EN-US" style="mso-fareast-language:EN-US">DIVERGENT:  %8 = getelementptr i32, i32 addrspace(1)* %callable.coerce0, i64 %idxprom.i.i.i<o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="mso-bookmark:_MailEndCompose"><span lang="EN-US" style="mso-fareast-language:EN-US">DIVERGENT:  %9 = load i32, i32 addrspace(1)* %8, align 4<o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="mso-bookmark:_MailEndCompose"><span lang="EN-US" style="mso-fareast-language:EN-US">DIVERGENT:  %10 = getelementptr [16 x i32], [16 x i32] addrspace(3)* @"_ZN5pacxx2v213genericKernelIZL12test_barrieriPPcE3$_0EEvT__sm0", i32
 0, i32 %6<o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="mso-bookmark:_MailEndCompose"><span lang="EN-US" style="mso-fareast-language:EN-US">DIVERGENT:  store i32 %9, i32 addrspace(3)* %10, align 4<o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="mso-bookmark:_MailEndCompose"><span lang="EN-US" style="mso-fareast-language:EN-US">DIVERGENT:  %11 = load i32, i32 addrspace(3)* %10, align 4<o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="mso-bookmark:_MailEndCompose"><span lang="EN-US" style="mso-fareast-language:EN-US">DIVERGENT:  %12 = getelementptr i32, i32 addrspace(1)* %callable.coerce1, i64 %idxprom.i.i.i<o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="mso-bookmark:_MailEndCompose"><span lang="EN-US" style="mso-fareast-language:EN-US">DIVERGENT:  store i32 %11, i32 addrspace(1)* %12, align 4<o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="mso-bookmark:_MailEndCompose"><span lang="EN-US" style="mso-fareast-language:EN-US"><o:p> </o:p></span></span></p>
<p class="MsoNormal"><span style="mso-bookmark:_MailEndCompose"><span lang="EN-US" style="mso-fareast-language:EN-US">I cannot see where these uniform access comes into play.
<o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="mso-bookmark:_MailEndCompose"><span lang="EN-US" style="mso-fareast-language:EN-US"><o:p> </o:p></span></span></p>
<p class="MsoNormal"><span style="mso-bookmark:_MailEndCompose"><span lang="EN-US" style="mso-fareast-language:EN-US">Cheers,
<o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="mso-bookmark:_MailEndCompose"><span lang="EN-US" style="mso-fareast-language:EN-US">Michael<o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="mso-bookmark:_MailEndCompose"><span lang="EN-US" style="mso-fareast-language:EN-US"><o:p> </o:p></span></span></p>
<p class="MsoNormal"><span style="mso-bookmark:_MailEndCompose"><span lang="EN-US" style="mso-fareast-language:EN-US"><o:p> </o:p></span></span></p>
<span style="mso-bookmark:_MailEndCompose"></span>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b>Von:</b> Matt Arsenault [mailto:whatmannerofburgeristhis@gmail.com]
<b>Im Auftrag von </b>Matt Arsenault<br>
<b>Gesendet:</b> Mittwoch, 6. Dezember 2017 19:45<br>
<b>An:</b> Haidl, Michael <michael.haidl@uni-muenster.de><br>
<b>Cc:</b> tstellar@redhat.com; llvm-dev@lists.llvm.org<br>
<b>Betreff:</b> Re: [llvm-dev] [AMDGPU] Strange results with different address spaces<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal"><br>
<br>
<o:p></o:p></p>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p class="MsoNormal">On Dec 6, 2017, at 02:28, Haidl, Michael <<a href="mailto:michael.haidl@uni-muenster.de">michael.haidl@uni-muenster.de</a>> wrote:<o:p></o:p></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal"> The IR goes through a backend agnostic preparation phase that brings it into SSA from and changes the AS from 0 to 1.<o:p></o:p></p>
</div>
</div>
</blockquote>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">This sounds possibly problematic to me. The IR should be created with the correct address space to begin with. Changing this in the middle sounds suspect.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal"><span lang="EN-US">After this phase the IR goes through another pass manager that performs O3 passes and the AMDGPU target passes for object file generation. I looked into the AMDGPU backend and the only place where this metadata is added
 is in A</span><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas">MDGPUAnnotateUniformValues.cpp. The pass queries dependency analysis for the load and checks if it is reported as uniform. Afterwards the metadata is added to the GEP.<span class="apple-converted-space"> </span></span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas">Removing the O3 passes before code generation solves the problem so does separating the O3 passes and the backend passes into separate pass managers. I assume dependency analysis
 does not run in the second pass manager because no metadata is generated at all.</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas">Could this be a bug in DA reporting the load falsely as uniform by not taking the intrinsics into account?</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas">Cheers,</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.5pt;font-family:Consolas">Michael</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US"> </span><o:p></o:p></p>
</div>
</div>
</blockquote>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">The intrinsics certainly are correctly treated as divergent. Nothing would work otherwise. If I run the annotate pass or analysis on the examples it does the right thing and sees the load as divergent.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<div>
<p class="MsoNormal">$ opt -S -analyze -divergence -o - as1.ll<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Printing analysis 'Divergence Analysis' for function '_ZN5pacxx2v213genericKernelIZL12test_barrieriPPcE3$_0EEvT_':<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">DIVERGENT:  %6 = tail call i32 @llvm.amdgcn.workitem.id.x() #0, !range !11<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">DIVERGENT:  %add.i.i.i.i.i = add nsw i32 %mul.i.i.i.i.i, %6<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">DIVERGENT:  %idxprom.i.i.i = sext i32 %add.i.i.i.i.i to i64<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">DIVERGENT:  %8 = getelementptr i32, i32 addrspace(1)* %callable.coerce0, i64 %idxprom.i.i.i<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">DIVERGENT:  %9 = load i32, i32 addrspace(1)* %8, align 4<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">DIVERGENT:  %10 = getelementptr [16 x i32], [16 x i32] addrspace(3)* @"_ZN5pacxx2v213genericKernelIZL12test_barrieriPPcE3$_0EEvT__sm0", i32 0, i32 %6<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">DIVERGENT:  store i32 %9, i32 addrspace(3)* %10, align 4<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">DIVERGENT:  %11 = load i32, i32 addrspace(3)* %10, align 4<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">DIVERGENT:  %12 = getelementptr i32, i32 addrspace(1)* %callable.coerce1, i64 %idxprom.i.i.i<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">DIVERGENT:  store i32 %11, i32 addrspace(1)* %12, align 4<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">I’m also questioning how/where you obtained this dump. You have the declarations for the control flow intrinsics in there, which should only ever appear when the backend inserts them as part of codegen. There’s something suspicious about
 your pass setup. What does the IR look like immediately before AMDGPUAnnotateUniformValues, and immediately out of the frontend?<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">-Matt<o:p></o:p></p>
</div>
</div>
</div>
</body>
</html>