|
| 1 | +2016-11-23 Martin Jambor < [email protected]> |
| 2 | + |
| 3 | + |
| 4 | + * hsa-builtins.def: New file. |
| 5 | + * Makefile.in (BUILTINS_DEF): Add hsa-builtins.def dependency. |
| 6 | + * builtins.def: Include hsa-builtins.def. |
| 7 | + (DEF_HSA_BUILTIN): New macro. |
| 8 | + * dumpfile.h (OPTGROUP_OPENMP): Define. |
| 9 | + * dumpfile.c (optgroup_options): Added OPTGROUP_OPENMP. |
| 10 | + * gimple.h (gf_mask): Added elements GF_OMP_FOR_GRID_INTRA_GROUP and |
| 11 | + GF_OMP_FOR_GRID_GROUP_ITER. |
| 12 | + (gimple_omp_for_grid_phony): Added checking assert. |
| 13 | + (gimple_omp_for_set_grid_phony): Likewise. |
| 14 | + (gimple_omp_for_grid_intra_group): New function. |
| 15 | + (gimple_omp_for_set_grid_intra_group): Likewise. |
| 16 | + (gimple_omp_for_grid_group_iter): Likewise. |
| 17 | + (gimple_omp_for_set_grid_group_iter): Likewise. |
| 18 | + * omp-low.c (check_omp_nesting_restrictions): Allow GRID loop where |
| 19 | + previosuly only distribute loop was permitted. |
| 20 | + (lower_lastprivate_clauses): Allow non tcc_comparison predicates. |
| 21 | + (grid_get_kernel_launch_attributes): Support multiple HSA grid |
| 22 | + dimensions. |
| 23 | + (grid_expand_omp_for_loop): Likewise and also support standalone |
| 24 | + distribute constructs. New parameter INTRA_GROUP, updated both users. |
| 25 | + (grid_expand_target_grid_body): Support standalone distribute |
| 26 | + constructs. |
| 27 | + (pass_data_expand_omp): Changed optinfo_flags to OPTGROUP_OPENMP. |
| 28 | + (pass_data_expand_omp_ssa): Likewise. |
| 29 | + (pass_data_omp_device_lower): Likewsie. |
| 30 | + (pass_data_lower_omp): Likewise. |
| 31 | + (pass_data_diagnose_omp_blocks): Likewise. |
| 32 | + (pass_data_oacc_device_lower): Likewise. |
| 33 | + (pass_data_omp_target_link): Likewise. |
| 34 | + (grid_lastprivate_predicate): New function. |
| 35 | + (lower_omp_for_lastprivate): Call grid_lastprivate_predicate for |
| 36 | + gridified loops. |
| 37 | + (lower_omp_for): Support standalone distribute constructs. |
| 38 | + (grid_prop): New type. |
| 39 | + (grid_safe_assignment_p): Check for assignments to group_sizes, new |
| 40 | + parameter GRID. |
| 41 | + (grid_seq_only_contains_local_assignments): New parameter GRID, pass |
| 42 | + it to callee. |
| 43 | + (grid_find_single_omp_among_assignments_1): Likewise, improve missed |
| 44 | + optimization info messages. |
| 45 | + (grid_find_single_omp_among_assignments): Likewise. |
| 46 | + (grid_find_ungridifiable_statement): Do not bail out for SIMDs. |
| 47 | + (grid_parallel_clauses_gridifiable): New function. |
| 48 | + (grid_inner_loop_gridifiable_p): Likewise. |
| 49 | + (grid_dist_follows_simple_pattern): Likewise. |
| 50 | + (grid_gfor_follows_tiling_pattern): Likewise. |
| 51 | + (grid_call_permissible_in_distribute_p): Likewise. |
| 52 | + (grid_handle_call_in_distribute): Likewise. |
| 53 | + (grid_dist_follows_tiling_pattern): Likewise. |
| 54 | + (grid_target_follows_gridifiable_pattern): Support standalone distribute |
| 55 | + constructs. |
| 56 | + (grid_var_segment): New enum. |
| 57 | + (grid_mark_variable_segment): New function. |
| 58 | + (grid_copy_leading_local_assignments): Call grid_mark_variable_segment |
| 59 | + if a new argument says so. |
| 60 | + (grid_process_grid_body): New function. |
| 61 | + (grid_eliminate_combined_simd_part): Likewise. |
| 62 | + (grid_mark_tiling_loops): Likewise. |
| 63 | + (grid_mark_tiling_parallels_and_loops): Likewise. |
| 64 | + (grid_process_kernel_body_copy): Support standalone distribute |
| 65 | + constructs. |
| 66 | + (grid_attempt_target_gridification): New grid variable holding overall |
| 67 | + gridification state. Support standalone distribute constructs and |
| 68 | + collapse clauses. |
| 69 | + * doc/optinfo.texi (Optimization groups): Document OPTGROUP_OPENMP. |
| 70 | + * hsa.h (hsa_bb): Add method method append_phi. |
| 71 | + (hsa_insn_br): Renamed to hsa_insn_cbr, renamed all |
| 72 | + occurences in all files too. |
| 73 | + (hsa_insn_br): New class, now the ancestor of hsa_incn_cbr. |
| 74 | + (is_a_helper <hsa_insn_br *>::test): New function. |
| 75 | + (is_a_helper <hsa_insn_cbr *>::test): Adjust to only cover conditional |
| 76 | + branch instructions. |
| 77 | + (hsa_insn_signal): Make a direct descendant of |
| 78 | + hsa_insn_basic. Add memorder constructor parameter and |
| 79 | + m_memory_order and m_signalop member variables. |
| 80 | + (hsa_insn_queue): Changed constructor parameters to common form. |
| 81 | + Added m_segment and m_memory_order member variables. |
| 82 | + (hsa_summary_t): Add private member function |
| 83 | + process_gpu_implementation_attributes. |
| 84 | + (hsa_function_summary): Rename m_binded_function to |
| 85 | + m_bound_function. |
| 86 | + (hsa_insn_basic_p): Remove typedef. |
| 87 | + (hsa_op_with_type): Change hsa_insn_basic_p into plain pointers. |
| 88 | + (hsa_op_reg_p): Remove typedef. |
| 89 | + (hsa_function_representation): Change hsa_op_reg_p into plain |
| 90 | + pointers. |
| 91 | + (hsa_insn_phi): Removed new and delete operators. |
| 92 | + (hsa_insn_br): Likewise. |
| 93 | + (hsa_insn_cbr): Likewise. |
| 94 | + (hsa_insn_sbr): Likewise. |
| 95 | + (hsa_insn_cmp): Likewise. |
| 96 | + (hsa_insn_mem): Likewise. |
| 97 | + (hsa_insn_atomic): Likewise. |
| 98 | + (hsa_insn_signal): Likewise. |
| 99 | + (hsa_insn_seg): Likewise. |
| 100 | + (hsa_insn_call): Likewise. |
| 101 | + (hsa_insn_arg_block): Likewise. |
| 102 | + (hsa_insn_comment): Likewise. |
| 103 | + (hsa_insn_srctype): Likewise. |
| 104 | + (hsa_insn_packed): Likewise. |
| 105 | + (hsa_insn_cvt): Likewise. |
| 106 | + (hsa_insn_alloca): Likewise. |
| 107 | + * hsa.c (hsa_destroy_insn): Also handle instances of hsa_insn_br. |
| 108 | + (process_gpu_implementation_attributes): New function. |
| 109 | + (link_functions): Move some functionality into it. Adjust after |
| 110 | + renaming m_binded_functions to m_bound_functions. |
| 111 | + (hsa_insn_basic::op_output_p): Add BRIG_OPCODE_DEBUGTRAP |
| 112 | + to the list of instructions with no output registers. |
| 113 | + (get_in_type): Return this if it is a register of |
| 114 | + matching size. |
| 115 | + (hsa_get_declaration_name): Moved to... |
| 116 | + * hsa-gen.c (hsa_get_declaration_name): ...here. Allocate |
| 117 | + temporary string on an obstack instead from ggc. |
| 118 | + (query_hsa_grid): Renamed to query_hsa_grid_dim, reimplemented, cut |
| 119 | + down to two overloads. |
| 120 | + (hsa_allocp_operand_address): Removed. |
| 121 | + (hsa_allocp_operand_immed): Likewise. |
| 122 | + (hsa_allocp_operand_reg): Likewise. |
| 123 | + (hsa_allocp_operand_code_list): Likewise. |
| 124 | + (hsa_allocp_operand_operand_list): Likewise. |
| 125 | + (hsa_allocp_inst_basic): Likewise. |
| 126 | + (hsa_allocp_inst_phi): Likewise. |
| 127 | + (hsa_allocp_inst_mem): Likewise. |
| 128 | + (hsa_allocp_inst_atomic): Likewise. |
| 129 | + (hsa_allocp_inst_signal): Likewise. |
| 130 | + (hsa_allocp_inst_seg): Likewise. |
| 131 | + (hsa_allocp_inst_cmp): Likewise. |
| 132 | + (hsa_allocp_inst_br): Likewise. |
| 133 | + (hsa_allocp_inst_sbr): Likewise. |
| 134 | + (hsa_allocp_inst_call): Likewise. |
| 135 | + (hsa_allocp_inst_arg_block): Likewise. |
| 136 | + (hsa_allocp_inst_comment): Likewise. |
| 137 | + (hsa_allocp_inst_queue): Likewise. |
| 138 | + (hsa_allocp_inst_srctype): Likewise. |
| 139 | + (hsa_allocp_inst_packed): Likewise. |
| 140 | + (hsa_allocp_inst_cvt): Likewise. |
| 141 | + (hsa_allocp_inst_alloca): Likewise. |
| 142 | + (hsa_allocp_bb): Likewise. |
| 143 | + (hsa_obstack): New. |
| 144 | + (hsa_init_data_for_cfun): Initialize obstack. |
| 145 | + (hsa_deinit_data_for_cfun): Release memory of the obstack. |
| 146 | + (hsa_op_immed::operator new): Use obstack instead of object_allocator. |
| 147 | + (hsa_op_reg::operator new): Likewise. |
| 148 | + (hsa_op_address::operator new): Likewise. |
| 149 | + (hsa_op_code_list::operator new): Likewise. |
| 150 | + (hsa_op_operand_list::operator new): Likewise. |
| 151 | + (hsa_insn_basic::operator new): Likewise. |
| 152 | + (hsa_insn_phi::operator new): Likewise. |
| 153 | + (hsa_insn_br::operator new): Likewise. |
| 154 | + (hsa_insn_sbr::operator new): Likewise. |
| 155 | + (hsa_insn_cmp::operator new): Likewise. |
| 156 | + (hsa_insn_mem::operator new): Likewise. |
| 157 | + (hsa_insn_atomic::operator new): Likewise. |
| 158 | + (hsa_insn_signal::operator new): Likewise. |
| 159 | + (hsa_insn_seg::operator new): Likewise. |
| 160 | + (hsa_insn_call::operator new): Likewise. |
| 161 | + (hsa_insn_arg_block::operator new): Likewise. |
| 162 | + (hsa_insn_comment::operator new): Likewise. |
| 163 | + (hsa_insn_srctype::operator new): Likewise. |
| 164 | + (hsa_insn_packed::operator new): Likewise. |
| 165 | + (hsa_insn_cvt::operator new): Likewise. |
| 166 | + (hsa_insn_alloca::operator new): Likewise. |
| 167 | + (hsa_init_new_bb): Likewise. |
| 168 | + (hsa_bb::append_phi): New function. |
| 169 | + (gen_hsa_phi_from_gimple_phi): Use it. |
| 170 | + (get_symbol_for_decl): Fix dinstinguishing between |
| 171 | + global and local functions. Put local variables into a segment |
| 172 | + according to their attribute or static flag, if there is one. |
| 173 | + (hsa_insn_br::hsa_insn_br): New. |
| 174 | + (hsa_insn_br::operator new): Likewise. |
| 175 | + (hsa_insn_cbr::hsa_insn_cbr): Set width via ancestor constructor. |
| 176 | + (query_hsa_grid_nodim): New function. |
| 177 | + (multiply_grid_dim_characteristics): Likewise. |
| 178 | + (gen_get_num_threads): Likewise. |
| 179 | + (gen_get_num_teams): Reimplemented. |
| 180 | + (gen_get_team_num): Likewise. |
| 181 | + (gen_hsa_insns_for_known_library_call): Updated calls to the above |
| 182 | + helper functions. |
| 183 | + (get_memory_order_name): Removed. |
| 184 | + (get_memory_order): Likewise. |
| 185 | + (hsa_memorder_from_tree): New function. |
| 186 | + (gen_hsa_ternary_atomic_for_builtin): Renamed to |
| 187 | + gen_hsa_atomic_for_builtin, can also create signals. |
| 188 | + (gen_hsa_insns_for_call): Handle many new builtins. Adjust to use |
| 189 | + hsa_memory_order_from_tree and gen_hsa_atomic_for_builtin. |
| 190 | + (hsa_insn_atomic): Fix function comment. |
| 191 | + (hsa_insn_signal::hsa_insn_signal): Fix comment. Update call to |
| 192 | + ancestor constructor and initialization of new member variables. |
| 193 | + (hsa_insn_queue::hsa_insn_queue): Added initialization of new |
| 194 | + member variables. |
| 195 | + (hsa_get_host_function): Handle functions with no bound CPU |
| 196 | + implementation. Fix binded to bound. |
| 197 | + (get_brig_function_name): Likewise. |
| 198 | + (HSA_SORRY_ATV): Remove semicolon after macro. |
| 199 | + (HSA_SORRY_AT): Likewise. |
| 200 | + (omp_simple_builtin::generate): Add missing semicolons. |
| 201 | + (hsa_insn_phi::operator new): Removed. |
| 202 | + (hsa_insn_br::operator new): Likewise. |
| 203 | + (hsa_insn_cbr::operator new): Likewise. |
| 204 | + (hsa_insn_sbr::operator new): Likewise. |
| 205 | + (hsa_insn_cmp::operator new): Likewise. |
| 206 | + (hsa_insn_mem::operator new): Likewise. |
| 207 | + (hsa_insn_atomic::operator new): Likewise. |
| 208 | + (hsa_insn_signal::operator new): Likewise. |
| 209 | + (hsa_insn_seg::operator new): Likewise. |
| 210 | + (hsa_insn_call::operator new): Likewise. |
| 211 | + (hsa_insn_arg_block::operator new): Likewise. |
| 212 | + (hsa_insn_comment::operator new): Likewise. |
| 213 | + (hsa_insn_srctype::operator new): Likewise. |
| 214 | + (hsa_insn_packed::operator new): Likewise. |
| 215 | + (hsa_insn_cvt::operator new): Likewise. |
| 216 | + (hsa_insn_alloca::operator new): Likewise. |
| 217 | + (get_symbol_for_decl): Accept CONST_DECLs, put them to |
| 218 | + readonly segment. |
| 219 | + (gen_hsa_addr): Also process CONST_DECLs. |
| 220 | + (gen_hsa_addr_insns): Process CONST_DECLs by creating private |
| 221 | + copies. |
| 222 | + (gen_hsa_unary_operation): Make sure the function does |
| 223 | + not use bittype source type for firstbit and lastbit operations. |
| 224 | + (gen_hsa_popcount_to_dest): Make sure the function uses a bittype |
| 225 | + source type. |
| 226 | + * hsa-brig.c (emit_insn_operands): Cope with zero operands in an |
| 227 | + instruction. |
| 228 | + (emit_branch_insn): Renamed to emit_cond_branch_insn. |
| 229 | + Emit the width stored in the class. |
| 230 | + (emit_generic_branch_insn): New function. |
| 231 | + (emit_insn): Call emit_generic_branch_insn. |
| 232 | + (emit_signal_insn): Remove obsolete comment. Update |
| 233 | + member variable name, pick a type according to profile. |
| 234 | + (emit_alloca_insn): Remove obsolete comment. |
| 235 | + (emit_atomic_insn): Likewise. |
| 236 | + (emit_queue_insn): Get segment and memory order from the IR object. |
| 237 | + (hsa_brig_section): Make allocate_new_chunk, chunks |
| 238 | + and cur_chunk provate, add a default NULL parameter to add method. |
| 239 | + (hsa_brig_section::add): Added a new parameter, store pointer to |
| 240 | + output data there if it is non-NULL. |
| 241 | + (emit_function_directives): Use this new parameter instead of |
| 242 | + calculating the pointer itself, fix function comment. |
| 243 | + (hsa_brig_emit_function): Add forgotten endian conversion. |
| 244 | + (hsa_output_kernels): Remove unnecessary building of |
| 245 | + kernel_dependencies_vector_type. |
| 246 | + (emit_immediate_operand): Declare. |
| 247 | + (emit_directive_variable): Also emit initializers of CONST_DECLs. |
| 248 | + (gen_hsa_insn_for_internal_fn_call): Also handle IFN_RSQRT. |
| 249 | + (verify_function_arguments): Properly detect variadic |
| 250 | + arguments. |
| 251 | + * hsa-dump.c (hsa_width_specifier_name): New function. |
| 252 | + (dump_hsa_insn_1): Dump generic branch instructions, update signal |
| 253 | + member variable name. Special dumping for queue objects. |
| 254 | + * ipa-hsa.c (process_hsa_functions): Adjust after renaming |
| 255 | + m_binded_functions to m_bound_functions. Copy externally visible flag |
| 256 | + to the node. |
| 257 | + (ipa_hsa_write_summary): Likewise. |
| 258 | + (ipa_hsa_read_section): Likewise. |
| 259 | + |
1 | 260 | 2016-11-23 Richard Biener < [email protected]> |
2 | 261 |
|
3 | 262 | PR tree-optimization/78396 |
|
0 commit comments