Mercurial > hg > CbC > CbC_gcc
comparison gcc/graphite-optimize-isl.c @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | 84e7813d76e9 |
children |
comparison
equal
deleted
inserted
replaced
131:84e7813d76e9 | 145:1830386684a0 |
---|---|
1 /* A scheduling optimizer for Graphite | 1 /* A scheduling optimizer for Graphite |
2 Copyright (C) 2012-2018 Free Software Foundation, Inc. | 2 Copyright (C) 2012-2020 Free Software Foundation, Inc. |
3 Contributed by Tobias Grosser <tobias@grosser.es>. | 3 Contributed by Tobias Grosser <tobias@grosser.es>. |
4 | 4 |
5 This file is part of GCC. | 5 This file is part of GCC. |
6 | 6 |
7 GCC is free software; you can redistribute it and/or modify | 7 GCC is free software; you can redistribute it and/or modify |
33 #include "fold-const.h" | 33 #include "fold-const.h" |
34 #include "gimple-iterator.h" | 34 #include "gimple-iterator.h" |
35 #include "tree-ssa-loop.h" | 35 #include "tree-ssa-loop.h" |
36 #include "cfgloop.h" | 36 #include "cfgloop.h" |
37 #include "tree-data-ref.h" | 37 #include "tree-data-ref.h" |
38 #include "params.h" | |
39 #include "dumpfile.h" | 38 #include "dumpfile.h" |
40 #include "tree-vectorizer.h" | 39 #include "tree-vectorizer.h" |
41 #include "graphite.h" | 40 #include "graphite.h" |
42 | 41 |
43 | 42 |
62 isl_schedule_node_free (child); | 61 isl_schedule_node_free (child); |
63 | 62 |
64 if (type != isl_schedule_node_leaf) | 63 if (type != isl_schedule_node_leaf) |
65 return node; | 64 return node; |
66 | 65 |
67 long tile_size = PARAM_VALUE (PARAM_LOOP_BLOCK_TILE_SIZE); | 66 long tile_size = param_loop_block_tile_size; |
68 if (dims <= 1 | 67 if (dims <= 1 |
69 || tile_size == 0 | 68 || tile_size == 0 |
70 || !isl_schedule_node_band_get_permutable (node)) | 69 || !isl_schedule_node_band_get_permutable (node)) |
71 { | 70 { |
72 if (dump_file && dump_flags) | 71 if (dump_file && dump_flags) |
113 static bool | 112 static bool |
114 optimize_isl (scop_p scop) | 113 optimize_isl (scop_p scop) |
115 { | 114 { |
116 int old_err = isl_options_get_on_error (scop->isl_context); | 115 int old_err = isl_options_get_on_error (scop->isl_context); |
117 int old_max_operations = isl_ctx_get_max_operations (scop->isl_context); | 116 int old_max_operations = isl_ctx_get_max_operations (scop->isl_context); |
118 int max_operations = PARAM_VALUE (PARAM_MAX_ISL_OPERATIONS); | 117 int max_operations = param_max_isl_operations; |
119 if (max_operations) | 118 if (max_operations) |
120 isl_ctx_set_max_operations (scop->isl_context, max_operations); | 119 isl_ctx_set_max_operations (scop->isl_context, max_operations); |
121 isl_options_set_on_error (scop->isl_context, ISL_ON_ERROR_CONTINUE); | 120 isl_options_set_on_error (scop->isl_context, ISL_ON_ERROR_CONTINUE); |
122 | 121 |
123 isl_union_set *domain = scop_get_domains (scop); | 122 isl_union_set *domain = scop_get_domains (scop); |
158 isl_ctx_reset_operations (scop->isl_context); | 157 isl_ctx_reset_operations (scop->isl_context); |
159 isl_ctx_set_max_operations (scop->isl_context, old_max_operations); | 158 isl_ctx_set_max_operations (scop->isl_context, old_max_operations); |
160 if (!scop->transformed_schedule | 159 if (!scop->transformed_schedule |
161 || isl_ctx_last_error (scop->isl_context) != isl_error_none) | 160 || isl_ctx_last_error (scop->isl_context) != isl_error_none) |
162 { | 161 { |
163 dump_user_location_t loc = find_loop_location | 162 if (dump_enabled_p ()) |
164 (scop->scop_info->region.entry->dest->loop_father); | 163 { |
165 if (isl_ctx_last_error (scop->isl_context) == isl_error_quota) | 164 dump_user_location_t loc = find_loop_location |
166 dump_printf_loc (MSG_MISSED_OPTIMIZATION, loc, | 165 (scop->scop_info->region.entry->dest->loop_father); |
167 "loop nest not optimized, optimization timed out " | 166 if (isl_ctx_last_error (scop->isl_context) == isl_error_quota) |
168 "after %d operations [--param max-isl-operations]\n", | 167 dump_printf_loc (MSG_MISSED_OPTIMIZATION, loc, |
169 max_operations); | 168 "loop nest not optimized, optimization timed out " |
170 else | 169 "after %d operations [--param max-isl-operations]\n", |
171 dump_printf_loc (MSG_MISSED_OPTIMIZATION, loc, | 170 max_operations); |
172 "loop nest not optimized, ISL signalled an error\n"); | 171 else |
172 dump_printf_loc (MSG_MISSED_OPTIMIZATION, loc, | |
173 "loop nest not optimized, ISL signalled an error\n"); | |
174 } | |
173 return false; | 175 return false; |
174 } | 176 } |
175 | 177 |
176 gcc_assert (scop->original_schedule); | 178 gcc_assert (scop->original_schedule); |
177 isl_union_map *original = isl_schedule_get_map (scop->original_schedule); | 179 isl_union_map *original = isl_schedule_get_map (scop->original_schedule); |
180 isl_union_map_free (original); | 182 isl_union_map_free (original); |
181 isl_union_map_free (transformed); | 183 isl_union_map_free (transformed); |
182 | 184 |
183 if (same_schedule) | 185 if (same_schedule) |
184 { | 186 { |
185 dump_user_location_t loc = find_loop_location | 187 if (dump_enabled_p ()) |
186 (scop->scop_info->region.entry->dest->loop_father); | 188 { |
187 dump_printf_loc (MSG_NOTE, loc, | 189 dump_user_location_t loc = find_loop_location |
188 "loop nest not optimized, optimized schedule is " | 190 (scop->scop_info->region.entry->dest->loop_father); |
189 "identical to original schedule\n"); | 191 dump_printf_loc (MSG_NOTE, loc, |
192 "loop nest not optimized, optimized schedule is " | |
193 "identical to original schedule\n"); | |
194 } | |
190 if (dump_file) | 195 if (dump_file) |
191 print_schedule_ast (dump_file, scop->original_schedule, scop); | 196 print_schedule_ast (dump_file, scop->original_schedule, scop); |
192 isl_schedule_free (scop->transformed_schedule); | 197 isl_schedule_free (scop->transformed_schedule); |
193 scop->transformed_schedule = isl_schedule_copy (scop->original_schedule); | 198 scop->transformed_schedule = isl_schedule_copy (scop->original_schedule); |
194 return flag_graphite_identity || flag_loop_parallelize_all; | 199 return flag_graphite_identity || flag_loop_parallelize_all; |