authorgravatar for joachim.schmidt557@outlook.comJoachim Schmidt <joachim.schmidt557@outlook.com> 2022-01-09 19:03:45+01:00
committergravatar for joachim.schmidt557@outlook.comJoachim Schmidt <joachim.schmidt557@outlook.com> 2022-01-09 19:03:45+01:00
loga1526f069a279f5527ff88492d51aae739aa6d93
tree5019c718d5c972f57a2151704a3b5c1288996106
parent77ca77cf144e3f7e8be53b6e4220a4efc313628b
signaturelock-open Commit is signed but in an unrecognized format.

stage2 ARM: pass behavior/bool.zig


2 files changed, 227 insertions(+), 192 deletions(-)

src/arch/arm/CodeGen.zig+36-5
......@@ -2504,6 +2504,29 @@ fn airCondBr(self: *Self, inst: Air.Inst.Index) !void {
25042504 break :blk condition.negate();
25052505 },
25062506 .register => |reg| blk: {
2507 try self.spillCompareFlagsIfOccupied();
2508
2509 // cmp reg, 1
2510 // bne ...
2511 _ = try self.addInst(.{
2512 .tag = .cmp,
2513 .cond = .al,
2514 .data = .{ .rr_op = .{
2515 .rd = .r0,
2516 .rn = reg,
2517 .op = Instruction.Operand.imm(1, 0),
2518 } },
2519 });
2520
2521 break :blk .ne;
2522 },
2523 .stack_offset,
2524 .memory,
2525 => blk: {
2526 try self.spillCompareFlagsIfOccupied();
2527
2528 const reg = try self.copyToTmpRegister(Type.initTag(.bool), cond);
2529
25072530 // cmp reg, 1
25082531 // bne ...
25092532 _ = try self.addInst(.{
......@@ -2872,17 +2895,16 @@ fn airBlock(self: *Self, inst: Air.Inst.Index) !void {
28722895 // block results.
28732896 .mcv = MCValue{ .none = {} },
28742897 });
2875 const block_data = self.blocks.getPtr(inst).?;
2876 defer block_data.relocs.deinit(self.gpa);
2898 defer self.blocks.getPtr(inst).?.relocs.deinit(self.gpa);
28772899
28782900 const ty_pl = self.air.instructions.items(.data)[inst].ty_pl;
28792901 const extra = self.air.extraData(Air.Block, ty_pl.payload);
28802902 const body = self.air.extra[extra.end..][0..extra.data.body_len];
28812903 try self.genBody(body);
28822904
2883 for (block_data.relocs.items) |reloc| try self.performReloc(reloc);
2905 for (self.blocks.getPtr(inst).?.relocs.items) |reloc| try self.performReloc(reloc);
28842906
2885 const result = @bitCast(MCValue, block_data.mcv);
2907 const result = self.blocks.getPtr(inst).?.mcv;
28862908 return self.finishAir(inst, result, .{ .none, .none, .none });
28872909}
28882910
......@@ -2926,7 +2948,16 @@ fn br(self: *Self, block: Air.Inst.Index, operand: Air.Inst.Ref) !void {
29262948 const operand_mcv = try self.resolveInst(operand);
29272949 const block_mcv = block_data.mcv;
29282950 if (block_mcv == .none) {
2929 block_data.mcv = operand_mcv;
2951 block_data.mcv = switch (operand_mcv) {
2952 .none, .dead, .unreach => unreachable,
2953 .register, .stack_offset, .memory => operand_mcv,
2954 .immediate => blk: {
2955 const new_mcv = try self.allocRegOrMem(block, true);
2956 try self.setRegOrMem(self.air.typeOfIndex(block), new_mcv, operand_mcv);
2957 break :blk new_mcv;
2958 },
2959 else => return self.fail("TODO implement block_data.mcv = operand_mcv for {}", .{operand_mcv}),
2960 };
29302961 } else {
29312962 try self.setRegOrMem(self.air.typeOfIndex(block), block_mcv, operand_mcv);
29322963 }
test/behavior.zig+191-187
......@@ -14,198 +14,202 @@ test {
1414 _ = @import("behavior/type_info.zig");
1515 _ = @import("behavior/type.zig");
1616
17 if (builtin.zig_backend != .stage2_arm and builtin.zig_backend != .stage2_x86_64) {
18 // Tests that pass for stage1, llvm backend, C backend, wasm backend.
19 _ = @import("behavior/array.zig");
20 _ = @import("behavior/bugs/3586.zig");
21 _ = @import("behavior/basic.zig");
22 _ = @import("behavior/bitcast.zig");
17 if (builtin.zig_backend != .stage2_x86_64) {
18 // Tests that pass for stage1, llvm backend, C backend, wasm backend, and arm backend.
2319 _ = @import("behavior/bool.zig");
24 _ = @import("behavior/bugs/624.zig");
25 _ = @import("behavior/bugs/655.zig");
26 _ = @import("behavior/bugs/704.zig");
27 _ = @import("behavior/bugs/1486.zig");
28 _ = @import("behavior/bugs/2692.zig");
29 _ = @import("behavior/bugs/2889.zig");
30 _ = @import("behavior/bugs/3046.zig");
31 _ = @import("behavior/bugs/4560.zig");
32 _ = @import("behavior/bugs/4769_a.zig");
33 _ = @import("behavior/bugs/4769_b.zig");
34 _ = @import("behavior/bugs/4954.zig");
35 _ = @import("behavior/byval_arg_var.zig");
36 _ = @import("behavior/call.zig");
37 _ = @import("behavior/defer.zig");
38 _ = @import("behavior/enum.zig");
39 _ = @import("behavior/error.zig");
40 _ = @import("behavior/for.zig");
41 _ = @import("behavior/generics.zig");
42 _ = @import("behavior/if.zig");
43 _ = @import("behavior/import.zig");
44 _ = @import("behavior/incomplete_struct_param_tld.zig");
45 _ = @import("behavior/inttoptr.zig");
46 _ = @import("behavior/member_func.zig");
47 _ = @import("behavior/null.zig");
48 _ = @import("behavior/pointers.zig");
49 _ = @import("behavior/ptrcast.zig");
50 _ = @import("behavior/ref_var_in_if_after_if_2nd_switch_prong.zig");
51 _ = @import("behavior/struct.zig");
52 _ = @import("behavior/this.zig");
53 _ = @import("behavior/truncate.zig");
54 _ = @import("behavior/undefined.zig");
55 _ = @import("behavior/underscore.zig");
56 _ = @import("behavior/usingnamespace.zig");
57 _ = @import("behavior/void.zig");
58 _ = @import("behavior/while.zig");
5920
60 if (builtin.zig_backend != .stage2_wasm) {
61 // Tests that pass for stage1, llvm backend, C backend
62 _ = @import("behavior/align.zig");
63 _ = @import("behavior/cast.zig");
64 _ = @import("behavior/int128.zig");
65 _ = @import("behavior/optional.zig");
66 _ = @import("behavior/translate_c_macros.zig");
67 _ = @import("behavior/try.zig");
68 _ = @import("behavior/src.zig");
21 if (builtin.zig_backend != .stage2_arm and builtin.zig_backend != .stage2_x86_64) {
22 // Tests that pass for stage1, llvm backend, C backend, wasm backend.
23 _ = @import("behavior/array.zig");
24 _ = @import("behavior/bugs/3586.zig");
25 _ = @import("behavior/basic.zig");
26 _ = @import("behavior/bitcast.zig");
27 _ = @import("behavior/bugs/624.zig");
28 _ = @import("behavior/bugs/655.zig");
29 _ = @import("behavior/bugs/704.zig");
30 _ = @import("behavior/bugs/1486.zig");
31 _ = @import("behavior/bugs/2692.zig");
32 _ = @import("behavior/bugs/2889.zig");
33 _ = @import("behavior/bugs/3046.zig");
34 _ = @import("behavior/bugs/4560.zig");
35 _ = @import("behavior/bugs/4769_a.zig");
36 _ = @import("behavior/bugs/4769_b.zig");
37 _ = @import("behavior/bugs/4954.zig");
38 _ = @import("behavior/byval_arg_var.zig");
39 _ = @import("behavior/call.zig");
40 _ = @import("behavior/defer.zig");
41 _ = @import("behavior/enum.zig");
42 _ = @import("behavior/error.zig");
43 _ = @import("behavior/for.zig");
44 _ = @import("behavior/generics.zig");
45 _ = @import("behavior/if.zig");
46 _ = @import("behavior/import.zig");
47 _ = @import("behavior/incomplete_struct_param_tld.zig");
48 _ = @import("behavior/inttoptr.zig");
49 _ = @import("behavior/member_func.zig");
50 _ = @import("behavior/null.zig");
51 _ = @import("behavior/pointers.zig");
52 _ = @import("behavior/ptrcast.zig");
53 _ = @import("behavior/ref_var_in_if_after_if_2nd_switch_prong.zig");
54 _ = @import("behavior/struct.zig");
55 _ = @import("behavior/this.zig");
56 _ = @import("behavior/truncate.zig");
57 _ = @import("behavior/undefined.zig");
58 _ = @import("behavior/underscore.zig");
59 _ = @import("behavior/usingnamespace.zig");
60 _ = @import("behavior/void.zig");
61 _ = @import("behavior/while.zig");
6962
70 if (builtin.zig_backend != .stage2_c) {
71 // Tests that pass for stage1 and the llvm backend.
72 _ = @import("behavior/align_llvm.zig");
73 _ = @import("behavior/alignof.zig");
74 _ = @import("behavior/array_llvm.zig");
75 _ = @import("behavior/atomics.zig");
76 _ = @import("behavior/basic_llvm.zig");
77 _ = @import("behavior/bit_shifting.zig");
78 _ = @import("behavior/bugs/394.zig");
79 _ = @import("behavior/bugs/656.zig");
80 _ = @import("behavior/bugs/1277.zig");
81 _ = @import("behavior/bugs/1310.zig");
82 _ = @import("behavior/bugs/1381.zig");
83 _ = @import("behavior/bugs/1500.zig");
84 _ = @import("behavior/bugs/1735.zig");
85 _ = @import("behavior/bugs/1741.zig");
86 _ = @import("behavior/bugs/2006.zig");
87 _ = @import("behavior/bugs/2578.zig");
88 _ = @import("behavior/bugs/3007.zig");
89 _ = @import("behavior/bugs/3112.zig");
90 _ = @import("behavior/bugs/3367.zig");
91 _ = @import("behavior/bugs/7250.zig");
92 _ = @import("behavior/bugs/9584.zig");
93 _ = @import("behavior/cast_llvm.zig");
94 _ = @import("behavior/enum_llvm.zig");
95 _ = @import("behavior/error_llvm.zig");
96 _ = @import("behavior/eval.zig");
97 _ = @import("behavior/floatop.zig");
98 _ = @import("behavior/fn.zig");
99 _ = @import("behavior/generics_llvm.zig");
100 _ = @import("behavior/math.zig");
101 _ = @import("behavior/maximum_minimum.zig");
102 _ = @import("behavior/merge_error_sets.zig");
103 _ = @import("behavior/namespace_depends_on_compile_var.zig");
104 _ = @import("behavior/null_llvm.zig");
105 _ = @import("behavior/optional_llvm.zig");
106 _ = @import("behavior/popcount.zig");
107 _ = @import("behavior/saturating_arithmetic.zig");
108 _ = @import("behavior/sizeof_and_typeof.zig");
109 _ = @import("behavior/slice.zig");
110 _ = @import("behavior/struct_llvm.zig");
111 _ = @import("behavior/switch.zig");
112 _ = @import("behavior/union.zig");
113 _ = @import("behavior/widening.zig");
63 if (builtin.zig_backend != .stage2_wasm) {
64 // Tests that pass for stage1, llvm backend, C backend
65 _ = @import("behavior/align.zig");
66 _ = @import("behavior/cast.zig");
67 _ = @import("behavior/int128.zig");
68 _ = @import("behavior/optional.zig");
69 _ = @import("behavior/translate_c_macros.zig");
70 _ = @import("behavior/try.zig");
71 _ = @import("behavior/src.zig");
11472
115 if (builtin.zig_backend != .stage1) {
116 // When all comptime_memory.zig tests pass, #9646 can be closed.
117 // _ = @import("behavior/comptime_memory.zig");
118 _ = @import("behavior/slice_stage2.zig");
119 } else {
120 // Tests that only pass for the stage1 backend.
121 _ = @import("behavior/align_stage1.zig");
122 _ = @import("behavior/array_stage1.zig");
123 if (builtin.os.tag != .wasi) {
124 _ = @import("behavior/asm.zig");
125 _ = @import("behavior/async_fn.zig");
126 }
127 _ = @import("behavior/await_struct.zig");
128 _ = @import("behavior/bitcast_stage1.zig");
129 _ = @import("behavior/bitreverse.zig");
130 _ = @import("behavior/bugs/421.zig");
131 _ = @import("behavior/bugs/529.zig");
132 _ = @import("behavior/bugs/718.zig");
133 _ = @import("behavior/bugs/726.zig");
134 _ = @import("behavior/bugs/828.zig");
135 _ = @import("behavior/bugs/920.zig");
136 _ = @import("behavior/bugs/1025.zig");
137 _ = @import("behavior/bugs/1076.zig");
138 _ = @import("behavior/bugs/1120.zig");
139 _ = @import("behavior/bugs/1421.zig");
140 _ = @import("behavior/bugs/1442.zig");
141 _ = @import("behavior/bugs/1607.zig");
142 _ = @import("behavior/bugs/1851.zig");
143 _ = @import("behavior/bugs/1914.zig");
144 _ = @import("behavior/bugs/2114.zig");
145 _ = @import("behavior/bugs/3384.zig");
146 _ = @import("behavior/bugs/3742.zig");
147 _ = @import("behavior/bugs/3779.zig");
148 _ = @import("behavior/bugs/4328.zig");
149 _ = @import("behavior/bugs/5398.zig");
150 _ = @import("behavior/bugs/5413.zig");
151 _ = @import("behavior/bugs/5474.zig");
152 _ = @import("behavior/bugs/5487.zig");
153 _ = @import("behavior/bugs/6456.zig");
154 _ = @import("behavior/bugs/6781.zig");
155 _ = @import("behavior/bugs/7003.zig");
156 _ = @import("behavior/bugs/7027.zig");
157 _ = @import("behavior/bugs/7047.zig");
158 _ = @import("behavior/bugs/10147.zig");
159 _ = @import("behavior/byteswap.zig");
160 _ = @import("behavior/call_stage1.zig");
161 _ = @import("behavior/cast_stage1.zig");
162 _ = @import("behavior/const_slice_child.zig");
163 _ = @import("behavior/defer_stage1.zig");
164 _ = @import("behavior/enum_stage1.zig");
165 _ = @import("behavior/error_stage1.zig");
166 _ = @import("behavior/eval_stage1.zig");
167 _ = @import("behavior/field_parent_ptr.zig");
168 _ = @import("behavior/floatop_stage1.zig");
169 _ = @import("behavior/fn_stage1.zig");
170 _ = @import("behavior/fn_delegation.zig");
171 _ = @import("behavior/for_stage1.zig");
172 _ = @import("behavior/if_stage1.zig");
173 _ = @import("behavior/ir_block_deps.zig");
174 _ = @import("behavior/math_stage1.zig");
175 _ = @import("behavior/misc.zig");
176 _ = @import("behavior/muladd.zig");
177 _ = @import("behavior/null_stage1.zig");
178 _ = @import("behavior/optional_stage1.zig");
179 _ = @import("behavior/pointers_stage1.zig");
180 _ = @import("behavior/popcount_stage1.zig");
181 _ = @import("behavior/prefetch.zig");
182 _ = @import("behavior/ptrcast_stage1.zig");
183 _ = @import("behavior/reflection.zig");
184 _ = @import("behavior/saturating_arithmetic_stage1.zig");
185 _ = @import("behavior/select.zig");
186 _ = @import("behavior/shuffle.zig");
187 _ = @import("behavior/sizeof_and_typeof_stage1.zig");
188 _ = @import("behavior/slice_stage1.zig");
189 _ = @import("behavior/struct_contains_null_ptr_itself.zig");
190 _ = @import("behavior/struct_contains_slice_of_itself.zig");
191 _ = @import("behavior/struct_stage1.zig");
192 _ = @import("behavior/switch_prong_err_enum.zig");
193 _ = @import("behavior/switch_prong_implicit_cast.zig");
194 _ = @import("behavior/switch_stage1.zig");
195 _ = @import("behavior/truncate_stage1.zig");
196 _ = @import("behavior/tuple.zig");
197 _ = @import("behavior/type_stage1.zig");
198 _ = @import("behavior/type_info_stage1.zig");
199 _ = @import("behavior/typename.zig");
200 _ = @import("behavior/union_stage1.zig");
201 _ = @import("behavior/union_with_members.zig");
202 _ = @import("behavior/var_args.zig");
203 _ = @import("behavior/vector.zig");
204 if (builtin.target.cpu.arch == .wasm32) {
205 _ = @import("behavior/wasm.zig");
73 if (builtin.zig_backend != .stage2_c) {
74 // Tests that pass for stage1 and the llvm backend.
75 _ = @import("behavior/align_llvm.zig");
76 _ = @import("behavior/alignof.zig");
77 _ = @import("behavior/array_llvm.zig");
78 _ = @import("behavior/atomics.zig");
79 _ = @import("behavior/basic_llvm.zig");
80 _ = @import("behavior/bit_shifting.zig");
81 _ = @import("behavior/bugs/394.zig");
82 _ = @import("behavior/bugs/656.zig");
83 _ = @import("behavior/bugs/1277.zig");
84 _ = @import("behavior/bugs/1310.zig");
85 _ = @import("behavior/bugs/1381.zig");
86 _ = @import("behavior/bugs/1500.zig");
87 _ = @import("behavior/bugs/1735.zig");
88 _ = @import("behavior/bugs/1741.zig");
89 _ = @import("behavior/bugs/2006.zig");
90 _ = @import("behavior/bugs/2578.zig");
91 _ = @import("behavior/bugs/3007.zig");
92 _ = @import("behavior/bugs/3112.zig");
93 _ = @import("behavior/bugs/3367.zig");
94 _ = @import("behavior/bugs/7250.zig");
95 _ = @import("behavior/bugs/9584.zig");
96 _ = @import("behavior/cast_llvm.zig");
97 _ = @import("behavior/enum_llvm.zig");
98 _ = @import("behavior/error_llvm.zig");
99 _ = @import("behavior/eval.zig");
100 _ = @import("behavior/floatop.zig");
101 _ = @import("behavior/fn.zig");
102 _ = @import("behavior/generics_llvm.zig");
103 _ = @import("behavior/math.zig");
104 _ = @import("behavior/maximum_minimum.zig");
105 _ = @import("behavior/merge_error_sets.zig");
106 _ = @import("behavior/namespace_depends_on_compile_var.zig");
107 _ = @import("behavior/null_llvm.zig");
108 _ = @import("behavior/optional_llvm.zig");
109 _ = @import("behavior/popcount.zig");
110 _ = @import("behavior/saturating_arithmetic.zig");
111 _ = @import("behavior/sizeof_and_typeof.zig");
112 _ = @import("behavior/slice.zig");
113 _ = @import("behavior/struct_llvm.zig");
114 _ = @import("behavior/switch.zig");
115 _ = @import("behavior/union.zig");
116 _ = @import("behavior/widening.zig");
117
118 if (builtin.zig_backend != .stage1) {
119 // When all comptime_memory.zig tests pass, #9646 can be closed.
120 // _ = @import("behavior/comptime_memory.zig");
121 _ = @import("behavior/slice_stage2.zig");
122 } else {
123 // Tests that only pass for the stage1 backend.
124 _ = @import("behavior/align_stage1.zig");
125 _ = @import("behavior/array_stage1.zig");
126 if (builtin.os.tag != .wasi) {
127 _ = @import("behavior/asm.zig");
128 _ = @import("behavior/async_fn.zig");
129 }
130 _ = @import("behavior/await_struct.zig");
131 _ = @import("behavior/bitcast_stage1.zig");
132 _ = @import("behavior/bitreverse.zig");
133 _ = @import("behavior/bugs/421.zig");
134 _ = @import("behavior/bugs/529.zig");
135 _ = @import("behavior/bugs/718.zig");
136 _ = @import("behavior/bugs/726.zig");
137 _ = @import("behavior/bugs/828.zig");
138 _ = @import("behavior/bugs/920.zig");
139 _ = @import("behavior/bugs/1025.zig");
140 _ = @import("behavior/bugs/1076.zig");
141 _ = @import("behavior/bugs/1120.zig");
142 _ = @import("behavior/bugs/1421.zig");
143 _ = @import("behavior/bugs/1442.zig");
144 _ = @import("behavior/bugs/1607.zig");
145 _ = @import("behavior/bugs/1851.zig");
146 _ = @import("behavior/bugs/1914.zig");
147 _ = @import("behavior/bugs/2114.zig");
148 _ = @import("behavior/bugs/3384.zig");
149 _ = @import("behavior/bugs/3742.zig");
150 _ = @import("behavior/bugs/3779.zig");
151 _ = @import("behavior/bugs/4328.zig");
152 _ = @import("behavior/bugs/5398.zig");
153 _ = @import("behavior/bugs/5413.zig");
154 _ = @import("behavior/bugs/5474.zig");
155 _ = @import("behavior/bugs/5487.zig");
156 _ = @import("behavior/bugs/6456.zig");
157 _ = @import("behavior/bugs/6781.zig");
158 _ = @import("behavior/bugs/7003.zig");
159 _ = @import("behavior/bugs/7027.zig");
160 _ = @import("behavior/bugs/7047.zig");
161 _ = @import("behavior/bugs/10147.zig");
162 _ = @import("behavior/byteswap.zig");
163 _ = @import("behavior/call_stage1.zig");
164 _ = @import("behavior/cast_stage1.zig");
165 _ = @import("behavior/const_slice_child.zig");
166 _ = @import("behavior/defer_stage1.zig");
167 _ = @import("behavior/enum_stage1.zig");
168 _ = @import("behavior/error_stage1.zig");
169 _ = @import("behavior/eval_stage1.zig");
170 _ = @import("behavior/field_parent_ptr.zig");
171 _ = @import("behavior/floatop_stage1.zig");
172 _ = @import("behavior/fn_stage1.zig");
173 _ = @import("behavior/fn_delegation.zig");
174 _ = @import("behavior/for_stage1.zig");
175 _ = @import("behavior/if_stage1.zig");
176 _ = @import("behavior/ir_block_deps.zig");
177 _ = @import("behavior/math_stage1.zig");
178 _ = @import("behavior/misc.zig");
179 _ = @import("behavior/muladd.zig");
180 _ = @import("behavior/null_stage1.zig");
181 _ = @import("behavior/optional_stage1.zig");
182 _ = @import("behavior/pointers_stage1.zig");
183 _ = @import("behavior/popcount_stage1.zig");
184 _ = @import("behavior/prefetch.zig");
185 _ = @import("behavior/ptrcast_stage1.zig");
186 _ = @import("behavior/reflection.zig");
187 _ = @import("behavior/saturating_arithmetic_stage1.zig");
188 _ = @import("behavior/select.zig");
189 _ = @import("behavior/shuffle.zig");
190 _ = @import("behavior/sizeof_and_typeof_stage1.zig");
191 _ = @import("behavior/slice_stage1.zig");
192 _ = @import("behavior/struct_contains_null_ptr_itself.zig");
193 _ = @import("behavior/struct_contains_slice_of_itself.zig");
194 _ = @import("behavior/struct_stage1.zig");
195 _ = @import("behavior/switch_prong_err_enum.zig");
196 _ = @import("behavior/switch_prong_implicit_cast.zig");
197 _ = @import("behavior/switch_stage1.zig");
198 _ = @import("behavior/truncate_stage1.zig");
199 _ = @import("behavior/tuple.zig");
200 _ = @import("behavior/type_stage1.zig");
201 _ = @import("behavior/type_info_stage1.zig");
202 _ = @import("behavior/typename.zig");
203 _ = @import("behavior/union_stage1.zig");
204 _ = @import("behavior/union_with_members.zig");
205 _ = @import("behavior/var_args.zig");
206 _ = @import("behavior/vector.zig");
207 if (builtin.target.cpu.arch == .wasm32) {
208 _ = @import("behavior/wasm.zig");
209 }
210 _ = @import("behavior/while_stage1.zig");
211 _ = @import("behavior/translate_c_macros_stage1.zig");
206212 }
207 _ = @import("behavior/while_stage1.zig");
208 _ = @import("behavior/translate_c_macros_stage1.zig");
209213 }
210214 }
211215 }