| ... | @@ -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 | } |