<div dir="ltr"><div>I'm unclear on whether it works with automatic variables. Testing it in clang gives an error message "automatic variable qualified with address space".</div><div>However here is an LLVM discussion on the semantics of alloca with different address spaces: <a href="https://lists.llvm.org/pipermail/llvm-dev/2015-August/089706.html">https://lists.llvm.org/pipermail/llvm-dev/2015-August/089706.html</a></div><div>Some people seem to have gotten multiple separate stacks working, according to my skim read.<br></div><div>So it might potentially be technically supported in LLVM, but not in clang.</div><div><br></div><div>/Henrik<br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, May 27, 2020 at 7:42 PM Bandhav Veluri <<a href="mailto:bandhav.veluri00@gmail.com">bandhav.veluri00@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"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">Thanks a lot Henrik!</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">I figured following would mark a pointer to a specific address space:</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><span style="font-family:monospace;background-color:transparent;color:rgb(29,28,29);font-size:9pt;white-space:pre-wrap"><br></span></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><span style="font-family:monospace;background-color:transparent;color:rgb(29,28,29);font-size:9pt;white-space:pre-wrap">#define __myaddrspace __attribute__((address_space(1)))</span></div><div class="gmail_default" style="font-size:small"><span id="gmail-m_-3579762115547965392gmail-docs-internal-guid-bca57bf8-7fff-2458-c1e3-0cce2de215b0"><p dir="ltr" style="line-height:1.80001"><span style="font-size:9pt;color:rgb(29,28,29);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap"><font face="monospace">__myaddrspace int* data;</font></span></p></span><br></div><div class="gmail_default" style="font-size:small">And, I was able to verify loads being annotated to be from addrspace 1 in the generated IR. Would this work for automatic variables as well?</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">In regards to using this in the backend, do I have to just modify the source, or is it possible to load a library at runtime, like we load a frontend pass? </div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, May 26, 2020 at 12:37 PM Henrik Olsson <<a href="mailto:hnrklssn@gmail.com" target="_blank">hnrklssn@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"><div>Hi Bandhav,</div><div><br></div><div>While I'm unfamiliar with the details of codegen and cost modelling in LLVM, it is possible to declare multiple address spaces for a target, mark pointers as belonging to a specific address space, and cast between them.</div><div>To quote the language reference "For targets that support them, address spaces
may affect how optimizations are performed and/or what target
instructions are used to access the variable.", which sounds quite hopeful for your usecase. If nothing else, you could probably model the loads from different address spaces as being different instructions, even if they are in the end the same instruction in the output machine code, and tag them with different costs.<br></div><div><br></div><div>Hope this helps,</div><div>Henrik<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, May 26, 2020 at 4:55 AM Bandhav Veluri via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</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"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><div class="gmail_default">Hi,</div><div class="gmail_default"><br></div><div class="gmail_default">I’m working on a RISC-V architecture that has instruction costs different from those in the default cost model. Is there an out-of-source way to provide llc with custom cost model? Or, does this need a change in LLVM backend?<br><br>Also, the cost model is not totally static. For example, loads from 0x1000-0x1ffc take 1 cycle, whereas loads from address > 0x80000000, take 10-100 cycles. Is it possible to model these costs in the scheduler? Requiring programmer to define custom pointer types to mark pointers, to one or the other address space, is okay. Is there a way to model different costs for different pointer types?<br></div><div class="gmail_default"><br></div><div class="gmail_default">Thank you,</div><div class="gmail_default">Bandhav</div></div></div>
_______________________________________________<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>
</blockquote></div>