diff options
| author | Richard Qin <richard.qin.001@gmail.com> | 2026-09-15 08:16:43 +0800 |
|---|---|---|
| committer | Richard Qin <richard.qin.001@gmail.com> | 2026-09-15 08:16:43 +0800 |
| commit | 4022e5c95210631e4aceb08eaf9d9071aa5aefc4 (patch) | |
| tree | a5922559836e45fb3459a3d070367912e1035b1a /tests/functional/91_fp_call_return_spill.sy | |
| download | rcc-master.tar.gz rcc-master.tar.xz | |
Diffstat (limited to 'tests/functional/91_fp_call_return_spill.sy')
| -rw-r--r-- | tests/functional/91_fp_call_return_spill.sy | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/tests/functional/91_fp_call_return_spill.sy b/tests/functional/91_fp_call_return_spill.sy new file mode 100644 index 0000000..7257017 --- /dev/null +++ b/tests/functional/91_fp_call_return_spill.sy @@ -0,0 +1,39 @@ +// 复现:call 返回的 float 被 par-Ocopy 接到 tmp,该 tmp 在高 fp 压力下被 spill, +// rega 在 dopm 中生成 Ocopy(SLOT, FA0) cls=Ks,emit 表查不到匹配 → die。 +// 详见 docs/bug-rega-fp-call-return-spill.md。 + +float h() { + return 0.5; +} + +float foo(int n) { + float a = h(); + + int i = 0; + float r = 0.0; + while (i < n) { + float fi = i * 1.0; + float t00 = fi * 0.10; float t01 = fi * 0.11; float t02 = fi * 0.12; + float t03 = fi * 0.13; float t04 = fi * 0.14; float t05 = fi * 0.15; + float t06 = fi * 0.16; float t07 = fi * 0.17; float t08 = fi * 0.18; + float t09 = fi * 0.19; float t10 = fi * 0.20; float t11 = fi * 0.21; + float t12 = fi * 0.22; float t13 = fi * 0.23; float t14 = fi * 0.24; + float t15 = fi * 0.25; float t16 = fi * 0.26; float t17 = fi * 0.27; + float t18 = fi * 0.28; float t19 = fi * 0.29; float t20 = fi * 0.30; + float t21 = fi * 0.31; float t22 = fi * 0.32; float t23 = fi * 0.33; + float t24 = fi * 0.34; float t25 = fi * 0.35; float t26 = fi * 0.36; + float t27 = fi * 0.37; float t28 = fi * 0.38; float t29 = fi * 0.39; + float t30 = fi * 0.40; float t31 = fi * 0.41; float t32 = fi * 0.42; + r = r + t00 + t01 + t02 + t03 + t04 + t05 + t06 + t07 + t08 + t09 + + t10 + t11 + t12 + t13 + t14 + t15 + t16 + t17 + t18 + t19 + + t20 + t21 + t22 + t23 + t24 + t25 + t26 + t27 + t28 + t29 + + t30 + t31 + t32; + i = i + 1; + } + return a + r; +} + +int main() { + putfloat(foo(3)); + return 0; +} |
