Skip to content

Commit 3d0955c

Browse files
NL02copybara-github
authored andcommitted
Add a fuzzer test
#4213 PiperOrigin-RevId: 914354120
1 parent 7f4fbc6 commit 3d0955c

2 files changed

Lines changed: 204 additions & 0 deletions

File tree

xls/fuzzer/BUILD

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,8 @@ generate_crasher_regression_tests(
415415
"crashers/crasher_2026-04-22_2292.x",
416416
# TODO: https://github.com/google/xls/issues/4209 - Remove when fixed.
417417
"crashers/crasher_2026-05-05_45c4.x",
418+
# TODO: https://github.com/google/xls/issues/4213 - Remove when fixed.
419+
"crashers/crasher_2026-05-06_cad8.x",
418420
# TODO: https://github.com/google/xls/issues/4214 - Remove when fixed.
419421
"crashers/crasher_2026-05-06_cbc5.x",
420422
# TODO: https://github.com/google/xls/issues/4233 - Remove when fixed.
Lines changed: 202 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,202 @@
1+
// Copyright 2026 The XLS Authors
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
// BEGIN_CONFIG
15+
// # proto-message: xls.fuzzer.CrasherConfigurationProto
16+
// exception: "SampleError: Result miscompare for sample 33:\nargs: bits[16]:0x8000; bits[10]:0x155; bits[10]:0x20; bits[23]:0x2_0000\nevaluated opt IR (JIT), evaluated unopt IR (JIT) =\n (bits[10]:0x155, bits[4]:0x0, bits[1]:0x0, bits[2048]:0x0)\nevaluated opt IR (interpreter), evaluated unopt IR (interpreter), interpreted DSLX =\n (bits[10]:0x155, bits[4]:0xf, bits[1]:0x0, bits[2048]:0x0)"
17+
// issue: "https://github.com/google/xls/issues/4213"
18+
// sample_options {
19+
// input_is_dslx: true
20+
// sample_type: SAMPLE_TYPE_FUNCTION
21+
// ir_converter_args: "--top=main"
22+
// ir_converter_args: "--lower_to_proc_scoped_channels=false"
23+
// convert_to_ir: true
24+
// optimize_ir: true
25+
// use_jit: true
26+
// codegen: false
27+
// simulate: false
28+
// use_system_verilog: false
29+
// timeout_seconds: 1500
30+
// calls_per_sample: 128
31+
// proc_ticks: 0
32+
// known_failure {
33+
// tool: ".*codegen_main"
34+
// stderr_regex: ".*Impossible to schedule proc .* as specified; .*: cannot achieve the specified pipeline length.*"
35+
// }
36+
// known_failure {
37+
// tool: ".*codegen_main"
38+
// stderr_regex: ".*Impossible to schedule proc .* as specified; .*: cannot achieve full throughput.*"
39+
// }
40+
// with_valid_holdoff: false
41+
// codegen_ng: false
42+
// disable_unopt_interpreter: false
43+
// lower_to_proc_scoped_channels: false
44+
// }
45+
// inputs {
46+
// function_args {
47+
// args: "bits[16]:0x5555; bits[10]:0x0; bits[10]:0x3; bits[23]:0x4ffd"
48+
// args: "bits[16]:0x5555; bits[10]:0x154; bits[10]:0x2c7; bits[23]:0x58_ec79"
49+
// args: "bits[16]:0x7fff; bits[10]:0x3be; bits[10]:0x2aa; bits[23]:0x22_3a38"
50+
// args: "bits[16]:0x4; bits[10]:0x3ff; bits[10]:0x224; bits[23]:0x6e_c345"
51+
// args: "bits[16]:0x5555; bits[10]:0x0; bits[10]:0x157; bits[23]:0xa_2ab0"
52+
// args: "bits[16]:0x0; bits[10]:0x10; bits[10]:0x12; bits[23]:0x2_ca63"
53+
// args: "bits[16]:0xaaaa; bits[10]:0x0; bits[10]:0x2e1; bits[23]:0x7f_5457"
54+
// args: "bits[16]:0x7fff; bits[10]:0x0; bits[10]:0x2aa; bits[23]:0x4f_16f3"
55+
// args: "bits[16]:0x5555; bits[10]:0x1d5; bits[10]:0x45; bits[23]:0x400"
56+
// args: "bits[16]:0x5555; bits[10]:0x1ff; bits[10]:0x37f; bits[23]:0x7f_ffff"
57+
// args: "bits[16]:0x80; bits[10]:0x181; bits[10]:0x109; bits[23]:0x18_2fff"
58+
// args: "bits[16]:0x7aef; bits[10]:0x2ff; bits[10]:0x2ff; bits[23]:0x27_ffad"
59+
// args: "bits[16]:0x5555; bits[10]:0x155; bits[10]:0x1ff; bits[23]:0x3f_ffff"
60+
// args: "bits[16]:0x5555; bits[10]:0x2aa; bits[10]:0x9b; bits[23]:0x13_effe"
61+
// args: "bits[16]:0xddcd; bits[10]:0x85; bits[10]:0xed; bits[23]:0x5d_a100"
62+
// args: "bits[16]:0x0; bits[10]:0x0; bits[10]:0x155; bits[23]:0x55_5555"
63+
// args: "bits[16]:0x10; bits[10]:0x1ff; bits[10]:0x1fb; bits[23]:0x7f_ffff"
64+
// args: "bits[16]:0x0; bits[10]:0x272; bits[10]:0x17d; bits[23]:0x0"
65+
// args: "bits[16]:0x5555; bits[10]:0x155; bits[10]:0xb5; bits[23]:0x4000"
66+
// args: "bits[16]:0x7fff; bits[10]:0x2e7; bits[10]:0x232; bits[23]:0x3f_ffaa"
67+
// args: "bits[16]:0x40; bits[10]:0x4; bits[10]:0x8a; bits[23]:0x3f_ffff"
68+
// args: "bits[16]:0xffff; bits[10]:0x1ff; bits[10]:0x89; bits[23]:0x3f_e582"
69+
// args: "bits[16]:0xaaaa; bits[10]:0x2aa; bits[10]:0x26f; bits[23]:0x54_d57f"
70+
// args: "bits[16]:0xffff; bits[10]:0x3fb; bits[10]:0x2aa; bits[23]:0x7f_ffab"
71+
// args: "bits[16]:0x2; bits[10]:0x11a; bits[10]:0x155; bits[23]:0x2d_e8e3"
72+
// args: "bits[16]:0xaaaa; bits[10]:0x40; bits[10]:0x0; bits[23]:0x55_5555"
73+
// args: "bits[16]:0xd574; bits[10]:0x8; bits[10]:0x3ff; bits[23]:0x2a_aaaa"
74+
// args: "bits[16]:0xaaaa; bits[10]:0x3ff; bits[10]:0x80; bits[23]:0x28_6bf7"
75+
// args: "bits[16]:0xf9a4; bits[10]:0x124; bits[10]:0x12e; bits[23]:0x0"
76+
// args: "bits[16]:0x0; bits[10]:0x4; bits[10]:0x0; bits[23]:0x3f_ffff"
77+
// args: "bits[16]:0x0; bits[10]:0x0; bits[10]:0x3ff; bits[23]:0x7f_f471"
78+
// args: "bits[16]:0x5555; bits[10]:0x1ff; bits[10]:0x3ff; bits[23]:0x3e_2041"
79+
// args: "bits[16]:0xaaaa; bits[10]:0x2bf; bits[10]:0x290; bits[23]:0x3a_7ec7"
80+
// args: "bits[16]:0x8000; bits[10]:0x155; bits[10]:0x20; bits[23]:0x2_0000"
81+
// args: "bits[16]:0x5555; bits[10]:0x80; bits[10]:0x1ff; bits[23]:0x3a_a8dc"
82+
// args: "bits[16]:0x0; bits[10]:0x4; bits[10]:0x31c; bits[23]:0x6f_a7eb"
83+
// args: "bits[16]:0xaaaa; bits[10]:0x0; bits[10]:0x155; bits[23]:0x57_5d08"
84+
// args: "bits[16]:0xbc9c; bits[10]:0x48; bits[10]:0x100; bits[23]:0x55_5555"
85+
// args: "bits[16]:0x0; bits[10]:0x2aa; bits[10]:0x0; bits[23]:0x8_9c8a"
86+
// args: "bits[16]:0xffff; bits[10]:0x80; bits[10]:0x31a; bits[23]:0x76_6d73"
87+
// args: "bits[16]:0xffff; bits[10]:0x2bd; bits[10]:0x4; bits[23]:0x7f_ffbf"
88+
// args: "bits[16]:0x5555; bits[10]:0x14d; bits[10]:0x176; bits[23]:0x2e_8a68"
89+
// args: "bits[16]:0xaaaa; bits[10]:0x1ff; bits[10]:0x6f; bits[23]:0x1_0000"
90+
// args: "bits[16]:0x5555; bits[10]:0x1b8; bits[10]:0x2aa; bits[23]:0x2a_aaaa"
91+
// args: "bits[16]:0x4000; bits[10]:0x40; bits[10]:0x211; bits[23]:0x2_2000"
92+
// args: "bits[16]:0xffff; bits[10]:0x2e7; bits[10]:0x155; bits[23]:0x29_8033"
93+
// args: "bits[16]:0x5555; bits[10]:0x15d; bits[10]:0x15d; bits[23]:0x16_581a"
94+
// args: "bits[16]:0x0; bits[10]:0x200; bits[10]:0x30; bits[23]:0x7f_ffff"
95+
// args: "bits[16]:0xffff; bits[10]:0x1; bits[10]:0x8; bits[23]:0x12_cb99"
96+
// args: "bits[16]:0x7fff; bits[10]:0x3f7; bits[10]:0x2aa; bits[23]:0x54_37d7"
97+
// args: "bits[16]:0x5555; bits[10]:0x170; bits[10]:0x155; bits[23]:0x6_bf37"
98+
// args: "bits[16]:0xffff; bits[10]:0x1ff; bits[10]:0x0; bits[23]:0x2"
99+
// args: "bits[16]:0xffff; bits[10]:0x3ff; bits[10]:0x22c; bits[23]:0x3f_ffff"
100+
// args: "bits[16]:0x7fff; bits[10]:0x3bf; bits[10]:0x277; bits[23]:0x7f_b547"
101+
// args: "bits[16]:0xaaaa; bits[10]:0x0; bits[10]:0x3e6; bits[23]:0x7f_ffff"
102+
// args: "bits[16]:0x3b02; bits[10]:0x2aa; bits[10]:0x0; bits[23]:0x3f_ffff"
103+
// args: "bits[16]:0x7fff; bits[10]:0x39a; bits[10]:0x155; bits[23]:0x66_350d"
104+
// args: "bits[16]:0x0; bits[10]:0x33e; bits[10]:0x2aa; bits[23]:0x2a_aaaa"
105+
// args: "bits[16]:0xffff; bits[10]:0x1ff; bits[10]:0x1ff; bits[23]:0x2a_aaaa"
106+
// args: "bits[16]:0x0; bits[10]:0x2aa; bits[10]:0x2d4; bits[23]:0x7c_2f66"
107+
// args: "bits[16]:0xffff; bits[10]:0x0; bits[10]:0x0; bits[23]:0x0"
108+
// args: "bits[16]:0xe08a; bits[10]:0x82; bits[10]:0x155; bits[23]:0x70_4555"
109+
// args: "bits[16]:0xaaaa; bits[10]:0x3a8; bits[10]:0x155; bits[23]:0x2a_aaaa"
110+
// args: "bits[16]:0xc46; bits[10]:0x2aa; bits[10]:0xd; bits[23]:0x4_3303"
111+
// args: "bits[16]:0x0; bits[10]:0x4; bits[10]:0x8; bits[23]:0x3f_ffff"
112+
// args: "bits[16]:0x0; bits[10]:0x0; bits[10]:0x1ff; bits[23]:0x0"
113+
// args: "bits[16]:0x7fff; bits[10]:0x191; bits[10]:0x9f; bits[23]:0x55_5555"
114+
// args: "bits[16]:0x5555; bits[10]:0x35f; bits[10]:0x5f; bits[23]:0x2a_2ab5"
115+
// args: "bits[16]:0xaaaa; bits[10]:0x38f; bits[10]:0x2ca; bits[23]:0x5c_4b55"
116+
// args: "bits[16]:0xffff; bits[10]:0x100; bits[10]:0x371; bits[23]:0x6e_fd82"
117+
// args: "bits[16]:0x5555; bits[10]:0x155; bits[10]:0x3ff; bits[23]:0x3f_ffff"
118+
// args: "bits[16]:0x4000; bits[10]:0x32c; bits[10]:0x36c; bits[23]:0x3f_ffff"
119+
// args: "bits[16]:0x5555; bits[10]:0x35; bits[10]:0x234; bits[23]:0x55_5555"
120+
// args: "bits[16]:0x400; bits[10]:0x155; bits[10]:0x141; bits[23]:0x38_2fbd"
121+
// args: "bits[16]:0x20; bits[10]:0x5; bits[10]:0x2aa; bits[23]:0x49_1317"
122+
// args: "bits[16]:0x0; bits[10]:0x1ff; bits[10]:0x155; bits[23]:0x2a_aaaa"
123+
// args: "bits[16]:0x0; bits[10]:0x2; bits[10]:0x2aa; bits[23]:0x1_1635"
124+
// args: "bits[16]:0xaaaa; bits[10]:0x288; bits[10]:0x2aa; bits[23]:0x0"
125+
// args: "bits[16]:0x0; bits[10]:0xf0; bits[10]:0x40; bits[23]:0x55_5555"
126+
// args: "bits[16]:0x5555; bits[10]:0x341; bits[10]:0x2aa; bits[23]:0x2a_aaaa"
127+
// args: "bits[16]:0x5555; bits[10]:0x155; bits[10]:0x2aa; bits[23]:0x55_5515"
128+
// args: "bits[16]:0x73cd; bits[10]:0x155; bits[10]:0x15d; bits[23]:0x0"
129+
// args: "bits[16]:0x1dda; bits[10]:0x0; bits[10]:0xe8; bits[23]:0x2a_aaaa"
130+
// args: "bits[16]:0x7fff; bits[10]:0x35f; bits[10]:0x0; bits[23]:0x6b_e9ab"
131+
// args: "bits[16]:0x40; bits[10]:0x24b; bits[10]:0x14f; bits[23]:0x42_9389"
132+
// args: "bits[16]:0x8472; bits[10]:0x2a; bits[10]:0x1f9; bits[23]:0x4_0308"
133+
// args: "bits[16]:0x400; bits[10]:0x0; bits[10]:0x302; bits[23]:0x26_6472"
134+
// args: "bits[16]:0x0; bits[10]:0x99; bits[10]:0x0; bits[23]:0x40"
135+
// args: "bits[16]:0x0; bits[10]:0x279; bits[10]:0x279; bits[23]:0x4b_cde4"
136+
// args: "bits[16]:0x5555; bits[10]:0x144; bits[10]:0x1be; bits[23]:0x29_2fc2"
137+
// args: "bits[16]:0xffff; bits[10]:0x3fd; bits[10]:0x1; bits[23]:0x49_26ac"
138+
// args: "bits[16]:0x800; bits[10]:0x2aa; bits[10]:0x278; bits[23]:0x15_0f5d"
139+
// args: "bits[16]:0x0; bits[10]:0x210; bits[10]:0x1ff; bits[23]:0x76f"
140+
// args: "bits[16]:0x0; bits[10]:0x190; bits[10]:0x3f0; bits[23]:0x32_1be4"
141+
// args: "bits[16]:0x5555; bits[10]:0x1ff; bits[10]:0x3ff; bits[23]:0x7f_e584"
142+
// args: "bits[16]:0xaaaa; bits[10]:0x2aa; bits[10]:0xde; bits[23]:0x57_1755"
143+
// args: "bits[16]:0xaaaa; bits[10]:0x26e; bits[10]:0x42; bits[23]:0x4a_45d1"
144+
// args: "bits[16]:0x429; bits[10]:0x369; bits[10]:0x9; bits[23]:0x1_7fde"
145+
// args: "bits[16]:0x5555; bits[10]:0x155; bits[10]:0x152; bits[23]:0xe_bd45"
146+
// args: "bits[16]:0x7fff; bits[10]:0x2ff; bits[10]:0x155; bits[23]:0x37_ff83"
147+
// args: "bits[16]:0xffff; bits[10]:0x3df; bits[10]:0x155; bits[23]:0x3f_ffff"
148+
// args: "bits[16]:0x5555; bits[10]:0x1d6; bits[10]:0x2; bits[23]:0x55_5555"
149+
// args: "bits[16]:0x0; bits[10]:0x44; bits[10]:0x71; bits[23]:0x2a_aaaa"
150+
// args: "bits[16]:0xffff; bits[10]:0x3cf; bits[10]:0x13e; bits[23]:0x23_09f4"
151+
// args: "bits[16]:0x5932; bits[10]:0x25b; bits[10]:0x2; bits[23]:0x9_565c"
152+
// args: "bits[16]:0xaaaa; bits[10]:0x0; bits[10]:0x2; bits[23]:0x3f_ffff"
153+
// args: "bits[16]:0x7fff; bits[10]:0x0; bits[10]:0x158; bits[23]:0x6f_df2a"
154+
// args: "bits[16]:0x610; bits[10]:0x377; bits[10]:0x377; bits[23]:0x55_5555"
155+
// args: "bits[16]:0x5555; bits[10]:0x155; bits[10]:0x248; bits[23]:0x2a_aaaa"
156+
// args: "bits[16]:0x7fff; bits[10]:0x155; bits[10]:0x14d; bits[23]:0x59_600b"
157+
// args: "bits[16]:0xffff; bits[10]:0x27a; bits[10]:0x1ff; bits[23]:0x3d_ebaa"
158+
// args: "bits[16]:0x0; bits[10]:0x34; bits[10]:0x10; bits[23]:0x2_657a"
159+
// args: "bits[16]:0x400; bits[10]:0x318; bits[10]:0x0; bits[23]:0x4b_c0c5"
160+
// args: "bits[16]:0x4; bits[10]:0x10e; bits[10]:0x3ff; bits[23]:0x21_cbdf"
161+
// args: "bits[16]:0x7fff; bits[10]:0x3f9; bits[10]:0xd9; bits[23]:0x2a_aaaa"
162+
// args: "bits[16]:0x8670; bits[10]:0x2a0; bits[10]:0x2; bits[23]:0x55_5555"
163+
// args: "bits[16]:0xaaaa; bits[10]:0x3ff; bits[10]:0x2a6; bits[23]:0x0"
164+
// args: "bits[16]:0x5555; bits[10]:0x2aa; bits[10]:0x2ae; bits[23]:0x55_c025"
165+
// args: "bits[16]:0x5555; bits[10]:0x1ff; bits[10]:0x151; bits[23]:0x20_00da"
166+
// args: "bits[16]:0xffff; bits[10]:0x200; bits[10]:0x310; bits[23]:0x62_4c63"
167+
// args: "bits[16]:0x1000; bits[10]:0x155; bits[10]:0x2aa; bits[23]:0x7f_ffff"
168+
// args: "bits[16]:0xaaaa; bits[10]:0x155; bits[10]:0x155; bits[23]:0x42_9dcb"
169+
// args: "bits[16]:0xb65d; bits[10]:0x2dd; bits[10]:0x68; bits[23]:0x5b_2c37"
170+
// args: "bits[16]:0x2; bits[10]:0x80; bits[10]:0x2aa; bits[23]:0x10_8122"
171+
// args: "bits[16]:0xd634; bits[10]:0x3ff; bits[10]:0xdc; bits[23]:0x5b_e4d8"
172+
// args: "bits[16]:0x5555; bits[10]:0x1ff; bits[10]:0x3d3; bits[23]:0x5a_7d64"
173+
// args: "bits[16]:0xffff; bits[10]:0xe6; bits[10]:0x26b; bits[23]:0x40_0000"
174+
// args: "bits[16]:0x74c9; bits[10]:0x3ff; bits[10]:0x0; bits[23]:0x7d_efdf"
175+
// }
176+
// }
177+
//
178+
// END_CONFIG
179+
fn main(x0: u16, x1: u10, x2: u10, x3: u23) -> (u10, u4, bool, uN[2048]) {
180+
{
181+
let x4: bool = xor_reduce(x3);
182+
let x5: bool = x4[x2+:bool];
183+
let x6: u10 = bit_slice_update(x1, x3, x0);
184+
let x7: u16 = x0 << if x2 >= u10:0xb { u10:0xb } else { x2 };
185+
let x8: bool = x4 as bool & x5;
186+
let x9: bool = x4 as bool | x5;
187+
let x10: bool = -x9;
188+
let x11: bool = x5 & x4 as bool;
189+
let x12: u2 = one_hot(x11, bool:0x1);
190+
let x13: u23 = x3 << x1;
191+
let x14: u4 = encode(x0);
192+
let x15: bool = x8[0+:bool];
193+
let x16: bool = x5[x5+:bool];
194+
let x17: uN[2048] = decode<uN[2048]>(x0);
195+
let x18: uN[2048] = for (i, x): (u4, uN[2048]) in u4:0x0..u4:0x1 {
196+
x
197+
}(x17);
198+
let x19: u2 = decode<u2>(x4);
199+
let x20: u6 = x8 ++ x5 ++ x11 ++ x12 ++ x8;
200+
(x1, x14, x5, x18)
201+
}
202+
}

0 commit comments

Comments
 (0)