@@ -2364,9 +2364,11 @@ vectorizable_mask_load_store (gimple *stmt, gimple_stmt_iterator *gsi,
23642364 misalign );
23652365 tree ptr = build_int_cst (TREE_TYPE (gimple_call_arg (stmt , 1 )),
23662366 misalign ? least_bit_hwi (misalign ) : align );
2367- new_stmt
2367+ gcall * call
23682368 = gimple_build_call_internal (IFN_MASK_STORE , 4 , dataref_ptr ,
23692369 ptr , vec_mask , vec_rhs );
2370+ gimple_call_set_nothrow (call , true);
2371+ new_stmt = call ;
23702372 vect_finish_stmt_generation (stmt , new_stmt , gsi );
23712373 if (i == 0 )
23722374 STMT_VINFO_VEC_STMT (stmt_info ) = * vec_stmt = new_stmt ;
@@ -2414,16 +2416,17 @@ vectorizable_mask_load_store (gimple *stmt, gimple_stmt_iterator *gsi,
24142416 misalign );
24152417 tree ptr = build_int_cst (TREE_TYPE (gimple_call_arg (stmt , 1 )),
24162418 misalign ? least_bit_hwi (misalign ) : align );
2417- new_stmt
2419+ gcall * call
24182420 = gimple_build_call_internal (IFN_MASK_LOAD , 3 , dataref_ptr ,
24192421 ptr , vec_mask );
2420- gimple_call_set_lhs (new_stmt , make_ssa_name (vec_dest ));
2421- vect_finish_stmt_generation (stmt , new_stmt , gsi );
2422+ gimple_call_set_lhs (call , make_ssa_name (vec_dest ));
2423+ gimple_call_set_nothrow (call , true);
2424+ vect_finish_stmt_generation (stmt , call , gsi );
24222425 if (i == 0 )
2423- STMT_VINFO_VEC_STMT (stmt_info ) = * vec_stmt = new_stmt ;
2426+ STMT_VINFO_VEC_STMT (stmt_info ) = * vec_stmt = call ;
24242427 else
2425- STMT_VINFO_RELATED_STMT (prev_stmt_info ) = new_stmt ;
2426- prev_stmt_info = vinfo_for_stmt (new_stmt );
2428+ STMT_VINFO_RELATED_STMT (prev_stmt_info ) = call ;
2429+ prev_stmt_info = vinfo_for_stmt (call );
24272430 }
24282431 }
24292432
@@ -2867,8 +2870,11 @@ vectorizable_call (gimple *gs, gimple_stmt_iterator *gsi, gimple **vec_stmt,
28672870 if (modifier == NARROW )
28682871 {
28692872 tree half_res = make_ssa_name (vectype_in );
2870- new_stmt = gimple_build_call_internal_vec (ifn , vargs );
2871- gimple_call_set_lhs (new_stmt , half_res );
2873+ gcall * call
2874+ = gimple_build_call_internal_vec (ifn , vargs );
2875+ gimple_call_set_lhs (call , half_res );
2876+ gimple_call_set_nothrow (call , true);
2877+ new_stmt = call ;
28722878 vect_finish_stmt_generation (stmt , new_stmt , gsi );
28732879 if ((i & 1 ) == 0 )
28742880 {
@@ -2881,12 +2887,15 @@ vectorizable_call (gimple *gs, gimple_stmt_iterator *gsi, gimple **vec_stmt,
28812887 }
28822888 else
28832889 {
2890+ gcall * call ;
28842891 if (ifn != IFN_LAST )
2885- new_stmt = gimple_build_call_internal_vec (ifn , vargs );
2892+ call = gimple_build_call_internal_vec (ifn , vargs );
28862893 else
2887- new_stmt = gimple_build_call_vec (fndecl , vargs );
2888- new_temp = make_ssa_name (vec_dest , new_stmt );
2889- gimple_call_set_lhs (new_stmt , new_temp );
2894+ call = gimple_build_call_vec (fndecl , vargs );
2895+ new_temp = make_ssa_name (vec_dest , call );
2896+ gimple_call_set_lhs (call , new_temp );
2897+ gimple_call_set_nothrow (call , true);
2898+ new_stmt = call ;
28902899 }
28912900 vect_finish_stmt_generation (stmt , new_stmt , gsi );
28922901 SLP_TREE_VEC_STMTS (slp_node ).quick_push (new_stmt );
@@ -2934,8 +2943,10 @@ vectorizable_call (gimple *gs, gimple_stmt_iterator *gsi, gimple **vec_stmt,
29342943 else if (modifier == NARROW )
29352944 {
29362945 tree half_res = make_ssa_name (vectype_in );
2937- new_stmt = gimple_build_call_internal_vec (ifn , vargs );
2938- gimple_call_set_lhs (new_stmt , half_res );
2946+ gcall * call = gimple_build_call_internal_vec (ifn , vargs );
2947+ gimple_call_set_lhs (call , half_res );
2948+ gimple_call_set_nothrow (call , true);
2949+ new_stmt = call ;
29392950 vect_finish_stmt_generation (stmt , new_stmt , gsi );
29402951 if ((j & 1 ) == 0 )
29412952 {
@@ -2948,12 +2959,15 @@ vectorizable_call (gimple *gs, gimple_stmt_iterator *gsi, gimple **vec_stmt,
29482959 }
29492960 else
29502961 {
2962+ gcall * call ;
29512963 if (ifn != IFN_LAST )
2952- new_stmt = gimple_build_call_internal_vec (ifn , vargs );
2964+ call = gimple_build_call_internal_vec (ifn , vargs );
29532965 else
2954- new_stmt = gimple_build_call_vec (fndecl , vargs );
2966+ call = gimple_build_call_vec (fndecl , vargs );
29552967 new_temp = make_ssa_name (vec_dest , new_stmt );
2956- gimple_call_set_lhs (new_stmt , new_temp );
2968+ gimple_call_set_lhs (call , new_temp );
2969+ gimple_call_set_nothrow (call , true);
2970+ new_stmt = call ;
29572971 }
29582972 vect_finish_stmt_generation (stmt , new_stmt , gsi );
29592973
@@ -2996,12 +3010,15 @@ vectorizable_call (gimple *gs, gimple_stmt_iterator *gsi, gimple **vec_stmt,
29963010 vargs .quick_push (vec_oprndsk [i ]);
29973011 vargs .quick_push (vec_oprndsk [i + 1 ]);
29983012 }
3013+ gcall * call ;
29993014 if (ifn != IFN_LAST )
3000- new_stmt = gimple_build_call_internal_vec (ifn , vargs );
3015+ call = gimple_build_call_internal_vec (ifn , vargs );
30013016 else
3002- new_stmt = gimple_build_call_vec (fndecl , vargs );
3003- new_temp = make_ssa_name (vec_dest , new_stmt );
3004- gimple_call_set_lhs (new_stmt , new_temp );
3017+ call = gimple_build_call_vec (fndecl , vargs );
3018+ new_temp = make_ssa_name (vec_dest , call );
3019+ gimple_call_set_lhs (call , new_temp );
3020+ gimple_call_set_nothrow (call , true);
3021+ new_stmt = call ;
30053022 vect_finish_stmt_generation (stmt , new_stmt , gsi );
30063023 SLP_TREE_VEC_STMTS (slp_node ).quick_push (new_stmt );
30073024 }
@@ -6356,8 +6373,11 @@ vectorizable_store (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
63566373 /* Emit:
63576374 MEM_REF[...all elements...] = STORE_LANES (VEC_ARRAY). */
63586375 data_ref = create_array_ref (aggr_type , dataref_ptr , ref_type );
6359- new_stmt = gimple_build_call_internal (IFN_STORE_LANES , 1 , vec_array );
6360- gimple_call_set_lhs (new_stmt , data_ref );
6376+ gcall * call = gimple_build_call_internal (IFN_STORE_LANES , 1 ,
6377+ vec_array );
6378+ gimple_call_set_lhs (call , data_ref );
6379+ gimple_call_set_nothrow (call , true);
6380+ new_stmt = call ;
63616381 vect_finish_stmt_generation (stmt , new_stmt , gsi );
63626382 }
63636383 else
@@ -7448,8 +7468,11 @@ vectorizable_load (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
74487468 /* Emit:
74497469 VEC_ARRAY = LOAD_LANES (MEM_REF[...all elements...]). */
74507470 data_ref = create_array_ref (aggr_type , dataref_ptr , ref_type );
7451- new_stmt = gimple_build_call_internal (IFN_LOAD_LANES , 1 , data_ref );
7452- gimple_call_set_lhs (new_stmt , vec_array );
7471+ gcall * call = gimple_build_call_internal (IFN_LOAD_LANES , 1 ,
7472+ data_ref );
7473+ gimple_call_set_lhs (call , vec_array );
7474+ gimple_call_set_nothrow (call , true);
7475+ new_stmt = call ;
74537476 vect_finish_stmt_generation (stmt , new_stmt , gsi );
74547477
74557478 /* Extract each vector into an SSA_NAME. */
0 commit comments