Functions calls consume one condition from the limit for every function parameter. This is obviously wrong, and it means that e.g. contains_any(foo, 'a', 'b', 'c') is more expensive than 'a' in foo | 'b' in foo | 'c' in foo, even though it's faster.
I've since learned that this has gotten painstakingly documented at https://www.mediawiki.org/wiki/Extension:AbuseFilter/Conditions. I'll archive the page and document the new simpler rules later.