From 6bed45b87358975da97fec45fd30eb095ad1dfc9 Mon Sep 17 00:00:00 2001 From: Jacob Young Date: Mon, 27 Feb 2023 16:12:02 -0500 Subject: [PATCH] codegen: fix test failures Various backend were mismatching arg instructions and function args. --- src/arch/aarch64/CodeGen.zig | 6 ++++-- src/arch/arm/CodeGen.zig | 6 ++++-- src/arch/x86_64/CodeGen.zig | 6 ++++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/arch/aarch64/CodeGen.zig b/src/arch/aarch64/CodeGen.zig index e7fef20a4f..818b04f890 100644 --- a/src/arch/aarch64/CodeGen.zig +++ b/src/arch/aarch64/CodeGen.zig @@ -4177,8 +4177,10 @@ fn airFieldParentPtr(self: *Self, inst: Air.Inst.Index) !void { } fn airArg(self: *Self, inst: Air.Inst.Index) !void { - const arg_index = self.arg_index; - self.arg_index += 1; + // skip zero-bit arguments as they don't have a corresponding arg instruction + var arg_index = self.arg_index; + while (self.args[arg_index] == .none) arg_index += 1; + self.arg_index = arg_index + 1; const ty = self.air.typeOfIndex(inst); const tag = self.air.instructions.items(.tag)[inst]; diff --git a/src/arch/arm/CodeGen.zig b/src/arch/arm/CodeGen.zig index 01a1d6b7eb..ceabe70438 100644 --- a/src/arch/arm/CodeGen.zig +++ b/src/arch/arm/CodeGen.zig @@ -4125,8 +4125,10 @@ fn genInlineMemsetCode( } fn airArg(self: *Self, inst: Air.Inst.Index) !void { - const arg_index = self.arg_index; - self.arg_index += 1; + // skip zero-bit arguments as they don't have a corresponding arg instruction + var arg_index = self.arg_index; + while (self.args[arg_index] == .none) arg_index += 1; + self.arg_index = arg_index + 1; const ty = self.air.typeOfIndex(inst); const tag = self.air.instructions.items(.tag)[inst]; diff --git a/src/arch/x86_64/CodeGen.zig b/src/arch/x86_64/CodeGen.zig index 20e443b83c..53d38f520a 100644 --- a/src/arch/x86_64/CodeGen.zig +++ b/src/arch/x86_64/CodeGen.zig @@ -3827,8 +3827,10 @@ fn genIntMulComplexOpMir(self: *Self, dst_ty: Type, dst_mcv: MCValue, src_mcv: M } fn airArg(self: *Self, inst: Air.Inst.Index) !void { - const arg_index = self.arg_index; - self.arg_index += 1; + // skip zero-bit arguments as they don't have a corresponding arg instruction + var arg_index = self.arg_index; + while (self.args[arg_index] == .none) arg_index += 1; + self.arg_index = arg_index + 1; const ty = self.air.typeOfIndex(inst); const mcv = self.args[arg_index];