Commit 30bdea1
[LoongArch][LASX] Fix fptosi/fptoui from <4 x float> to <4 x i64> (#214621)
These were lowered through a 128-bit f32 to i32/u32 conversion followed
by a sign/zero extension, which silently clamps any finite input that
does not fit in i32/u32 instead of producing the correct 64-bit integer.
Convert directly with xvftintrzl.l.s for the signed case. For the
unsigned case there is no f32 -> u64 lane conversion in LASX, so widen
to f64 first (which is exact) and convert with xvftintrz.lu.d. Both
forms use xvpermi.d to move the inputs into the low 64 bits of each
128-bit lane, as required by these lane-wise conversions.
Built and verified on Arch Linux for Loong64:
lcpu-club/loongarch-packages#974. Both the LLVM
side and the Highway test suite that discovered the bug have passed
verification.
Assisted by Kimi K3 AI agent.
Fixes #2146051 parent b88a76c commit 30bdea1
3 files changed
Lines changed: 12 additions & 10 deletions
File tree
- llvm
- lib/Target/LoongArch
- test/CodeGen/LoongArch/lasx/ir-instruction
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2193 | 2193 | | |
2194 | 2194 | | |
2195 | 2195 | | |
2196 | | - | |
2197 | | - | |
2198 | | - | |
| 2196 | + | |
| 2197 | + | |
| 2198 | + | |
2199 | 2199 | | |
2200 | 2200 | | |
2201 | 2201 | | |
| |||
2204 | 2204 | | |
2205 | 2205 | | |
2206 | 2206 | | |
2207 | | - | |
2208 | | - | |
2209 | | - | |
| 2207 | + | |
| 2208 | + | |
| 2209 | + | |
| 2210 | + | |
2210 | 2211 | | |
2211 | 2212 | | |
2212 | 2213 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
61 | 61 | | |
62 | 62 | | |
63 | 63 | | |
64 | | - | |
65 | | - | |
| 64 | + | |
| 65 | + | |
66 | 66 | | |
67 | 67 | | |
68 | 68 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
67 | 67 | | |
68 | 68 | | |
69 | 69 | | |
70 | | - | |
71 | | - | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
72 | 73 | | |
73 | 74 | | |
74 | 75 | | |
| |||
0 commit comments