gimple *mask_def = NULL;
tree rhs1 = gimple_assign_rhs1 (def_stmt);
tree rhs2 = gimple_assign_rhs2 (def_stmt);
- if ((mask_def = get_gimple_for_ssa_name (rhs1))
+ if (TREE_CODE (rhs1) == SSA_NAME
+ && (mask_def = get_gimple_for_ssa_name (rhs1))
&& is_gimple_assign (mask_def)
&& TREE_CODE_CLASS (gimple_assign_rhs_code (mask_def)))
masked_op = rhs2;
- else if ((mask_def = get_gimple_for_ssa_name (rhs2))
- && is_gimple_assign (mask_def)
- && TREE_CODE_CLASS (gimple_assign_rhs_code (mask_def)))
+ else if (TREE_CODE (rhs2) == SSA_NAME
+ && (mask_def = get_gimple_for_ssa_name (rhs2))
+ && is_gimple_assign (mask_def)
+ && TREE_CODE_CLASS (gimple_assign_rhs_code (mask_def)))
masked_op = rhs1;
if (masked_op)
len_bias = gimple_call_arg (call, 4);
tree arg0 = gimple_call_arg (call, 0);
- def_stmt = get_gimple_for_ssa_name (arg0);
+ if (TREE_CODE (arg0) == SSA_NAME)
+ def_stmt = get_gimple_for_ssa_name (arg0);
}
}
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-march=armv8-a -std=c++11 -Ofast" } */
+
+#include <vector>
+
+int foo()
+{
+ bool xs[] = { true, true, false, true };
+ bool s[] = { true, true, false };
+ std::vector<bool> x(xs, xs+4);
+ std::vector<bool> g(s, s+3);
+ g.push_back(true);
+ if (g != x)
+ __builtin_abort();
+ return 0;
+}