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;