<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;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
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="EN-US" link="blue" vlink="purple" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal">We might still not be fully understanding one another, because this:<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">so that you can compile code with under-aligned objects, and have it work as the author expected it to<o:p></o:p></p>
<p class="MsoNormal">sounds like you’re expecting us to recompile the client code that creates the under-aligned objects.  That is literally not possible.  If you do understand that part, great, it’s just not obvious to me from how you’re phrasing things.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I (still) don’t know what Intel is facing.  For Sony’s problem, we would be much more likely to try to do something specific to the APIs that are being abused, rather than something draconian like eliminating alignment requirements for
 everyone.  But of course we have a solution that works for us, so there’s that much more inertia to overcome.<o:p></o:p></p>
<p class="MsoNormal">--paulr<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> James Y Knight <jyknight@google.com> <br>
<b>Sent:</b> Monday, April 19, 2021 2:30 PM<br>
<b>To:</b> Robinson, Paul <paul.robinson@sony.com><br>
<b>Cc:</b> Luo, Yuanke <yuanke.luo@intel.com>; Roman Lebedev <lebedev.ri@gmail.com>; Liu, Chen3 <chen3.liu@intel.com>; llvm-dev <llvm-dev@lists.llvm.org>; Maslov, Sergey V <sergey.v.maslov@intel.com>; daniel.towner@intel.com<br>
<b>Subject:</b> Re: [llvm-dev] [RFC] [X86] Emit unaligned vector moves on avx machine with option control.<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<p class="MsoNormal"><br>
I understand your goal is to find and fix bugs in software that is<br>
still under development and CAN be fixed.  I fully endorse that<br>
goal.  However, that is not the situation that Sony has, and likely<br>
not what Intel has.  Your proposal will NOT solve our problem.<o:p></o:p></p>
</blockquote>
<div>
<div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">No, that's not it at all! I'm afraid you've totally misunderstood my concern.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">My goal is that if we add a compiler feature to address this problem -- so that you can compile code with under-aligned objects, and have it work as the author expected it to --  that the feature <i>reliably </i>addresses the problem, and
 makes such code no longer exhibit Undefined Behavior. The proposed backend change does not accomplish that, but we can implement a feature which will.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">As Reid said, -fmax-type-align=N appears to be <i>almost</i> that feature, and something like this little patch (along with documentation update) may be all that's needed (but this is totally untested).<o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Courier New"">diff --git clang/lib/CodeGen/CodeGenModule.cpp clang/lib/CodeGen/CodeGenModule.cpp<br>
index b23d995683bf..3aef166a690e 100644<br>
--- clang/lib/CodeGen/CodeGenModule.cpp<br>
+++ clang/lib/CodeGen/CodeGenModule.cpp<br>
@@ -6280,8 +6280,7 @@ CharUnits CodeGenModule::getNaturalTypeAlignment(QualType T,<br>
   // Cap to the global maximum type alignment unless the alignment<br>
   // was somehow explicit on the type.<br>
   if (unsigned MaxAlign = getLangOpts().MaxTypeAlign) {<br>
-    if (Alignment.getQuantity() > MaxAlign &&<br>
-        !getContext().isAlignmentRequired(T))<br>
+    if (Alignment.getQuantity() > MaxAlign)<br>
       Alignment = CharUnits::fromQuantity(MaxAlign);<br>
   }<br>
   return Alignment;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>