[前][次][番号順一覧][スレッド一覧]

ruby-changes:73113

From: Maxime <ko1@a...>
Date: Tue, 30 Aug 2022 00:51:38 +0900 (JST)
Subject: [ruby-changes:73113] 872940e215 (master): Add test with register reuse

https://git.ruby-lang.org/ruby.git/commit/?id=872940e215

From 872940e215dd571c45e9c30d96fa7b9f61dc0442 Mon Sep 17 00:00:00 2001
From: Maxime Chevalier-Boisvert <maxime.chevalierboisvert@s...>
Date: Thu, 19 May 2022 16:51:47 -0400
Subject: Add test with register reuse

---
 yjit/src/backend/ir.rs         | 16 ++++++++++++++++
 yjit/src/backend/x86_64/mod.rs |  3 ++-
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/yjit/src/backend/ir.rs b/yjit/src/backend/ir.rs
index e292160efc..22350ec506 100644
--- a/yjit/src/backend/ir.rs
+++ b/yjit/src/backend/ir.rs
@@ -779,4 +779,20 @@ mod tests { https://github.com/ruby/ruby/blob/trunk/yjit/src/backend/ir.rs#L779
 
         asm.compile_with_regs(&mut cb, vec![regs[0]]);
     }
+
+    // Multiple registers needed and register reuse
+    #[test]
+    fn test_reuse_reg()
+    {
+        let mut asm = Assembler::new();
+        let mut cb = CodeBlock::new_dummy(1024);
+        let regs = Assembler::get_scratch_regs();
+
+        let v0 = asm.add(Opnd::mem(64, SP, 0), Opnd::UImm(1));
+        let v1 = asm.add(Opnd::mem(64, SP, 8), Opnd::UImm(1));
+        let v2 = asm.add(v0, Opnd::UImm(1));
+        asm.add(v0, v2);
+
+        asm.compile_with_regs(&mut cb, vec![regs[0], regs[1]]);
+    }
 }
diff --git a/yjit/src/backend/x86_64/mod.rs b/yjit/src/backend/x86_64/mod.rs
index 03da5e4d10..17d542c3ca 100644
--- a/yjit/src/backend/x86_64/mod.rs
+++ b/yjit/src/backend/x86_64/mod.rs
@@ -99,7 +99,8 @@ impl Assembler https://github.com/ruby/ruby/blob/trunk/yjit/src/backend/x86_64/mod.rs#L99
                 Op::Label => {},
 
                 Op::Add => {
-                    assert_eq!(insn.out, insn.opnds[0]);
+                    // FIXME: this fails because insn.out is none sometimes
+                    //assert_eq!(insn.out, insn.opnds[0]);
                     add(cb, insn.opnds[0].into(), insn.opnds[1].into())
                 },
 
-- 
cgit v1.2.1


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]