By defining `CExpressionInterface`, we move the side effect detection logic from `emitc.expression` into the individual operations implementing the interface allowing operations to gradually tune the side effect. It also allows checking for side effects each operation individually.
Multi-Level Intermediate Representation
See https://mlir.llvm.org/ for more information.