BTW, I find this coding (first cast, then check) rather strange:
Var *var = (Var *) ecm->em_expr;
if (!IsA(var, Var)) continue; /* Ignore Consts */
It's probably harmless, but I find it confusing and I can't remember seeing it elsewhere in the code (for example clausesel.c and such) use this style:
... clause is (Node*) ...
if (IsA(clause, Var)) { Var *var = (Var*)clause; ... }
or
Var * var = NULL;
if (! IsA(clause, Var)) // error / continue
var = (Var*)clause;
Yeah, it does look a bit weird, but if you search the code for "IsA(var, Var)" you'll see it's nothing new.