aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJacob Young <jacobly0@users.noreply.github.com>2023-03-13 19:46:47 -0400
committerJacob Young <jacobly0@users.noreply.github.com>2023-03-15 00:01:44 -0400
commit9a4e9215fcd91cc75e569195834ba1428a736fa0 (patch)
treebd52f194934336196d82ff40c77f6fdcdfc9e2e4 /src
parent8be607348061674f7be766d6ee86eef3a2d28727 (diff)
downloadzig-9a4e9215fcd91cc75e569195834ba1428a736fa0.tar.gz
zig-9a4e9215fcd91cc75e569195834ba1428a736fa0.zip
x86_64: fix error code paths to not have extra pops
Diffstat (limited to 'src')
-rw-r--r--src/arch/x86_64/CodeGen.zig70
1 files changed, 35 insertions, 35 deletions
diff --git a/src/arch/x86_64/CodeGen.zig b/src/arch/x86_64/CodeGen.zig
index 3b7dc0db57..a547b1222d 100644
--- a/src/arch/x86_64/CodeGen.zig
+++ b/src/arch/x86_64/CodeGen.zig
@@ -4410,16 +4410,16 @@ fn airCondBr(self: *Self, inst: Air.Inst.Index) !void {
// Capture the state of register and stack allocation state so that we can revert to it.
const saved_state = try self.captureState();
- try self.branch_stack.append(.{});
- errdefer {
- _ = self.branch_stack.pop();
- }
+ {
+ try self.branch_stack.append(.{});
+ errdefer _ = self.branch_stack.pop();
- try self.ensureProcessDeathCapacity(liveness_condbr.then_deaths.len);
- for (liveness_condbr.then_deaths) |operand| {
- self.processDeath(operand);
+ try self.ensureProcessDeathCapacity(liveness_condbr.then_deaths.len);
+ for (liveness_condbr.then_deaths) |operand| {
+ self.processDeath(operand);
+ }
+ try self.genBody(then_body);
}
- try self.genBody(then_body);
// Revert to the previous register and stack allocation state.
@@ -4430,16 +4430,16 @@ fn airCondBr(self: *Self, inst: Air.Inst.Index) !void {
try self.performReloc(reloc);
- try self.branch_stack.append(.{});
- errdefer {
- _ = self.branch_stack.pop();
- }
+ {
+ try self.branch_stack.append(.{});
+ errdefer _ = self.branch_stack.pop();
- try self.ensureProcessDeathCapacity(liveness_condbr.else_deaths.len);
- for (liveness_condbr.else_deaths) |operand| {
- self.processDeath(operand);
+ try self.ensureProcessDeathCapacity(liveness_condbr.else_deaths.len);
+ for (liveness_condbr.else_deaths) |operand| {
+ self.processDeath(operand);
+ }
+ try self.genBody(else_body);
}
- try self.genBody(else_body);
var else_branch = self.branch_stack.pop();
defer else_branch.deinit(self.gpa);
@@ -4850,17 +4850,17 @@ fn airSwitch(self: *Self, inst: Air.Inst.Index) !void {
// Capture the state of register and stack allocation state so that we can revert to it.
const saved_state = try self.captureState();
- try self.branch_stack.append(.{});
- errdefer {
- _ = self.branch_stack.pop();
- }
+ {
+ try self.branch_stack.append(.{});
+ errdefer _ = self.branch_stack.pop();
- try self.ensureProcessDeathCapacity(liveness.deaths[case_i].len);
- for (liveness.deaths[case_i]) |operand| {
- self.processDeath(operand);
- }
+ try self.ensureProcessDeathCapacity(liveness.deaths[case_i].len);
+ for (liveness.deaths[case_i]) |operand| {
+ self.processDeath(operand);
+ }
- try self.genBody(case_body);
+ try self.genBody(case_body);
+ }
branch_stack.appendAssumeCapacity(self.branch_stack.pop());
@@ -4878,18 +4878,18 @@ fn airSwitch(self: *Self, inst: Air.Inst.Index) !void {
// Capture the state of register and stack allocation state so that we can revert to it.
const saved_state = try self.captureState();
- try self.branch_stack.append(.{});
- errdefer {
- _ = self.branch_stack.pop();
- }
+ {
+ try self.branch_stack.append(.{});
+ errdefer _ = self.branch_stack.pop();
- const else_deaths = liveness.deaths.len - 1;
- try self.ensureProcessDeathCapacity(liveness.deaths[else_deaths].len);
- for (liveness.deaths[else_deaths]) |operand| {
- self.processDeath(operand);
- }
+ const else_deaths = liveness.deaths.len - 1;
+ try self.ensureProcessDeathCapacity(liveness.deaths[else_deaths].len);
+ for (liveness.deaths[else_deaths]) |operand| {
+ self.processDeath(operand);
+ }
- try self.genBody(else_body);
+ try self.genBody(else_body);
+ }
branch_stack.appendAssumeCapacity(self.branch_stack.pop());