[PATCH] D129715: [LoongArch] Heuristically load FP immediates by movgr2fr from materialized integer

Gong LingQin via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Jul 15 01:53:35 PDT 2022


gonglingqin added a comment.

In D129715#3653907 <https://reviews.llvm.org/D129715#3653907>, @xen0n wrote:

> In D129715#3653900 <https://reviews.llvm.org/D129715#3653900>, @gonglingqin wrote:
>
>> I used 3A5000 on llvm13 to test materialized integer within 1,2 and 4 instructions.the results show that the performance is the best when using no more than 2 instructions. Maybe we should test the situation materialized integer within 3 instructions.
>
> Could be better to find some time to upgrade your benchmarking environment for testing the actual main branch. ;-)
>
> Regarding the actual benchmarks, yes I think testing the 3-instruction case could be useful. But again, it may not make a significant difference, since the IEEE-754 biased exponent is occupying the highest 12 bits (except the sign bit), all f64's with top 12 bits zeroed are denormals. And numbers whose binary representation have big "holes" of all-0s or 1s for their two "middle"  20-bit segments or lowest 12 bits are probably not commonly used in the wild, let alone being used as immediates. You could try benchmarking of course, but I doubt the result would be much different from the 2-insn case.
>
> (The 4-insn case is useless and equivalent to unconditionally loading via integer immediates, because all 64-bit values can be loaded in 4 insns (`lu12i.w + ori + lu32i.d + lu52i.d`) in LA64, and in LA32 you need two pairs of materialization and GPR-FPR moves for the higher and lower 32 bits anyway.)

The test results show that the performance of materialized integer within 3 instructions is better than that of the 2-instructions case. The test results are shown in the table

| Benchmarks  | Score of 2 instructions case | Score of 3 instructions case | diff |
| 433.milc    | 13.2                         | 13.2                         | 0    |
| 444.namd    | 15                           | 15.1                         | 0.1  |
| 447.dealII  | 26.6                         | 26.7                         | 0.1  |
| 450.soplex  | 23.6                         | 24.2                         | 0.6  |
| 453.povray  | 23.3                         | 23.4                         | 0.1  |
| 470.lbm     | 21.5                         | 21.9                         | 0.4  |
| 482.sphinx3 | 25.5                         | 25.5                         | 0    |
|

It seems that 3-instructions case outperforms the other cases. @xen0n, Do you have any suggestions?
(Since we do not support flang for the time being, I didn't test fortran related topics)


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D129715/new/

https://reviews.llvm.org/D129715



More information about the llvm-commits mailing list