Skip to content

[ImgBot] Optimize images - #3

Closed
imgbot[bot] wants to merge 1 commit into
mainfrom
imgbot
Closed

imgbot[bot] wants to merge 1 commit into
mainfrom
imgbot

Conversation

@imgbot

@imgbot imgbot Bot commented Apr 9, 2026

Copy link
Copy Markdown

Beep boop. Your images are optimized!

Your image file size has been reduced by 9% 🎉

Details
File Before After Percent reduction
/clang/docs/DataFlowAnalysisIntroImages/UniquePtrLattice.svg 4.31kb 2.90kb 32.68%
/clang/docs/DataFlowAnalysisIntroImages/DefinitiveInitializationLattice.svg 4.32kb 2.92kb 32.57%
/llvm/docs/loop-irreducible.svg 76.39kb 53.88kb 29.47%
/llvm/docs/loop-nonmaximal.svg 129.42kb 91.89kb 29.00%
/clang/docs/DataFlowAnalysisIntroImages/OutputParameterIdentificationLattice.svg 13.63kb 9.79kb 28.19%
/llvm/docs/loop-guard.svg 108.14kb 77.90kb 27.96%
/llvm/docs/loop-nested.svg 87.77kb 64.81kb 26.16%
/clang/docs/DataFlowAnalysisIntroImages/IntegerSetsFiniteLattice.svg 17.79kb 13.16kb 26.00%
/clang/docs/DataFlowAnalysisIntroImages/IntegerSetsInfiniteLattice.svg 17.83kb 13.21kb 25.96%
/clang/docs/DataFlowAnalysisIntroImages/CFGExample.svg 24.92kb 18.82kb 24.46%
/llvm/docs/loop-single.svg 35.31kb 27.50kb 22.12%
/clang/docs/DataFlowAnalysisIntroImages/CFGJoinRule.svg 13.23kb 10.83kb 18.08%
/lld/docs/partitions.svg 5.81kb 4.94kb 14.94%
/llvm/docs/loop-terminology.svg 116.10kb 104.46kb 10.03%
/mlir/docs/includes/img/index-map.svg 65.20kb 60.08kb 7.86%
/llvm/docs/loop-merge.svg 88.08kb 83.69kb 4.99%
/llvm/docs/loop-separate.svg 90.69kb 86.23kb 4.92%
/mlir/docs/includes/img/view-operation.svg 155.05kb 147.60kb 4.80%
/mlir/docs/includes/img/mlir-lsp-server-server_diagram.svg 33.99kb 33.79kb 0.61%
/mlir/docs/includes/img/Use-list.svg 69.32kb 68.97kb 0.51%
/mlir/docs/includes/img/DefUseChains.svg 155.64kb 154.94kb 0.45%
/libc/docs/gpu/rpc-diagram.svg 62.11kb 61.86kb 0.40%
/mlir/docs/includes/img/bufferization_tensor_insert_dst.svg 77.48kb 77.36kb 0.16%
/mlir/docs/includes/img/bufferization_passes.svg 203.40kb 203.21kb 0.09%
/mlir/docs/includes/img/bufferization_dealloc_op.svg 419.96kb 419.84kb 0.03%
Total : 2,075.91kb 1,894.58kb 8.73%

📝 docs | :octocat: repo | 🙋🏾 issues | 🏪 marketplace

~Imgbot - Part of Optimole family

*Total -- 2,075.91kb -> 1,894.58kb (8.73%)

/clang/docs/DataFlowAnalysisIntroImages/UniquePtrLattice.svg -- 4.31kb -> 2.90kb (32.68%)
/clang/docs/DataFlowAnalysisIntroImages/DefinitiveInitializationLattice.svg -- 4.32kb -> 2.92kb (32.57%)
/llvm/docs/loop-irreducible.svg -- 76.39kb -> 53.88kb (29.47%)
/llvm/docs/loop-nonmaximal.svg -- 129.42kb -> 91.89kb (29%)
/clang/docs/DataFlowAnalysisIntroImages/OutputParameterIdentificationLattice.svg -- 13.63kb -> 9.79kb (28.19%)
/llvm/docs/loop-guard.svg -- 108.14kb -> 77.90kb (27.96%)
/llvm/docs/loop-nested.svg -- 87.77kb -> 64.81kb (26.16%)
/clang/docs/DataFlowAnalysisIntroImages/IntegerSetsFiniteLattice.svg -- 17.79kb -> 13.16kb (26%)
/clang/docs/DataFlowAnalysisIntroImages/IntegerSetsInfiniteLattice.svg -- 17.83kb -> 13.21kb (25.96%)
/clang/docs/DataFlowAnalysisIntroImages/CFGExample.svg -- 24.92kb -> 18.82kb (24.46%)
/llvm/docs/loop-single.svg -- 35.31kb -> 27.50kb (22.12%)
/clang/docs/DataFlowAnalysisIntroImages/CFGJoinRule.svg -- 13.23kb -> 10.83kb (18.08%)
/lld/docs/partitions.svg -- 5.81kb -> 4.94kb (14.94%)
/llvm/docs/loop-terminology.svg -- 116.10kb -> 104.46kb (10.03%)
/mlir/docs/includes/img/index-map.svg -- 65.20kb -> 60.08kb (7.86%)
/llvm/docs/loop-merge.svg -- 88.08kb -> 83.69kb (4.99%)
/llvm/docs/loop-separate.svg -- 90.69kb -> 86.23kb (4.92%)
/mlir/docs/includes/img/view-operation.svg -- 155.05kb -> 147.60kb (4.8%)
/mlir/docs/includes/img/mlir-lsp-server-server_diagram.svg -- 33.99kb -> 33.79kb (0.61%)
/mlir/docs/includes/img/Use-list.svg -- 69.32kb -> 68.97kb (0.51%)
/mlir/docs/includes/img/DefUseChains.svg -- 155.64kb -> 154.94kb (0.45%)
/libc/docs/gpu/rpc-diagram.svg -- 62.11kb -> 61.86kb (0.4%)
/mlir/docs/includes/img/bufferization_tensor_insert_dst.svg -- 77.48kb -> 77.36kb (0.16%)
/mlir/docs/includes/img/bufferization_passes.svg -- 203.40kb -> 203.21kb (0.09%)
/mlir/docs/includes/img/bufferization_dealloc_op.svg -- 419.96kb -> 419.84kb (0.03%)

