[PATCH] D80695: [mlir] Convert raw data in dense element attributes into big-endian format.

Haruki Imai via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Oct 20 06:29:05 PDT 2020


imaihal marked 4 inline comments as done.
imaihal added inline comments.


================
Comment at: mlir/lib/Support/EndianUtilities.cpp:54
+  if (storageBitWidth == 16) {
+    ulittle16_t *inRawDataPos = const_cast<ulittle16_t *>(
+        reinterpret_cast<const ulittle16_t *>(inRawData.begin()));
----------------
mehdi_amini wrote:
> It does not work with `const ulittle16_t *` ?
> 
> If so, can you extract the const_cast outside of the sequence of `if` (and make it a switch?):
> ```
> char *rawDataBegin = const_cast<char *>(inRawData.begin());
> switch (storageBitWidth) {
>   case 16: {
>     ulittle16_t *inRawDataPos =  reinterpret_cast<ulittle16_t *>(rawDataBegin);
>     uint16_t *outDataPos  = reinterpret_cast<uint16_t *>(outRawData.begin());
>     for (unsigned i = 0, e = numElements; i < e; ++i)
>       std::copy_n(inRawDataPos + i, 1, outDataPos + i);
>   }
>   ...
> ```
`const ulittle16_t *` works. Thanks!


================
Comment at: mlir/lib/Support/EndianUtilities.cpp:59
+    for (unsigned i = 0, e = numElements; i < e; ++i)
+      std::copy_n(inRawDataPos + i, 1, outDataPos + i);
+  } else if (storageBitWidth == 32) {
----------------
mehdi_amini wrote:
> It isn't clear to me right now why you need a loop instead of using the second argument of std::copy_n?
> 
> ```
> std::copy_n(inRawDataPos, numElements, outDataPos);
> ```
Sorry, it works.



Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D80695/new/

https://reviews.llvm.org/D80695



More information about the llvm-commits mailing list