{"abstract":"Folded code computes -9 / 2 as -5 while the interpreter computes -4.","category":"Bytecode virtual machines","checks":9,"contract":"Rewrite stack bytecode until a pass makes no change (at most 50 passes). Rules, applied left to right in one scan per pass: push a, push b, add/sub/mul/div folds to push (a op b) when the result fits in int16 (div truncates toward zero and is never folded by zero); not, not is removed; jmp L immediately followed by label L is removed; after ret or jmp, instructions up to the next label are deleted. Return the optimized instruction list.","evaluation_group":"w2-bytecode-virtual-machines-peephole-optimizer","failed_approach":"Negating based on the dividend alone gets positive-by-negative quotients wrong.","family":"w2-bytecode-virtual-machines-peephole-optimizer-division-folding-rule","id":"FA-90226","implementations":{"attempt":{"sha256":"4597be4fc6540329b5faa2e98ef5f3e6c30321dfa6f601bfd817160a5fb4c1cf","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(code):\n    code = [list(i) for i in code]\n    for _ in range(50):\n        changed = False\n        out = []\n        i = 0\n        while i < len(code):\n            ins = code[i]\n            if (i + 2 < len(code) and ins[0] == 'push' and code[i + 1][0] == 'push'\n                    and code[i + 2][0] in ('add', 'sub', 'mul', 'div')):\n                a, b, op = ins[1], code[i + 1][1], code[i + 2][0]\n                if not (op == 'div' and b == 0):\n                    if op == 'add':\n                        v = a + b\n                    elif op == 'sub':\n                        v = a - b\n                    elif op == 'mul':\n                        v = a * b\n                    else:\n                        v = -(abs(a) // abs(b)) if a < 0 else abs(a) // abs(b)\n                    if -32768 <= v <= 32767:\n                        out.append(['push', v])\n                        i += 3\n                        changed = True\n                        continue\n            if ins[0] == 'not' and i + 1 < len(code) and code[i + 1][0] == 'not':\n                i += 2\n                changed = True\n                continue\n            if ins[0] == 'jmp' and i + 1 < len(code) and code[i + 1] == ['label', ins[1]]:\n                i += 1\n                changed = True\n                continue\n            out.append(ins)\n            i += 1\n            if ins[0] in ('ret', 'jmp'):\n                j = i\n                while j < len(code) and code[j][0] != 'label':\n                    j += 1\n                if j > i:\n                    changed = True\n                i = j\n        code = out\n        if not changed:\n            break\n    return code\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('regression: folding cascades across passes',\n   ([['push', 2], ['push', 4], ['add'], ['push', 4], ['mul'], ['push', 5], ['sub'], ['ret']],),\n   [['push', 19], ['ret']]),\n  ('fold reaching the int16 minimum',\n   ([['push', -16384], ['push', 2], ['mul'], ['push', 1], ['ret']],),\n   [['push', -32768], ['push', 1], ['ret']]),\n  ('fold reaching the int16 maximum',\n   ([['push', 32766], ['push', 1], ['add'], ['push', 200], ['push', 201], ['mul'], ['ret']],),\n   [['push', 32767], ['push', 200], ['push', 201], ['mul'], ['ret']]),\n  ('jump over code to a later label is kept',\n   ([['jmp', 'L2'], ['label', 'L1'], ['push', 1], ['label', 'L2'], ['ret']],),\n   [['jmp', 'L2'], ['label', 'L1'], ['push', 1], ['label', 'L2'], ['ret']]),\n  ('jump to the second of two adjacent labels',\n   ([['jmp', 'L'], ['label', 'M'], ['label', 'L'], ['push', 1], ['ret']],),\n   [['jmp', 'L'], ['label', 'M'], ['label', 'L'], ['push', 1], ['ret']]),\n  ('dead code after an unconditional jump',\n   ([['jmp', 'E'], ['push', 1], ['push', 1], ['label', 'E'], ['ret']],),\n   [['label', 'E'], ['ret']]),\n  ('conditional jump keeps its fallthrough',\n   ([['push', 0], ['jz', 'E'], ['push', 10], ['ret'], ['label', 'E'], ['push', 1], ['ret']],),\n   [['push', 0], ['jz', 'E'], ['push', 10], ['ret'], ['label', 'E'], ['push', 1], ['ret']]),\n  ('division folds truncate toward zero',\n   ([['push', -9],\n     ['push', 2],\n     ['div'],\n     ['push', 7],\n     ['push', -2],\n     ['div'],\n     ['push', 5],\n     ['push', 0],\n     ['div'],\n     ['ret']],),\n   [['push', -4], ['push', -3], ['push', 5], ['push', 0], ['div'], ['ret']]),\n  ('control: double negation removed', ([['push', 1], ['not'], ['not'], ['ret']],), [['push', 1], ['ret']])],\n [('regression: folding cascades across passes',\n   ([['push', 2], ['push', 5], ['add'], ['push', 4], ['mul'], ['push', 5], ['sub'], ['ret']],),\n   [['push', 23], ['ret']]),\n  ('fold reaching the int16 minimum',\n   ([['push', -16384], ['push', 2], ['mul'], ['push', 2], ['ret']],),\n   [['push', -32768], ['push', 2], ['ret']]),\n  ('fold reaching the int16 maximum',\n   ([['push', 32766], ['push', 1], ['add'], ['push', 200], ['push', 202], ['mul'], ['ret']],),\n   [['push', 32767], ['push', 200], ['push', 202], ['mul'], ['ret']]),\n  ('jump over code to a later label is kept',\n   ([['jmp', 'L2'], ['label', 'L1'], ['push', 2], ['label', 'L2'], ['ret']],),\n   [['jmp', 'L2'], ['label', 'L1'], ['push', 2], ['label', 'L2'], ['ret']]),\n  ('jump to the second of two adjacent labels',\n   ([['jmp', 'L'], ['label', 'M'], ['label', 'L'], ['push', 2], ['ret']],),\n   [['jmp', 'L'], ['label', 'M'], ['label', 'L'], ['push', 2], ['ret']]),\n  ('dead code after an unconditional jump',\n   ([['jmp', 'E'], ['push', 1], ['push', 2], ['label', 'E'], ['ret']],),\n   [['label', 'E'], ['ret']]),\n  ('conditional jump keeps its fallthrough',\n   ([['push', 0], ['jz', 'E'], ['push', 11], ['ret'], ['label', 'E'], ['push', 1], ['ret']],),\n   [['push', 0], ['jz', 'E'], ['push', 11], ['ret'], ['label', 'E'], ['push', 1], ['ret']]),\n  ('division folds truncate toward zero',\n   ([['push', -11],\n     ['push', 2],\n     ['div'],\n     ['push', 7],\n     ['push', -2],\n     ['div'],\n     ['push', 5],\n     ['push', 0],\n     ['div'],\n     ['ret']],),\n   [['push', -5], ['push', -3], ['push', 5], ['push', 0], ['div'], ['ret']]),\n  ('control: double negation removed', ([['push', 2], ['not'], ['not'], ['ret']],), [['push', 2], ['ret']])],\n [('regression: folding cascades across passes',\n   ([['push', 2], ['push', 6], ['add'], ['push', 4], ['mul'], ['push', 5], ['sub'], ['ret']],),\n   [['push', 27], ['ret']]),\n  ('fold reaching the int16 minimum',\n   ([['push', -16384], ['push', 2], ['mul'], ['push', 3], ['ret']],),\n   [['push', -32768], ['push', 3], ['ret']]),\n  ('fold reaching the int16 maximum',\n   ([['push', 32766], ['push', 1], ['add'], ['push', 200], ['push', 203], ['mul'], ['ret']],),\n   [['push', 32767], ['push', 200], ['push', 203], ['mul'], ['ret']]),\n  ('jump over code to a later label is kept',\n   ([['jmp', 'L2'], ['label', 'L1'], ['push', 3], ['label', 'L2'], ['ret']],),\n   [['jmp', 'L2'], ['label', 'L1'], ['push', 3], ['label', 'L2'], ['ret']]),\n  ('jump to the second of two adjacent labels',\n   ([['jmp', 'L'], ['label', 'M'], ['label', 'L'], ['push', 3], ['ret']],),\n   [['jmp', 'L'], ['label', 'M'], ['label', 'L'], ['push', 3], ['ret']]),\n  ('dead code after an unconditional jump',\n   ([['jmp', 'E'], ['push', 1], ['push', 3], ['label', 'E'], ['ret']],),\n   [['label', 'E'], ['ret']]),\n  ('conditional jump keeps its fallthrough',\n   ([['push', 0], ['jz', 'E'], ['push', 12], ['ret'], ['label', 'E'], ['push', 1], ['ret']],),\n   [['push', 0], ['jz', 'E'], ['push', 12], ['ret'], ['label', 'E'], ['push', 1], ['ret']]),\n  ('division folds truncate toward zero',\n   ([['push', -13],\n     ['push', 2],\n     ['div'],\n     ['push', 7],\n     ['push', -2],\n     ['div'],\n     ['push', 5],\n     ['push', 0],\n     ['div'],\n     ['ret']],),\n   [['push', -6], ['push', -3], ['push', 5], ['push', 0], ['div'], ['ret']]),\n  ('control: double negation removed', ([['push', 3], ['not'], ['not'], ['ret']],), [['push', 3], ['ret']])],\n [('regression: folding cascades across passes',\n   ([['push', 2], ['push', 7], ['add'], ['push', 4], ['mul'], ['push', 5], ['sub'], ['ret']],),\n   [['push', 31], ['ret']]),\n  ('fold reaching the int16 minimum',\n   ([['push', -16384], ['push', 2], ['mul'], ['push', 4], ['ret']],),\n   [['push', -32768], ['push', 4], ['ret']]),\n  ('fold reaching the int16 maximum',\n   ([['push', 32766], ['push', 1], ['add'], ['push', 200], ['push', 204], ['mul'], ['ret']],),\n   [['push', 32767], ['push', 200], ['push', 204], ['mul'], ['ret']]),\n  ('jump over code to a later label is kept',\n   ([['jmp', 'L2'], ['label', 'L1'], ['push', 4], ['label', 'L2'], ['ret']],),\n   [['jmp', 'L2'], ['label', 'L1'], ['push', 4], ['label', 'L2'], ['ret']]),\n  ('jump to the second of two adjacent labels',\n   ([['jmp', 'L'], ['label', 'M'], ['label', 'L'], ['push', 4], ['ret']],),\n   [['jmp', 'L'], ['label', 'M'], ['label', 'L'], ['push', 4], ['ret']]),\n  ('dead code after an unconditional jump',\n   ([['jmp', 'E'], ['push', 1], ['push', 4], ['label', 'E'], ['ret']],),\n   [['label', 'E'], ['ret']]),\n  ('conditional jump keeps its fallthrough',\n   ([['push', 0], ['jz', 'E'], ['push', 13], ['ret'], ['label', 'E'], ['push', 1], ['ret']],),\n   [['push', 0], ['jz', 'E'], ['push', 13], ['ret'], ['label', 'E'], ['push', 1], ['ret']]),\n  ('division folds truncate toward zero',\n   ([['push', -15],\n     ['push', 2],\n     ['div'],\n     ['push', 7],\n     ['push', -2],\n     ['div'],\n     ['push', 5],\n     ['push', 0],\n     ['div'],\n     ['ret']],),\n   [['push', -7], ['push', -3], ['push', 5], ['push', 0], ['div'], ['ret']]),\n  ('control: double negation removed', ([['push', 4], ['not'], ['not'], ['ret']],), [['push', 4], ['ret']])],\n [('regression: folding cascades across passes',\n   ([['push', 2], ['push', 8], ['add'], ['push', 4], ['mul'], ['push', 5], ['sub'], ['ret']],),\n   [['push', 35], ['ret']]),\n  ('fold reaching the int16 minimum',\n   ([['push', -16384], ['push', 2], ['mul'], ['push', 5], ['ret']],),\n   [['push', -32768], ['push', 5], ['ret']]),\n  ('fold reaching the int16 maximum',\n   ([['push', 32766], ['push', 1], ['add'], ['push', 200], ['push', 205], ['mul'], ['ret']],),\n   [['push', 32767], ['push', 200], ['push', 205], ['mul'], ['ret']]),\n  ('jump over code to a later label is kept',\n   ([['jmp', 'L2'], ['label', 'L1'], ['push', 5], ['label', 'L2'], ['ret']],),\n   [['jmp', 'L2'], ['label', 'L1'], ['push', 5], ['label', 'L2'], ['ret']]),\n  ('jump to the second of two adjacent labels',\n   ([['jmp', 'L'], ['label', 'M'], ['label', 'L'], ['push', 5], ['ret']],),\n   [['jmp', 'L'], ['label', 'M'], ['label', 'L'], ['push', 5], ['ret']]),\n  ('dead code after an unconditional jump',\n   ([['jmp', 'E'], ['push', 1], ['push', 5], ['label', 'E'], ['ret']],),\n   [['label', 'E'], ['ret']]),\n  ('conditional jump keeps its fallthrough',\n   ([['push', 0], ['jz', 'E'], ['push', 14], ['ret'], ['label', 'E'], ['push', 1], ['ret']],),\n   [['push', 0], ['jz', 'E'], ['push', 14], ['ret'], ['label', 'E'], ['push', 1], ['ret']]),\n  ('division folds truncate toward zero',\n   ([['push', -17],\n     ['push', 2],\n     ['div'],\n     ['push', 7],\n     ['push', -2],\n     ['div'],\n     ['push', 5],\n     ['push', 0],\n     ['div'],\n     ['ret']],),\n   [['push', -8], ['push', -3], ['push', 5], ['push', 0], ['div'], ['ret']]),\n  ('control: double negation removed', ([['push', 5], ['not'], ['not'], ['ret']],), [['push', 5], ['ret']])]]\nfor label, args, expected in cases[N - 1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"4afc091ec8fda03929d0eeba6d90756b83b18ec300bbe638f2b2c774584c7c0c","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(code):\n    code = [list(i) for i in code]\n    for _ in range(50):\n        changed = False\n        out = []\n        i = 0\n        while i < len(code):\n            ins = code[i]\n            if (i + 2 < len(code) and ins[0] == 'push' and code[i + 1][0] == 'push'\n                    and code[i + 2][0] in ('add', 'sub', 'mul', 'div')):\n                a, b, op = ins[1], code[i + 1][1], code[i + 2][0]\n                if not (op == 'div' and b == 0):\n                    if op == 'add':\n                        v = a + b\n                    elif op == 'sub':\n                        v = a - b\n                    elif op == 'mul':\n                        v = a * b\n                    else:\n                        v = a // b\n                    if -32768 <= v <= 32767:\n                        out.append(['push', v])\n                        i += 3\n                        changed = True\n                        continue\n            if ins[0] == 'not' and i + 1 < len(code) and code[i + 1][0] == 'not':\n                i += 2\n                changed = True\n                continue\n            if ins[0] == 'jmp' and i + 1 < len(code) and code[i + 1] == ['label', ins[1]]:\n                i += 1\n                changed = True\n                continue\n            out.append(ins)\n            i += 1\n            if ins[0] in ('ret', 'jmp'):\n                j = i\n                while j < len(code) and code[j][0] != 'label':\n                    j += 1\n                if j > i:\n                    changed = True\n                i = j\n        code = out\n        if not changed:\n            break\n    return code\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('regression: folding cascades across passes',\n   ([['push', 2], ['push', 4], ['add'], ['push', 4], ['mul'], ['push', 5], ['sub'], ['ret']],),\n   [['push', 19], ['ret']]),\n  ('fold reaching the int16 minimum',\n   ([['push', -16384], ['push', 2], ['mul'], ['push', 1], ['ret']],),\n   [['push', -32768], ['push', 1], ['ret']]),\n  ('fold reaching the int16 maximum',\n   ([['push', 32766], ['push', 1], ['add'], ['push', 200], ['push', 201], ['mul'], ['ret']],),\n   [['push', 32767], ['push', 200], ['push', 201], ['mul'], ['ret']]),\n  ('jump over code to a later label is kept',\n   ([['jmp', 'L2'], ['label', 'L1'], ['push', 1], ['label', 'L2'], ['ret']],),\n   [['jmp', 'L2'], ['label', 'L1'], ['push', 1], ['label', 'L2'], ['ret']]),\n  ('jump to the second of two adjacent labels',\n   ([['jmp', 'L'], ['label', 'M'], ['label', 'L'], ['push', 1], ['ret']],),\n   [['jmp', 'L'], ['label', 'M'], ['label', 'L'], ['push', 1], ['ret']]),\n  ('dead code after an unconditional jump',\n   ([['jmp', 'E'], ['push', 1], ['push', 1], ['label', 'E'], ['ret']],),\n   [['label', 'E'], ['ret']]),\n  ('conditional jump keeps its fallthrough',\n   ([['push', 0], ['jz', 'E'], ['push', 10], ['ret'], ['label', 'E'], ['push', 1], ['ret']],),\n   [['push', 0], ['jz', 'E'], ['push', 10], ['ret'], ['label', 'E'], ['push', 1], ['ret']]),\n  ('division folds truncate toward zero',\n   ([['push', -9],\n     ['push', 2],\n     ['div'],\n     ['push', 7],\n     ['push', -2],\n     ['div'],\n     ['push', 5],\n     ['push', 0],\n     ['div'],\n     ['ret']],),\n   [['push', -4], ['push', -3], ['push', 5], ['push', 0], ['div'], ['ret']]),\n  ('control: double negation removed', ([['push', 1], ['not'], ['not'], ['ret']],), [['push', 1], ['ret']])],\n [('regression: folding cascades across passes',\n   ([['push', 2], ['push', 5], ['add'], ['push', 4], ['mul'], ['push', 5], ['sub'], ['ret']],),\n   [['push', 23], ['ret']]),\n  ('fold reaching the int16 minimum',\n   ([['push', -16384], ['push', 2], ['mul'], ['push', 2], ['ret']],),\n   [['push', -32768], ['push', 2], ['ret']]),\n  ('fold reaching the int16 maximum',\n   ([['push', 32766], ['push', 1], ['add'], ['push', 200], ['push', 202], ['mul'], ['ret']],),\n   [['push', 32767], ['push', 200], ['push', 202], ['mul'], ['ret']]),\n  ('jump over code to a later label is kept',\n   ([['jmp', 'L2'], ['label', 'L1'], ['push', 2], ['label', 'L2'], ['ret']],),\n   [['jmp', 'L2'], ['label', 'L1'], ['push', 2], ['label', 'L2'], ['ret']]),\n  ('jump to the second of two adjacent labels',\n   ([['jmp', 'L'], ['label', 'M'], ['label', 'L'], ['push', 2], ['ret']],),\n   [['jmp', 'L'], ['label', 'M'], ['label', 'L'], ['push', 2], ['ret']]),\n  ('dead code after an unconditional jump',\n   ([['jmp', 'E'], ['push', 1], ['push', 2], ['label', 'E'], ['ret']],),\n   [['label', 'E'], ['ret']]),\n  ('conditional jump keeps its fallthrough',\n   ([['push', 0], ['jz', 'E'], ['push', 11], ['ret'], ['label', 'E'], ['push', 1], ['ret']],),\n   [['push', 0], ['jz', 'E'], ['push', 11], ['ret'], ['label', 'E'], ['push', 1], ['ret']]),\n  ('division folds truncate toward zero',\n   ([['push', -11],\n     ['push', 2],\n     ['div'],\n     ['push', 7],\n     ['push', -2],\n     ['div'],\n     ['push', 5],\n     ['push', 0],\n     ['div'],\n     ['ret']],),\n   [['push', -5], ['push', -3], ['push', 5], ['push', 0], ['div'], ['ret']]),\n  ('control: double negation removed', ([['push', 2], ['not'], ['not'], ['ret']],), [['push', 2], ['ret']])],\n [('regression: folding cascades across passes',\n   ([['push', 2], ['push', 6], ['add'], ['push', 4], ['mul'], ['push', 5], ['sub'], ['ret']],),\n   [['push', 27], ['ret']]),\n  ('fold reaching the int16 minimum',\n   ([['push', -16384], ['push', 2], ['mul'], ['push', 3], ['ret']],),\n   [['push', -32768], ['push', 3], ['ret']]),\n  ('fold reaching the int16 maximum',\n   ([['push', 32766], ['push', 1], ['add'], ['push', 200], ['push', 203], ['mul'], ['ret']],),\n   [['push', 32767], ['push', 200], ['push', 203], ['mul'], ['ret']]),\n  ('jump over code to a later label is kept',\n   ([['jmp', 'L2'], ['label', 'L1'], ['push', 3], ['label', 'L2'], ['ret']],),\n   [['jmp', 'L2'], ['label', 'L1'], ['push', 3], ['label', 'L2'], ['ret']]),\n  ('jump to the second of two adjacent labels',\n   ([['jmp', 'L'], ['label', 'M'], ['label', 'L'], ['push', 3], ['ret']],),\n   [['jmp', 'L'], ['label', 'M'], ['label', 'L'], ['push', 3], ['ret']]),\n  ('dead code after an unconditional jump',\n   ([['jmp', 'E'], ['push', 1], ['push', 3], ['label', 'E'], ['ret']],),\n   [['label', 'E'], ['ret']]),\n  ('conditional jump keeps its fallthrough',\n   ([['push', 0], ['jz', 'E'], ['push', 12], ['ret'], ['label', 'E'], ['push', 1], ['ret']],),\n   [['push', 0], ['jz', 'E'], ['push', 12], ['ret'], ['label', 'E'], ['push', 1], ['ret']]),\n  ('division folds truncate toward zero',\n   ([['push', -13],\n     ['push', 2],\n     ['div'],\n     ['push', 7],\n     ['push', -2],\n     ['div'],\n     ['push', 5],\n     ['push', 0],\n     ['div'],\n     ['ret']],),\n   [['push', -6], ['push', -3], ['push', 5], ['push', 0], ['div'], ['ret']]),\n  ('control: double negation removed', ([['push', 3], ['not'], ['not'], ['ret']],), [['push', 3], ['ret']])],\n [('regression: folding cascades across passes',\n   ([['push', 2], ['push', 7], ['add'], ['push', 4], ['mul'], ['push', 5], ['sub'], ['ret']],),\n   [['push', 31], ['ret']]),\n  ('fold reaching the int16 minimum',\n   ([['push', -16384], ['push', 2], ['mul'], ['push', 4], ['ret']],),\n   [['push', -32768], ['push', 4], ['ret']]),\n  ('fold reaching the int16 maximum',\n   ([['push', 32766], ['push', 1], ['add'], ['push', 200], ['push', 204], ['mul'], ['ret']],),\n   [['push', 32767], ['push', 200], ['push', 204], ['mul'], ['ret']]),\n  ('jump over code to a later label is kept',\n   ([['jmp', 'L2'], ['label', 'L1'], ['push', 4], ['label', 'L2'], ['ret']],),\n   [['jmp', 'L2'], ['label', 'L1'], ['push', 4], ['label', 'L2'], ['ret']]),\n  ('jump to the second of two adjacent labels',\n   ([['jmp', 'L'], ['label', 'M'], ['label', 'L'], ['push', 4], ['ret']],),\n   [['jmp', 'L'], ['label', 'M'], ['label', 'L'], ['push', 4], ['ret']]),\n  ('dead code after an unconditional jump',\n   ([['jmp', 'E'], ['push', 1], ['push', 4], ['label', 'E'], ['ret']],),\n   [['label', 'E'], ['ret']]),\n  ('conditional jump keeps its fallthrough',\n   ([['push', 0], ['jz', 'E'], ['push', 13], ['ret'], ['label', 'E'], ['push', 1], ['ret']],),\n   [['push', 0], ['jz', 'E'], ['push', 13], ['ret'], ['label', 'E'], ['push', 1], ['ret']]),\n  ('division folds truncate toward zero',\n   ([['push', -15],\n     ['push', 2],\n     ['div'],\n     ['push', 7],\n     ['push', -2],\n     ['div'],\n     ['push', 5],\n     ['push', 0],\n     ['div'],\n     ['ret']],),\n   [['push', -7], ['push', -3], ['push', 5], ['push', 0], ['div'], ['ret']]),\n  ('control: double negation removed', ([['push', 4], ['not'], ['not'], ['ret']],), [['push', 4], ['ret']])],\n [('regression: folding cascades across passes',\n   ([['push', 2], ['push', 8], ['add'], ['push', 4], ['mul'], ['push', 5], ['sub'], ['ret']],),\n   [['push', 35], ['ret']]),\n  ('fold reaching the int16 minimum',\n   ([['push', -16384], ['push', 2], ['mul'], ['push', 5], ['ret']],),\n   [['push', -32768], ['push', 5], ['ret']]),\n  ('fold reaching the int16 maximum',\n   ([['push', 32766], ['push', 1], ['add'], ['push', 200], ['push', 205], ['mul'], ['ret']],),\n   [['push', 32767], ['push', 200], ['push', 205], ['mul'], ['ret']]),\n  ('jump over code to a later label is kept',\n   ([['jmp', 'L2'], ['label', 'L1'], ['push', 5], ['label', 'L2'], ['ret']],),\n   [['jmp', 'L2'], ['label', 'L1'], ['push', 5], ['label', 'L2'], ['ret']]),\n  ('jump to the second of two adjacent labels',\n   ([['jmp', 'L'], ['label', 'M'], ['label', 'L'], ['push', 5], ['ret']],),\n   [['jmp', 'L'], ['label', 'M'], ['label', 'L'], ['push', 5], ['ret']]),\n  ('dead code after an unconditional jump',\n   ([['jmp', 'E'], ['push', 1], ['push', 5], ['label', 'E'], ['ret']],),\n   [['label', 'E'], ['ret']]),\n  ('conditional jump keeps its fallthrough',\n   ([['push', 0], ['jz', 'E'], ['push', 14], ['ret'], ['label', 'E'], ['push', 1], ['ret']],),\n   [['push', 0], ['jz', 'E'], ['push', 14], ['ret'], ['label', 'E'], ['push', 1], ['ret']]),\n  ('division folds truncate toward zero',\n   ([['push', -17],\n     ['push', 2],\n     ['div'],\n     ['push', 7],\n     ['push', -2],\n     ['div'],\n     ['push', 5],\n     ['push', 0],\n     ['div'],\n     ['ret']],),\n   [['push', -8], ['push', -3], ['push', 5], ['push', 0], ['div'], ['ret']]),\n  ('control: double negation removed', ([['push', 5], ['not'], ['not'], ['ret']],), [['push', 5], ['ret']])]]\nfor label, args, expected in cases[N - 1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"d7ef94bd4df6dda1c5f85115e34e2b71b89fc17d04e7633479eb10dcdc8bda0e","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(code):\n    code = [list(i) for i in code]\n    for _ in range(50):\n        changed = False\n        out = []\n        i = 0\n        while i < len(code):\n            ins = code[i]\n            if (i + 2 < len(code) and ins[0] == 'push' and code[i + 1][0] == 'push'\n                    and code[i + 2][0] in ('add', 'sub', 'mul', 'div')):\n                a, b, op = ins[1], code[i + 1][1], code[i + 2][0]\n                if not (op == 'div' and b == 0):\n                    if op == 'add':\n                        v = a + b\n                    elif op == 'sub':\n                        v = a - b\n                    elif op == 'mul':\n                        v = a * b\n                    else:\n                        v = abs(a) // abs(b) * (1 if (a < 0) == (b < 0) else -1)\n                    if -32768 <= v <= 32767:\n                        out.append(['push', v])\n                        i += 3\n                        changed = True\n                        continue\n            if ins[0] == 'not' and i + 1 < len(code) and code[i + 1][0] == 'not':\n                i += 2\n                changed = True\n                continue\n            if ins[0] == 'jmp' and i + 1 < len(code) and code[i + 1] == ['label', ins[1]]:\n                i += 1\n                changed = True\n                continue\n            out.append(ins)\n            i += 1\n            if ins[0] in ('ret', 'jmp'):\n                j = i\n                while j < len(code) and code[j][0] != 'label':\n                    j += 1\n                if j > i:\n                    changed = True\n                i = j\n        code = out\n        if not changed:\n            break\n    return code\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('regression: folding cascades across passes',\n   ([['push', 2], ['push', 4], ['add'], ['push', 4], ['mul'], ['push', 5], ['sub'], ['ret']],),\n   [['push', 19], ['ret']]),\n  ('fold reaching the int16 minimum',\n   ([['push', -16384], ['push', 2], ['mul'], ['push', 1], ['ret']],),\n   [['push', -32768], ['push', 1], ['ret']]),\n  ('fold reaching the int16 maximum',\n   ([['push', 32766], ['push', 1], ['add'], ['push', 200], ['push', 201], ['mul'], ['ret']],),\n   [['push', 32767], ['push', 200], ['push', 201], ['mul'], ['ret']]),\n  ('jump over code to a later label is kept',\n   ([['jmp', 'L2'], ['label', 'L1'], ['push', 1], ['label', 'L2'], ['ret']],),\n   [['jmp', 'L2'], ['label', 'L1'], ['push', 1], ['label', 'L2'], ['ret']]),\n  ('jump to the second of two adjacent labels',\n   ([['jmp', 'L'], ['label', 'M'], ['label', 'L'], ['push', 1], ['ret']],),\n   [['jmp', 'L'], ['label', 'M'], ['label', 'L'], ['push', 1], ['ret']]),\n  ('dead code after an unconditional jump',\n   ([['jmp', 'E'], ['push', 1], ['push', 1], ['label', 'E'], ['ret']],),\n   [['label', 'E'], ['ret']]),\n  ('conditional jump keeps its fallthrough',\n   ([['push', 0], ['jz', 'E'], ['push', 10], ['ret'], ['label', 'E'], ['push', 1], ['ret']],),\n   [['push', 0], ['jz', 'E'], ['push', 10], ['ret'], ['label', 'E'], ['push', 1], ['ret']]),\n  ('division folds truncate toward zero',\n   ([['push', -9],\n     ['push', 2],\n     ['div'],\n     ['push', 7],\n     ['push', -2],\n     ['div'],\n     ['push', 5],\n     ['push', 0],\n     ['div'],\n     ['ret']],),\n   [['push', -4], ['push', -3], ['push', 5], ['push', 0], ['div'], ['ret']]),\n  ('control: double negation removed', ([['push', 1], ['not'], ['not'], ['ret']],), [['push', 1], ['ret']])],\n [('regression: folding cascades across passes',\n   ([['push', 2], ['push', 5], ['add'], ['push', 4], ['mul'], ['push', 5], ['sub'], ['ret']],),\n   [['push', 23], ['ret']]),\n  ('fold reaching the int16 minimum',\n   ([['push', -16384], ['push', 2], ['mul'], ['push', 2], ['ret']],),\n   [['push', -32768], ['push', 2], ['ret']]),\n  ('fold reaching the int16 maximum',\n   ([['push', 32766], ['push', 1], ['add'], ['push', 200], ['push', 202], ['mul'], ['ret']],),\n   [['push', 32767], ['push', 200], ['push', 202], ['mul'], ['ret']]),\n  ('jump over code to a later label is kept',\n   ([['jmp', 'L2'], ['label', 'L1'], ['push', 2], ['label', 'L2'], ['ret']],),\n   [['jmp', 'L2'], ['label', 'L1'], ['push', 2], ['label', 'L2'], ['ret']]),\n  ('jump to the second of two adjacent labels',\n   ([['jmp', 'L'], ['label', 'M'], ['label', 'L'], ['push', 2], ['ret']],),\n   [['jmp', 'L'], ['label', 'M'], ['label', 'L'], ['push', 2], ['ret']]),\n  ('dead code after an unconditional jump',\n   ([['jmp', 'E'], ['push', 1], ['push', 2], ['label', 'E'], ['ret']],),\n   [['label', 'E'], ['ret']]),\n  ('conditional jump keeps its fallthrough',\n   ([['push', 0], ['jz', 'E'], ['push', 11], ['ret'], ['label', 'E'], ['push', 1], ['ret']],),\n   [['push', 0], ['jz', 'E'], ['push', 11], ['ret'], ['label', 'E'], ['push', 1], ['ret']]),\n  ('division folds truncate toward zero',\n   ([['push', -11],\n     ['push', 2],\n     ['div'],\n     ['push', 7],\n     ['push', -2],\n     ['div'],\n     ['push', 5],\n     ['push', 0],\n     ['div'],\n     ['ret']],),\n   [['push', -5], ['push', -3], ['push', 5], ['push', 0], ['div'], ['ret']]),\n  ('control: double negation removed', ([['push', 2], ['not'], ['not'], ['ret']],), [['push', 2], ['ret']])],\n [('regression: folding cascades across passes',\n   ([['push', 2], ['push', 6], ['add'], ['push', 4], ['mul'], ['push', 5], ['sub'], ['ret']],),\n   [['push', 27], ['ret']]),\n  ('fold reaching the int16 minimum',\n   ([['push', -16384], ['push', 2], ['mul'], ['push', 3], ['ret']],),\n   [['push', -32768], ['push', 3], ['ret']]),\n  ('fold reaching the int16 maximum',\n   ([['push', 32766], ['push', 1], ['add'], ['push', 200], ['push', 203], ['mul'], ['ret']],),\n   [['push', 32767], ['push', 200], ['push', 203], ['mul'], ['ret']]),\n  ('jump over code to a later label is kept',\n   ([['jmp', 'L2'], ['label', 'L1'], ['push', 3], ['label', 'L2'], ['ret']],),\n   [['jmp', 'L2'], ['label', 'L1'], ['push', 3], ['label', 'L2'], ['ret']]),\n  ('jump to the second of two adjacent labels',\n   ([['jmp', 'L'], ['label', 'M'], ['label', 'L'], ['push', 3], ['ret']],),\n   [['jmp', 'L'], ['label', 'M'], ['label', 'L'], ['push', 3], ['ret']]),\n  ('dead code after an unconditional jump',\n   ([['jmp', 'E'], ['push', 1], ['push', 3], ['label', 'E'], ['ret']],),\n   [['label', 'E'], ['ret']]),\n  ('conditional jump keeps its fallthrough',\n   ([['push', 0], ['jz', 'E'], ['push', 12], ['ret'], ['label', 'E'], ['push', 1], ['ret']],),\n   [['push', 0], ['jz', 'E'], ['push', 12], ['ret'], ['label', 'E'], ['push', 1], ['ret']]),\n  ('division folds truncate toward zero',\n   ([['push', -13],\n     ['push', 2],\n     ['div'],\n     ['push', 7],\n     ['push', -2],\n     ['div'],\n     ['push', 5],\n     ['push', 0],\n     ['div'],\n     ['ret']],),\n   [['push', -6], ['push', -3], ['push', 5], ['push', 0], ['div'], ['ret']]),\n  ('control: double negation removed', ([['push', 3], ['not'], ['not'], ['ret']],), [['push', 3], ['ret']])],\n [('regression: folding cascades across passes',\n   ([['push', 2], ['push', 7], ['add'], ['push', 4], ['mul'], ['push', 5], ['sub'], ['ret']],),\n   [['push', 31], ['ret']]),\n  ('fold reaching the int16 minimum',\n   ([['push', -16384], ['push', 2], ['mul'], ['push', 4], ['ret']],),\n   [['push', -32768], ['push', 4], ['ret']]),\n  ('fold reaching the int16 maximum',\n   ([['push', 32766], ['push', 1], ['add'], ['push', 200], ['push', 204], ['mul'], ['ret']],),\n   [['push', 32767], ['push', 200], ['push', 204], ['mul'], ['ret']]),\n  ('jump over code to a later label is kept',\n   ([['jmp', 'L2'], ['label', 'L1'], ['push', 4], ['label', 'L2'], ['ret']],),\n   [['jmp', 'L2'], ['label', 'L1'], ['push', 4], ['label', 'L2'], ['ret']]),\n  ('jump to the second of two adjacent labels',\n   ([['jmp', 'L'], ['label', 'M'], ['label', 'L'], ['push', 4], ['ret']],),\n   [['jmp', 'L'], ['label', 'M'], ['label', 'L'], ['push', 4], ['ret']]),\n  ('dead code after an unconditional jump',\n   ([['jmp', 'E'], ['push', 1], ['push', 4], ['label', 'E'], ['ret']],),\n   [['label', 'E'], ['ret']]),\n  ('conditional jump keeps its fallthrough',\n   ([['push', 0], ['jz', 'E'], ['push', 13], ['ret'], ['label', 'E'], ['push', 1], ['ret']],),\n   [['push', 0], ['jz', 'E'], ['push', 13], ['ret'], ['label', 'E'], ['push', 1], ['ret']]),\n  ('division folds truncate toward zero',\n   ([['push', -15],\n     ['push', 2],\n     ['div'],\n     ['push', 7],\n     ['push', -2],\n     ['div'],\n     ['push', 5],\n     ['push', 0],\n     ['div'],\n     ['ret']],),\n   [['push', -7], ['push', -3], ['push', 5], ['push', 0], ['div'], ['ret']]),\n  ('control: double negation removed', ([['push', 4], ['not'], ['not'], ['ret']],), [['push', 4], ['ret']])],\n [('regression: folding cascades across passes',\n   ([['push', 2], ['push', 8], ['add'], ['push', 4], ['mul'], ['push', 5], ['sub'], ['ret']],),\n   [['push', 35], ['ret']]),\n  ('fold reaching the int16 minimum',\n   ([['push', -16384], ['push', 2], ['mul'], ['push', 5], ['ret']],),\n   [['push', -32768], ['push', 5], ['ret']]),\n  ('fold reaching the int16 maximum',\n   ([['push', 32766], ['push', 1], ['add'], ['push', 200], ['push', 205], ['mul'], ['ret']],),\n   [['push', 32767], ['push', 200], ['push', 205], ['mul'], ['ret']]),\n  ('jump over code to a later label is kept',\n   ([['jmp', 'L2'], ['label', 'L1'], ['push', 5], ['label', 'L2'], ['ret']],),\n   [['jmp', 'L2'], ['label', 'L1'], ['push', 5], ['label', 'L2'], ['ret']]),\n  ('jump to the second of two adjacent labels',\n   ([['jmp', 'L'], ['label', 'M'], ['label', 'L'], ['push', 5], ['ret']],),\n   [['jmp', 'L'], ['label', 'M'], ['label', 'L'], ['push', 5], ['ret']]),\n  ('dead code after an unconditional jump',\n   ([['jmp', 'E'], ['push', 1], ['push', 5], ['label', 'E'], ['ret']],),\n   [['label', 'E'], ['ret']]),\n  ('conditional jump keeps its fallthrough',\n   ([['push', 0], ['jz', 'E'], ['push', 14], ['ret'], ['label', 'E'], ['push', 1], ['ret']],),\n   [['push', 0], ['jz', 'E'], ['push', 14], ['ret'], ['label', 'E'], ['push', 1], ['ret']]),\n  ('division folds truncate toward zero',\n   ([['push', -17],\n     ['push', 2],\n     ['div'],\n     ['push', 7],\n     ['push', -2],\n     ['div'],\n     ['push', 5],\n     ['push', 0],\n     ['div'],\n     ['ret']],),\n   [['push', -8], ['push', -3], ['push', 5], ['push', 0], ['div'], ['ret']]),\n  ('control: double negation removed', ([['push', 5], ['not'], ['not'], ['ret']],), [['push', 5], ['ret']])]]\nfor label, args, expected in cases[N - 1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"A deterministic, bounded teaching model of one bytecode virtual machine mechanism with a stipulated instruction encoding; it is not a production VM and claims no conformance to any real specification. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-bytecode-virtual-machines-peephole-optimizer-division-folding-rule","generated_at":"2026-09-29T14:51:24.657797+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Bytecode compilers rely on peephole passes that must preserve semantics and encoding limits.","repair":"Fold division by truncating toward zero, like the runtime.","root_cause":"The folder uses the host floor division instead of the VM's truncating division.","sha256":"7f3e24994e65a0c3187d915767b3c56ba19f09c1ed4a770e296727464e6840d0","title":"Peephole optimizer: division folded with floor semantics · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.134,"exit_code":1,"observations":[{"actual":[["push",19],["ret"]],"check":"regression: folding cascades across passes","expected":[["push",19],["ret"]],"passed":true},{"actual":[["push",-32768],["push",1],["ret"]],"check":"fold reaching the int16 minimum","expected":[["push",-32768],["push",1],["ret"]],"passed":true},{"actual":[["push",32767],["push",200],["push",201],["mul"],["ret"]],"check":"fold reaching the int16 maximum","expected":[["push",32767],["push",200],["push",201],["mul"],["ret"]],"passed":true},{"actual":[["jmp","L2"],["label","L1"],["push",1],["label","L2"],["ret"]],"check":"jump over code to a later label is kept","expected":[["jmp","L2"],["label","L1"],["push",1],["label","L2"],["ret"]],"passed":true},{"actual":[["jmp","L"],["label","M"],["label","L"],["push",1],["ret"]],"check":"jump to the second of two adjacent labels","expected":[["jmp","L"],["label","M"],["label","L"],["push",1],["ret"]],"passed":true},{"actual":[["label","E"],["ret"]],"check":"dead code after an unconditional jump","expected":[["label","E"],["ret"]],"passed":true},{"actual":[["push",0],["jz","E"],["push",10],["ret"],["label","E"],["push",1],["ret"]],"check":"conditional jump keeps its fallthrough","expected":[["push",0],["jz","E"],["push",10],["ret"],["label","E"],["push",1],["ret"]],"passed":true},{"actual":[["push",-4],["push",3],["push",5],["push",0],["div"],["ret"]],"check":"division folds truncate toward zero","expected":[["push",-4],["push",-3],["push",5],["push",0],["div"],["ret"]],"passed":false},{"actual":[["push",1],["ret"]],"check":"control: double negation removed","expected":[["push",1],["ret"]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: folding cascades across passes\", \"actual\": [[\"push\", 19], [\"ret\"]], \"expected\": [[\"push\", 19], [\"ret\"]], \"passed\": true}, {\"check\": \"fold reaching the int16 minimum\", \"actual\": [[\"push\", -32768], [\"push\", 1], [\"ret\"]], \"expected\": [[\"push\", -32768], [\"push\", 1], [\"ret\"]], \"passed\": true}, {\"check\": \"fold reaching the int16 maximum\", \"actual\": [[\"push\", 32767], [\"push\", 200], [\"push\", 201], [\"mul\"], [\"ret\"]], \"expected\": [[\"push\", 32767], [\"push\", 200], [\"push\", 201], [\"mul\"], [\"ret\"]], \"passed\": true}, {\"check\": \"jump over code to a later label is kept\", \"actual\": [[\"jmp\", \"L2\"], [\"label\", \"L1\"], [\"push\", 1], [\"label\", \"L2\"], [\"ret\"]], \"expected\": [[\"jmp\", \"L2\"], [\"label\", \"L1\"], [\"push\", 1], [\"label\", \"L2\"], [\"ret\"]], \"passed\": true}, {\"check\": \"jump to the second of two adjacent labels\", \"actual\": [[\"jmp\", \"L\"], [\"label\", \"M\"], [\"label\", \"L\"], [\"push\", 1], [\"ret\"]], \"expected\": [[\"jmp\", \"L\"], [\"label\", \"M\"], [\"label\", \"L\"], [\"push\", 1], [\"ret\"]], \"passed\": true}, {\"check\": \"dead code after an unconditional jump\", \"actual\": [[\"label\", \"E\"], [\"ret\"]], \"expected\": [[\"label\", \"E\"], [\"ret\"]], \"passed\": true}, {\"check\": \"conditional jump keeps its fallthrough\", \"actual\": [[\"push\", 0], [\"jz\", \"E\"], [\"push\", 10], [\"ret\"], [\"label\", \"E\"], [\"push\", 1], [\"ret\"]], \"expected\": [[\"push\", 0], [\"jz\", \"E\"], [\"push\", 10], [\"ret\"], [\"label\", \"E\"], [\"push\", 1], [\"ret\"]], \"passed\": true}, {\"check\": \"division folds truncate toward zero\", \"actual\": [[\"push\", -4], [\"push\", 3], [\"push\", 5], [\"push\", 0], [\"div\"], [\"ret\"]], \"expected\": [[\"push\", -4], [\"push\", -3], [\"push\", 5], [\"push\", 0], [\"div\"], [\"ret\"]], \"passed\": false}, {\"check\": \"control: double negation removed\", \"actual\": [[\"push\", 1], [\"ret\"]], \"expected\": [[\"push\", 1], [\"ret\"]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.542,"exit_code":1,"observations":[{"actual":[["push",19],["ret"]],"check":"regression: folding cascades across passes","expected":[["push",19],["ret"]],"passed":true},{"actual":[["push",-32768],["push",1],["ret"]],"check":"fold reaching the int16 minimum","expected":[["push",-32768],["push",1],["ret"]],"passed":true},{"actual":[["push",32767],["push",200],["push",201],["mul"],["ret"]],"check":"fold reaching the int16 maximum","expected":[["push",32767],["push",200],["push",201],["mul"],["ret"]],"passed":true},{"actual":[["jmp","L2"],["label","L1"],["push",1],["label","L2"],["ret"]],"check":"jump over code to a later label is kept","expected":[["jmp","L2"],["label","L1"],["push",1],["label","L2"],["ret"]],"passed":true},{"actual":[["jmp","L"],["label","M"],["label","L"],["push",1],["ret"]],"check":"jump to the second of two adjacent labels","expected":[["jmp","L"],["label","M"],["label","L"],["push",1],["ret"]],"passed":true},{"actual":[["label","E"],["ret"]],"check":"dead code after an unconditional jump","expected":[["label","E"],["ret"]],"passed":true},{"actual":[["push",0],["jz","E"],["push",10],["ret"],["label","E"],["push",1],["ret"]],"check":"conditional jump keeps its fallthrough","expected":[["push",0],["jz","E"],["push",10],["ret"],["label","E"],["push",1],["ret"]],"passed":true},{"actual":[["push",-5],["push",-4],["push",5],["push",0],["div"],["ret"]],"check":"division folds truncate toward zero","expected":[["push",-4],["push",-3],["push",5],["push",0],["div"],["ret"]],"passed":false},{"actual":[["push",1],["ret"]],"check":"control: double negation removed","expected":[["push",1],["ret"]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: folding cascades across passes\", \"actual\": [[\"push\", 19], [\"ret\"]], \"expected\": [[\"push\", 19], [\"ret\"]], \"passed\": true}, {\"check\": \"fold reaching the int16 minimum\", \"actual\": [[\"push\", -32768], [\"push\", 1], [\"ret\"]], \"expected\": [[\"push\", -32768], [\"push\", 1], [\"ret\"]], \"passed\": true}, {\"check\": \"fold reaching the int16 maximum\", \"actual\": [[\"push\", 32767], [\"push\", 200], [\"push\", 201], [\"mul\"], [\"ret\"]], \"expected\": [[\"push\", 32767], [\"push\", 200], [\"push\", 201], [\"mul\"], [\"ret\"]], \"passed\": true}, {\"check\": \"jump over code to a later label is kept\", \"actual\": [[\"jmp\", \"L2\"], [\"label\", \"L1\"], [\"push\", 1], [\"label\", \"L2\"], [\"ret\"]], \"expected\": [[\"jmp\", \"L2\"], [\"label\", \"L1\"], [\"push\", 1], [\"label\", \"L2\"], [\"ret\"]], \"passed\": true}, {\"check\": \"jump to the second of two adjacent labels\", \"actual\": [[\"jmp\", \"L\"], [\"label\", \"M\"], [\"label\", \"L\"], [\"push\", 1], [\"ret\"]], \"expected\": [[\"jmp\", \"L\"], [\"label\", \"M\"], [\"label\", \"L\"], [\"push\", 1], [\"ret\"]], \"passed\": true}, {\"check\": \"dead code after an unconditional jump\", \"actual\": [[\"label\", \"E\"], [\"ret\"]], \"expected\": [[\"label\", \"E\"], [\"ret\"]], \"passed\": true}, {\"check\": \"conditional jump keeps its fallthrough\", \"actual\": [[\"push\", 0], [\"jz\", \"E\"], [\"push\", 10], [\"ret\"], [\"label\", \"E\"], [\"push\", 1], [\"ret\"]], \"expected\": [[\"push\", 0], [\"jz\", \"E\"], [\"push\", 10], [\"ret\"], [\"label\", \"E\"], [\"push\", 1], [\"ret\"]], \"passed\": true}, {\"check\": \"division folds truncate toward zero\", \"actual\": [[\"push\", -5], [\"push\", -4], [\"push\", 5], [\"push\", 0], [\"div\"], [\"ret\"]], \"expected\": [[\"push\", -4], [\"push\", -3], [\"push\", 5], [\"push\", 0], [\"div\"], [\"ret\"]], \"passed\": false}, {\"check\": \"control: double negation removed\", \"actual\": [[\"push\", 1], [\"ret\"]], \"expected\": [[\"push\", 1], [\"ret\"]], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":38.684,"exit_code":0,"observations":[{"actual":[["push",19],["ret"]],"check":"regression: folding cascades across passes","expected":[["push",19],["ret"]],"passed":true},{"actual":[["push",-32768],["push",1],["ret"]],"check":"fold reaching the int16 minimum","expected":[["push",-32768],["push",1],["ret"]],"passed":true},{"actual":[["push",32767],["push",200],["push",201],["mul"],["ret"]],"check":"fold reaching the int16 maximum","expected":[["push",32767],["push",200],["push",201],["mul"],["ret"]],"passed":true},{"actual":[["jmp","L2"],["label","L1"],["push",1],["label","L2"],["ret"]],"check":"jump over code to a later label is kept","expected":[["jmp","L2"],["label","L1"],["push",1],["label","L2"],["ret"]],"passed":true},{"actual":[["jmp","L"],["label","M"],["label","L"],["push",1],["ret"]],"check":"jump to the second of two adjacent labels","expected":[["jmp","L"],["label","M"],["label","L"],["push",1],["ret"]],"passed":true},{"actual":[["label","E"],["ret"]],"check":"dead code after an unconditional jump","expected":[["label","E"],["ret"]],"passed":true},{"actual":[["push",0],["jz","E"],["push",10],["ret"],["label","E"],["push",1],["ret"]],"check":"conditional jump keeps its fallthrough","expected":[["push",0],["jz","E"],["push",10],["ret"],["label","E"],["push",1],["ret"]],"passed":true},{"actual":[["push",-4],["push",-3],["push",5],["push",0],["div"],["ret"]],"check":"division folds truncate toward zero","expected":[["push",-4],["push",-3],["push",5],["push",0],["div"],["ret"]],"passed":true},{"actual":[["push",1],["ret"]],"check":"control: double negation removed","expected":[["push",1],["ret"]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: folding cascades across passes\", \"actual\": [[\"push\", 19], [\"ret\"]], \"expected\": [[\"push\", 19], [\"ret\"]], \"passed\": true}, {\"check\": \"fold reaching the int16 minimum\", \"actual\": [[\"push\", -32768], [\"push\", 1], [\"ret\"]], \"expected\": [[\"push\", -32768], [\"push\", 1], [\"ret\"]], \"passed\": true}, {\"check\": \"fold reaching the int16 maximum\", \"actual\": [[\"push\", 32767], [\"push\", 200], [\"push\", 201], [\"mul\"], [\"ret\"]], \"expected\": [[\"push\", 32767], [\"push\", 200], [\"push\", 201], [\"mul\"], [\"ret\"]], \"passed\": true}, {\"check\": \"jump over code to a later label is kept\", \"actual\": [[\"jmp\", \"L2\"], [\"label\", \"L1\"], [\"push\", 1], [\"label\", \"L2\"], [\"ret\"]], \"expected\": [[\"jmp\", \"L2\"], [\"label\", \"L1\"], [\"push\", 1], [\"label\", \"L2\"], [\"ret\"]], \"passed\": true}, {\"check\": \"jump to the second of two adjacent labels\", \"actual\": [[\"jmp\", \"L\"], [\"label\", \"M\"], [\"label\", \"L\"], [\"push\", 1], [\"ret\"]], \"expected\": [[\"jmp\", \"L\"], [\"label\", \"M\"], [\"label\", \"L\"], [\"push\", 1], [\"ret\"]], \"passed\": true}, {\"check\": \"dead code after an unconditional jump\", \"actual\": [[\"label\", \"E\"], [\"ret\"]], \"expected\": [[\"label\", \"E\"], [\"ret\"]], \"passed\": true}, {\"check\": \"conditional jump keeps its fallthrough\", \"actual\": [[\"push\", 0], [\"jz\", \"E\"], [\"push\", 10], [\"ret\"], [\"label\", \"E\"], [\"push\", 1], [\"ret\"]], \"expected\": [[\"push\", 0], [\"jz\", \"E\"], [\"push\", 10], [\"ret\"], [\"label\", \"E\"], [\"push\", 1], [\"ret\"]], \"passed\": true}, {\"check\": \"division folds truncate toward zero\", \"actual\": [[\"push\", -4], [\"push\", -3], [\"push\", 5], [\"push\", 0], [\"div\"], [\"ret\"]], \"expected\": [[\"push\", -4], [\"push\", -3], [\"push\", 5], [\"push\", 0], [\"div\"], [\"ret\"]], \"passed\": true}, {\"check\": \"control: double negation removed\", \"actual\": [[\"push\", 1], [\"ret\"]], \"expected\": [[\"push\", 1], [\"ret\"]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}