<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<p>Hi Anastasia,</p>
<p>I have created review on <a class="moz-txt-link-freetext" href="https://reviews.llvm.org/D30810">https://reviews.llvm.org/D30810</a>. I am
newbie on phabricator so if I missed something on it, please let
me know.</p>
<p>Thanks,</p>
<p>JinGu Kang<br>
</p>
On 09/03/2017 19:08, Anastasia Stulova wrote:<br>
<blockquote
cite="mid:DB6PR0802MB2296CD1BA0ED315C8025B83CF0210@DB6PR0802MB2296.eurprd08.prod.outlook.com"
type="cite">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 14 (filtered
medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:Tahoma;
panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
margin-bottom:.0001pt;
font-size:12.0pt;
font-family:"Times New Roman","serif";
color:black;}
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.MsoAcetate, li.MsoAcetate, div.MsoAcetate
{mso-style-priority:99;
mso-style-link:"Balloon Text Char";
margin:0cm;
margin-bottom:.0001pt;
font-size:8.0pt;
font-family:"Tahoma","sans-serif";
color:black;}
span.EmailStyle17
{mso-style-type:personal;
font-family:"Calibri","sans-serif";
color:#1F497D;}
span.EmailStyle18
{mso-style-type:personal-reply;
font-family:"Calibri","sans-serif";
color:#1F497D;}
span.BalloonTextChar
{mso-style-name:"Balloon Text Char";
mso-style-priority:99;
mso-style-link:"Balloon Text";
font-family:"Tahoma","sans-serif";
color:black;}
.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]-->
<div class="WordSection1">
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Cool,
could you please resend the patch to cfe-commits with
“[OpenCL]” prefix in the subject. Or if possible create
review with Phabricator:
<a class="moz-txt-link-freetext" href="http://llvm.org/docs/Phabricator.html">http://llvm.org/docs/Phabricator.html</a>.<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Thanks!<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Anastasia<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF
1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span
style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext"
lang="EN-US">From:</span></b><span
style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext"
lang="EN-US"> <a class="moz-txt-link-abbreviated" href="mailto:jingu@codeplay.com">jingu@codeplay.com</a>
[<a class="moz-txt-link-freetext" href="mailto:jingu@codeplay.com">mailto:jingu@codeplay.com</a>]
<br>
<b>Sent:</b> 09 March 2017 12:03<br>
<b>To:</b> Anastasia Stulova; <a class="moz-txt-link-abbreviated" href="mailto:aleksey.bader@gmail.com">aleksey.bader@gmail.com</a><br>
<b>Cc:</b> '<a class="moz-txt-link-abbreviated" href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>'
(<a class="moz-txt-link-abbreviated" href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>); nd<br>
<b>Subject:</b> Re: [cfe-dev] Question about
"CodeGenFunction::EmitLoadOfScalar" with vector type of
3 elements<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal" style="margin-bottom:12.0pt">Hi Anastasia,<br>
<br>
I appreciate your response. I think we need to keep
"ScalarExprEmitter::VisitAsTypeExpr" between vec3 and vec4, as
we want to maintain the features of the OpenCL source
language. If llvm has intrinsic function on IR for the
__builtin_astype, we could generate it and llvm's CodeGen
could handle it. I have found other location for vec3 and it
is "CodeGenFunction::EmitStoreOfScalar". I have simply added a
clang's CodeGen Option to preseve vec3. I have attached the
diff file and a test. If I missed something, please let me
know.<br>
<br>
Thanks,<br>
<br>
JinGu Kang<o:p></o:p></p>
<div>
<p class="MsoNormal">On 08/03/17 13:05, Anastasia Stulova
wrote:<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">I
think the problem is that the borderline for IR being
target independent is very vague in general. In this case
specifically the issue is that the Spec is very explicit
about threating this as 4 element aligned type. However, I
agree this lowering could be done later as well. The
approach to condition this on the Target property sounds
reasonable. I think we have other places in Clang where
vec3 is threated as vec4 (e.g.
ScalarExprEmitter::VisitAsTypeExpr). Those would have to
be handled too. Feel free to propose a prototype.</span><o:p></o:p></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Cheer,</span><o:p></o:p></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Anastasia</span><o:p></o:p></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span><o:p></o:p></p>
<div>
<div style="border:none;border-top:solid #B5C4DF
1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span
style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext"
lang="EN-US">From:</span></b><span
style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext"
lang="EN-US"> cfe-dev [<a moz-do-not-send="true"
href="mailto:cfe-dev-bounces@lists.llvm.org">mailto:cfe-dev-bounces@lists.llvm.org</a>]
<b>On Behalf Of </b><a moz-do-not-send="true"
href="mailto:jingu@codeplay.com">jingu@codeplay.com</a>
via cfe-dev<br>
<b>Sent:</b> 08 March 2017 11:01<br>
<b>To:</b> <a moz-do-not-send="true"
href="mailto:aleksey.bader@gmail.com">aleksey.bader@gmail.com</a><br>
<b>Cc:</b> '<a moz-do-not-send="true"
href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>'
(<a moz-do-not-send="true"
href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>)<br>
<b>Subject:</b> Re: [cfe-dev] Question about
"CodeGenFunction::EmitLoadOfScalar" with vector type
of 3 elements</span><o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal" style="margin-bottom:12.0pt">Hi Alexey,<br>
<br>
I appreciate your response. My colleague and I are
implementing a transformation pass between LLVM IR and
another IR and we want to keep the 3-component vector types
in our target IR. As you mentioned, the 4-component vector
type conversion code is not problem. But I usually expect
clang generates more target independent LLVM IR except
target specific properties like calling convention, memory
layout of variables, etc. clang can keep the 3-component
vector type operations and llvm codegen can handle them
according to target. At present, we're having to undo
Clang's transformation of vec3 -> vec4, to recreate the
original type information, which is unfortunate. Would it be
possible to add an option to control the behaviour?<br>
<br>
Thanks,<br>
<br>
JinGu Kang<br>
<br>
<br>
<o:p></o:p></p>
<div>
<p class="MsoNormal">On 07/03/17 18:19, <a
moz-do-not-send="true"
href="mailto:aleksey.bader@gmail.com">
aleksey.bader@gmail.com</a> wrote:<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p class="MsoNormal">Hi JinGu, <o:p></o:p></p>
<div>
<p class="MsoNormal"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">I don't think it should be a
problem for OpenCL. 3-component vector is aligned as
4-component vector (see section 6.1.5 "Alignment of
Type" of OpenCL C kernel language specification v2.0).<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">AFAIK, almost all existing OpenCL
compilers are based on clang and there seems to be no
problems with handling load/store operations this way.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Could you elaborate on the case
where this approach doesn't work?<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Thanks,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Alexey<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"> <o:p></o:p></p>
<div>
<p class="MsoNormal">On Mon, Mar 6, 2017 at 6:47 PM, <a
moz-do-not-send="true"
href="mailto:jingu@codeplay.com">
jingu@codeplay.com</a> via cfe-dev <<a
moz-do-not-send="true"
href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>>
wrote:<o:p></o:p></p>
<p class="MsoNormal">Hi All,<br>
<br>
<br>
I have a question about
"CodeGenFunction::EmitLoadOfScalar". I am compiling
code with vector type of 3 elements like int3 or
float3. Clang converts the vector load to different
vector load with 4 element vector type because there
is code on "CodeGenFunction::EmitLoadOfScalar" as
follows:<br>
<br>
1312 // For better performance, handle vector loads
differently.<br>
1313 if (Ty->isVectorType()) {<br>
1314 const llvm::Type *EltTy =
Addr.getElementType();<br>
1315<br>
1316 const auto *VTy =
cast<llvm::VectorType>(EltTy);<br>
1317<br>
1318 // Handle vectors of size 3 like size 4 for
better performance.<br>
1319 if (VTy->getNumElements() == 3) {<br>
1320<br>
1321 // Bitcast to vec4 type.<br>
1322 llvm::VectorType *vec4Ty =
llvm::VectorType::get(VTy->getElementType(),<br>
1323
4);<br>
1324 Address Cast =
Builder.CreateElementBitCast(Addr, vec4Ty,
"castToVec4");<br>
1325 // Now load value.<br>
1326 llvm::Value *V = Builder.CreateLoad(Cast,
Volatile, "loadVec4");<br>
<br>
4 element vector load could generate aligned vector
load in the end and it would be better in usual. But
it is not good for other target or language like
OpenCL which supports 3 element vector type natively.
Can we consider this situation on
"CodeGenFunction::EmitLoadOfScalar" like this "if
(!getLangOpts().OpenCL)" or with target specific
property on TargetCodeGenInfo?<br>
<br>
If I missed something, please let me know.<br>
<br>
Thanks,<br>
JinGu Kang<br>
<br>
_______________________________________________<br>
cfe-dev mailing list<br>
<a moz-do-not-send="true"
href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
<a moz-do-not-send="true"
href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev"
target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><o:p></o:p></p>
</div>
<p class="MsoNormal"> <o:p></o:p></p>
</div>
</blockquote>
<p class="MsoNormal"> <o:p></o:p></p>
</blockquote>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</blockquote>
<br>
</body>
</html>