[llvm] 925aa51 - AMDGPU: Use DataExtractor for printf string extraction

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Mon Jan 9 11:03:46 PST 2023


Author: Matt Arsenault
Date: 2023-01-09T14:03:42-05:00
New Revision: 925aa514eda8becf088c3e605aa17dc569586334

URL: https://github.com/llvm/llvm-project/commit/925aa514eda8becf088c3e605aa17dc569586334
DIFF: https://github.com/llvm/llvm-project/commit/925aa514eda8becf088c3e605aa17dc569586334.diff

LOG: AMDGPU: Use DataExtractor for printf string extraction

Attempt 2 to fix big endian bot failures.

Added: 
    

Modified: 
    llvm/lib/Target/AMDGPU/AMDGPUPrintfRuntimeBinding.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/AMDGPU/AMDGPUPrintfRuntimeBinding.cpp b/llvm/lib/Target/AMDGPU/AMDGPUPrintfRuntimeBinding.cpp
index b11b9546e7d1..18dbf5d08b0b 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUPrintfRuntimeBinding.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUPrintfRuntimeBinding.cpp
@@ -27,7 +27,7 @@
 #include "llvm/IR/IRBuilder.h"
 #include "llvm/IR/Instructions.h"
 #include "llvm/InitializePasses.h"
-#include "llvm/Support/BinaryByteStream.h"
+#include "llvm/Support/DataExtractor.h"
 #include "llvm/Transforms/Utils/BasicBlockUtils.h"
 
 using namespace llvm;
@@ -430,20 +430,21 @@ bool AMDGPUPrintfRuntimeBindingImpl::lowerPrintfForGpu(Module &M) {
           }
 
           if (!S.empty()) {
-            const size_t NSizeStr = S.size() + 1;
             const uint64_t ReadSize = 4;
 
-            BinaryByteStream Streamer(S, support::little);
+            DataExtractor Extractor(S, /*IsLittleEndian=*/true, 8);
+            DataExtractor::Cursor Offset(0);
+            while (Offset && Offset.tell() < S.size()) {
+              StringRef ReadBytes = Extractor.getBytes(
+                  Offset, std::min(ReadSize, S.size() - Offset.tell()));
 
-            for (uint64_t Offset = 0; Offset < NSizeStr; Offset += ReadSize) {
-              ArrayRef<uint8_t> ReadBytes;
-              if (Error Err = Streamer.readBytes(
-                      Offset, std::min(ReadSize, S.size() - Offset), ReadBytes))
-                cantFail(std::move(Err),
-                         "failed to read bytes from constant array");
+              cantFail(Offset.takeError(),
+                       "failed to read bytes from constant array");
 
               APInt IntVal(8 * ReadBytes.size(), 0);
-              LoadIntFromMemory(IntVal, ReadBytes.data(), ReadBytes.size());
+              LoadIntFromMemory(
+                  IntVal, reinterpret_cast<const uint8_t *>(ReadBytes.data()),
+                  ReadBytes.size());
 
               // TODO: Should not bothering aligning up.
               if (ReadBytes.size() < ReadSize)


        


More information about the llvm-commits mailing list