authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-04-03 01:34:05-04:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2023-04-03 17:45:16+02:00
logcd24ab7f6e56c8365896a9b2dfc506a787346ecb
tree06e7c9e86bcb62cc02b10cd52a4ba4df110aa970
parentfde1ec5d0e57471b43bab226a78da2eb61e6bb66

x86_64: canonicalise loops


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

src/arch/x86_64/CodeGen.zig+22-1
...@@ -6132,7 +6132,28 @@ fn airLoop(self: *Self, inst: Air.Inst.Index) !void {...@@ -6132,7 +6132,28 @@ fn airLoop(self: *Self, inst: Air.Inst.Index) !void {
6132 const loop = self.air.extraData(Air.Block, ty_pl.payload);6132 const loop = self.air.extraData(Air.Block, ty_pl.payload);
6133 const body = self.air.extra[loop.end..][0..loop.data.body_len];6133 const body = self.air.extra[loop.end..][0..loop.data.body_len];
6134 const jmp_target = @intCast(u32, self.mir_instructions.len);6134 const jmp_target = @intCast(u32, self.mir_instructions.len);
6135 try self.genBody(body);6135
6136 {
6137 try self.branch_stack.append(.{});
6138 errdefer _ = self.branch_stack.pop();
6139
6140 try self.genBody(body);
6141 }
6142
6143 var branch = self.branch_stack.pop();
6144 defer branch.deinit(self.gpa);
6145
6146 log.debug("airLoop: %{d}", .{inst});
6147 log.debug("Upper branches:", .{});
6148 for (self.branch_stack.items) |bs| {
6149 log.debug("{}", .{bs.fmtDebug()});
6150 }
6151 log.debug("Loop branch: {}", .{branch.fmtDebug()});
6152
6153 var dummy_branch = Branch{};
6154 defer dummy_branch.deinit(self.gpa);
6155 try self.canonicaliseBranches(true, &dummy_branch, &branch, true, false);
6156
6136 _ = try self.asmJmpReloc(jmp_target);6157 _ = try self.asmJmpReloc(jmp_target);
6137 return self.finishAirBookkeeping();6158 return self.finishAirBookkeeping();
6138}6159}