Week 6 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 6 spec.

How to use this

Run python tools/test.py --compiler PATH --week 6 -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/mnist_trainrender, slot 4 >= 850softmax regression on MNIST: 50 steps of 100 images, learning rate 1.0, then 1000 test digitsnone recorded
render/r_bitcastrenderbitcast both ways. A NaN made by 0 * inf must still come out as 0x7fc00000end doesn't close its range
final version not followed
render bitcast nan not canonical
render elementwise at 0
render expand zero
render load at offset 0
render loop starts at 1
render skips rangeify
render store loop short
render/r_exp2renderexp2 over 64 values, special ones first: your C must match the spec bit for bitC float literals 6 digits
C where swapped
end doesn't close its range
exp2 clamps at -126
exp2 nan becomes 1
exp2 rounds n down
exp2 series one term short
final version not followed
floor truncates
no hash consing
render elementwise at 0
render load at offset 0
render loop starts at 1
render skips rangeify
render store loop short
render/r_exp_logrenderexp then log: the sugar, renderedC cmplt as <=
C float literals 6 digits
C where swapped
end doesn't close its range
exp uses ln 2
exp2 clamps at -126
exp2 nan becomes 1
exp2 rounds n down
exp2 series one term short
final version not followed
floor truncates
log2 no sqrt2 fold
log2 zero gives nan
no hash consing
render elementwise at 0
render expand zero
render load at offset 0
render skips rangeify
render store loop short
render/r_floorrenderfloor in C, past 2^23 includedC cmplt as <=
C where swapped
end doesn't close its range
final version not followed
floor casts big values
floor truncates
render elementwise at 0
render expand zero
render load at offset 0
render loop starts at 1
render skips rangeify
render/r_grad_movementrendera gradient through pad, shrink, permute and expand, rendered as loopsC cmplt as <=
end doesn't close its range
final version not followed
grad expand takes the max
grad pad shrinks from the right
grad seed is 2
grad shrink pads swapped
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 shift wrong side
render permute inverse
render reduce from zero
render reduce of a broadcast hoisted
render shrink offset sign
render skips rangeify
render store loop short
render unflat stride
values hoisted to outer loops
render/r_grad_regression_steprenderone gradient step of least squares: w -= 0.1 * d/dw mean((Xw - y)^2)end doesn't close its range
final version not followed
grad expand takes the max
grad mul shares swapped
grad seed is 2
loads never move into loops
loads not before stores
matmul without transpose
nesting demands every range
render elementwise at 0
render expand reads i
render expand zero
render flat_of order
render in-place store fused
render load at offset 0
render loop starts at 1
render loop uses <=
render reduce from zero
render skips rangeify
render stage reads x[0]
render store loop short
render unflat stride
values hoisted to outer loops
render/r_grad_softmaxrenderthe gradient of a 4-row log-softmax loss with respect to its logitsC float literals 6 digits
C where swapped
end doesn't close its range
exp uses ln 2
exp2 rounds n down
exp2 series one term short
final version not followed
floor truncates
grad detach ignored
grad exp2 forgets ln 2
grad log2 forgets ln 2
grad mul shares swapped
grad seed is 2
loads never move into loops
no hash consing
render elementwise at 0
render expand reads i
render expand zero
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_log2renderlog2 over 64 values, special ones first: your C must match the spec bit for bitC cmplt as <=
C where swapped
end doesn't close its range
final version not followed
log2 no sqrt2 fold
log2 subnormals not scaled
log2 zero gives nan
no hash consing
render elementwise at 0
render load at offset 0
render loop starts at 1
render skips rangeify
render store loop short
render/r_matmul_8x16x8rendermatmul sugar, rendered: the fold order is k = 0, 1, ..., 15end doesn't close its range
final version not followed
loads never move into loops
matmul without transpose
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_scalar_mathrenderscalar math stays loopless CC float literals 6 digits
C where swapped
exp2 series one term short
final version not followed
sin one-part 2pi
render/r_sinrendersin over 64 values, special ones first: your C must match the spec bit for bitC float literals 6 digits
C where swapped
end doesn't close its range
final version not followed
floor truncates
no hash consing
render elementwise at 0
render load at offset 0
render skips rangeify
render store loop short
sin no fold
sin one-part 2pi
sin series one term short
render/r_sqrtrendersqrt over 64 values, special ones first: your C must match the spec bit for bitC cmplt as <=
C float literals 6 digits
C where swapped
end doesn't close its range
exp2 rounds n down
final version not followed
log2 no sqrt2 fold
log2 subnormals not scaled
no hash consing
render elementwise at 0
render load at offset 0
render skips rangeify
render store loop short
sqrt -0.0 loses its sign
sqrt no Newton step
render/r_sugar_mixrendersub, neg, fdiv, relu and cmpeq in one kernelC cmplt as <=
C where swapped
cmpeq is cmplt
end doesn't close its range
final version not followed
neg is identity
relu clamps at 1
render elementwise at 0
render expand zero
render load at offset 0
render loop starts at 1
render skips rangeify
render store loop short
render/r_url_checkrender, slot 1 >= 100a threshold test: the sum of a file ramp, stored in slot 1, must reach 100end doesn't close its range
final version not followed
loads never move into loops
render expand zero
render skips rangeify
render/r_url_inputrenderthe harness fills a url= buffer from its file before calling your kernelC float literals 6 digits
C where swapped
end doesn't close its range
exp uses ln 2
exp2 rounds n down
exp2 series one term short
final version not followed
floor truncates
no hash consing
render elementwise at 0
render expand zero
render load at offset 0
render loop starts at 1
render skips rangeify
render store loop short
run/bitcast_known_bitsrun: passbitcast reads the same 32 bits as the other typef32 consts not rounded
run/bitcast_nan_canonicalrun: passevery NaN bitcasts to 0x7fc00000, however it was madenone recorded
run/bitcast_nan_from_bitsrun: passa NaN with sign and payload, made from bits, still bitcasts back to 0x7fc00000bitcast nan not canonical
run/bitcast_round_triprun: passi32 to f32 and back keeps every non-NaN patternelementwise uses x[0]
evaluates everything
run/bitcast_same_typerun: passbitcast to its own type changes nothingnone recorded
run/bitcast_to_floatrun: passi32 patterns read as f32elementwise uses x[0]
evaluates everything
run/detach_is_identityrun: passdetach changes no value, of any dtypenone recorded
run/err_bitcast_boolrun: invalidbitcast works on i32 and f32 onlynone recorded
run/err_bitcast_no_dtyperun: invalidbitcast needs dtype=none recorded
run/err_bitcast_to_boolrun: invalidbitcast to bool is invalidnone recorded
run/err_cmpeq_f32run: invalidcmpeq is for i32 and bool (f32 equality has NaN to think about)none recorded
run/err_cmpeq_mixedrun: invalidcmpeq needs one dtypenone recorded
run/err_detach_memoryrun: invaliddetach takes a value, not memorymemory as ALU operand ok
run/err_exp_i32run: invalidexp of an i32none recorded
run/err_fdiv_i32run: invalidfdiv is f32 only: i32 division is divnone recorded
run/err_grad_arityrun: invalidgradient takes a loss and one xnone recorded
run/err_grad_in_looprun: invalidno gradients inside a loopnone recorded
run/err_grad_loss_i32run: invalidthe loss must be f32none recorded
run/err_grad_loss_not_scalarrun: invalidthe loss must be a scalarnone recorded
run/err_grad_reduce_mulrun: invalidreduce op=mul has no gradient rulenone recorded
run/err_grad_symbolic_shrinkrun: invalida value shrink with a computed offset has no gradient rulenone recorded
run/err_grad_through_callrun: invalidgradients do not go through callnone recorded
run/err_grad_through_store_loadrun: invalida store and a load on the path: memory is not differentiablenone recorded
run/err_grad_wrt_i32run: invalidx must be f32none recorded
run/err_grad_wrt_literalrun: invalidequal literals are one shared node: no gradient with respect to 2.0grad wrt literal allowed
run/err_grad_wrt_memoryrun: invalidx must be a value, not a buffernone recorded
run/err_math_boolrun: invalidlog2 of a boolnone recorded
run/err_math_i32run: invalidmath ops are f32 onlynone recorded
run/err_math_two_operandsrun: invalidsqrt takes one operandnone recorded
run/err_matmul_inner_mismatchrun: invalidmatmul (2x3) by (2x3)none recorded
run/err_matmul_rank1run: invalidmatmul takes rank-2 operandsnone recorded
run/err_relu_boolrun: invalidrelu of a boolnone recorded
run/err_sha_without_urlrun: invalidsha256= needs url=none recorded
run/err_sugar_arityrun: invalidneg takes one operandnone recorded
run/err_url_and_datarun: invaliddata= and url= togetherurl with data allowed
run/err_url_bool_bytesrun: invalidbool bytes must be 0 or 1url bool bytes unchecked
run/err_url_dotdotrun: invalidrelative paths may not climb out with ..none recorded
run/err_url_file_too_longrun: invalidthe file holds 5 f32, the buffer wants 4: extra bytes are an error toourl size unchecked
run/err_url_missing_filerun: invalidno such filenone recorded
run/err_url_sha_mismatchrun: invalidthe file does not match its sha256url sha unchecked
run/err_url_size_mismatchrun: invalidthe file holds 5 f32, the buffer wants 6none recorded
run/err_url_without_sharun: invalidurl= needs sha256=none recorded
run/err_url_wrong_dtype_sizerun: invalid20 bytes are 5 f32 but 20 bool: as bool they are not 0 or 1url bool bytes unchecked
run/exp2_bitsrun: passexp2 of fractions, bit for bit: the exact steps of the specelementwise uses x[0]
evaluates everything
exp2 rounds n down
exp2 series one term short
f32 consts not rounded
f32 ops not rounded
floor truncates
global memo across calls
where branches swapped
xor bool is equality
run/exp2_bits_one_ulp_offrun: assert_failthe expected values are exp2 with one result moved by one ulp: bits matterevaluates everything
run/exp2_integersrun: passexp2 of an integer n is exactly 2^n, down into the subnormalselementwise uses x[0]
evaluates everything
exp2 clamps at -126
f32 consts not rounded
floor truncates
global memo across calls
where branches swapped
xor bool is equality
run/exp2_specialsrun: passexp2: inf, -inf, nan, and the clamps at 128 and -150NaN != NaN in assert
elementwise uses x[0]
evaluates everything
exp2 clamps at -126
exp2 nan becomes 1
exp2 rounds n down
f32 consts not rounded
f32 ops not rounded
global memo across calls
where branches swapped
xor bool is equality
run/exp2_subnormal_resultsrun: passexp2 below -126 lands in the subnormals: 2^h * 2^k keeps it rightelementwise uses x[0]
evaluates everything
exp2 clamps at -126
f32 consts not rounded
f32 ops not rounded
floor truncates
global memo across calls
where branches swapped
xor bool is equality
run/grad_accumulation_orderrun: passshares are added in the order they arrive (reverse post-order): here that is 3.3e-08, then 0.7, then 0.1evaluates everything
f32 consts not rounded
f32 ops not rounded
grad mul shares swapped
grad seed is 2
run/grad_accumulation_order_innerrun: passan inner node with three shares: arrival order (1.0, then 3.1e-08, then 3e-08) gives exactly 1.0 there, so 2.0 at xevaluates everything
f32 ops not rounded
grad mul shares swapped
grad seed is 2
grad shares added last first
run/grad_accumulation_other_orderrun: assert_failadding the same three shares in program order gives different bitsevaluates everything
run/grad_add_construn: passa constant term has no gradientevaluates everything
grad seed is 2
run/grad_bitcast_path_is_zerorun: passa bitcast to i32 carries no gradientevaluates everything
grad flows into i32
run/grad_cast_f32run: passa cast from f32 to f32 passes the gradient throughevaluates everything
grad seed is 2
run/grad_cuberun: passd/dx (x*x)*x = 3x^2evaluates everything
grad mul shares swapped
grad seed is 2
run/grad_detachrun: passdetach makes x * detach(x) have gradient detach(x) = xevaluates everything
grad detach ignored
grad seed is 2
run/grad_exprun: passexp is sugar: its gradient follows the expansionevaluates everything
exp uses ln 2
f32 ops not rounded
global memo across calls
grad exp2 forgets ln 2
grad mul shares swapped
grad seed is 2
where branches swapped
xor bool is equality
run/grad_exp2run: passd/dx 2^x = 2^x ln 2evaluates everything
f32 consts not rounded
global memo across calls
grad exp2 forgets ln 2
grad seed is 2
where branches swapped
xor bool is equality
run/grad_expand_middle_axisrun: passexpand of a middle axis: the gradient sums along itelementwise uses x[0]
evaluates everything
expand reads i not 0
grad expand takes the max
grad mul shares swapped
grad seed is 2
reduce pops trailing axes
reshape column-major
run/grad_expand_scalarrun: passexpand of a scalar: its gradient sums every copyevaluates everything
expand reads i not 0
expand scalar is zero
grad seed is 2
stage zeroes
run/grad_fdivrun: passd/dx 1/x through fdivevaluates everything
grad mul shares swapped
grad recip sign
grad seed is 2
run/grad_floor_is_zerorun: passfloor goes through i32, so its gradient is zero (for |x| < 2^23)evaluates everything
grad flows into i32
grad where feeds both sides
where branches swapped
xor bool is equality
run/grad_indexrun: passindex: the gradient lands at that index onlyelementwise uses x[0]
evaluates everything
expand reads i not 0
grad seed is 2
pad fill not zero
reshape column-major
run/grad_logrun: passlog is sugar tooevaluates everything
f32 ops not rounded
grad log2 forgets ln 2
grad mul shares swapped
grad seed is 2
run/grad_log2run: passd/dx log2 x = 1 / (x ln 2)evaluates everything
f32 consts not rounded
grad log2 forgets ln 2
grad seed is 2
run/grad_log_softmaxrun: passthe gradient of a log-softmax loss is softmax minus one-hotelementwise uses x[0]
evaluates everything
exp uses ln 2
exp2 rounds n down
exp2 series one term short
expand reads i not 0
expand scalar is zero
f32 consts not rounded
f32 ops not rounded
floor truncates
global memo across calls
grad detach ignored
grad exp2 forgets ln 2
grad log2 forgets ln 2
grad mul shares swapped
grad seed is 2
grad shrink pads swapped
neg is identity
pad fill not zero
pad sides swapped
reduce op ignored
stage zeroes
where branches swapped
xor bool is equality
run/grad_matmul_Arun: passmatmul: dL/dA = G B^Telementwise uses x[0]
evaluates everything
expand reads i not 0
grad expand takes the max
grad mul shares swapped
grad seed is 2
matmul without transpose
permute inverse
reduce pops trailing axes
reshape column-major
run/grad_matmul_Brun: passmatmul: dL/dB = A^T Gelementwise uses x[0]
evaluates everything
expand reads i not 0
grad expand takes the max
grad mul shares swapped
grad seed is 2
matmul without transpose
reduce pops trailing axes
reshape column-major
run/grad_max_loserun: passmax sends nothing to the smaller sideevaluates everything
where branches swapped
run/grad_max_tierun: passmax with a tie splits the gradient evenlycmplt is <=
evaluates everything
grad max tie goes to a
grad seed is 2
where branches swapped
run/grad_max_winrun: passmax sends all of it to the larger sideevaluates everything
grad seed is 2
where branches swapped
run/grad_overlapping_shrinksrun: passtwo overlapping windows: their gradients add upelementwise uses x[0]
evaluates everything
expand reads i not 0
grad mul shares swapped
grad seed is 2
grad shrink pads swapped
pad fill not zero
pad sides swapped
shrink offset sign
stage zeroes
run/grad_padrun: passpad: the gradient is the shrink back to the original windowelementwise uses x[0]
evaluates everything
expand reads i not 0
grad mul shares swapped
grad pad shrinks from the right
grad seed is 2
shrink offset sign
run/grad_permuterun: passpermute: the gradient goes back through the inverse orderelementwise uses x[0]
evaluates everything
expand reads i not 0
grad mul shares swapped
grad permute not inverted
grad seed is 2
permute inverse
reshape column-major
run/grad_reciprun: passd/dx 1/x = -1/x^2evaluates everything
grad recip sign
grad seed is 2
run/grad_reduce_max_tiesrun: passreduce max: the gradient is split between tied maximabool->num always 1
cmplt is <=
elementwise uses x[0]
evaluates everything
expand reads i not 0
expand scalar is zero
grad reduce max ties not split
grad seed is 2
reduce op ignored
stage zeroes
xor bool is equality
run/grad_reduce_max_uniquerun: passreduce max: all of it goes to the one maximumbool->num always 1
cmplt is <=
elementwise uses x[0]
evaluates everything
expand reads i not 0
expand scalar is zero
grad seed is 2
reduce op ignored
stage zeroes
xor bool is equality
run/grad_reduce_mul_off_pathrun: passa reduce op=mul that x does not reach is fineevaluates everything
expand reads i not 0
fold from zero
grad seed is 2
run/grad_reduce_pop2run: passreduce over two axes, then the restelementwise uses x[0]
evaluates everything
expand reads i not 0
grad seed is 2
reshape column-major
run/grad_relu_negativerun: passrelu at a negative input: zeroevaluates everything
where branches swapped
run/grad_relu_zero_tierun: passrelu at exactly 0 is a tie with 0.0: halfcmplt is <=
evaluates everything
grad max tie goes to a
grad seed is 2
relu clamps at 1
where branches swapped
run/grad_second_orderrun: passa gradient is a graph: d2/dx2 x^3 = 6xevaluates everything
grad mul shares swapped
grad seed is 2
run/grad_shrinkrun: passshrink: the gradient is padded back with zeroselementwise uses x[0]
evaluates everything
expand reads i not 0
grad seed is 2
pad fill not zero
shrink offset sign
stage zeroes
run/grad_sigmoid_chainrun: passa longer chain: sigmoid written with exp, fdiv and addelementwise uses x[0]
evaluates everything
exp uses ln 2
exp2 rounds n down
expand reads i not 0
expand scalar is zero
f32 consts not rounded
f32 ops not rounded
floor truncates
global memo across calls
grad exp2 forgets ln 2
grad mul shares swapped
grad recip sign
grad seed is 2
neg is identity
stage zeroes
where branches swapped
xor bool is equality
run/grad_sinrun: passd/dx sin x = cos x, written sin(x + pi/2)evaluates everything
f32 consts not rounded
f32 ops not rounded
global memo across calls
grad seed is 2
grad sin is sin
sin no fold
where branches swapped
xor bool is equality
run/grad_sqrtrun: passd/dx sqrt x = 1 / (2 sqrt x)bool->num always 1
evaluates everything
global memo across calls
grad seed is 2
grad sqrt forgets the 2
where branches swapped
xor bool is equality
run/grad_squarerun: passd/dx x*x = 2x: x is used twice, so two contributions add upevaluates everything
grad seed is 2
run/grad_stackrun: passstack: each operand gets its own row of the gradientelementwise uses x[0]
evaluates everything
expand reads i not 0
grad index pads swapped
grad mul shares swapped
grad seed is 2
pad fill not zero
pad sides swapped
run/grad_stagerun: passstage is the identity for values and for gradientsevaluates everything
grad seed is 2
run/grad_subrun: passsub is add of a negationevaluates everything
grad mul shares swapped
grad seed is 2
run/grad_sum_of_squaresrun: passd/dv sum(v*v) = 2velementwise uses x[0]
evaluates everything
expand reads i not 0
grad seed is 2
stage zeroes
run/grad_through_int_cast_is_zerorun: passa cast to i32 carries no gradientevaluates everything
grad flows into i32
run/grad_unusedrun: passy does not depend on x: the gradient is zeroevaluates everything
run/grad_value_unchangedrun: passtaking a gradient leaves the forward value aloneevaluates everything
grad seed is 2
run/grad_whererun: passwhere sends the gradient to the side it pickedevaluates everything
grad seed is 2
where branches swapped
run/grad_wrong_valuerun: assert_faild/dx x*x at 3 is 6, not 9evaluates everything
run/grad_wrt_loadrun: passx may be a load: the weights of a model areelementwise uses x[0]
evaluates everything
expand reads i not 0
grad mul shares swapped
grad seed is 2
run/grad_zero_shaperun: passan independent x gets zeros of its own shapeevaluates everything
run/log2_bitsrun: passlog2, bit for bit, including both sides of the sqrt(2) fold and a subnormalbool->num always 1
cmplt is <=
elementwise uses x[0]
evaluates everything
f32 consts not rounded
f32 ops not rounded
global memo across calls
log2 no sqrt2 fold
log2 subnormals not scaled
where branches swapped
run/log2_bits_one_ulp_offrun: assert_failone log2 result moved by one ulpevaluates everything
run/log2_powersrun: passlog2 of a power of two is exact, subnormals includedbool->num always 1
elementwise uses x[0]
evaluates everything
f32 consts not rounded
global memo across calls
log2 subnormals not scaled
where branches swapped
run/log2_specialsrun: passlog2: zeros give -inf, negatives nan, inf infNaN != NaN in assert
bool->num always 1
cmplt is <=
elementwise uses x[0]
evaluates everything
global memo across calls
log2 zero gives nan
where branches swapped
run/math_in_looprun: passa math op inside a hand-written loop: 2^0 + 2^1 + 2^2 + 2^3alloc not zeroed
end doesn't close its range
evaluates everything
global memo across calls
loads never move into loops
loop runs one extra time
stores under ends unsequenced
where branches swapped
xor bool is equality
run/math_rank2run: passmath ops are elementwise at any rankbool->num always 1
elementwise uses x[0]
evaluates everything
global memo across calls
reshape column-major
where branches swapped
run/math_scalar_literalsrun: passmath ops on literals, the exact casesbool->num always 1
global memo across calls
where branches swapped
xor bool is equality
run/op_name_with_digitrun: invalidop names may contain digits now, but log10 is not an opnone recorded
run/sin_bitsrun: passsin, bit for bit, across several turnscmplt is <=
elementwise uses x[0]
evaluates everything
f32 consts not rounded
f32 ops not rounded
floor truncates
global memo across calls
sin no fold
sin one-part 2pi
where branches swapped
xor bool is equality
run/sin_bits_one_ulp_offrun: assert_failone sin result moved by one ulpevaluates everything
run/sin_negative_zerorun: passsin(-0.0) keeps the signglobal memo across calls
sin one-part 2pi
where branches swapped
xor bool is equality
run/sin_specialsrun: passsin: inf and nan give nan, huge inputs stay in [-1, 1]NaN != NaN in assert
elementwise uses x[0]
evaluates everything
f32 consts not rounded
f32 ops not rounded
floor casts big values
global memo across calls
sin no fold
where branches swapped
xor bool is equality
run/sqrt_negative_zerorun: passsqrt(-0.0) is -0.0: assert can't see the sign, bitcast cancmplt is <=
global memo across calls
sqrt -0.0 loses its sign
run/sqrt_specialsrun: passsqrt: negatives nan, inf inf, nan nanNaN != NaN in assert
elementwise uses x[0]
evaluates everything
global memo across calls
where branches swapped
run/sqrt_valuesrun: passsqrt, bit for bit: squares come out exactbool->num always 1
cmplt is <=
elementwise uses x[0]
evaluates everything
exp2 rounds n down
f32 consts not rounded
f32 ops not rounded
floor truncates
global memo across calls
log2 subnormals not scaled
sqrt no Newton step
where branches swapped
xor bool is equality
run/sugar_cmpeqrun: passcmpeq on i32 and on boolcmpeq is cmplt
cmplt is <=
elementwise uses x[0]
evaluates everything
expand scalar is zero
where branches swapped
run/sugar_exp_bitsrun: passexp x is exp2 (mul x 1.442695), bit for bitelementwise uses x[0]
evaluates everything
exp uses ln 2
exp2 clamps at -126
exp2 rounds n down
exp2 series one term short
expand scalar is zero
f32 consts not rounded
f32 ops not rounded
floor truncates
global memo across calls
where branches swapped
xor bool is equality
run/sugar_fdivrun: passfdiv is a times recip b: 10 / 3 comes out one ulp above the correctly rounded quotientf32 consts not rounded
f32 ops not rounded
run/sugar_floorrun: passfloor: halves, negatives, values past 2^23, inf and nanNaN != NaN in assert
cmplt is <=
elementwise uses x[0]
evaluates everything
expand scalar is zero
floor casts big values
floor truncates
where branches swapped
xor bool is equality
run/sugar_floor_negative_zerorun: passfloor(-0.0) is +0.0 by this definitioncmplt is <=
where branches swapped
xor bool is equality
run/sugar_log_bitsrun: passlog x is mul (log2 x) 0.6931472, bit for bitbool->num always 1
cmplt is <=
elementwise uses x[0]
evaluates everything
expand scalar is zero
f32 consts not rounded
f32 ops not rounded
global memo across calls
log2 zero gives nan
where branches swapped
run/sugar_matmulrun: passmatmul A (2x3) B (3x2), the week 5 compositeelementwise uses x[0]
evaluates everything
expand reads i not 0
matmul without transpose
reduce pops trailing axes
reshape column-major
run/sugar_matmul_fold_orderrun: passmatmul sums over k in order k = 0, 1, 2: the bits followelementwise uses x[0]
evaluates everything
expand reads i not 0
f32 consts not rounded
f32 ops not rounded
fold right to left
matmul without transpose
reduce pops trailing axes
reshape column-major
run/sugar_matmul_i32_wrapsrun: passmatmul on i32 wraps like mul and addmatmul without transpose
reduce pops trailing axes
run/sugar_relurun: passrelu is max with zero, on i32 and f32NaN != NaN in assert
elementwise uses x[0]
evaluates everything
max ignores NaN
relu clamps at 1
run/sugar_sub_f32run: passsub on f32: x - x is +0.0neg is identity
run/sugar_sub_neg_i32_wraprun: passsub and neg on i32 wrap like add and muladd doesn't wrap
mul doesn't wrap
run/url_boolrun: passbool from a file: one byte eachevaluates everything
run/url_computerun: passfile data flows into ordinary opsevaluates everything
url big-endian
run/url_f32run: passa buffer read from a file: 5 little-endian f32evaluates everything
url big-endian
run/url_i32run: passi32 from a fileevaluates everything
url big-endian
run/url_store_intorun: passa buffer from a file can be written like any otherevaluates everything
url big-endian
run/url_two_buffers_one_filerun: passtwo buffers may read the same fileevaluates everything