https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70916
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> --- For the ICE the fix is easy: --- tree-vect-patterns.c.jj1 2016-03-23 10:51:23.000000000 +0100 +++ tree-vect-patterns.c 2016-05-03 08:39:17.779229143 +0200 @@ -3673,8 +3673,10 @@ vect_recog_mask_conversion_pattern (vec< if (!rhs1_type) return NULL; } - else + else if (COMPARISON_CLASS_P (rhs1)) rhs1_type = TREE_TYPE (TREE_OPERAND (rhs1, 0)); + else + return NULL; vectype2 = get_mask_type_for_scalar_type (rhs1_type); now to figure out why tree-if-conv.c actually emitted something = 1 ? op2 : op3;