#include "tree-vectorizer.h"
#include "recog.h"
#include "diagnostic-core.h"
-#include "toplev.h"
/* Function prototypes */
static void vect_pattern_recog_1
tree prod_type;
loop_vec_info loop_info = STMT_VINFO_LOOP_VINFO (stmt_vinfo);
struct loop *loop = LOOP_VINFO_LOOP (loop_info);
- tree var, rhs;
+ tree var;
if (!is_gimple_assign (last_stmt))
return NULL;
stmt = SSA_NAME_DEF_STMT (oprnd0);
/* It could not be the dot_prod pattern if the stmt is outside the loop. */
- if (!flow_bb_inside_loop_p (loop, gimple_bb (stmt)))
+ if (!gimple_bb (stmt) || !flow_bb_inside_loop_p (loop, gimple_bb (stmt)))
return NULL;
/* FORNOW. Can continue analyzing the def-use chain when this stmt in a phi
/* Pattern detected. Create a stmt to be used to replace the pattern: */
var = vect_recog_temp_ssa_var (type, NULL);
- rhs = build3 (DOT_PROD_EXPR, type, oprnd00, oprnd01, oprnd1),
- pattern_stmt = gimple_build_assign (var, rhs);
+ pattern_stmt = gimple_build_assign_with_ops3 (DOT_PROD_EXPR, var,
+ oprnd00, oprnd01, oprnd1);
if (vect_print_dump_info (REPORT_DETAILS))
{
vectype = get_vectype_for_scalar_type (half_type0);
vectype_out = get_vectype_for_scalar_type (type);
if (!vectype
+ || !vectype_out
|| !supportable_widening_operation (WIDEN_MULT_EXPR, last_stmt,
vectype_out, vectype,
&dummy, &dummy, &dummy_code,
return NULL;
fn = gimple_call_fndecl (last_stmt);
+ if (fn == NULL_TREE || DECL_BUILT_IN_CLASS (fn) != BUILT_IN_NORMAL)
+ return NULL;
+
switch (DECL_FUNCTION_CODE (fn))
{
case BUILT_IN_POWIF: