Week 5 test guide

A test failed and you don't know why? Find it here: what it checks, and the plausible bugs that are known to fail it. Then read the matching part of the week 5 spec.

How to use this

Run python tools/test.py --compiler PATH --week 5 -v, copy the failing test's name, and search below. "Bugs known to fail it" lists mistakes that were planted in the reference compiler and caught by this test, so one of them is a good first guess. It's not a complete list, and the debugging guide covers what to do when none fit.

testkindwhat it checksbugs known to fail it
render/gemm_movement_3x4x5renderthe spec's GEMM: reshape, permute, expand, mul, reduce pop=1end doesn't close its range
final version not followed
loads never move into loops
render elementwise at 0
render expand reads i
render flat_of order
render load at offset 0
render loop starts at 1
render loop uses <=
render reduce from zero
render reduce reversed
render skips rangeify
render store loop short
render unflat stride
values hoisted to outer loops
render/pad_2drenderpad a 2x3 with a ring of zeros: 4x5C cmplt as <=
C where swapped
end doesn't close its range
final version not followed
render flat_of order
render load at offset 0
render pad mask off by one
render skips rangeify
render unflat stride
render/r_column_normalizerenderdivide each column by its sum: reduce, reshape, expand, mulend doesn't close its range
final version not followed
loads never move into loops
render elementwise at 0
render flat_of order
render load at offset 0
render loop starts at 1
render loop uses <=
render reduce from zero
render reduce reversed
render skips rangeify
render store loop short
render unflat stride
values hoisted to outer loops
render/r_conv1d_samerendersame-size conv1d with a 5-tap kernelC cmplt as <=
C where swapped
end doesn't close its range
final version not followed
loads never move into loops
render elementwise at 0
render expand reads i
render load at offset 0
render loop starts at 1
render loop uses <=
render pad mask off by one
render reduce from zero
render reduce reversed
render shrink offset sign
render skips rangeify
render stack chain off by one
render store loop short
values hoisted to outer loops
render/r_conv2d_16x16render3x3 same-size conv2d on 16x16C cmplt as <=
C where swapped
end doesn't close its range
final version not followed
loads never move into loops
render elementwise at 0
render expand reads i
render flat_of order
render load at offset 0
render loop starts at 1
render loop uses <=
render pad mask off by one
render reduce from zero
render reduce reversed
render shrink offset sign
render skips rangeify
render stack chain off by one
render store loop short
render unflat stride
values hoisted to outer loops
render/r_elementwise_rank3renderelementwise mul and max on rank 3end doesn't close its range
final version not followed
render elementwise at 0
render flat_of order
render load at offset 0
render loop starts at 1
render skips rangeify
render store loop short
render unflat stride
render/r_expand_scalarrenderbroadcast a scalar to a matrixend doesn't close its range
final version not followed
render expand zero
render loop starts at 1
render skips rangeify
render store loop short
render/r_expand_size1renderbroadcast a columnend doesn't close its range
final version not followed
render expand reads i
render load at offset 0
render loop starts at 1
render skips rangeify
render store loop short
render unflat stride
render/r_inplace_transposerendertranspose a 3x3 matrix in place: the result is built from the old contents, not half-overwritten onesend doesn't close its range
final version not followed
render flat_of order
render in-place store fused
render load at offset 0
render loop uses <=
render skips rangeify
render stage reads x[0]
render unflat stride
render/r_matmul_1x8x5rendera row vector times a matrixend doesn't close its range
final version not followed
loads never move into loops
render elementwise at 0
render expand reads i
render flat_of order
render load at offset 0
render loop starts at 1
render loop uses <=
render reduce from zero
render reduce reversed
render skips rangeify
render store loop short
render unflat stride
values hoisted to outer loops
render/r_matmul_2x3x4rendermatmul via movement opsend doesn't close its range
final version not followed
loads never move into loops
render elementwise at 0
render expand reads i
render flat_of order
render load at offset 0
render loop starts at 1
render loop uses <=
render reduce from zero
render reduce reversed
render skips rangeify
render store loop short
render unflat stride
values hoisted to outer loops
render/r_matmul_64x64render64x64 by 64x64: three nested loops in C, well under 20 KBend doesn't close its range
final version not followed
loads never move into loops
render elementwise at 0
render expand reads i
render load at offset 0
render loop starts at 1
render loop uses <=
render reduce from zero
render reduce reversed
render skips rangeify
render store loop short
render unflat stride
values hoisted to outer loops
render/r_matmul_i32_wraprenderi32 matmul with wraparoundC plain signed add
end doesn't close its range
final version not followed
loads never move into loops
render elementwise at 0
render expand reads i
render flat_of order
render load at offset 0
render loop starts at 1
render loop uses <=
render reduce from zero
render skips rangeify
render store loop short
render unflat stride
values hoisted to outer loops
render/r_pad_32x32renderpad a 32x32 image by one: 34x34C cmplt as <=
C where swapped
end doesn't close its range
final version not followed
render flat_of order
render load at offset 0
render pad mask off by one
render skips rangeify
render unflat stride
render/r_pad_3drenderpad a rank-3 valueC cmplt as <=
C where swapped
end doesn't close its range
final version not followed
render flat_of order
render load at offset 0
render pad mask off by one
render pad shift wrong side
render skips rangeify
render unflat stride
render/r_pad_boolrenderbool pad fills falseC cmplt as <=
C where swapped
end doesn't close its range
final version not followed
render flat_of order
render load at offset 0
render pad mask off by one
render pad shift wrong side
render skips rangeify
render unflat stride
render/r_pad_left_rightrenderpad both sides of a vectorC cmplt as <=
C where swapped
end doesn't close its range
final version not followed
render load at offset 0
render pad mask off by one
render pad shift wrong side
render skips rangeify
render/r_pad_then_shrinkrenderpad then an off-center window: some zeros, some dataC cmplt as <=
C where swapped
end doesn't close its range
final version not followed
render flat_of order
render load at offset 0
render pad mask off by one
render shrink offset sign
render skips rangeify
render unflat stride
render/r_permute_rank3rendera rank-3 permuteend doesn't close its range
final version not followed
render flat_of order
render load at offset 0
render loop starts at 1
render permute inverse
render skips rangeify
render store loop short
render unflat stride
render/r_permute_rank4rendera rank-4 permuteend doesn't close its range
final version not followed
render flat_of order
render load at offset 0
render loop starts at 1
render permute inverse
render skips rangeify
render store loop short
render unflat stride
render/r_reduce_broadcast_axisrenderreduce over an axis that expand created: every copy is still added, so the result is 4 times xend doesn't close its range
final version not followed
render expand reads i
render flat_of order
render load at offset 0
render loop starts at 1
render loop uses <=
render permute inverse
render reduce from zero
render reduce of a broadcast hoisted
render skips rangeify
render store loop short
render unflat stride
values hoisted to outer loops
render/r_reduce_pop1rendercolumn sums of a matrixend doesn't close its range
final version not followed
loads never move into loops
render flat_of order
render load at offset 0
render loop starts at 1
render loop uses <=
render reduce from zero
render reduce reversed
render skips rangeify
render store loop short
values hoisted to outer loops
render/r_reduce_pop2_64x64rendersum of a 64x64 matrix in row-major orderend doesn't close its range
final version not followed
loads never move into loops
render flat_of order
render load at offset 0
render loop starts at 1
render loop uses <=
render reduce column-major
render reduce reversed
render skips rangeify
render store loop short
render unflat stride
render/r_reduce_pop2_rank3renderreduce the two leading axes of a rank-3 valueend doesn't close its range
final version not followed
loads never move into loops
render flat_of order
render load at offset 0
render loop starts at 1
render reduce from zero
render skips rangeify
render store loop short
render unflat stride
values hoisted to outer loops
render/r_reduce_rowmajor_orderrenderrow-major fold order is visible in f32 bitsend doesn't close its range
final version not followed
loads never move into loops
render flat_of order
render load at offset 0
render loop starts at 1
render loop uses <=
render reduce column-major
render reduce reversed
render skips rangeify
render store loop short
render unflat stride
render/r_reshape_permute_2drendertranspose via permute, stored flatend doesn't close its range
final version not followed
render flat_of order
render load at offset 0
render loop starts at 1
render skips rangeify
render store loop short
render unflat stride
render/r_reshape_permute_4096render4096 elements reshaped to 16x16x16 and reversed axis orderend doesn't close its range
final version not followed
render flat_of order
render load at offset 0
render loop starts at 1
render skips rangeify
render store loop short
render unflat stride
render/r_reshape_same_rank_then_transposerenderreshape [2 3] to [3 2] is not a no-op: transposing afterwards shows the new row boundariesend doesn't close its range
final version not followed
render load at offset 0
render loop starts at 1
render reshape same rank skipped
render skips rangeify
render store loop short
render unflat stride
render/r_shrink_symbolicrendera run-time but provable offset: mod (max o 0) 4 with o = 13 is 1end doesn't close its range
final version not followed
render load at offset 0
render loop starts at 1
render shrink offset sign
render skips rangeify
render store loop short
render/r_shrink_windowrendera value windowend doesn't close its range
final version not followed
render flat_of order
render load at offset 0
render loop starts at 1
render shrink offset sign
render skips rangeify
render store loop short
render unflat stride
render/r_stack_indexrenderindex a stack of vectorsC cmplt as <=
C where swapped
end doesn't close its range
final version not followed
render index pops the end
render load at offset 0
render loop starts at 1
render skips rangeify
render store loop short
render/r_stack_matricesrenderstack of matrices rendered as a where chainC cmplt as <=
C where swapped
end doesn't close its range
final version not followed
render flat_of order
render load at offset 0
render loop starts at 1
render skips rangeify
render stack chain off by one
render store loop short
render unflat stride
render/r_stage_rank2renderstage a transposed matrix, then use it twiceend doesn't close its range
final version not followed
render elementwise at 0
render load at offset 0
render loop starts at 1
render loop uses <=
render skips rangeify
render stage reads x[0]
render store loop short
render unflat stride
render/r_transpose_64x64render64x64 transpose: loops, not 4096 unrolled storesend doesn't close its range
final version not followed
render flat_of order
render load at offset 0
render loop starts at 1
render skips rangeify
render store loop short
render unflat stride
run/assert_rank2_failsrun: assert_failassert compares every element of a rank-2 valueevaluates everything
run/broadcast_column_sums_backrun: passreduce over rows, reshape to [1 4], expand back, add: the normalization shapeelementwise uses x[0]
evaluates everything
expand reads i not 0
reduce pops trailing axes
reshape column-major
run/conv1d_samerun: passsame-size conv1d: pad, a stack of shifted shrinks, multiply by the broadcast kernel, reduce over tapselementwise uses x[0]
evaluates everything
expand reads i not 0
f32 ops not rounded
fold right to left
pad fill not zero
reduce pops trailing axes
shrink offset sign
run/conv2d_samerun: pass3x3 same-size conv2d on a 4x5 image via pad and nine shrinkselementwise uses x[0]
evaluates everything
expand reads i not 0
pad fill not zero
reduce pops trailing axes
reshape column-major
shrink offset sign
run/elementwise_rank3run: passadd, mul, cmplt, where and cast work elementwise on rank-3 valueselementwise uses x[0]
evaluates everything
f32 ops not rounded
f32->i32 rounds
where branches swapped
run/err_expand_non1_axisrun: invalida size-2 axis cannot grow to 4expand grows non-1 axes
run/err_expand_rank_mismatchrun: invalida non-scalar expand keeps the ranknone recorded
run/err_index_runtime_oobrun: invalida computed index past the end is a run-time errornone recorded
run/err_index_too_manyrun: invalidat most one index per axisindex count unchecked
run/err_pad_lengthrun: invalidpads has two numbers per axispads length unchecked
run/err_pad_negativerun: invalidpads are >= 0 (cut with shrink)none recorded
run/err_param_rank2run: invalidparams stay rank 0 or 1none recorded
run/err_permute_duplicaterun: invalidorder must be a permutationpermute any order
run/err_permute_out_of_rangerun: invalidorder must name each axis oncepermute any order
run/err_permute_wrong_lengthrun: invalidorder has one entry per axisnone recorded
run/err_reduce_pop_too_bigrun: invalidpop can drop at most every axisreduce takes scalars
run/err_reshape_countrun: invalidreshape must keep the element countreshape count unchecked
run/err_reshape_zero_dimrun: invalidshape sizes are positivenone recorded
run/err_shrink_offset_countrun: invalidone offset per axisshrink offset count unchecked
run/err_shrink_past_endrun: invalidoffset 3 plus 2 elements passes the end of 4shrink bounds unchecked
run/err_shrink_unprovablerun: invalida raw loaded offset could be anythingshrink bounds unchecked
run/err_stack_mixed_shaperun: invalidstack operands share one shapestack shapes unchecked
run/expand_rank3_middlerun: passa middle size-1 axis broadcastsevaluates everything
expand reads i not 0
reshape column-major
run/expand_scalar_rank2run: passa scalar expands to any shapeevaluates everything
expand scalar is zero
run/expand_size1_axesrun: passonly size-1 axes grow, and they repeat the single elementevaluates everything
expand reads i not 0
reshape column-major
run/expand_then_reducerun: passbroadcast then reduce: every column gets the same column sumevaluates everything
expand reads i not 0
reduce pops trailing axes
run/gemm_movement_valuerun: passC[2][4] computed independently with per-op f32 roundingelementwise uses x[0]
evaluates everything
expand reads i not 0
f32 ops not rounded
reduce pops trailing axes
reshape column-major
run/matmul_movement_1x5x3run: pass(1x5) @ (5x3) with reshape, permute, expand, mul, reduce pop=1; sums over k in orderelementwise uses x[0]
evaluates everything
expand reads i not 0
f32 ops not rounded
fold right to left
reduce pops trailing axes
reshape column-major
run/matmul_movement_2x3x2run: pass(2x3) @ (3x2) with reshape, permute, expand, mul, reduce pop=1; sums over k in orderelementwise uses x[0]
evaluates everything
expand reads i not 0
f32 ops not rounded
fold right to left
reduce pops trailing axes
reshape column-major
run/matmul_movement_3x3x1run: pass(3x3) @ (3x1) with reshape, permute, expand, mul, reduce pop=1; sums over k in orderelementwise uses x[0]
evaluates everything
expand reads i not 0
f32 ops not rounded
fold right to left
reduce pops trailing axes
run/matmul_movement_4x1x2run: pass(4x1) @ (1x2) with reshape, permute, expand, mul, reduce pop=1; sums over k in orderelementwise uses x[0]
evaluates everything
expand reads i not 0
f32 ops not rounded
reduce pops trailing axes
reshape column-major
run/matmul_syllabus_formrun: passthe syllabus GEMM: A stored transposed as K x M, reshape [K M 1], no permuteelementwise uses x[0]
evaluates everything
expand reads i not 0
f32 ops not rounded
fold right to left
reduce pops trailing axes
reshape column-major
run/pad_2d_mixedrun: passpad rows on top and columns on the right, f32 fill 0.0evaluates everything
pad fill not zero
pad sides swapped
reshape column-major
run/pad_3drun: passpads apply per axis, in axis orderevaluates everything
pad fill not zero
pad sides swapped
reshape column-major
run/pad_bool_falserun: passbool pads with falseevaluates everything
pad fill not zero
pad sides swapped
reshape column-major
run/pad_left_onlyrun: passpads=[2 0] adds two zeros on the leftevaluates everything
pad fill not zero
pad sides swapped
run/pad_right_onlyrun: passpads=[0 3] adds three zeros on the rightevaluates everything
pad fill not zero
pad sides swapped
run/pad_shrink_roundtrip_3drun: passshrinking a pad at its left pads recovers the valueevaluates everything
pad sides swapped
shrink offset sign
run/pad_shrink_valuerun: passpad then shrink back recovers the original, and an off-center window sees the zerosevaluates everything
pad fill not zero
shrink offset sign
run/pad_zerorun: passpads of zero change nothingevaluates everything
run/permute_identityrun: passthe identity order changes nothingevaluates everything
run/permute_inverse_roundtriprun: passorder [1 2 0] then its inverse [2 0 1] gives x backevaluates everything
permute inverse
run/permute_rank3_all_ordersrun: passall six axis orders of a [2 3 4] valueevaluates everything
permute inverse
reshape column-major
run/permute_rank4run: passshape[k] = x.shape[order[k]]: [2 3 1 2] with order [3 1 0 2] is [2 3 2 1]evaluates everything
permute inverse
run/permute_then_reshaperun: passreshape after a transpose reads the transposed (row-major) orderevaluates everything
reshape column-major
run/permute_transposerun: passpermute [2 3] with order [1 0] is the transposeevaluates everything
reshape column-major
run/reduce_last_axis_via_permuterun: passto reduce the last axis, permute it to the front (row sums of x)evaluates everything
f32 ops not rounded
fold right to left
reduce pops trailing axes
reshape column-major
run/reduce_max_nan_mul_wraprun: passmax over rows propagates NaN per column, and i32 mul wraps (65536 * 65536 = 0)NaN != NaN in assert
evaluates everything
fold from zero
fold skips nan
max ignores NaN
mul doesn't wrap
reduce op ignored
reduce pops trailing axes
reshape column-major
run/reduce_pop1_pop2run: passpop=1 sums over rows (one total per column), and pop=2 sums everythingevaluates everything
reduce pops trailing axes
reshape column-major
run/reduce_rank3_popsrun: passpop=1, 2, 3 on a rank-3 value, and pop defaults to 1evaluates everything
fold from zero
reduce op ignored
reduce pops trailing axes
reshape column-major
run/reduce_rowmajor_orderrun: passpop=2 folds x00, x01, x10, x11 in row-major order: 1e8+1 rounds to 1e8, so the total is 1, not 2evaluates everything
f32 ops not rounded
fold right to left
reduce folds column-major
reshape column-major
run/reshape_from_scalarrun: passa scalar reshapes to [1 1] and back downevaluates everything
run/reshape_rank_downrun: passreshape a rank-3 value flat keeps row-major orderevaluates everything
reshape column-major
run/reshape_rank_uprun: passreshape [12] to [3 4] is row-major: element (2, 1) is 9evaluates everything
reshape column-major
run/reshape_same_rankrun: passreshape [2 3] to [3 2] is not a transpose: same flat orderevaluates everything
reshape column-major
run/reshape_to_scalarrun: passreshape [1] to shape=[] gives a scalarevaluates everything
run/shrink_constantrun: passa [2 3] window starting at (1, 2)evaluates everything
reshape column-major
shrink offset sign
run/shrink_of_shrinkrun: passoffsets of nested shrinks add upevaluates everything
reshape column-major
shrink offset sign
run/shrink_symbolic_provablerun: passmod (max o 0) 2 is in [0, 1], so a 3-wide window of 4 is provably in range (o = 5 gives 1)evaluates everything
shrink offset sign
run/stack_matrices_runtime_indexrun: passstack of matrices is rank 3; a run-time index picks one rowevaluates everything
reshape column-major
run/stack_vectors_and_indexrun: passstack of vectors is [3 4]; index pops leading axesevaluates everything
reshape column-major
run/stage_rank2run: passstage is the identity on a rank-2 valueelementwise uses x[0]
evaluates everything
stage zeroes