Commit 02d09d1328

Andrew Kelley <andrew@ziglang.org>
2020-08-05 00:31:54
codegen: introduce toCanonicalReg to clean up x86-specific logic
1 parent ea3cc77
Changed files (1)
src-self-hosted
src-self-hosted/codegen.zig
@@ -588,9 +588,9 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type {
             entry.value = .dead;
             switch (prev_value) {
                 .register => |reg| {
-                    const reg64 = if (arch == .x86_64) reg.to64() else reg;
-                    _ = branch.registers.remove(reg64);
-                    branch.markRegFree(reg64);
+                    const canon_reg = toCanonicalReg(reg);
+                    _ = branch.registers.remove(canon_reg);
+                    branch.markRegFree(canon_reg);
                 },
                 else => {}, // TODO process stack allocation death
             }
@@ -2097,5 +2097,14 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type {
                 else => return reg,
             }
         }
+
+        /// For most architectures this does nothing. For x86_64 it resolves any aliased registers
+        /// to the 64-bit wide ones.
+        fn toCanonicalReg(reg: Register) Register {
+            return switch (arch) {
+                .x86_64 => reg.to64(),
+                else => reg,
+            };
+        }
     };
 }