Signed-off-by: ImgBotApp <ImgBotHelp@gmail.com>
@github-actions

github-actions Bot commented Apr 9, 2026

Copy link
Copy Markdown

Thank you for submitting a Pull Request (PR) to the LLVM Project!

This PR will be automatically labeled and the relevant teams will be notified.

If you wish to, you can add reviewers by using the "Reviewers" section on this page.

If this is not working for you, it is probably because you do not have write permissions for the repository. In which case you can instead tag reviewers by name in a comment by using @ followed by their GitHub username.

If you have received no comments on your PR for a week, you can request a review by "ping"ing the PR by adding a comment “Ping”. The common courtesy "ping" rate is once a week. Please remember that you are asking for valuable time from other developers.

If you have further questions, they may be answered by the LLVM GitHub User Guide.

You can also ask questions in a comment on this PR, on the LLVM Discord or on the forums.

SwayamInSync added a commit that referenced this pull request Jun 4, 2026
An adversarial "prove-false" sweep found three ways a caller could be
reasoned about unsoundly, all in how a callee's contract is instantiated
at a call site:

1. old(*p) in a heap postcondition collapsed onto the post-state heap.
   substParams did not thread heap versions: a callee post such as
   `*a == old(*a) + 1` had both `*a` and `old(*a)` resolve to the same
   heap version, yielding `v == v + 1` (false). assume(false) then let the
   caller prove anything (`*x == 999`, `*x` unchanged, ... all verified).
   substParams now mirrors cloneExpr: post-state Loads read the post-call
   heap, old(*p) reads a call-local pre-call heap snapshot.

2. A heap-modifying callee with no explicit `modifies` clause was not
   havocked (the bump only fired on a non-empty modifies set), re-creating
   the same collapse. The heap is now bumped when the callee has a non-empty
   modifies set OR any pointer parameter (DESIGN.md: pointer params with no
   modifies conservatively modify everything reachable).

3. A recursive proof lemma's induction hypothesis leaked unguarded. The
   callee postcondition assume was not wrapped in the path guard (the
   precondition assert was), so `if (i > 0) { rec(i - 1); }` assumed the IH
   unconditionally and a contradictory IH leaked onto the base-case path,
   "proving" a false lemma (`post(i == i + 1)` verified). The post assume is
   now guarded by the path condition, like the precondition assert.

Adversarial probes for all three now correctly fail; the sound_* suite and
the call/heap/UB tests are unaffected.

Exposure: the recursive-lemma demos (safe_fib, verify_spec_proof_e2e) were
only passing via bug #3's leak, never soundly. They now fail, pending the
fuel-parameterized spec-axiom encoding (recursive spec defining axioms
currently bottom out at fresh opaque leaves and do not pin the function
down). That sound recursive-spec encoding is the immediate follow-up.
SwayamInSync added a commit that referenced this pull request Jul 27, 2026
An adversarial "prove-false" sweep found three ways a caller could be
reasoned about unsoundly, all in how a callee's contract is instantiated
at a call site:

1. old(*p) in a heap postcondition collapsed onto the post-state heap.
   substParams did not thread heap versions: a callee post such as
   `*a == old(*a) + 1` had both `*a` and `old(*a)` resolve to the same
   heap version, yielding `v == v + 1` (false). assume(false) then let the
   caller prove anything (`*x == 999`, `*x` unchanged, ... all verified).
   substParams now mirrors cloneExpr: post-state Loads read the post-call
   heap, old(*p) reads a call-local pre-call heap snapshot.

2. A heap-modifying callee with no explicit `modifies` clause was not
   havocked (the bump only fired on a non-empty modifies set), re-creating
   the same collapse. The heap is now bumped when the callee has a non-empty
   modifies set OR any pointer parameter (DESIGN.md: pointer params with no
   modifies conservatively modify everything reachable).

3. A recursive proof lemma's induction hypothesis leaked unguarded. The
   callee postcondition assume was not wrapped in the path guard (the
   precondition assert was), so `if (i > 0) { rec(i - 1); }` assumed the IH
   unconditionally and a contradictory IH leaked onto the base-case path,
   "proving" a false lemma (`post(i == i + 1)` verified). The post assume is
   now guarded by the path condition, like the precondition assert.

Adversarial probes for all three now correctly fail; the sound_* suite and
the call/heap/UB tests are unaffected.

Exposure: the recursive-lemma demos (safe_fib, verify_spec_proof_e2e) were
only passing via bug #3's leak, never soundly. They now fail, pending the
fuel-parameterized spec-axiom encoding (recursive spec defining axioms
currently bottom out at fresh opaque leaves and do not pin the function
down). That sound recursive-spec encoding is the immediate follow-up.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants