common-subexpression-eliminator
Skill17 starsChanged 9 months agoApache-2.0View on GitHub
Implements common subexpression elimination (CSE). Use when: (1) Building
In this repository98 other files it gives its agents.
- abstract-interpretation-engineSkill
- abstract-machineSkill
- acsl-annotation-assistantSkill
- actor-model-implementerSkill
- algebraic-effectsSkill
- alias-and-points-to-analysisSkill
- axiomatic-semanticsSkill
- bidirectional-type-checkingSkill
- bisimulation-checkerSkill
- capability-systemSkill
- closure-converterSkill
- concurrency-verifierSkill
- constant-propagation-passSkill
- contextual-equivalenceSkill
- control-flow-analysisSkill
- coq-proof-assistantSkill
- cps-transformerSkill
- dafny-verifierSkill
- dataflow-analysis-frameworkSkill
- dead-code-eliminatorSkill
- defunctionalizationSkill
- denotational-semantics-builderSkill
- dependent-type-implementerSkill
- dsl-embeddingSkill
- effect-handlers-implementerSkill
- effect-systemSkill
- effect-type-systemSkill
- escape-analysisSkill
- existential-typesSkill
- ffi-designerSkill
- fuzzer-generatorSkill
- gadt-implementerSkill
- garbage-collector-implementerSkill
- graalvm-truffle-implementerSkill
- gradual-typing-implementerSkill
- higher-order-abstract-syntaxSkill
- hoare-logic-verifierSkill
- incremental-computationSkill
- information-flow-analyzerSkill
- inline-expanderSkill
- interprocedural-analysisSkill
- invariant-generatorSkill
- jit-compiler-builderSkill
- lambda-calculus-interpreterSkill
- language-server-protocolSkill
- lean-proverSkill
- lexer-generatorSkill
- linear-type-implementerSkill
- liveness-analysisSkill
- llvm-backend-generatorSkill
- lock-free-data-structureSkill
- loop-optimizerSkill
- loop-termination-proverSkill
- macro-expanderSkill
- memory-allocatorSkill
- message-passing-systemSkill
- mlir-dialect-designerSkill
- model-checkerSkill
- module-systemSkill
- monad-transformerSkill
- The first 60 shown.
The file
We split this skill into the rules it gives an agent
1 rule. About 0 are common, 1 is distinctive, and 0 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 50
Use hash for fast comparison
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Common Subexpression Eliminator
Implements common subexpression elimination optimization.
When to Use
- Building optimizing compilers
- Program optimization
- Code analysis
- Performance tuning
What This Skill Does
- Identifies redundancy - Finds repeated computations
- Eliminates - Reuses computed values
- Handles memory - Aliasing considerations
- Optimizes - Global and local CSE
Key Concepts
| Concept | Description |
| Available expression | Computed and not killed |
| Killing | Expression invalidated |
| Global | Across basic blocks |
| Conservative | Avoid aliasing issues |
Tips
- Handle aliasing conservatively
- Consider side effects
- Use hash for fast comparison
- Track memory operations
Related Skills
constant-propagation-pass- Constant propagationdead-code-eliminator- Remove dead codeloop-optimizer- Loop optimizations
Canonical References
| Reference | Why It Matters |
| Cocke, "Global Common Subexpression Elimination" (1970) | Original CSE algorithm |
| Tjaden & Flynt, "Global Subexpression Elimination" (1970s) | Early CSE work |
| Rosen, "Global Value Numbers and Redundant Computations" (1988) | Value numbering framework |
| Click & Cooper, "Combining Analyses, Optimizing and Using Them" (1995) | Integration of CSE with other analyses |
Research Tools & Artifacts
Real-world CSE implementations to study:
| Tool | Why It Matters |
| GCC GIMPLE | Production CSE in GCC |
| LLVM SELC | Scalar evolution-based CSE |
| MLIR CSE | dialect-level commoning |
| GraalVM Truffle | Partial evaluation with CSE |
| HotSpot C1/C2 | Client/server compiler CSE |
Key Optimizations
- Redundant load elimination (RLE): Beyond expression CSE
- Store CSE: Common stores to same location
- Linear-speed redundancy: Profitable vs redundant
Research Frontiers
Current CSE research:
| Direction | Key Papers | Challenge |
| Value numbering | Rosen, Wegman & Zadeck, "Global Value Numbers and Redundant Computations" (POPL 1988) | More powerful than CSE |
| SCEV (Scalar Evolution) | LLVM's SCEV analysis | Loop-carried dependencies |
| Partial redundancy | Morel & Renvoise, "Global Optimization by Suppression of Partial Redundancies" (CACM 1979) | Redundancy across paths |
| Lazy code motion | Knoop, Rüthing & Steffen, "Lazy Code Motion" (PLDI 1992) | Optimal placement |
Hot Topics
- Redundancy in quantum circuits: CSE for quantum compilation
- Graph RE: Redundancy elimination in dataflow graphs
- Approximate computing: Tolerable approximation in CSE
Implementation Pitfalls
Common CSE bugs:
| Pitfall | Real Example | Prevention |
| Aliasing violations | CSE on aliased pointers | Conservative with pointers |
| Side effects | CSE removing io operations | Track purity precisely |
| Memory ordering | Out-of-order store CSE | Model memory precisely |
| Division safety | CSE on division by zero | Check divisor non-zero |
| Overflow | CSE changing overflow | Preserve overflow behavior |
| Load/store ordering | Reordering loads incorrectly | Model memory model |
The "Pointer Aliasing" Bug
CSE incorrectly assuming no aliasing:
// May alias - CSE would be wrong
a[i] = x;
b[j] = a[i]; // Could be same as a[i] above!Solution: Conservative - don't CSE if pointers could alias.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

