const signed long long __builtin_vec_ext_v2di (vsll, signed int);
VEC_EXT_V2DI nothing {extract}
-;; VEC_SET_V1TI, VEC_SET_V2DF and VEC_SET_V2DI are used in
-;; resolve_vec_insert(), rs6000-c.cc
-;; TODO: Remove VEC_SET_V1TI, VEC_SET_V2DF and VEC_SET_V2DI once the uses
-;; in resolve_vec_insert are replaced by the equivalent gimple statements.
- const vsq __builtin_vec_set_v1ti (vsq, signed __int128, const int<0,0>);
- VEC_SET_V1TI nothing {set}
-
- const vd __builtin_vec_set_v2df (vd, double, const int<1>);
- VEC_SET_V2DF nothing {set}
-
- const vsll __builtin_vec_set_v2di (vsll, signed long long, const int<1>);
- VEC_SET_V2DI nothing {set}
-
const vsc __builtin_vsx_cmpge_16qi (vsc, vsc);
CMPGE_16QI vector_nltv16qi {}
return error_mark_node;
}
- /* If we can use the VSX xxpermdi instruction, use that for insert. */
- machine_mode mode = TYPE_MODE (arg1_type);
-
- if ((mode == V2DFmode || mode == V2DImode)
- && VECTOR_UNIT_VSX_P (mode)
- && TREE_CODE (arg2) == INTEGER_CST)
- {
- wide_int selector = wi::to_wide (arg2);
- selector = wi::umod_trunc (selector, 2);
- arg2 = wide_int_to_tree (TREE_TYPE (arg2), selector);
-
- tree call = NULL_TREE;
- if (mode == V2DFmode)
- call = rs6000_builtin_decls[RS6000_BIF_VEC_SET_V2DF];
- else if (mode == V2DImode)
- call = rs6000_builtin_decls[RS6000_BIF_VEC_SET_V2DI];
-
- /* Note, __builtin_vec_insert_<xxx> has vector and scalar types
- reversed. */
- if (call)
- {
- *res = resolved;
- return build_call_expr (call, 3, arg1, arg0, arg2);
- }
- }
-
- else if (mode == V1TImode
- && VECTOR_UNIT_VSX_P (mode)
- && TREE_CODE (arg2) == INTEGER_CST)
- {
- tree call = rs6000_builtin_decls[RS6000_BIF_VEC_SET_V1TI];
- wide_int selector = wi::zero(32);
- arg2 = wide_int_to_tree (TREE_TYPE (arg2), selector);
-
- /* Note, __builtin_vec_insert_<xxx> has vector and scalar types
- reversed. */
- *res = resolved;
- return build_call_expr (call, 3, arg1, arg0, arg2);
- }
-
/* Build *(((arg1_inner_type*) & (vector type){arg1}) + arg2) = arg0 with
VIEW_CONVERT_EXPR. i.e.:
D.3192 = v1;