|
| 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