From 09e42ce4ed039e468de3892beecb30fbde770f41 Mon Sep 17 00:00:00 2001 From: Violet Date: Mon, 22 Sep 2025 23:48:47 +0000 Subject: [PATCH] No-op implementation of vprintf This should be replaced later, possibly with an SSA pass. --- ptx/lib/zluda_ptx_impl.bc | Bin 24896 -> 25012 bytes ptx/lib/zluda_ptx_impl.cpp | 10 ++++++++++ ptx/src/pass/llvm/emit.rs | 2 ++ ptx/src/pass/replace_known_functions.rs | 2 +- 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/ptx/lib/zluda_ptx_impl.bc b/ptx/lib/zluda_ptx_impl.bc index afc9c2c502e413f473ecd473e5f781656d4a9e4c..0e9b6ef50f6002f5a8f1c2faad5a048eb011529c 100644 GIT binary patch delta 6449 zcmX?bh;hqd#tABn_a~}mGx|=PD9`9LapN^N9%iP60&@MwgSq;TKdzjzXaa+R++mIm zb1s7(hMSIxS=*y?B^ZsGovsw^yyb8}sjgQo-ogWY67 z&P^T;A=e}q9BfhGRTIeCz?O4?O_<4ihQc0386S>E2~L9S%z+ZZ(<~%94n@p3R=I$) zNrp$5DVqr-?j!LiK|zh9(7;FH$pNX&>|E0r882_1$NiA4euD)=gC{Qo3>YPNn4V@z zWn|pI1`}eCG+1JlzVK%Q!vnaGQG$o-d8f~ej0YHDVkrkEXf0uN<3m$+^%9dAy8}Z3 zOc}^Dt!%}~%nA$^3=9nQVDSbXiJ+fbA7nT%XfOycFflMN2!PZjVKQ*}7_9YZqSwLjp5M2?&EsTe;&x1e&e83Kch@Ij;4Y!6C^9i~MyZ_#6ayB<2TvP*~6`$jrpxXkc(`a-3AE^hD{mh8j;4SPnW!O}-~3#s+3`ftc)I=C9Vt_oYN3!mlP9Nvkj( zn;b6f!sf`X$ia4b@_#C3T!kdFWI){JK+TPvus{&Wh+g&8+n0ZH<|f*Rw`$!dy0j7uh0 zDq8BlWNJOg!hD$5k&$gP&mn;x2@wa5CdOmjS9BZ;Pb@ji+sMwgnWtS4D*kNpLq!Rx zMrKp*2{Ohn3!D|$5)4jn&^XxP$k?JFk??4;u#yv7W3vQHv-0F zn6QE41k4!s$%V>}j2|a&R(8Z@*!IaBDp@i{?1~&>2@3470TSUR6B^TX872rar|>xm z=p1mE+^3?!#2`L-hf1{HeGL{37N#a9B?U2t6CI2&ZBYgq%4{cOK+bNI$#FL5kx+m* zs_1~IQzByng8zWk$tbDej3Y-AtHg=PiK@bk3X@A!tp&;wM2=)QG4x2tfI?OB!Q=y~ zqVCGAhjJl0`8E8G6k! zh6W7+EX=FLS{`&f(ewDy#Ap2CeW0S@Nx24qgYXh9@)(?8#3%*dbB6o z8%t_6Iyb~5IIw9iO)yxuFyY7n1}6cYHANh=xW!H+EEVB7<|)x5A>qK$)VOqVlW`K` zg2_*fJsFQp);AH8)+rEZ(pKA(aEY4@q;|#;#cO>KwWX62OcWU3Pi{03X6&9k)kI1B zQTu}33C%oVUX7k}Bvu@RsuP`j&O}9Ws!*d;Oat45gI<~joz=}&Hw2lPIUEf(#7yQk zEoNefo7`Y(7;wUzy@~(*2RdBqNYFYy0b!2kCG zI{Gr1(M+_yVKJkL2IH@@jC&7zJYcrNL_MsGj3R=qg$kXU40=Cb$mLrh|7)TAFGu+= z3&9LH*;tqC=%Bz8k}Bh|NXO@~4VV{@0_By=W`5OP_X3PAu-8HuFWOl_LJKC(GLsFx z`>X+EFwDF!jtJvln2WKn9C8pj)|h(gkjXh?D38$<#B<(mxd3De%*eVI?6nub_Pk*K zHJQg;CKT>ynAsqEARd4^+9eU>%$Vm8M?-i4Pi&AKjWE8w?gD%5g2}b!vh_dRm@@*D zzRYH>YM;o^Ip+X-4H{bDC^&`j@3V$`i7I7H>JCck9~kA4QAPk4ME4EOc^&NY(ac!j zXgGx#uKUqJ^#e*e$Y#`M1PGyM@7}PXeIwkE1&)DJSkbh@1fFNr~10$ui-ZGyoNq2bj7UB%w?$ZpNKYMazyHn9(f2!kn$slnP~b z>$E(b6LCY3IhoH%fJbLD#~dhg&1L}@Q)f#DjJamZ1Q=6iYkkB5nBuJoFs9D7fF&@| zZ4of0&UTL#FwyM+D-2nR9oh|BiaFY$f;u}Nv{<&qaa>buzU^nuvS)&<#Dc?pkUA~l zu4};=BMwIM69!+H^v?+KsDEHOXZYcef)0N%PvZtY$uA1b5BQ8&_Fv#`=JC3~y_w~( z!%ORdvp=KV>4g8x~&V$^?cLiE!C#;?P#!5l)LNiZ; z^$CG9Enr zYGG2rJ14oK*F>Y=vd!TGT>H%ikoJP^V&>ZiEZJ^XFnYqp1lJkc#AWNXtXEiw)2cI7rpNjfY2p<=}xJ(SsJvCeZppCya9vR7I4l zhn^uXOmiqx8l(o%i4dFtRgu)%2sLBUR5mGyE!kmWnNWpMiAx0CAmx3Q>q4l?O;cN; zDqn{QWkXfQ1g`m<;M^|VB+S^%-2C^#!!`!D0|~nxZfde@yUCHG(mc7zc1t}2zeB6& zKgAuPGlZ?fP6)dyGBm2xbUXFTIUvzwparcIH}(khC<@dXB_%K@a7hDQ z@?ei(kD@|7O!ADvLDi+3pmG;|CP1shP-7;TinBb&!A(4g2y^EoiDZuRT~IYsjr|SU z1U5n%fD#eb!mP<0!QD{FtH!|wZ2>!BlJ>!@P&*oZo1scX&CVG@op{6M7}SpB$>R21 zqt)SPbvRlbg6hlB>Tt9=9IXzqR)*^J^a|-R0HFRhIb=5C42M9Jjj9TdTCMMBe zq?LhX(g$5G<07VH4yTpSD(9(@lR=xqpOeta#=w~+nS*TwR8rO0&7iHJ*vej1 zgu$H#zEiv$f_EE)Ztz+t-fIy3&YQ9DMT5j*z8Q>f8l-RWoltz=Aor7xBj`ti(nNlb zL%$kS5AkPQ`rDxXnZM%^N2BHvffb*)8?~?23*1;F*{HWzP@-76(fEvDM6+C@`7gm4 zpEVk-b_?xTtk-BeU--pit490jq8u$1jgCLWHB7o2oexNOJn3n4y(^Kiq_5HalSGHf zj7G0c$rE2@H2O`Ija&>2JPZsBFd8P_3$?G8i=iHFG01|YToAXyXqbk5Tnr3+ z3=9k~8YIrC!oY9_Y7mSDiG$2}!Ugd^jE0GSSj@L}!=u6nVA=I8rB0jzoKbReuekp8VO>k~z1Bu!*ENA$^sK8h&aO2PhM$cvjj|SES&Ac5_ z91cu64qF=|n3*0l^Rh_)0V!tike*`3!4Sm3q~XzQeq+IoMurJa0uGK+dk(Ta=Kc5o z|NnZ1YYY?2bP7IzlrwK&Yhd}p>zKgJ00N#83=FoD6*)J#2+TRi!o+*Yf%jU1(*ZW& z7PEq8&V$lE8ut zfT5m&p@HEq-(n1SVh6igXI%7F=9`&y4Nq1t-2 zo_iuIs^hdI#Lqq8YhZAIYc)#nD19!&B=v+*fPn)h>cHlaBcLIp#mF#$m1*-qVMi9m zj?K&x35+Tq_?8+ZC2U~iXlgX#cQ;6C*uu!sbWq0UpsmcY4#tOUiX3d+liMZr+4eAU zG%;SDyhl=3{1cl32iqA>jYNSINwy9N!-5A4EC&}jPLi@>yT`zCuwmw82Pq?wC%g^< zJTvA6d{9`>EXd5n;AmiQWOAESs!Xr*21bTN1qKFI1_lOU7Du*b2}6xX3M>a5gxV+D zON+9D*-T(I8<_oRvYoUTg!yQ4l(Y(C+vIv_7dAt7MGm&flTS*oWGfbEN-$`hTp<(0 zs5tqwOd*>iNG@!$lk6PEJ(KUts_=DLaX1=WNKur?h&}b21vtQecr}Njh?X0pzX+(yfPh z7$glHo+z*!Wa4?0z|E3+gkfT{01LN42eY08n++2qLiT_%Qwm(RSzn?B?mfN(2RNqO zY*S}QlV(z$k;}o6xNUN{nm8lFjg0?OwQ7CWPCGujovcG8d48{F5(AiPp0SG$kY$n6ua< z1%S;;;XBBtXb39VxcizUS{MZ2&`zGxdL93mu(VhS?!nq>?P8U$FFyC>f^l4N{4`KwWE1VmnT zbIgVeJD5DTc*}#1XL=c5ni!2DG+CPqIark0*g#?M*Qp^U!GTSCX@bGJg$dwv!J|{e zF^gO5M8Z-Lo@1U8JrWWQ98HZ=C$BP2VpN#SYvL&hu_9T)RotcAaY-g`5k%jb_{sSu z5{#*nJ4_Tr-w8N~TTD3UrD@Q)dY>%Bnc0)~nkX^en*6{-l#zAvHxm`fR-s0zmza13oBn*eci{$*}1x<5Oq57tL5u zK(0wcPO-zE1N=WH@c%i0j-E(!GcjcKI6cNUsnEcyJHgub% z0@PfHaSz&SPJpd>!2YS1m9f!40OZPThP|JAU_4F{LnJrDj0RZ)b$`v|TyvRvWH&?2 z1{-{$y$0rH33iYxE1*7r@Eiocx-n-2C_S0YT*N-{2m72I?bT>#furCQ#-Gm`?l`KH zB&q*nRDbtS4jE+xa6Oq_57K_2b8bWXJTyZVI2ul2hHHPYP`!>x2icH}03nFwP~Dsx zR;b0TgCGCT7*3Gl4h#4!iT)Y&WmW3JiU z0b}ZHnE+$1*^&{l0H%0r0*tw4Yrqni=(Y$LbImr76)@550V@nyiXGYwTZ%c_p@M66 zJZQ0Oi{rSa$b8$+oMq1hS&0RQ`y?blby332$)_#lR6i&*-{&)8*?)n%naAq__hy#E z4z02rOd@xrcEDA(PUf?cPq8`iV0$x9qt$}L3e7@O4(l`;1|+gOF$$)$|Jb0+1}R0> z2$pQ-Iibkj%)@Lo=dg}rQIpLBnPwXv4a4IC9EuYe`Hgt#0n1wh?+H91 zHyRrpj(0SI3-)P~Ct4{cK`c6G|K+fPv(SaZI*i5viR_1%G+~xJ*vM93aQcDCGJ_Ke zH=J$H2-&F5U^!t47atxYl}3*#N z5Iz~7l5jit2Geti8%ct_mTe9 z6TP=3QY@M-!P=HxlQ-Cy)@w~okbo4*r$bsEvR!O|7Q6wf25vk&3M>Z?c!?ggXf}aX z32Q<*CqY$2xO(Ur^1?KSGNnNa|8T(>P!$QSjZibXrm{&vZ1D~g%Y-V7Ok5(U1}Ww< zTo*!BuA15kRe3s0C>yFWdUBVoJR|euRkmB|AMiP}ivCmF5jsQII_!k7t0F_AN>#U0 z&zu7iO$J)f+H7r)K#!t8tr4Up6n0wRphVL{b*SXt9>E?(g?gCe8HIzYOE*E~&iYJ% z)^o1LOfVH^d5(h{j1m!M&Pfu<9Ot{BYFdr`4cY`Yo`A|)39}}11b0Ivj~WLXv<2*h zN!kUoLhbnL(+pL@YIe>L>cks1$DpPpO}4l18m;R_>$>XEx(-wWj@EUfb)Cb=tLtXD zud8R=&MCA**3h8=)Db_?93a^AFlwRSo0vp@kyZwlNiTG{jEk6(IhyxWSP6llb ze@;Sc5`AZuWDd3!P)Si^H-ol@mQzqk<7SrWb58X^I(4DOj?l_(+F1@*jb&bMECa2w z9`YpiDB9@4)SR<9DB<)(2`c%~N2Ev5M;|76-shl%6RR>*ve8!*X1^IPOvw!kScRJW zSpuqXB5w$f`5Na{6Al(ITi@W2^f4FM?B*%M$S6EH*~_!OP=SHLgn@y=x1VJ5MrKEpu@nx02+UY=VoAFV_;zLVPIfjWSD%+o6j(lfq}t*3#5U8A(fkf zL6Cugp^Te>L5P8YK@uVimj`h(H?#UAbJUA4FfdqiF))B=(4aGi4g-Tf7Xt&R{{o|7 z;xSNh7!4E8f;g#{i=iIuHkiaRE(Y)bGmHj_ zbE+^fY=IgCqe0>zho0er_!CCM#P4!3Fo-fRFu-V-_$R0bVD$h0_W%Eb4Ehf>2u}Zp uhzoEtFsL&yFu-V-LFU{H3>pj!4Ca&fhPrb+g~X1=W}Yy6uFc5_fs6oD_(#J4 diff --git a/ptx/lib/zluda_ptx_impl.cpp b/ptx/lib/zluda_ptx_impl.cpp index f247f45..16fab2e 100644 --- a/ptx/lib/zluda_ptx_impl.cpp +++ b/ptx/lib/zluda_ptx_impl.cpp @@ -842,4 +842,14 @@ typedef uint32_t ShflSyncResult __attribute__((ext_vector_type(2))); return output.u32; } + + + + int FUNC(vprintf)(const char *format __attribute__((unused)), void *vlist __attribute__((unused))) + { + // TODO: replace calls to vprintf with a raising pass to printf when we have a mechanism + // to write SSA passes + // Use https://github.com/ROCm/llvm-project/blob/99a81d16b9d811cadd420190bed16981a0a57bc6/llvm/lib/Transforms/Utils/AMDGPUEmitPrintf.cpp#L426 + return -1; + } } diff --git a/ptx/src/pass/llvm/emit.rs b/ptx/src/pass/llvm/emit.rs index 0a68f8b..05b9eb7 100644 --- a/ptx/src/pass/llvm/emit.rs +++ b/ptx/src/pass/llvm/emit.rs @@ -72,6 +72,7 @@ pub(crate) fn run<'input>( } } if let Err(err) = module.verify() { + eprintln!("{}", module.print_module_to_string().to_str()); panic!("{:?}", err); } Ok(module) @@ -2853,6 +2854,7 @@ impl<'a> MethodEmitContext<'a> { fn emit_trap(&mut self) -> Result<(), TranslateError> { self.emit_intrinsic(c"llvm.trap", None, None, vec![])?; + unsafe { LLVMBuildUnreachable(self.builder) }; Ok(()) } diff --git a/ptx/src/pass/replace_known_functions.rs b/ptx/src/pass/replace_known_functions.rs index 99509fe..4443275 100644 --- a/ptx/src/pass/replace_known_functions.rs +++ b/ptx/src/pass/replace_known_functions.rs @@ -21,7 +21,7 @@ fn replace_with_ptx_impl<'input>( resolver: &mut GlobalStringIdentResolver2<'input>, fn_name: SpirvWord, ) { - let known_names = ["__assertfail"]; + let known_names = ["__assertfail", "vprintf"]; if let Some(super::IdentEntry { name: Some(name), .. }) = resolver.ident_map.get_mut(&fn_name)