aboutsummaryrefslogtreecommitdiff
path: root/tests/functional/91_fp_call_return_spill.sy
diff options
context:
space:
mode:
authorRichard Qin <richard.qin.001@gmail.com>2026-09-15 08:16:43 +0800
committerRichard Qin <richard.qin.001@gmail.com>2026-09-15 08:16:43 +0800
commit4022e5c95210631e4aceb08eaf9d9071aa5aefc4 (patch)
treea5922559836e45fb3459a3d070367912e1035b1a /tests/functional/91_fp_call_return_spill.sy
downloadrcc-master.tar.gz
rcc-master.tar.xz
Set up a git repoHEADmaster
Diffstat (limited to 'tests/functional/91_fp_call_return_spill.sy')
-rw-r--r--tests/functional/91_fp_call_return_spill.sy39
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;
+}