From 6d10fd22d7b6debc0d82a0690d409790933d2f44 Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Thu, 20 Nov 2025 10:36:59 +1100 Subject: [PATCH] Update the data layout. Recent NVVM IR docs (e.g. https://docs.nvidia.com/cuda/archive/13.0.0/nvvm-ir-spec/index.html#data-layout) mention four data layouts, which I will abbreviate as: - 64-bit-with-128-bit-integers - 32-bit-with-128-bit-integers - 64-bit-without-128-bit-integers - 32-bit-without-128-bit-integers These docs have said the same thing for every CUDA version from 12.0 to 13.0: - 64-bit-with-128-bit-integers is "supported". - The others are "deprecated and will be removed in a future release". We currently use 64-bit-without-128-bit integers. This works fine on CUDA 12.8, but doesn't work on CUDA 13.0 -- libNVVM spits out "DataLayoutError: Unsupported integer alignment". Even though the docs haven't changed, 13.0 seems to be the first version actually enforcing the deprecation. (Or maybe "deprecated" has become "removed" and the docs haven't caught up, given that there's no apparent way to avoid the error.) This commit changes our data layout from 64-bit-without-128-bit-integers to 64-bit-with-128-bit-integers. This lets commands like `cargo run -p compiletests -- --target-arch compute_75` run successfully on my ASUS GX10 with CUDA 13.0. There appear to be no ill side-effects. --- crates/rustc_codegen_nvvm/libintrinsics.bc | Bin 7768 -> 6308 bytes crates/rustc_codegen_nvvm/libintrinsics.ll | 3 ++- crates/rustc_codegen_nvvm/src/target.rs | 3 ++- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/crates/rustc_codegen_nvvm/libintrinsics.bc b/crates/rustc_codegen_nvvm/libintrinsics.bc index cbce93e225e3c7456f466fded314a7d26a479cda..98c2ed0eed93ca4d0e48dacf46666ca9ab4e5215 100644 GIT binary patch literal 6308 zcmb`L4@?`^9mn6{!)J&w$Dg&PHOvNYm9d*}NR z+e@e?<%IA1-uHdp?|%30y=Nb0OZ4=ug@j}hLfVwZ@|JsFJA3gj->qn3Ow=MeB_Yqt z2-%dOBN==2D6q(Fyiz<>=7He(X6&hO^{OAC?b%%VHnh>}=xq0l&S8#9*f!5F+H&tWO9>E`PVJYLe*VERr#gOmU5C!h=L9WJ=CR*Hl8qAD2j)%X+U;>5Svsb zwvndne1;`-VCfO%-?*VPg9um`bjvlZEH6$05wIM7bP}S=#R{B;n+;p@8pNq5TFUXc zHkcDIYvPBx^qtJx3Db&oW0U#u{YeQ_-JHd+>lcjjquUR$L_l89P4v5Sc*3D!Ih@~< zPsBAOTEoqizrVGCXs}&5ek#_IGy)&L@jhWZ*luik38i7BiB=BfT0$+KzBqdPs^W8}axEGHm zB`|((TT%iKRh~#n;P{@=qy$FadtRBe3SN9b!xOq8iif4VcfJlQpu^3ZPlVtRCjdw1 zV+jCEa3!yXUU?~w)j!X9n7 zXfaQ9A);C_=5`x%S1+k9wW=!lSn+9{<^x^voV}#eI9mJaVC|Bn=D4ix)xo+US?%Jb z!k~?N#K~=UhP`kW!k$RjW8;E)F8DZct-WFsOo}I z*0wOMS)0}@isw^y%}Jdm7Aihzm%kse)GSzPCdKp1^VJ6})g!XngY(~ki(Ve6eNR?9 zGp{`13VU{ky`Dk8lk2mE{pzrPDqQsTUAY%Y?kBCPwTNo9A$LWqx&U{f)fb&!?_+DY9A--NV<^pMQzBIX>ui@t6_rdR-Qmfdj z-Un>;q=0SQLbp#k21AR4Y~SLYFD;YH$$)KXA;gbuW~0sl{*W!|p3fu4a%Oo457DlE zzh4(GdY$9Fe4XRXT<3U4u5-Mp|1(~e_GZhPU!=)Bl_vMIG`aCKxhK=(c0Zmb_gI?T=ry@K z@%bj~3vUrpCeMN`AzHDcQ90){^Y`0g&N;HUt&lN($SWJ=bPK%dyrO$c(jFtmqT36R zzpjPtWj1ri*k)zaZMm|&Tx~90J5GZ3%Z1=59Q9)ZlPL`epq+F`>78WUcT($6umxOgYV1Y z?|w~Ey%m%mRBwY%RD81~@_1P*c~q&dfZujT zDAV^@ROD$cbPq>G{zu@^If07&9`I-!ROBB4kLHYu{1cLoiu|S7W`33Ok z_dhD~?}A77F;wJFfv18GD)Q&Sqt62s`Am2~lt)Fr0DQ`$B5#m*ROIU<9u@g}Bpwy{ z4v9xaUXXZHhk5mh}Hpxdt-Yfa2$PY+9D)JNH)3t|+{4?Ow?>JQI zkHGl+7JNE?P?3KLd^$f-k$+8!kBa=8QhZe8-<9H{BEKTVM@9a;6dx7&&!zaN$bTip zUsq_L`$-P$Jv4t*4q#9Jl5X=>Yj-f%W$m?lJyxHq zzr*bgb{VK;@OIc829Lkb;PZCuF;IZEOMIJqZ~Md6HoMpB>hNCaBN;}C+T(ROteqX* z?FnJKI=X-|wEOK6x+B>d+?Qu(#Z=cWK(RB?98YRr{wR^;LXhHH^)mFR1u~)Qx zP%`wo{7%E(V28KUy|>rk+PX~w0|{VYBM>6`0&P-6C~XvR9Sm#)Ld33sTZ#y!jUujt zfsH`dR#W_TtX6Np=eH)*#U~y}X-}w&?IKT;PwXGBU+JIFF7{7o7yHvx6Z^;OSNbQk zi~SSY9j>6?RcW=N#yepxfCbU++UpQm)HsW^02bnGz#V5L6-~R(8F$wUXnRE%?07-6 z-B?>Mh<1DpIRl-Y?u7a7b9TB7zJ1;823Ms?nrI@~W%su`t#-HDT4}nnf<)HHq)$ literal 7768 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 XYqnXPj#@{P*X?NXIO;s~lqckWHkoW= diff --git a/crates/rustc_codegen_nvvm/libintrinsics.ll b/crates/rustc_codegen_nvvm/libintrinsics.ll index 88594cb7..da2c287d 100644 --- a/crates/rustc_codegen_nvvm/libintrinsics.ll +++ b/crates/rustc_codegen_nvvm/libintrinsics.ll @@ -5,7 +5,8 @@ ; if you update this make sure to update libintrinsics.bc by running llvm-as (make sure you are using llvm-7 or it won't work when ; loaded into libnvvm). source_filename = "libintrinsics" -target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v16:16:16-v32:32:32-v64:64:64-v128:128:128-n16:32:64" +; This data layout must match `DATA_LAYOUT` in `crates/rustc_codegen_nvvm/src/target.rs`. +target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-i128:128:128-f32:32:32-f64:64:64-v16:16:16-v32:32:32-v64:64:64-v128:128:128-n16:32:64" target triple = "nvptx64-nvidia-cuda" ; warp ---- diff --git a/crates/rustc_codegen_nvvm/src/target.rs b/crates/rustc_codegen_nvvm/src/target.rs index 9cd09997..4438925f 100644 --- a/crates/rustc_codegen_nvvm/src/target.rs +++ b/crates/rustc_codegen_nvvm/src/target.rs @@ -3,7 +3,8 @@ use rustc_target::spec::{ LinkerFlavor, MergeFunctions, PanicStrategy, Target, TargetMetadata, TargetOptions, }; -pub const DATA_LAYOUT: &str = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v16:16:16-v32:32:32-v64:64:64-v128:128:128-n16:32:64"; +// This data layout must match `datalayout` in `crates/rustc_codegen_nvvm/libintrinsics.ll`. +pub const DATA_LAYOUT: &str = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-i128:128:128-f32:32:32-f64:64:64-v16:16:16-v32:32:32-v64:64:64-v128:128:128-n16:32:64"; pub const TARGET_TRIPLE: &str = "nvptx64-nvidia-cuda"; pub const POINTER_WIDTH: u32 = 64;