<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, Aug 20, 2015 at 6:39 PM, Michael Zolotukhin via cfe-commits <span dir="ltr"><<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">mzolotukhin created this revision.<br>
mzolotukhin added reviewers: hfinkel, doug.gregor, t.p.northover, ab, mcrosier.<br>
mzolotukhin added a subscriber: cfe-commits.<br>
Herald added a subscriber: aemerson.<br>
<br>
Currently there is no way to generate nontemporal memory accesses for some<br>
architectures, e.g. for AArch64. In contrast to x86, it doesn't have special<br>
intrinsics for this, and the suggested solution is using such attribute (see ARM<br>
ACLE 2.0, section 13.1.6). The attribute would result in generating<br>
'!nontemporal' attribute in IR, which then will (hopefully) live through<br>
optimizations till backend, where it will be lowered to a non-temporal<br>
instruction (for AArch64 - to STNP). I have committed a couple of patches for<br>
vectorizers to preserve this attribute, and it seems that no other<br>
transformation removes it.<br>
<br>
So, is introducing a new type attribute a right approach for this problem?</blockquote><div><br></div><div>This seems like a property of an operation, rather than a property of a type. Have you considered adding a __builtin_nontemporal_store builtin as an alternative?</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Also, since I don't have much experience in front-end, I'd appreciate any help<br>
with the patch itself to get it ready to be committed. Specifically, I currently<br>
have following questions:<br>
1) What tests should I add (examples would be appreciated)?<br>
2) How does one implements constraints on how the attribute can be used, what<br>
should be the constraints in this case, and how to properly implement them?<br>
3) How can I check if I covered all places where this attribute might be used in<br>
codegen? I.e. I seem to cover array-subscript and pointer-dereference<br>
expressions, which is probaly the only cases I care about, but I easily could<br>
miss something.<br>
<br>
Any other feedback is also welcome!<br>
<br>
Thanks,<br>
Michael<br>
<br>
<a href="http://reviews.llvm.org/D12221" rel="noreferrer" target="_blank">http://reviews.llvm.org/D12221</a><br>
<br>
Files:<br>
  include/clang/AST/Type.h<br>
  include/clang/Basic/Attr.td<br>
  lib/AST/Type.cpp<br>
  lib/AST/TypePrinter.cpp<br>
  lib/CodeGen/CGExpr.cpp<br>
  lib/CodeGen/CGValue.h<br>
  lib/CodeGen/CodeGenFunction.cpp<br>
  lib/CodeGen/CodeGenFunction.h<br>
  lib/Sema/SemaType.cpp<br>
  test/CodeGen/nontemporal.cpp<br>
<br>
<br>_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
<br></blockquote></div><br></div></div>