[llvm] 6a423ee - [NVPTX] Fix integer overflow affecting array size calculation.

Artem Belevich via llvm-commits llvm-commits at lists.llvm.org
Fri Mar 24 10:35:37 PDT 2023


Author: Artem Belevich
Date: 2023-03-24T10:35:25-07:00
New Revision: 6a423ee34447f29384fa6b8d7943809f2a8267d2

URL: https://github.com/llvm/llvm-project/commit/6a423ee34447f29384fa6b8d7943809f2a8267d2
DIFF: https://github.com/llvm/llvm-project/commit/6a423ee34447f29384fa6b8d7943809f2a8267d2.diff

LOG: [NVPTX] Fix integer overflow affecting array size calculation.

It turns out, 4GB+ large arrays are a thing and a 32-bit integer is just not
enough to handle them.

Differential Revision: https://reviews.llvm.org/D146767

Added: 
    

Modified: 
    llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp
    llvm/test/CodeGen/NVPTX/global-variable-big.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp b/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp
index d4173ac010ca0..aea4be0291fa1 100644
--- a/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp
+++ b/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp
@@ -1148,7 +1148,7 @@ void NVPTXAsmPrinter::printModuleLevelGV(const GlobalVariable *GVar,
       }
     }
   } else {
-    unsigned int ElementSize = 0;
+    uint64_t ElementSize = 0;
 
     // Although PTX has direct support for struct type and array type and
     // LLVM IR is very similar to PTX, the LLVM CodeGen does not support for

diff  --git a/llvm/test/CodeGen/NVPTX/global-variable-big.ll b/llvm/test/CodeGen/NVPTX/global-variable-big.ll
index 81171e8245d1e..f4194df4434df 100644
--- a/llvm/test/CodeGen/NVPTX/global-variable-big.ll
+++ b/llvm/test/CodeGen/NVPTX/global-variable-big.ll
@@ -9,3 +9,10 @@ target triple = "nvptx64-nvidia-cuda"
 ; (lsb) 0x0102'0304'0506...0F10 (msb)
 @gv = addrspace(1) externally_initialized global i128 21345817372864405881847059188222722561, align 16
 ; CHECK: .visible .global .align 16 .b8 gv[16] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+
+; Make sure that we do not overflow on large number of elements.
+; CHECK-LABEL large_data
+; CHECK: .visible .global .align 1 .b8 large_data[4831838208]
+ at large_data = global [4831838208 x i8] zeroinitializer
+
+


        


More information about the llvm-commits mailing list