[clang] [codegen] Emit missing cleanups for stmt-expr and coro suspensions [take-2] (PR #85398)

Utkarsh Saxena via cfe-commits cfe-commits at lists.llvm.org
Wed Mar 27 09:06:37 PDT 2024


usx95 wrote:

> Instead of Expr::mayBranchOut, I'd prefer to just unconditionally create the alloca, then delete it later if it turns out we didn't actually need to emit the branch. 

I had earlier tried tracking instructions auxiliary to a particular cleanup in #83224 ([src](https://github.com/llvm/llvm-project/pull/83224/files#diff-9cdaea6a793ed2892bfcd6b431e933a49ebb25caa2bd1d630cd1ca823281092aR263-R286)). This gets ugly very quickly and adds quite some complexity to the cleanup addition and emission code. For example, more instructions could be added if the cleanup is conditional.

> Trying to explicitly compute whether there's a branch out seems both difficult, and potentially costly for compile-time.

Computing this 100% accurately is indeed difficult. But if we allow false-positives, as in the current approach, it gets clearer and simpler. As far as compile-time is concerned, this involves revisiting the complete expression exactly one more time. We could, in principle, cache this per expression to keep this linear. 


https://github.com/llvm/llvm-project/pull/85398


More information about the cfe-commits mailing list