jhuber6 wrote:

> Do we want some sort of optimization for constant printf? 99% of the time, we 
> could parse the string at compile-time. (This sort of optimization is common 
> for embedded targets.)

I was going to make a follow-up patch that simply skipped sending back the size 
if there were no arguments to parse. If we enable these builtins as available 
on the GPU (Which I may very soon) we will also get `printf -> puts` 
optimizations. There's no passes that optimize things like `printf('%d", 10)` 
to `puts("10")` as far as I know.

> If the format string isn't constant, is parsing the string on the GPU really 
> slower than asking the host for the size? printf format strings aren't that 
> complicated, especially if you aren't actually doing the formatting.

Well, this approach basically trades speed for resource usage. I had an old 
implementation that did the parsing on the GPU side, 
(https://reviews.llvm.org/D158774), and that had an unfortunate amount of 
registers used when the arguments are truly just an array in this sense. Plus, 
since I wrote that there's been a lot more added to the format parsing, since I 
think future C releases are supposed to support 128 bit integers or something.

I think my old version used something like 54 SGPRs and 40 VGPRs while this 
version is
```
printf.c:4:0: Function Name: foo                                                
                                                                                
      
printf.c:4:0:     SGPRs: 36
printf.c:4:0:     VGPRs: 19
```
 
> Does this support `%n`?

No, I specifically disabled it in the `printf` config. The fact that it writes 
back a pointer made it too annoying to implement, and I think in general people 
consider `%n` a security issue so it's probably not a huge loss.

https://github.com/llvm/llvm-project/pull/96369
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to