<div dir="ltr"><div>Is there any way to get added keywords to map to these attributes? I'm just thinking we don't want to have to have the user include a special .h file.<br><br></div>Phil<br><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Oct 13, 2016 at 11:18 PM, Daniel Marjamäki <span dir="ltr"><<a href="mailto:Daniel.Marjamaki@evidente.se" target="_blank">Daniel.Marjamaki@evidente.se</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">




<div>
<div style="direction:ltr;font-family:Tahoma;color:#000000;font-size:10pt">Hello!
<div><br>
</div>
<div>I am not an expert. But I think you should use address space attributes. This code compiles without errors:</div>
<div><br>
</div>
<div>
<div>#define xstglocal  __attribute__((address_space(<wbr>0)))</div>
<div>#define xstgblock  __attribute__((address_space(<wbr>256)))</div>
<div>#define xstgglobal  __attribute__((address_space(<wbr>257)))</div><span class="">
<div><br>
</div>
<div>int* xstglocal  lp_i;       // Local pointer to any integer</div>
<div>int* xstgblock  b_pi;       // Block pointer to any integer</div>
<div>int* xstgglobal g_pi;       // Global pointer to any integer</div>
<div><br>
</div>
<div>xstgglobal int* xstglocal  vp_li;   // Local pointer to global integer</div>
<div>xstglocal  int* xstgblock  vp_bi;   // Block pointer to local integer</div>
<div>xstgblock  int* xstgglobal vp_gi;   // Global pointer to block integer</div>
<div><br>
</div>
</span><div><span style="font-size:10pt">Best regards,</span></div>
<div>Daniel Marjamäki</div>
<div><br>
<div style="font-family:Tahoma;font-size:13px">
<div style="font-family:Tahoma;font-size:13px">
<div style="font-family:Tahoma;font-size:13px">
<div style="font-family:Tahoma;font-size:13px">
<div style="font-family:Tahoma;font-size:13px">
<div style="font-family:Tahoma;font-size:13px">
<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span style="font-family:'Arial','sans-serif';color:gray;font-size:8pt">..............................<wbr>..............................<wbr>..............................<wbr>........................</span></p>
<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span style="font-family:'Arial','sans-serif';color:black;font-size:8pt">Daniel Marjamäki
</span><span style="font-family:'Arial','sans-serif';color:gray;font-size:8pt">Senior Engineer</span></p>
<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span style="font-family:'Arial','sans-serif';color:gray;font-size:8.5pt" lang="EN-US">Evidente ES East</span><span style="font-family:'Arial','sans-serif';color:gray;font-size:8pt" lang="EN-US"> AB<span> 
</span>Warfvinges väg 34<span>  </span>SE-112 51 Stockholm<span>  </span>Sweden </span>
</p>
<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span style="font-family:'Arial','sans-serif';color:gray;font-size:8pt" lang="EN-US"></span> </p>
<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span style="font-family:'Arial','sans-serif';color:gray;font-size:8pt" lang="EN-GB">Mobile</span><span style="font-family:'Arial','sans-serif';color:gray;font-size:8pt" lang="EN-GB">:<span>                
</span>+46 (0)709 12 42 62</span></p>
<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span style="font-family:'Arial','sans-serif';color:gray;font-size:8pt" lang="EN-GB"></span><span style="font-family:'Arial','sans-serif';color:gray;font-size:8pt" lang="EN-GB">E-mail:<span>   
</span><span>             <a href="mailto:Daniel.Marjamaki@evidente.se" target="_blank">
Daniel.Marjamaki</a></span><a href="mailto:Daniel.Marjamaki@evidente.se" target="_blank">@evidente.se</a><span>  <wbr>   
</span><span>                 </span></span></p>
<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span style="font-family:'Arial','sans-serif';color:gray;font-size:8pt" lang="EN-GB"></span> </p>
<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span style="font-family:'Arial','sans-serif';font-size:8pt" lang="EN-GB"><a href="http://www.evidente.se" target="_blank">www.evidente.se</a></span></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div style="font-family:Times New Roman;color:#000000;font-size:16px">
<hr>
<div id="m_-614521488507165424divRpF812226" style="direction:ltr"><font face="Tahoma" size="2" color="#000000"><b>From:</b> cfe-dev [<a href="mailto:cfe-dev-bounces@lists.llvm.org" target="_blank">cfe-dev-bounces@lists.llvm.<wbr>org</a>] on behalf of Phil Tomson via cfe-dev [<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>]<br>
<b>Sent:</b> 14 October 2016 03:35<br>
<b>To:</b> <a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
<b>Subject:</b> [cfe-dev] Address space extensions (adding type modifier keywords)<br>
</font><br>
</div><div><div class="h5">
<div></div>
<div>
<div dir="ltr">Our architecture has a somewhat different memory model with three different address spaces: local, block, global.<br>
<div>
<div><br>
Some time ago (prior to my involvement in our project) our address space extensions were added to the frontend so that we can write:<br>
<br>
volatile   int v_i;<br>
xstglocal  int l_i;<br>
xstgblock  int b_i;<br>
xstgglobal int g_i;<br>
<br>
volatile   int* p_vi;       // Regular pointer to volatile integer<br>
xstglocal  int* p_li;       // Regular pointer to local integer <br>
xstgblock  int* b_pi;       // Regular pointer to block integer <br>
xstgglobal int* g_pi;       // Regular pointer to global integer<br>
<br>
int* volatile   vp_i;       // Volatile pointer to regular integer<br>
<br>
</div>
<div>These address space modifiers (xstglocal, xstgblock, xstgglobal) are used to determine which address space data is stored in. The above will compile just fine.<br>
<br>
</div>
<div>However, originally this work was done for clang/llvm 3.2. After we moved to 3.6 we found that the following (which used to work in 3.2) no longer works in 3.6:<br>
<br>
int* xstglocal  lp_i;       // Local pointer to any integer<br>
int* xstgblock  b_pi;       // Block pointer to any integer<br>
int* xstgglobal g_pi;       // Global pointer to any integer<br>
<br>
xstgglobal int* xstglocal  vp_li;   // Local pointer to global integer<br>
xstglocal  int* xstgblock  vp_bi;   // Block pointer to local integer<br>
xstgblock  int* xstgglobal vp_gi;   // Global pointer to block integer<br>
<br>
</div>
<div>These result in front end errors:<br>
<br>
issue.c:13:7: error: expected identifier or '('<br>
int * xstglocal  lp_i;       // Local pointer to any integer<br>
      ^<br>
