codegen: factor ifs when possible