cgen: fix performance regression with x in {...}
#807
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Fix a regression in the C code generator that led to slightly less
efficient code being generated for
x in set
where set is a constantset construction expression.
Details
The decision of whether to emit set construction code or to use an
||
(or) chain of comparisons was still based on the presence of thenfAllConst
flag, but node flags don't reach the code generators eversince the introduction of the MIR and
astgen
, meaning that the||
chain was always chosen for set literals with less than 8 elements.
Testing for the flag is replaced with a call to
isDeepConstExpr
,restoring the originally intended behaviour (i.e., emit set construction
code for sets with a size-in-bytes <=
sizeof(int)
).In addition, the other remaining usage of
nfAllConst
inccgexprs.genSetConstr
is removed completely: fully constantconstruction expressions are already handled by its single callsite
(
ccgexprs.expr
).