issue.c:14:7: error: expected identifier or '('<br>
int * xstgblock  b_pi;       // Block pointer to any integer<br>
      ^<br>
issue.c:15:7: error: expected identifier or '('<br>
int * xstgglobal g_pi;       // Global pointer to any integer<br>
      ^<br>
issue.c:20:18: error: expected identifier or '('<br>
xstgglobal int * xstglocal  vp_li;   // Local pointer to global integer<br>
                 ^<br>
issue.c:21:18: error: expected identifier or '('<br>
xstglocal  int * xstgblock  vp_bi;   // Block pointer to local integer<br>
                 ^<br>
issue.c:22:18: error: expected identifier or '('<br>
xstgblock  int * xstgglobal vp_gi;   // Global pointer to block integer<br>
                 ^<br>
6 errors generated.<br>
<br>
</div>
<div>It looks as though these address space extension keywords were added in <br>
</div>
<div>TokenKinds.def:<br>
// XSTG address space qualifiers<br>
KEYWORD(xstgglobal            <wbr>      , KEYXSTG)<br>
KEYWORD(xstgblock             <wbr>      , KEYXSTG)<br>
KEYWORD(xstglocal             <wbr>      , KEYXSTG)<br>
<br>
</div>
<div>As well as in Attr.td:<br>
<br>
def XSTGLocalAddressSpace : TypeAttr {<br>
  let Spellings = [Keyword<"xstglocal">];<br>
  let Documentation = [Undocumented];<br>
}<br>
<br>
def XSTGBlockAddressSpace : TypeAttr {<br>
  let Spellings = [Keyword<"xstgblock">];<br>
  let Documentation = [Undocumented];<br>
}<br>
<br>
def XSTGGlobalAddressSpace : TypeAttr {<br>
  let Spellings = [Keyword<"xstgglobal">];<br>
  let Documentation = [Undocumented];<br>
}<br>
<br>
</div>
<div>with some support in ParseDecl.cpp.<br>
<br>
</div>
<div>Was there an API change between clang 3.2 and 3.6 that might have broken this? Any pointers on how I might fix these errors?<br>
<br>
</div>
<div>Thanks.<br>
<br>
</div>
<div>Phil<br>
</div>
<div><br>
<br>
</div>
<div><br>
</div>
</div>
</div>
</div>
</div></div></div>
</div>
</div>
</div>

</blockquote></div><br></div></div></div></div>