mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-14 14:56:47 +00:00
4805e629c5
This CL argues that the builder API for AffineExpr should be used with a lightweight wrapper that supports operators chaining. This CL takes the ill-named AffineExprWrap and proposes a simple set of operators with builtin constant simplifications. This allows: 1. removing the getAddMulPureAffineExpr function; 2. avoiding concerns about constant vs non-constant simplifications at **every call site**; 3. writing the mathematical expressions we want to write without unnecessary obfuscations. The points above represent pure technical debt that we don't want to carry on. It is important to realize that this is not a mere convenience or "just sugar" but reduction in cognitive overhead. This thinking can be pushed significantly further, I have added some comments with some basic ideas but we could make AffineMap, AffineApply and other objects that use map applications more functional and value-based. I am putting this out to get a first batch of reviews and see what people think. I think in my preferred design I would have the Builder directly return such AffineExprPtr objects by value everywhere and avoid the boilerplate explicit creations that I am doing by hand at this point. Yes this AffineExprPtr would implicitly convert to AffineExpr* because that is what it is. PiperOrigin-RevId: 215641317