authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-03-13 19:46:47-04:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-03-15 00:01:44-04:00
log9a4e9215fcd91cc75e569195834ba1428a736fa0
treebd52f194934336196d82ff40c77f6fdcdfc9e2e4
parent8be607348061674f7be766d6ee86eef3a2d28727

x86_64: fix error code paths to not have extra pops


1 files changed, 35 insertions(+), 35 deletions(-)

src/arch/x86_64/CodeGen.zig+35-35
...@@ -4410,16 +4410,16 @@ fn airCondBr(self: *Self, inst: Air.Inst.Index) !void {...@@ -4410,16 +4410,16 @@ fn airCondBr(self: *Self, inst: Air.Inst.Index) !void {
4410 // Capture the state of register and stack allocation state so that we can revert to it.4410 // Capture the state of register and stack allocation state so that we can revert to it.
4411 const saved_state = try self.captureState();4411 const saved_state = try self.captureState();
44124412
4413 try self.branch_stack.append(.{});4413 {
4414 errdefer {4414 try self.branch_stack.append(.{});
4415 _ = self.branch_stack.pop();4415 errdefer _ = self.branch_stack.pop();
4416 }
44174416
4418 try self.ensureProcessDeathCapacity(liveness_condbr.then_deaths.len);4417 try self.ensureProcessDeathCapacity(liveness_condbr.then_deaths.len);
4419 for (liveness_condbr.then_deaths) |operand| {4418 for (liveness_condbr.then_deaths) |operand| {
4420 self.processDeath(operand);4419 self.processDeath(operand);
4420 }
4421 try self.genBody(then_body);
4421 }4422 }
4422 try self.genBody(then_body);
44234423
4424 // Revert to the previous register and stack allocation state.4424 // Revert to the previous register and stack allocation state.
44254425
...@@ -4430,16 +4430,16 @@ fn airCondBr(self: *Self, inst: Air.Inst.Index) !void {...@@ -4430,16 +4430,16 @@ fn airCondBr(self: *Self, inst: Air.Inst.Index) !void {
44304430
4431 try self.performReloc(reloc);4431 try self.performReloc(reloc);
44324432
4433 try self.branch_stack.append(.{});4433 {
4434 errdefer {4434 try self.branch_stack.append(.{});
4435 _ = self.branch_stack.pop();4435 errdefer _ = self.branch_stack.pop();
4436 }
44374436
4438 try self.ensureProcessDeathCapacity(liveness_condbr.else_deaths.len);4437 try self.ensureProcessDeathCapacity(liveness_condbr.else_deaths.len);
4439 for (liveness_condbr.else_deaths) |operand| {4438 for (liveness_condbr.else_deaths) |operand| {
4440 self.processDeath(operand);4439 self.processDeath(operand);
4440 }
4441 try self.genBody(else_body);
4441 }4442 }
4442 try self.genBody(else_body);
44434443
4444 var else_branch = self.branch_stack.pop();4444 var else_branch = self.branch_stack.pop();
4445 defer else_branch.deinit(self.gpa);4445 defer else_branch.deinit(self.gpa);
...@@ -4850,17 +4850,17 @@ fn airSwitch(self: *Self, inst: Air.Inst.Index) !void {...@@ -4850,17 +4850,17 @@ fn airSwitch(self: *Self, inst: Air.Inst.Index) !void {
4850 // Capture the state of register and stack allocation state so that we can revert to it.4850 // Capture the state of register and stack allocation state so that we can revert to it.
4851 const saved_state = try self.captureState();4851 const saved_state = try self.captureState();
48524852
4853 try self.branch_stack.append(.{});4853 {
4854 errdefer {4854 try self.branch_stack.append(.{});
4855 _ = self.branch_stack.pop();4855 errdefer _ = self.branch_stack.pop();
4856 }
48574856
4858 try self.ensureProcessDeathCapacity(liveness.deaths[case_i].len);4857 try self.ensureProcessDeathCapacity(liveness.deaths[case_i].len);
4859 for (liveness.deaths[case_i]) |operand| {4858 for (liveness.deaths[case_i]) |operand| {
4860 self.processDeath(operand);4859 self.processDeath(operand);
4861 }4860 }
48624861
4863 try self.genBody(case_body);4862 try self.genBody(case_body);
4863 }
48644864
4865 branch_stack.appendAssumeCapacity(self.branch_stack.pop());4865 branch_stack.appendAssumeCapacity(self.branch_stack.pop());
48664866
...@@ -4878,18 +4878,18 @@ fn airSwitch(self: *Self, inst: Air.Inst.Index) !void {...@@ -4878,18 +4878,18 @@ fn airSwitch(self: *Self, inst: Air.Inst.Index) !void {
4878 // Capture the state of register and stack allocation state so that we can revert to it.4878 // Capture the state of register and stack allocation state so that we can revert to it.
4879 const saved_state = try self.captureState();4879 const saved_state = try self.captureState();
48804880
4881 try self.branch_stack.append(.{});4881 {
4882 errdefer {4882 try self.branch_stack.append(.{});
4883 _ = self.branch_stack.pop();4883 errdefer _ = self.branch_stack.pop();
4884 }
48854884
4886 const else_deaths = liveness.deaths.len - 1;4885 const else_deaths = liveness.deaths.len - 1;
4887 try self.ensureProcessDeathCapacity(liveness.deaths[else_deaths].len);4886 try self.ensureProcessDeathCapacity(liveness.deaths[else_deaths].len);
4888 for (liveness.deaths[else_deaths]) |operand| {4887 for (liveness.deaths[else_deaths]) |operand| {
4889 self.processDeath(operand);4888 self.processDeath(operand);
4890 }4889 }
48914890
4892 try self.genBody(else_body);4891 try self.genBody(else_body);
4892 }
48934893
4894 branch_stack.appendAssumeCapacity(self.branch_stack.pop());4894 branch_stack.appendAssumeCapacity(self.branch_stack.pop());
48954895