[llvm] Try to use non-volatile registers for `preserve_none` parameters (PR #88333)

David Li via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 19 15:51:36 PDT 2024


david-xl wrote:

> I ran the udp protobuf parsing micro benchmarks on my desktop. Following are the results. Base uses the original preserve_none implementation. Test uses the new parameter passing order from this patch.
> 
> ```
>                                                       base           test
> BM_Parse_Proto2<FileDescSV, InitBlock, Alias>    677.912MB/s       693.477MB/s        +
> BM_Parse_Proto2<FileDesc, InitBlock, Copy>       727.151MB/s       752.567MB/s        +
> BM_Parse_Proto2<FileDesc, UseArena, Copy>        710.576MB/s       740.293MB/s        +
> BM_Parse_Proto2<FileDesc, NoArena, Copy>         391.355MB/s       390.845MB/s        =
> ```
> 
> The first 3 sub tests got performance improvement due to reduced register copy instructions from the preserve_none parsing functions. The last test is not impacted. I checked its profile, found there are more register spilling in parsing function FastSS1. Because there is no live ranges change, I think it's more like a register allocation problem.
> 
> So the general result is very positive for protobuf parsing.

Very promising. Can you update the discourse thread with the results and propose for the change in preserve_none?

https://github.com/llvm/llvm-project/pull/88333


More information about the llvm-commits mailing list