<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Hi Richard,</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span style="color: rgb(50, 49, 48); font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, BlinkMacSystemFont, Roboto, "Helvetica Neue", sans-serif; font-size: 14.6667px; background-color: rgb(255, 255, 255); display: inline !important">>
 But having the vscale LLVM type is important for function interfaces,</span><br style="color: rgb(50, 49, 48); font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, BlinkMacSystemFont, Roboto, "Helvetica Neue", sans-serif; font-size: 14.6667px; background-color: rgb(255, 255, 255)">
<span style="color: rgb(50, 49, 48); font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, BlinkMacSystemFont, Roboto, "Helvetica Neue", sans-serif; font-size: 14.6667px; background-color: rgb(255, 255, 255); display: inline !important">where
 we need to able to pass and return vectors by value.</span><br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span style="color: rgb(50, 49, 48); font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, BlinkMacSystemFont, Roboto, "Helvetica Neue", sans-serif; font-size: 14.6667px; background-color: rgb(255, 255, 255); display: inline !important"><br>
</span></div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
I guess we can use 'byval' for parameter passing and 'sret' for return value. It means that we can use stack for the ABI and the stack could be allocated by dynamic alloc. As you know,<span style="color: rgb(0, 0, 0); font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt;"> CLANG
 has Target ABI Interface and I guess we can generate the attributes with the interface.</span></div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span style="color: rgb(0, 0, 0); font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt;"><br>
</span></div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Regards,</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
JinGu Kang</div>
<div>
<div id="appendonsend"></div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> Richard Sandiford <richard.sandiford@arm.com><br>
<b>Sent:</b> 07 June 2019 18:33<br>
<b>To:</b> JinGu Kang<br>
<b>Cc:</b> cfe-dev@lists.llvm.org<br>
<b>Subject:</b> Re: [cfe-dev] RFC: Adding vscale vector types to C and C++</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt">
<div class="PlainText">JinGu Kang <jingu@codeplay.com> writes:<br>
<br>
>> These are all negative reasons for (1) being the best approach.<br>
>> A more positive justification is that (1) seems to meet the requirements<br>
>> in the most efficient way possible.  The vectors can use their natural<br>
>> (native) representation, and the type system prevents uses that would<br>
>> make that representation problematic.<br>
><br>
>> Also, the approach of starting with very restricted types and then<br>
>> specifically allowing certain things should be more future-proof<br>
>> and interact better with other (unseen) language extensions.  By default,<br>
>> any language extension would treat the new types like other incomplete<br>
>> types and choose conservatively-correct behavior.  It would then be<br>
>> possible to relax the rules if this default behavior turns out to be<br>
>> too restrictive.<br>
><br>
> I wondered we can define the restriction of this type well on C/C++ standard.<br>
> From my personal opinion, this RFC suggests clear concept. I am +1000 for (1).<br>
> Additionally, for the variable length array, I agree with your opinion. One<br>
> thing I would like to mention is that we could use 'dynamic_alloc' for the<br>
> local variable of this type like other variable sized objects. If we use it, I<br>
> guess we don't need to change backend code.<br>
<br>
Yeah, dynamic allocation works well for local variables, and for example<br>
we'd emit the equivalent of:<br>
<br>
    %var = alloca <vscale x 4 x i32><br>
<br>
for:<br>
<br>
    svint32_t var;<br>
<br>
But having the vscale LLVM type is important for function interfaces,<br>
where we need to able to pass and return vectors by value.<br>
<br>
Thanks,<br>
Richard<br>
</div>
</span></font></div>
</div>
</body>
</html>