[IEPM] Introduce inline entry point markers
[official-gcc.git] / gcc / ChangeLog
blobb5e19ed8f5bbf1d4ad86a723e5ba95c3cae186c9
1 2018-02-09  Alexandre Oliva <aoliva@redhat.com>
3         * cfgexpand.c (expand_gimple_basic_block): Handle inline entry
4         markers.
5         * dwarf2out.c (dwarf2_debug_hooks): Enable inline_entry hook.
6         (BLOCK_INLINE_ENTRY_LABEL): New.
7         (dwarf2out_var_location): Disregard inline entry markers.
8         (inline_entry_data): New struct.
9         (inline_entry_data_hasher): New hashtable type.
10         (inline_entry_data_hasher::hash): New.
11         (inline_entry_data_hasher::equal): New.
12         (inline_entry_data_table): New variable.
13         (add_high_low_attributes): Add DW_AT_entry_pc and
14         DW_AT_GNU_entry_view attributes if a pending entry is found
15         in inline_entry_data_table.  Add old entry_pc attribute only
16         if debug nonbinding markers are disabled.
17         (gen_inlined_subroutine_die): Set BLOCK_DIE if nonbinding
18         markers are enabled.
19         (block_within_block_p, dwarf2out_inline_entry): New.
20         (dwarf2out_finish): Check that no entries remained in
21         inline_entry_data_table.
22         * final.c (reemit_insn_block_notes): Handle inline entry notes.
23         (final_scan_insn, notice_source_line): Likewise.
24         (rest_of_clean_state): Skip inline entry markers.
25         * gimple-pretty-print.c (dump_gimple_debug): Handle inline entry
26         markers.
27         * gimple.c (gimple_build_debug_inline_entry): New.
28         * gimple.h (enum gimple_debug_subcode): Add
29         GIMPLE_DEBUG_INLINE_ENTRY.
30         (gimple_build_debug_inline_entry): Declare.
31         (gimple_debug_inline_entry_p): New.
32         (gimple_debug_nonbind_marker_p): Adjust.
33         * insn-notes.def (INLINE_ENTRY): New.
34         * print-rtl.c (rtx_writer::print_rtx_operand_code_0): Handle
35         inline entry marker notes.
36         (print_insn): Likewise.
37         * rtl.h (NOTE_MARKER_P): Add INLINE_ENTRY support.
38         (INSN_DEBUG_MARKER_KIND): Likewise.
39         (GEN_RTX_DEBUG_MARKER_INLINE_ENTRY_PAT): New.
40         * tree-inline.c (expand_call_inline): Build and insert
41         debug_inline_entry stmt.
42         * tree-ssa-live.c (remove_unused_scope_block_p): Preserve
43         inline entry blocks early, if nonbind markers are enabled.
44         (dump_scope_block): Dump fragment info.
45         * var-tracking.c (reemit_marker_as_note): Handle inline entry note.
46         * doc/gimple.texi (gimple_debug_inline_entry_p): New.
47         (gimple_build_debug_inline_entry): New.
48         * doc/invoke.texi (gstatement-frontiers, gno-statement-frontiers):
49         Enable/disable inline entry points too.
50         * doc/rtl.texi (NOTE_INSN_INLINE_ENTRY): New.
51         (DEBUG_INSN): Describe inline entry markers.
53         * common.opt (gvariable-location-views): New.
54         (gvariable-location-views=incompat5): New.
55         * config.in: Rebuilt.
56         * configure: Rebuilt.
57         * configure.ac: Test assembler for view support.
58         * dwarf2asm.c (dw2_asm_output_symname_uleb128): New.
59         * dwarf2asm.h (dw2_asm_output_symname_uleb128): Declare.
60         * dwarf2out.c (var_loc_view): New typedef.
61         (struct dw_loc_list_struct): Add vl_symbol, vbegin, vend.
62         (dwarf2out_locviews_in_attribute): New.
63         (dwarf2out_locviews_in_loclist): New.
64         (dw_val_equal_p): Compare val_view_list of dw_val_class_view_lists.
65         (enum dw_line_info_opcode): Add LI_adv_address.
66         (struct dw_line_info_table): Add view.
67         (RESET_NEXT_VIEW, RESETTING_VIEW_P): New macros.
68         (DWARF2_ASM_VIEW_DEBUG_INFO): Define default.
69         (zero_view_p): New variable.
70         (ZERO_VIEW_P): New macro.
71         (output_asm_line_debug_info): New.
72         (struct var_loc_node): Add view.
73         (add_AT_view_list, AT_loc_list): New.
74         (add_var_loc_to_decl): Add view param.  Test it against last.
75         (new_loc_list): Add view params.  Record them.
76         (AT_loc_list_ptr): Handle loc and view lists.
77         (view_list_to_loc_list_val_node): New.
78         (print_dw_val): Handle dw_val_class_view_list.
79         (size_of_die): Likewise.
80         (value_format): Likewise.
81         (loc_list_has_views): New.
82         (gen_llsym): Set vl_symbol too.
83         (maybe_gen_llsym, skip_loc_list_entry): New.
84         (dwarf2out_maybe_output_loclist_view_pair): New.
85         (output_loc_list): Output view list or entries too.
86         (output_view_list_offset): New.
87         (output_die): Handle dw_val_class_view_list.
88         (output_dwarf_version): New.
89         (output_compilation_unit_header): Use it.
90         (output_skeleton_debug_sections): Likewise.
91         (output_rnglists, output_line_info): Likewise.
92         (output_pubnames, output_aranges): Update version comments.
93         (output_one_line_info_table): Output view numbers in asm comments.
94         (dw_loc_list): Determine current endview, pass it to new_loc_list.
95         Call maybe_gen_llsym.
96         (loc_list_from_tree_1): Adjust.
97         (add_AT_location_description): Create view list attribute if
98         needed, check it's absent otherwise.
99         (convert_cfa_to_fb_loc_list): Adjust.
100         (maybe_emit_file): Call output_asm_line_debug_info for test.
101         (dwarf2out_var_location): Reset views as needed.  Precompute
102         add_var_loc_to_decl args.  Call get_attr_min_length only if we have the
103         attribute.  Set view.
104         (new_line_info_table): Reset next view.
105         (set_cur_line_info_table): Call output_asm_line_debug_info for test.
106         (dwarf2out_source_line): Likewise.  Output view resets and labels to
107         the assembler, or select appropriate line info opcodes.
108         (prune_unused_types_walk_attribs): Handle dw_val_class_view_list.
109         (optimize_string_length): Catch it.  Adjust.
110         (resolve_addr): Copy vl_symbol along with ll_symbol.  Handle
111         dw_val_class_view_list, and remove it if no longer needed.
112         (hash_loc_list): Hash view numbers.
113         (loc_list_hasher::equal): Compare them.
114         (optimize_location_lists): Check whether a view list symbol is
115         needed, and whether the locview attribute is present, and
116         whether they match.  Remove the locview attribute if no longer
117         needed.
118         (index_location_lists): Call skip_loc_list_entry for test.
119         (dwarf2out_finish): Call output_asm_line_debug_info for test.
120         Use output_dwarf_version.
121         * dwarf2out.h (enum dw_val_class): Add dw_val_class_view_list.
122         (struct dw_val_node): Add val_view_list.
123         * final.c (SEEN_NEXT_VIEW): New.
124         (set_next_view_needed): New.
125         (clear_next_view_needed): New.
126         (maybe_output_next_view): New.
127         (final_start_function): Rename to...
128         (final_start_function_1): ... this.  Take pointer to FIRST,
129         add SEEN parameter.  Emit param bindings in the initial view.
130         (final_start_function): Reintroduce SEEN-less interface.
131         (final): Rename to...
132         (final_1): ... this.  Take SEEN parameter.  Output final pending
133         next view at the end.
134         (final): Reintroduce seen-less interface.
135         (final_scan_insn): Output pending next view before switching
136         sections or ending a block.  Mark the next view as needed when
137         outputting variable locations.  Notify debug backend of section
138         changes, and of location view changes.
139         (rest_of_handle_final): Adjust.
140         * toplev.c (process_options): Autodetect value for debug variable
141         location views option.  Warn on incompat5 without -gdwarf-5.
142         * doc/invoke.texi (gvariable-location-views): New.
143         (gvariable-location-views=incompat5): New.
144         (gno-variable-location-views): New.
146 2018-02-08  David Malcolm  <dmalcolm@redhat.com>
148         PR tree-optimization/84136
149         * tree-cfg.c (find_taken_edge_computed_goto): Remove assertion
150         that the result of find_edge is non-NULL.
152 2018-02-08  Sergey Shalnov  <sergey.shalnov@intel.com>
154         PR target/83008
155         * config/i386/x86-tune-costs.h (skylake_cost): Fix cost of
156         storing integer register in SImode.  Fix cost of 256 and 512
157         byte aligned SSE register store.
159 2018-02-08  Sergey Shalnov  <sergey.shalnov@intel.com>
161         * config/i386/i386.c (ix86_multiplication_cost): Fix
162         multiplication cost for TARGET_AVX512DQ.
164 2018-02-08  Marek Polacek  <polacek@redhat.com>
166         PR tree-optimization/84238
167         * tree-ssa-strlen.c (maybe_diag_stxncpy_trunc): Verify the result of
168         get_range_strlen.
170 2018-02-08  Richard Sandiford  <richard.sandiford@linaro.org>
172         PR tree-optimization/84265
173         * tree-vect-stmts.c (vectorizable_store): Don't treat
174         VMAT_CONTIGUOUS accesses as grouped.
175         (vectorizable_load): Likewise.
177 2018-02-08  Richard Sandiford  <richard.sandiford@linaro.org>
179         PR tree-optimization/81635
180         * wide-int.h (wi::round_down_for_mask, wi::round_up_for_mask): Declare.
181         * wide-int.cc (wi::round_down_for_mask, wi::round_up_for_mask)
182         (test_round_for_mask): New functions.
183         (wide_int_cc_tests): Call test_round_for_mask.
184         * tree-vrp.h (intersect_range_with_nonzero_bits): Declare.
185         * tree-vrp.c (intersect_range_with_nonzero_bits): New function.
186         * tree-data-ref.c (split_constant_offset_1): Use it to refine the
187         range returned by get_range_info.
189 2018-02-08  Jan Hubicka  <hubicka@ucw.cz>
191         PR ipa/81360
192         * cgraph.h (symtab_node::output_to_lto_symbol_table_p): Declare
193         * symtab.c: Include builtins.h
194         (symtab_node::output_to_lto_symbol_table_p): Move here
195         from lto-streamer-out.c:output_symbol_p.
196         * lto-streamer-out.c (write_symbol): Turn early exit to assert.
197         (output_symbol_p): Move all logic to symtab.c
198         (produce_symtab): Update.
200 2018-02-08  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
202         * config/s390/s390-opts.h (enum indirect_branch): Define.
203         * config/s390/s390-protos.h (s390_return_addr_from_memory)
204         (s390_indirect_branch_via_thunk)
205         (s390_indirect_branch_via_inline_thunk): Add function prototypes.
206         (enum s390_indirect_branch_type): Define.
207         * config/s390/s390.c (struct s390_frame_layout, struct
208         machine_function): Remove.
209         (indirect_branch_prez10thunk_mask, indirect_branch_z10thunk_mask)
210         (indirect_branch_table_label_no, indirect_branch_table_name):
211         Define variables.
212         (INDIRECT_BRANCH_NUM_OPTIONS): Define macro.
213         (enum s390_indirect_branch_option): Define.
214         (s390_return_addr_from_memory): New function.
215         (s390_handle_string_attribute): New function.
216         (s390_attribute_table): Add new attribute handler.
217         (s390_execute_label): Handle UNSPEC_EXECUTE_JUMP patterns.
218         (s390_indirect_branch_via_thunk): New function.
219         (s390_indirect_branch_via_inline_thunk): New function.
220         (s390_function_ok_for_sibcall): When jumping via thunk disallow
221         sibling call optimization for non z10 compiles.
222         (s390_emit_call): Force indirect branch target to be a single
223         register.  Add r1 clobber for non-z10 compiles.
224         (s390_emit_epilogue): Emit return jump via return_use expander.
225         (s390_reorg): Handle JUMP_INSNs as execute targets.
226         (s390_option_override_internal): Perform validity checks for the
227         new command line options.
228         (s390_indirect_branch_attrvalue): New function.
229         (s390_indirect_branch_settings): New function.
230         (s390_set_current_function): Invoke s390_indirect_branch_settings.
231         (s390_output_indirect_thunk_function):  New function.
232         (s390_code_end): Implement target hook.
233         (s390_case_values_threshold): Implement target hook.
234         (TARGET_ASM_CODE_END, TARGET_CASE_VALUES_THRESHOLD): Define target
235         macros.
236         * config/s390/s390.h (struct s390_frame_layout)
237         (struct machine_function): Move here from s390.c.
238         (TARGET_INDIRECT_BRANCH_NOBP_RET)
239         (TARGET_INDIRECT_BRANCH_NOBP_JUMP)
240         (TARGET_INDIRECT_BRANCH_NOBP_JUMP_THUNK)
241         (TARGET_INDIRECT_BRANCH_NOBP_JUMP_INLINE_THUNK)
242         (TARGET_INDIRECT_BRANCH_NOBP_CALL)
243         (TARGET_DEFAULT_INDIRECT_BRANCH_TABLE)
244         (TARGET_INDIRECT_BRANCH_THUNK_NAME_EXRL)
245         (TARGET_INDIRECT_BRANCH_THUNK_NAME_EX)
246         (TARGET_INDIRECT_BRANCH_TABLE): Define macros.
247         * config/s390/s390.md (UNSPEC_EXECUTE_JUMP)
248         (INDIRECT_BRANCH_THUNK_REGNUM): Define constants.
249         (mnemonic attribute): Add values which aren't recognized
250         automatically.
251         ("*cjump_long", "*icjump_long", "*basr", "*basr_r"): Disable
252         pattern for branch conversion.  Fix mnemonic attribute.
253         ("*c<code>", "*sibcall_br", "*sibcall_value_br", "*return"): Emit
254         indirect branch via thunk if requested.
255         ("indirect_jump", "<code>"): Expand patterns for branch conversion.
256         ("*indirect_jump"): Disable for branch conversion using out of
257         line thunks.
258         ("indirect_jump_via_thunk<mode>_z10")
259         ("indirect_jump_via_thunk<mode>")
260         ("indirect_jump_via_inlinethunk<mode>_z10")
261         ("indirect_jump_via_inlinethunk<mode>", "*casesi_jump")
262         ("casesi_jump_via_thunk<mode>_z10", "casesi_jump_via_thunk<mode>")
263         ("casesi_jump_via_inlinethunk<mode>_z10")
264         ("casesi_jump_via_inlinethunk<mode>", "*basr_via_thunk<mode>_z10")
265         ("*basr_via_thunk<mode>", "*basr_r_via_thunk_z10")
266         ("*basr_r_via_thunk", "return<mode>_prez10"): New pattern.
267         ("*indirect2_jump"): Disable for branch conversion.
268         ("casesi_jump"): Turn into expander and expand patterns for branch
269         conversion.
270         ("return_use"): New expander.
271         ("*return"): Emit return via thunk and rename it to ...
272         ("*return<mode>"): ... this one.
273         * config/s390/s390.opt: Add new options and and enum for the
274         option values.
276 2018-02-08  Richard Sandiford  <richard.sandiford@linaro.org>
278         * lra-constraints.c (match_reload): Unconditionally use
279         gen_lowpart_SUBREG, rather than selecting between that
280         and equivalent gen_rtx_SUBREG code.
282 2018-02-08  Richard Biener  <rguenther@suse.de>
284         PR tree-optimization/84233
285         * tree-ssa-phiprop.c (propagate_with_phi): Use separate
286         changed flag instead of boguously re-using phi_inserted.
288 2018-02-08  Martin Jambor  <mjambor@suse.cz>
290         * hsa-gen.c (get_symbol_for_decl): Set program allocation for
291         static local variables.
293 2018-02-08  Richard Biener  <rguenther@suse.de>
295         PR tree-optimization/84278
296         * tree-vect-stmts.c (vectorizable_store): When looking for
297         smaller vector types to perform grouped strided loads/stores
298         make sure the mode is supported by the target.
299         (vectorizable_load): Likewise.
301 2018-02-08  Wilco Dijkstra  <wdijkstr@arm.com>
303         * config/aarch64/aarch64.c (aarch64_components_for_bb):
304         Increase LDP/STP opportunities by adding adjacent callee-saves.
306 2018-02-08  Wilco Dijkstra  <wdijkstr@arm.com>
308         PR rtl-optimization/84068
309         PR rtl-optimization/83459
310         * haifa-sched.c (rank_for_schedule): Fix SCHED_PRESSURE_MODEL sorting.
312 2018-02-08  Aldy Hernandez  <aldyh@redhat.com>
314         PR tree-optimization/84224
315         * gimple-ssa-warn-alloca.c (pass_walloca::execute): Remove assert.
316         * calls.c (gimple_alloca_call_p): Only return TRUE when we have
317         non-zero arguments.
319 2018-02-07  Iain Sandoe  <iain@codesourcery.com>
321         PR target/84113
322         * config/rs6000/altivec.md (*restore_world): Remove LR use.
323         * config/rs6000/predicates.md (restore_world_operation): Adjust op
324         count, remove one USE.
326 2018-02-07  Michael Meissner  <meissner@linux.vnet.ibm.com>
328         * doc/install.texi (Configuration): Document the
329         --with-long-double-format={ibm,ieee} PowerPC configuration
330         options.
332         PR target/84154
333         * config/rs6000/rs6000.md (fix_trunc<SFDF:mode><QHI:mode>2):
334         Convert from define_expand to be define_insn_and_split.  Rework
335         float/double/_Float128 conversions to QI/HI/SImode to work with
336         both ISA 2.07 (power8) or ISA 3.0 (power9).  Fix regression where
337         conversions to QI/HImode types did a store and then a load to
338         truncate the value.  For conversions to VSX registers, don't split
339         the insn, instead emit the code directly.  Use the code iterator
340         any_fix to combine signed and unsigned conversions.
341         (fix<uns>_trunc<SFDF:mode>si2_p8): Likewise.
342         (fixuns_trunc<SFDF:mode><QHI:mode>2): Likewise.
343         (fix_trunc<IEEE128:mode><QHI:mode>2): Likewise.
344         (fix<uns>_trunc<SFDF:mode><QHI:mode>2): Likewise.
345         (fix_<mode>di2_hw): Likewise.
346         (fixuns_<mode>di2_hw): Likewise.
347         (fix_<mode>si2_hw): Likewise.
348         (fixuns_<mode>si2_hw): Likewise.
349         (fix<uns>_<IEEE128:mode><SDI:mode>2_hw): Likewise.
350         (fix<uns>_trunc<IEEE128:mode><QHI:mode>2): Likewise.
351         (fctiw<u>z_<mode>_smallint): Rename fctiw<u>z_<mode>_smallint to
352         fix<uns>_trunc<SFDF:mode>si2_p8.
353         (fix_trunc<SFDF:mode><QHI:mode>2_internal): Delete, no longer
354         used.
355         (fixuns_trunc<SFDF:mode><QHI:mode>2_internal): Likewise.
356         (fix<uns>_<mode>_mem): Likewise.
357         (fctiw<u>z_<mode>_mem): Likewise.
358         (fix<uns>_<mode>_mem): Likewise.
359         (fix<uns>_trunc<SFDF:mode><QHSI:mode>2_mem): On ISA 3.0, prevent
360         the register allocator from doing a direct move to the GPRs to do
361         a store, and instead use the ISA 3.0 store byte/half-word from
362         vector register instruction.  For IEEE 128-bit floating point,
363         also optimize stores of 32-bit ints.
364         (fix<uns>_trunc<IEEE128:mode><QHSI:mode>2_mem): Likewise.
366 2018-02-07  Alan Hayward  <alan.hayward@arm.com>
368         * genextract.c (push_pathstr_operand): New function to support
369         [a-zA-Z].
370         (walk_rtx): Call push_pathstr_operand.
371         (print_path): Support [a-zA-Z].
373 2018-02-07  Richard Biener  <rguenther@suse.de>
375         PR tree-optimization/84037
376         * tree-vectorizer.h (struct _loop_vec_info): Add ivexpr_map member.
377         (cse_and_gimplify_to_preheader): Declare.
378         (vect_get_place_in_interleaving_chain): Likewise.
379         * tree-vect-loop.c (_loop_vec_info::_loop_vec_info): Initialize
380         ivexpr_map.
381         (_loop_vec_info::~_loop_vec_info): Delete it.
382         (cse_and_gimplify_to_preheader): New function.
383         * tree-vect-slp.c (vect_get_place_in_interleaving_chain): Export.
384         * tree-vect-stmts.c (vectorizable_store): CSE base and steps.
385         (vectorizable_load): Likewise.  For grouped stores always base
386         the IV on the first element.
387         * tree-vect-loop-manip.c (vect_loop_versioning): Unshare versioning
388         condition before gimplifying.
390 2018-02-07  Jakub Jelinek  <jakub@redhat.com>
392         * tree-eh.c (operation_could_trap_helper_p): Ignore honor_trapv for
393         *DIV_EXPR and *MOD_EXPR.
395 2018-02-07  H.J. Lu  <hongjiu.lu@intel.com>
397         PR target/84248
398         * config/i386/i386.c (ix86_option_override_internal): Mask out
399         the CF_SET bit when checking -fcf-protection.
401 2018-02-07  Tom de Vries  <tom@codesourcery.com>
403         PR libgomp/84217
404         * omp-expand.c (expand_oacc_collapse_init): Ensure diff_type is large
405         enough.
407 2018-02-07  Richard Biener  <rguenther@suse.de>
409         PR tree-optimization/84204
410         * tree-chrec.c (chrec_fold_plus_1): Remove size limiting in
411         this place.
413         PR tree-optimization/84205
414         * graphite-isl-ast-to-gimple.c (binary_op_to_tree): Also
415         special-case isl_ast_op_zdiv_r.
417         PR tree-optimization/84223
418         * graphite-scop-detection.c (gather_bbs::before_dom_children):
419         Only add conditions from within the region.
420         (gather_bbs::after_dom_children): Adjust.
422 2018-02-07  Georg-Johann Lay  <avr@gjlay.de>
424         PR target/84209
425         * config/avr/avr.h (GENERAL_REGNO_P, GENERAL_REG_P): New macros.
426         * config/avr/avr.md: Only post-reload split REG-REG moves if
427         either register is REGERAL_REG_P.
429 2018-02-07  Jakub Jelinek  <jakub@redhat.com>
431         PR tree-optimization/84235
432         * tree-ssa-scopedtables.c
433         (avail_exprs_stack::simplify_binary_operation): Fir MINUS_EXPR, punt
434         if the subtraction is performed in floating point type where NaNs are
435         honored.  For *DIV_EXPR, punt for ALL_FRACT_MODE_Ps where we can't
436         build 1.  Formatting fix.
438 2018-02-06  Jakub Jelinek  <jakub@redhat.com>
440         PR target/84146
441         * config/i386/i386.c (rest_of_insert_endbranch): Only skip
442         NOTE_INSN_CALL_ARG_LOCATION after a call, not anything else,
443         and skip it regardless of bb boundaries.  Use CALL_P macro,
444         don't test INSN_P (insn) together with CALL_P or JUMP_P check
445         unnecessarily, formatting fix.
447 2018-02-06  Michael Collison  <michael.collison@arm.com>
449         * config/arm/thumb2.md:
450         (*thumb2_mov_negscc): Split only if TARGET_THUMB2 && !arm_restrict_it.
451         (*thumb_mov_notscc): Ditto.
453 2018-02-06  Michael Meissner  <meissner@linux.vnet.ibm.com>
455         PR target/84154
456         * config/rs6000/rs6000.md (su code attribute): Use "u" for
457         unsigned_fix, not "s".
459 2018-02-06  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
461         * configure.ac (gcc_fn_eh_frame_ro): New function.
462         (gcc_cv_as_cfi_directive): Check both 32 and 64-bit assembler for
463         correct .eh_frame permissions.
464         * configure: Regenerate.
466 2018-02-06  Andrew Jenner  <andrew@codeourcery.com>
468         * doc/invoke.texi: Add section for the PowerPC SPE backend. Remove
469         irrelevant options.
471 2018-02-06  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
473         * config/rs6000/rs6000.c (rs6000_option_override_internal):
474         Display warning message for -mno-speculate-indirect-jumps.
476 2018-02-06  Andrew Jenner  <andrew@codesourcery.com>
478         * config/powerpcspe/powerpcspe.opt: (msimple-fpu, mfpu) Add
479         Undocumented.
480         * config/powerpcspe/sysv4.opt (mbit-align): Likewise.
482 2018-02-06  Aldy Hernandez  <aldyh@redhat.com>
484         PR tree-optimization/84225
485         * tree-eh.c (find_trapping_overflow): Only call
486         operation_no_trapping_overflow when ANY_INTEGRAL_TYPE_P.
488 2018-02-06  Igor Tsimbalist  <igor.v.tsimbalist@intel.com>
490         PR target/84145
491         * config/i386/i386.c: Reimplement the check of possible options
492         -mibt/-mshstk conbination. Change error messages.
493         * doc/invoke.texi: Fix a typo: remove extra '='.
495 2018-02-06  Marek Polacek  <polacek@redhat.com>
497         PR tree-optimization/84228
498         * tree-ssa-strlen.c (maybe_diag_stxncpy_trunc): Skip debug statements.
500 2018-02-06  Tamar Christina  <tamar.christina@arm.com>
502         PR target/82641
503         * config/arm/arm.c (arm_print_asm_arch_directives): Record already
504         emitted arch directives.
505         * config/arm/arm-c.c (arm_cpu_builtins): Undefine __ARM_ARCH and
506         __ARM_FEATURE_COPROC before changing architectures.
508 2018-02-06  Richard Biener  <rguenther@suse.de>
510         * config/i386/i386.c (print_reg): Fix typo.
511         (ix86_loop_unroll_adjust): Do not unroll beyond the original nunroll.
513 2018-02-06  Eric Botcazou  <ebotcazou@adacore.com>
515         * configure: Regenerate.
517 2018-02-05  Martin Sebor  <msebor@redhat.com>
519         PR tree-optimization/83369
520         * tree-ssa-ccp.c (pass_post_ipa_warn::execute): Use %G to print
521         inlining context.
523 2018-02-05  Martin Liska  <mliska@suse.cz>
525         * doc/invoke.texi: Cherry-pick upstream r323995.
527 2018-02-05  Richard Sandiford  <richard.sandiford@linaro.org>
529         * ira.c (ira_init_register_move_cost): Adjust comment.
531 2018-02-05  Martin Liska  <mliska@suse.cz>
533         PR gcov-profile/84137
534         * doc/gcov.texi: Fix typo in documentation.
536 2018-02-05  Martin Liska  <mliska@suse.cz>
538         PR gcov-profile/83879
539         * doc/gcov.texi: Document necessity of --dynamic-list-data when
540         using dlopen functionality.
542 2018-02-05  Olga Makhotina  <olga.makhotina@intel.com>
544         * config/i386/avx512dqintrin.h (_mm_mask_range_sd, _mm_maskz_range_sd,
545         _mm_mask_range_round_sd, _mm_maskz_range_round_sd, _mm_mask_range_ss,
546         _mm_maskz_range_ss, _mm_mask_range_round_ss,
547         _mm_maskz_range_round_ss): New intrinsics.
548         (__builtin_ia32_rangesd128_round)
549         (__builtin_ia32_rangess128_round): Remove.
550         (__builtin_ia32_rangesd128_mask_round,
551         __builtin_ia32_rangess128_mask_round): New builtins.
552         * config/i386/i386-builtin.def (__builtin_ia32_rangesd128_round,
553         __builtin_ia32_rangess128_round): Remove.
554         (__builtin_ia32_rangesd128_mask_round,
555         __builtin_ia32_rangess128_mask_round): New builtins.
556         * config/i386/sse.md (ranges<mode><round_saeonly_name>): Renamed to ...
557         (ranges<mode><mask_scalar_name><round_saeonly_scalar_name>): ... this.
558         ((match_operand:VF_128 2 "<round_saeonly_nimm_predicate>"
559         "<round_saeonly_constraint>")): Changed to ...
560         ((match_operand:VF_128 2 "<round_saeonly_scalar_nimm_predicate>"
561         "<round_saeonly_scalar_constraint>")): ... this.
562         ("vrange<ssescalarmodesuffix>\t{%3, <round_saeonly_op4>%2, %1, %0|
563         %0, %1, %2<round_saeonly_op4>, %3}"): Changed to ...
564         ("vrange<ssescalarmodesuffix>\t{%3, <round_saeonly_scalar_mask_op4>%2,
565         %1, %0<mask_scalar_operand4>|%0<mask_scalar_operand4>, %1,
566         %2<round_saeonly_scalar_mask_op4>, %3}"): ... this.
568 2018-02-02  Andrew Jenner  <andrew@codesourcery.com>
570         * config/powerpcspe/powerpcspe.opt: Add Undocumented to irrelevant
571         options.
572         * config/powerpcspe/powerpcspe-tables.opt (rs6000_cpu_opt_value):
573         Remove all values except native, 8540 and 8548.
575 2018-02-02  H.J. Lu  <hongjiu.lu@intel.com>
577         * config/i386/i386.c (ix86_output_function_return): Pass
578         INVALID_REGNUM, instead of -1, as invalid register number to
579         indirect_thunk_name and output_indirect_thunk.
581 2018-02-02  Julia Koval  <julia.koval@intel.com>
583         * config.gcc: Add -march=icelake.
584         * config/i386/driver-i386.c (host_detect_local_cpu): Detect icelake.
585         * config/i386/i386-c.c (ix86_target_macros_internal): Handle icelake.
586         * config/i386/i386.c (processor_costs): Add m_ICELAKE.
587         (PTA_ICELAKE, PTA_AVX512VNNI, PTA_GFNI, PTA_VAES, PTA_AVX512VBMI2,
588         PTA_VPCLMULQDQ, PTA_RDPID, PTA_AVX512BITALG): New.
589         (processor_target_table): Add icelake.
590         (ix86_option_override_internal): Handle new PTAs.
591         (get_builtin_code_for_version): Handle icelake.
592         (M_INTEL_COREI7_ICELAKE): New.
593         (fold_builtin_cpu): Handle icelake.
594         * config/i386/i386.h (TARGET_ICELAKE, PROCESSOR_ICELAKE): New.
595         * doc/invoke.texi: Add -march=icelake.
597 2018-02-02  Julia Koval  <julia.koval@intel.com>
599         * config/i386/i386.c (ix86_option_override_internal): Change flags type
600         to wide_int_bitmask.
601         * wide-int-bitmask.h: New.
603 2018-02-02  Igor Tsimbalist  <igor.v.tsimbalist@intel.com>
605         PR target/84066
606         * config/i386/i386.md: Replace Pmode with word_mode in
607         builtin_setjmp_setup and builtin_longjmp to support x32.
609 2018-02-01  Peter Bergner  <bergner@vnet.ibm.com>
611         PR target/56010
612         PR target/83743
613         * config/rs6000/driver-rs6000.c: #include "diagnostic.h".
614         #include "opts.h".
615         (rs6000_supported_cpu_names): New static variable.
616         (linux_cpu_translation_table): Likewise.
617         (elf_platform) <cpu>: Define new static variable and use it.
618         Translate kernel AT_PLATFORM name to canonical name if needed.
619         Error if platform name is unknown.
621 2018-02-01  Aldy Hernandez  <aldyh@redhat.com>
623         PR target/84089
624         * config/pa/predicates.md (base14_operand): Handle E_VOIDmode.
626 2018-02-01  Jeff Law  <law@redhat.com>
628         PR target/84128
629         * config/i386/i386.c (release_scratch_register_on_entry): Add new
630         OFFSET and RELEASE_VIA_POP arguments.  Use SP+OFFSET to restore
631         the scratch if RELEASE_VIA_POP is false.
632         (ix86_adjust_stack_and_probe_stack_clash): Un-constify SIZE.
633         If we have to save a temporary register, decrement SIZE appropriately.
634         Pass new arguments to release_scratch_register_on_entry.
635         (ix86_adjust_stack_and_probe): Likewise.
636         (ix86_emit_probe_stack_range): Pass new arguments to
637         release_scratch_register_on_entry.
639 2018-02-01  Uros Bizjak  <ubizjak@gmail.com>
641         PR rtl-optimization/84157
642         * combine.c (change_zero_ext): Use REG_P predicate in
643         front of HARD_REGISTER_P predicate.
645 2018-02-01  Georg-Johann Lay  <avr@gjlay.de>
647         * config/avr/avr.c (avr_option_override): Move disabling of
648         -fdelete-null-pointer-checks to...
649         * common/config/avr/avr-common.c (avr_option_optimization_table):
650         ...here.
652 2018-02-01  Richard Sandiford  <richard.sandiford@linaro.org>
654         PR tree-optimization/81635
655         * tree-data-ref.c (split_constant_offset_1): For types that
656         wrap on overflow, try to use range info to prove that wrapping
657         cannot occur.
659 2018-02-01  Renlin Li  <renlin.li@arm.com>
661         PR target/83370
662         * config/aarch64/aarch64.c (aarch64_class_max_nregs): Handle
663         TAILCALL_ADDR_REGS.
664         (aarch64_register_move_cost): Likewise.
665         * config/aarch64/aarch64.h (reg_class): Rename CALLER_SAVE_REGS to
666         TAILCALL_ADDR_REGS.
667         (REG_CLASS_NAMES): Likewise.
668         (REG_CLASS_CONTENTS): Rename CALLER_SAVE_REGS to
669         TAILCALL_ADDR_REGS. Remove IP registers.
670         * config/aarch64/aarch64.md (Ucs): Update register constraint.
672 2018-02-01  Richard Biener  <rguenther@suse.de>
674         * domwalk.h (dom_walker::dom_walker): Add additional constructor
675         for specifying RPO order and allow NULL for that.
676         * domwalk.c (dom_walker::dom_walker): Likewise.
677         (dom_walker::walk): Handle NULL RPO order.
678         * tree-into-ssa.c (rewrite_dom_walker): Do not walk dom children
679         in RPO order.
680         (rewrite_update_dom_walker): Likewise.
681         (mark_def_dom_walker): Likewise.
683 2018-02-01  Richard Sandiford  <richard.sandiford@linaro.org>
685         * config/aarch64/aarch64-protos.h (aarch64_split_sve_subreg_move)
686         (aarch64_maybe_expand_sve_subreg_move): Declare.
687         * config/aarch64/aarch64.md (UNSPEC_REV_SUBREG): New unspec.
688         * config/aarch64/predicates.md (aarch64_any_register_operand): New
689         predicate.
690         * config/aarch64/aarch64-sve.md (mov<mode>): Optimize subreg moves
691         that are semantically a reverse operation.
692         (*aarch64_sve_mov<mode>_subreg_be): New pattern.
693         * config/aarch64/aarch64.c (aarch64_maybe_expand_sve_subreg_move):
694         (aarch64_replace_reg_mode, aarch64_split_sve_subreg_move): New
695         functions.
696         (aarch64_can_change_mode_class): For big-endian, forbid changes
697         between two SVE modes if they have different element sizes.
699 2018-02-01  Richard Sandiford  <richard.sandiford@linaro.org>
701         * config/aarch64/aarch64.c (aarch64_expand_sve_const_vector): Prefer
702         the TImode handling for big-endian targets.
704 2018-02-01  Richard Sandiford  <richard.sandiford@linaro.org>
706         * config/aarch64/aarch64-sve.md (sve_ld1rq): Replace with...
707         (*sve_ld1rq<Vesize>): ... this new pattern.  Handle all element sizes,
708         not just bytes.
709         * config/aarch64/aarch64.c (aarch64_expand_sve_widened_duplicate):
710         Remove BSWAP handing for big-endian targets and use the form of
711         LD1RQ appropariate for the mode.
713 2018-02-01  Richard Sandiford  <richard.sandiford@linaro.org>
715         * config/aarch64/aarch64.c (aarch64_simd_valid_immediate): Handle
716         all CONST_VECTOR_DUPLICATE_P vectors, not just those with a single
717         duplicated element.
719 2018-02-01  Richard Sandiford  <richard.sandiford@linaro.org>
721         PR tearget/83845
722         * config/aarch64/aarch64.c (aarch64_secondary_reload): Tighten
723         check for operands that need to go through aarch64_sve_reload_be.
725 2018-02-01  Jakub Jelinek  <jakub@redhat.com>
727         PR tree-optimization/81661
728         PR tree-optimization/84117
729         * tree-eh.h (rewrite_to_non_trapping_overflow): Declare.
730         * tree-eh.c: Include gimplify.h.
731         (find_trapping_overflow, replace_trapping_overflow,
732         rewrite_to_non_trapping_overflow): New functions.
733         * tree-vect-loop.c: Include tree-eh.h.
734         (vect_get_loop_niters): Use rewrite_to_non_trapping_overflow.
735         * tree-data-ref.c: Include tree-eh.h.
736         (get_segment_min_max): Use rewrite_to_non_trapping_overflow.
738 2018-01-31  Uros Bizjak  <ubizjak@gmail.com>
740         PR rtl-optimization/84123
741         * combine.c (change_zero_ext): Check if hard register satisfies
742         can_change_dest_mode before calling gen_lowpart_SUBREG.
744 2018-01-31  Vladimir Makarov  <vmakarov@redhat.com>
746         PR target/82444
747         * ira.c (ira_init_register_move_cost): Remove assert.
749 2018-01-31  Eric Botcazou  <ebotcazou@adacore.com>
751         PR rtl-optimization/84071
752         * doc/tm.texi.in (WORD_REGISTER_OPERATIONS): Add explicit case.
753         * doc/tm.texi: Regenerate.
755 2018-01-31  Richard Biener  <rguenther@suse.de>
757         PR tree-optimization/84132
758         * tree-data-ref.c (analyze_miv_subscript): Properly
759         check whether evolution_function_is_affine_multivariate_p
760         before calling gcd_of_steps_may_divide_p.
762 2018-01-31  Julia Koval  <julia.koval@intel.com>
764         PR target/83618
765         * config/i386/i386.c (ix86_expand_builtin): Handle IX86_BUILTIN_RDPID.
766         * config/i386/i386.md (rdpid_rex64) New.
767         (rdpid): Make 32bit only.
769 2018-01-29  Aldy Hernandez  <aldyh@redhat.com>
771         PR lto/84105
772         * tree-pretty-print.c (dump_generic_node): Handle a TYPE_NAME with
773         an IDENTIFIER_NODE for FUNCTION_TYPE's.
775 2018-01-31  Eric Botcazou  <ebotcazou@adacore.com>
777         Revert
778         2018-01-12  Eric Botcazou  <ebotcazou@adacore.com>
780         * config/sparc/sparc.md (vxworks_load_got): Set the GOT register.
782 2018-01-31  Eric Botcazou  <ebotcazou@adacore.com>
784         PR rtl-optimization/84071
785         * combine.c (record_dead_and_set_regs_1): Record the source unmodified
786         for a paradoxical SUBREG on a WORD_REGISTER_OPERATIONS target.
788 2018-01-31  Claudiu Zissulescu  <claziss@synopsys.com>
790         * config/arc/arc.c (arc_handle_aux_attribute): New function.
791         (arc_attribute_table): Add 'aux' attribute.
792         (arc_in_small_data_p): Consider aux like variables.
793         (arc_is_aux_reg_p): New function.
794         (arc_asm_output_aligned_decl_local): Ignore 'aux' like variables.
795         (arc_get_aux_arg): New function.
796         (prepare_move_operands): Handle aux-register access.
797         (arc_handle_aux_attribute): New function.
798         * doc/extend.texi (ARC Variable attributes): Add subsection.
800 2018-01-31  Claudiu Zissulescu  <claziss@synopsys.com>
802         * config/arc/arc-protos.h (arc_is_uncached_mem_p): Function proto.
803         * config/arc/arc.c (arc_handle_uncached_attribute): New function.
804         (arc_attribute_table): Add 'uncached' attribute.
805         (arc_print_operand): Print '.di' flag for uncached memory
806         accesses.
807         (arc_in_small_data_p): Do not consider for small data the uncached
808         types.
809         (arc_is_uncached_mem_p): New function.
810         * config/arc/predicates.md (compact_store_memory_operand): Check
811         for uncached memory accesses.
812         (nonvol_nonimm_operand): Likewise.
813         * gcc/doc/extend.texi (ARC Type Attribute): New subsection.
815 2018-01-31  Jakub Jelinek  <jakub@redhat.com>
817         PR c/84100
818         * common.opt (falign-functions=, falign-jumps=, falign-labels=,
819         falign-loops=): Add Optimization flag.
821 2018-01-30  Jeff Law  <law@redhat.com>
823         PR target/84064
824         * i386.c (ix86_adjust_stack_and_probe_stack_clash): New argument
825         INT_REGISTERS_SAVED.  Check it prior to calling
826         get_scratch_register_on_entry.
827         (ix86_adjust_stack_and_probe): Similarly.
828         (ix86_emit_probe_stack_range): Similarly.
829         (ix86_expand_prologue): Corresponding changes.
831 2018-01-30  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
833         PR target/40411
834         * config/sol2.h (STARTFILE_ARCH_SPEC): Use -std=c*,
835         -std=iso9899:199409 instead of -pedantic to select values-Xc.o.
837 2018-01-30  Vladimir Makarov  <vmakarov@redhat.com>
839         PR target/84112
840         * lra-constraints.c (curr_insn_transform): Process AND in the
841         address.
843 2018-01-30  Jakub Jelinek  <jakub@redhat.com>
845         PR rtl-optimization/83986
846         * sched-deps.c (sched_analyze_insn): For frame related insns, add anti
847         dependence against last_pending_memory_flush in addition to
848         pending_jump_insns.
850 2018-01-30  Alexandre Oliva <aoliva@redhat.com>
852         PR tree-optimization/81611
853         * tree-ssa-dom.c (simple_iv_increment_p): Skip intervening
854         copies.
856 2018-01-30  Aaron Sawdey  <acsawdey@linux.vnet.ibm.com>
858         * config/rs6000/rs6000.c (rs6000_internal_arg_pointer): Only return
859         a reg rtx.
861 2018-01-30  Richard Biener  <rguenther@suse.de>
862             Jakub Jelinek  <jakub@redhat.com>
864         PR tree-optimization/84111
865         * tree-ssa-loop-ivcanon.c (tree_unroll_loops_completely_1): Skip
866         inner loops added during recursion, as they don't have up-to-date
867         SSA form.
869 2018-01-30  Jan Hubicka  <hubicka@ucw.cz>
871         PR ipa/81360
872         * ipa-inline.c (can_inline_edge_p): Break out late tests to...
873         (can_inline_edge_by_limits_p): ... here.
874         (can_early_inline_edge_p, check_callers,
875         update_caller_keys, update_callee_keys, recursive_inlining,
876         add_new_edges_to_heap, speculation_useful_p,
877         inline_small_functions,
878         inline_small_functions, flatten_function,
879         inline_to_all_callers_1): Update.
881 2018-01-30  Jan Hubicka  <hubicka@ucw.cz>
883         * profile-count.c (profile_count::combine_with_ipa_count): Handle
884         zeros correctly.
886 2018-01-30  Richard Biener  <rguenther@suse.de>
888         PR tree-optimization/83008
889         * tree-vect-slp.c (vect_analyze_slp_cost_1): Properly cost
890         invariant and constant vector uses in stmts when they need
891         more than one stmt.
893 2018-01-30  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
895         PR bootstrap/84017
896         * configure.ac (gcc_cv_as_shf_merge): Disable on Solaris 10/x86.
897         * configure: Regenerate.
899 2018-01-30  Richard Sandiford  <richard.sandiford@linaro.org>
901         * config/aarch64/aarch64-sve.md (*vec_extract<mode><Vel>_0): New
902         pattern.
903         (*vec_extract<mode><Vel>_v128): Require a nonzero lane number.
904         Use gen_rtx_REG rather than gen_lowpart.
906 2018-01-30  Richard Sandiford  <richard.sandiford@linaro.org>
908         * lra-constraints.c (match_reload): Use subreg_lowpart_offset
909         rather than 0 when creating partial subregs.
911 2018-01-30  Richard Sandiford  <richard.sandiford@linaro.org>
913         * vec-perm-indices.c (vec_perm_indices::series_p): Give examples
914         of usage.
916 2018-01-29  Michael Meissner  <meissner@linux.vnet.ibm.com>
918         PR target/81550
919         * config/rs6000/rs6000.c (rs6000_setup_reg_addr_masks): If DFmode
920         and SFmode can go in Altivec registers (-mcpu=power7 for DFmode,
921         -mcpu=power8 for SFmode) don't set the PRE_INCDEC or PRE_MODIFY
922         flags.  This restores the settings used before the 2017-07-24.
923         Turning off pre increment/decrement/modify allows IVOPTS to
924         optimize DF/SF loops where the index is an int.
926 2018-01-29  Richard Biener <rguenther@suse.de>
927             Kelvin Nilsen  <kelvin@gcc.gnu.org>
929         PR bootstrap/80867
930         * tree-vect-stmts.c (vectorizable_call): Don't call
931         targetm.vectorize_builtin_md_vectorized_function if callee is
932         NULL.
934 2018-01-22 Carl Love <cel@us.ibm.com>
936         * doc/extend.tex: Fix typo in second arg in
937         __builtin_bcdadd_{lt|eq|gt|ov} and __builtin_bcdsub_{lt|eq|gt|ov}.
939 2018-01-29  Richard Biener  <rguenther@suse.de>
941         PR tree-optimization/84086
942         * tree-ssanames.c: Include cfgloop.h and tree-scalar-evolution.h.
943         (flush_ssaname_freelist): When SSA names were released reset
944         the SCEV hash table.
946 2018-01-29  Richard Biener  <rguenther@suse.de>
948         PR tree-optimization/84057
949         * tree-ssa-loop-ivcanon.c (unloop_loops): Deal with already
950         removed paths when removing edges.
952 2018-01-27  H.J. Lu  <hongjiu.lu@intel.com>
954         * doc/invoke.texi: Replace -mfunction-return==@var{choice} with
955         -mfunction-return=@var{choice}.
957 2018-01-27  Bernd Edlinger  <bernd.edlinger@hotmail.de>
959         PR diagnostic/84034
960         * diagnostic-show-locus.c (get_line_width_without_trailing_whitespace):
961         Handle CR like TAB.
962         (layout::print_source_line): Likewise.
963         (test_get_line_width_without_trailing_whitespace): Add test cases.
965 2018-01-27  Jakub Jelinek  <jakub@redhat.com>
967         PR middle-end/84040
968         * sched-deps.c (sched_macro_fuse_insns): Return immediately for
969         debug insns.
971 2018-01-26  Jim Wilson  <jimw@sifive.com>
973         * config/riscv/riscv.h (MAX_FIXED_MODE_SIZE): New.
975         * config/riscv/elf.h (LIB_SPEC): Don't include -lgloss when nosys.specs
976         specified.
978 2018-01-26  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
980         * config/aarch64/aarch64.md: Add peepholes for CMP + SUB -> SUBS
981         and CMP + SUB-immediate -> SUBS.
983 2018-01-26  Martin Sebor  <msebor@redhat.com>
985         PR tree-optimization/83896
986         * tree-ssa-strlen.c (get_string_len): Rename...
987         (get_string_cst_length): ...to this.  Return HOST_WIDE_INT.
988         Avoid assuming length is constant.
989         (handle_char_store): Use HOST_WIDE_INT for string length.
991 2018-01-26  Uros Bizjak  <ubizjak@gmail.com>
993         PR target/81763
994         * config/i386/i386.md (*andndi3_doubleword): Add earlyclobber
995         to (=&r,r,rm) alternative. Add (=r,0,rm) and (=r,r,0) alternatives.
997 2018-01-26  Richard Biener  <rguenther@suse.de>
999         PR rtl-optimization/84003
1000         * dse.c (record_store): Only record redundant stores when
1001         the earlier store aliases at least all accesses the later one does.
1003 2018-01-26  Jakub Jelinek  <jakub@redhat.com>
1005         PR rtl-optimization/83985
1006         * dce.c (deletable_insn_p): Return false for separate shrink wrapping
1007         REG_CFA_RESTORE insns.
1008         (delete_unmarked_insns): Don't ignore separate shrink wrapping
1009         REG_CFA_RESTORE insns here.
1011         PR c/83989
1012         * gimple-ssa-warn-restrict.c (builtin_memref::builtin_memref): Don't
1013         use SSA_NAME_VAR as base for SSA_NAMEs with non-NULL SSA_NAME_VAR.
1015 2018-01-26  Claudiu Zissulescu  <claziss@synopsys.com>
1017         * config/arc/arc-arch.h (arc_tune_attr): Add ARC_TUNE_CORE_3.
1018         * config/arc/arc.c (arc_sched_issue_rate): Use ARC_TUNE_... .
1019         (arc_init): Likewise.
1020         (arc_override_options): Likewise.
1021         (arc_file_start): Choose Tag_ARC_CPU_variation based on arc_tune
1022         value.
1023         (hwloop_fail): Use TARGET_DBNZ when we want to check for dbnz insn
1024         support.
1025         * config/arc/arc.h (TARGET_DBNZ): Define.
1026         * config/arc/arc.md (attr tune): Add core_3, use ARC_TUNE_... to
1027         properly set the tune attribute.
1028         (dbnz): Use TARGET_DBNZ guard.
1029         * config/arc/arc.opt (mtune): Add core3 option.
1031 2018-01-26  Claudiu Zissulescu  <claziss@synopsys.com>
1033         * config/arc/arc.c (arc_delegitimize_address_0): Refactored to
1034         recognize new pic like addresses.
1035         (arc_delegitimize_address): Clean up.
1037 2018-01-26  Claudiu Zissulescu  <claziss@synopsys.com>
1039         * config/arc/arc-arches.def: Option mrf16 valid for all
1040         architectures.
1041         * config/arc/arc-c.def (__ARC_RF16__): New predefined macro.
1042         * config/arc/arc-cpus.def (em_mini): New cpu with rf16 on.
1043         * config/arc/arc-options.def (FL_RF16): Add mrf16 option.
1044         * config/arc/arc-tables.opt: Regenerate.
1045         * config/arc/arc.c (arc_conditional_register_usage): Handle
1046         reduced register file case.
1047         (arc_file_start): Set must have build attributes.
1048         * config/arc/arc.h (MAX_ARC_PARM_REGS): Conditional define using
1049         mrf16 option value.
1050         * config/arc/arc.opt (mrf16): Add new option.
1051         * config/arc/elf.h (ATTRIBUTE_PCS): Define.
1052         * config/arc/genmultilib.awk: Handle new mrf16 option.
1053         * config/arc/linux.h (ATTRIBUTE_PCS): Define.
1054         * config/arc/t-multilib: Regenerate.
1055         * doc/invoke.texi (ARC Options): Document mrf16 option.
1057 2018-01-26  Claudiu Zissulescu  <claziss@synopsys.com>
1059         * config/arc/arc-protos.h: Add arc_is_secure_call_p proto.
1060         * config/arc/arc.c (arc_handle_secure_attribute): New function.
1061         (arc_attribute_table): Add 'secure_call' attribute.
1062         (arc_print_operand): Print secure call operand.
1063         (arc_function_ok_for_sibcall): Don't optimize tail calls when
1064         secure.
1065         (arc_is_secure_call_p): New function.  * config/arc/arc.md
1066         (call_i): Add support for sjli instruction.
1067         (call_value_i): Likewise.
1068         * config/arc/constraints.md (Csc): New constraint.
1070 2018-01-26  Claudiu Zissulescu  <claziss@synopsys.com>
1071             John Eric Martin <John.Martin@emmicro-us.com>
1073         * config/arc/arc-protos.h: Add arc_is_jli_call_p proto.
1074         * config/arc/arc.c (_arc_jli_section): New struct.
1075         (arc_jli_section): New type.
1076         (rc_jli_sections): New static variable.
1077         (arc_handle_jli_attribute): New function.
1078         (arc_attribute_table): Add jli_always and jli_fixed attribute.
1079         (arc_file_end): New function.
1080         (TARGET_ASM_FILE_END): Define.
1081         (arc_print_operand): Reuse 'S' letter for JLI output instruction.
1082         (arc_add_jli_section): New function.
1083         (jli_call_scan): Likewise.
1084         (arc_reorg): Call jli_call_scan.
1085         (arc_output_addsi): Remove 'S' from printing asm operand.
1086         (arc_is_jli_call_p): New function.
1087         * config/arc/arc.md (movqi_insn): Remove 'S' from printing asm
1088         operand.
1089         (movhi_insn): Likewise.
1090         (movsi_insn): Likewise.
1091         (movsi_set_cc_insn): Likewise.
1092         (loadqi_update): Likewise.
1093         (load_zeroextendqisi_update): Likewise.
1094         (load_signextendqisi_update): Likewise.
1095         (loadhi_update): Likewise.
1096         (load_zeroextendhisi_update): Likewise.
1097         (load_signextendhisi_update): Likewise.
1098         (loadsi_update): Likewise.
1099         (loadsf_update): Likewise.
1100         (movsicc_insn): Likewise.
1101         (bset_insn): Likewise.
1102         (bxor_insn): Likewise.
1103         (bclr_insn): Likewise.
1104         (bmsk_insn): Likewise.
1105         (bicsi3_insn): Likewise.
1106         (cmpsi_cc_c_insn): Likewise.
1107         (movsi_ne): Likewise.
1108         (movsi_cond_exec): Likewise.
1109         (clrsbsi2): Likewise.
1110         (norm_f): Likewise.
1111         (normw): Likewise.
1112         (swap): Likewise.
1113         (divaw): Likewise.
1114         (flag): Likewise.
1115         (sr): Likewise.
1116         (kflag): Likewise.
1117         (ffs): Likewise.
1118         (ffs_f): Likewise.
1119         (fls): Likewise.
1120         (call_i): Remove 'S' asm letter, add jli instruction.
1121         (call_value_i): Likewise.
1122         * config/arc/arc.op (mjli-always): New option.
1123         * config/arc/constraints.md (Cji): New constraint.
1124         * config/arc/fpx.md (addsf3_fpx): Remove 'S' from printing asm
1125         operand.
1126         (subsf3_fpx): Likewise.
1127         (mulsf3_fpx): Likewise.
1128         * config/arc/simdext.md (vendrec_insn): Remove 'S' from printing
1129         asm operand.
1130         * doc/extend.texi (ARC): Document 'jli-always' and 'jli-fixed'
1131         function attrbutes.
1132         * doc/invoke.texi (ARC): Document mjli-always option.
1134 2018-01-26  Sebastian Perta  <sebastian.perta@renesas.com>
1136         * config/rl78/rl78.c: if operand 2 is const avoid addition with 0
1137         and use incw and decw where possible
1138         * testsuite/gcc.target/rl78/test_addsi3_internal.c: new file
1140 2018-01-26  Richard Biener  <rguenther@suse.de>
1142         PR tree-optimization/81082
1143         * fold-const.c (fold_plusminus_mult_expr): Do not perform the
1144         association if it requires casting to unsigned.
1145         * match.pd ((A * C) +- (B * C) -> (A+-B)): New patterns derived
1146         from fold_plusminus_mult_expr to catch important cases late when
1147         range info is available.
1149 2018-01-26  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
1151         * config/i386/sol2.h (USE_HIDDEN_LINKONCE): Remove.
1152         * configure.ac (hidden_linkonce): New test.
1153         * configure: Regenerate.
1154         * config.in: Regenerate.
1156 2018-01-26  Julia Koval  <julia.koval@intel.com>
1158         * config/i386/avx512bitalgintrin.h (_mm512_bitshuffle_epi64_mask,
1159         _mm512_mask_bitshuffle_epi64_mask, _mm256_bitshuffle_epi64_mask,
1160         _mm256_mask_bitshuffle_epi64_mask, _mm_bitshuffle_epi64_mask,
1161         _mm_mask_bitshuffle_epi64_mask): Fix type.
1162         * config/i386/i386-builtin-types.def (UHI_FTYPE_V2DI_V2DI_UHI,
1163         USI_FTYPE_V4DI_V4DI_USI): Remove.
1164         * config/i386/i386-builtin.def (__builtin_ia32_vpshufbitqmb512_mask,
1165         __builtin_ia32_vpshufbitqmb256_mask,
1166         __builtin_ia32_vpshufbitqmb128_mask): Fix types.
1167         * config/i386/i386.c (ix86_expand_args_builtin): Remove old types.
1168         * config/i386/sse.md (VI1_AVX512VLBW): Change types.
1170 2018-01-26  Alan Modra  <amodra@gmail.com>
1172         PR target/84033
1173         * config/rs6000/rs6000-p8swap.c (rtx_is_swappable_p): Exclude
1174         UNSPEC_VBPERMQ.  Sort other unspecs.
1176 2018-01-25  David Edelsohn  <dje.gcc@gmail.com>
1178         * doc/invoke.texi (PowerPC Options): Document 'native' cpu type.
1180 2018-01-25  Jan Hubicka  <hubicka@ucw.cz>
1182         PR middle-end/83055
1183         * predict.c (drop_profile): Do not push/pop cfun; update also
1184         node->count.
1185         (handle_missing_profiles): Fix logic looking for zero profiles.
1187 2018-01-25  Jakub Jelinek  <jakub@redhat.com>
1189         PR middle-end/83977
1190         * ipa-fnsummary.c (compute_fn_summary): Clear can_change_signature
1191         on functions with #pragma omp declare simd or functions with simd
1192         attribute.
1193         * omp-simd-clone.c (expand_simd_clones): Revert 2018-01-24 change.
1194         * config/i386/i386.c (ix86_simd_clone_compute_vecsize_and_simdlen):
1195         Remove trailing \n from warning_at calls.
1197 2018-01-25  Tom de Vries  <tom@codesourcery.com>
1199         PR target/84028
1200         * config/nvptx/nvptx.c (nvptx_single): Add exit insn after noreturn call
1201         for neutered workers.
1203 2018-01-24  Joseph Myers  <joseph@codesourcery.com>
1205         PR target/68467
1206         * config/m68k/m68k.c (m68k_promote_function_mode): New function.
1207         (TARGET_PROMOTE_FUNCTION_MODE): New macro.
1209 2018-01-24  Jeff Law  <law@redhat.com>
1211         PR target/83994
1212         * i386.c (get_probe_interval): Move to earlier point.
1213         (ix86_compute_frame_layout): If -fstack-clash-protection and
1214         the frame is larger than the probe interval, then use pushes
1215         to save registers rather than reg->mem moves.
1216         (ix86_expand_prologue): Remove conditional for int_registers_saved
1217         assertion.
1219 2018-01-24  Vladimir Makarov  <vmakarov@redhat.com>
1221         PR target/84014
1222         * ira-build.c (setup_min_max_allocno_live_range_point): Set up
1223         min/max for never referenced object.
1225 2018-01-24  Jakub Jelinek  <jakub@redhat.com>
1227         PR middle-end/83977
1228         * tree.c (free_lang_data_in_decl): Don't clear DECL_ABSTRACT_ORIGIN
1229         here.
1230         * omp-low.c (create_omp_child_function): Remove "omp declare simd"
1231         attributes from DECL_ATTRIBUTES (decl) without affecting
1232         DECL_ATTRIBUTES (current_function_decl).
1233         * omp-simd-clone.c (expand_simd_clones): Ignore DECL_ARTIFICIAL
1234         functions with non-NULL DECL_ABSTRACT_ORIGIN.
1236 2018-01-24  Richard Sandiford  <richard.sandiford@linaro.org>
1238         PR tree-optimization/83979
1239         * fold-const.c (fold_comparison): Use constant_boolean_node
1240         instead of boolean_{true,false}_node.
1242 2018-01-24  Jan Hubicka  <hubicka@ucw.cz>
1244         * ipa-profile.c (ipa_propagate_frequency_1): Fix logic skipping calls
1245         with zero counts.
1247 2018-01-24  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
1249         * config/rs6000/rs6000.md (*call_indirect_nonlocal_sysv<mode>):
1250         Simplify the clause that sets the length attribute.
1251         (*call_value_indirect_nonlocal_sysv<mode>): Likewise.
1252         (*sibcall_nonlocal_sysv<mode>): Clean up code block; simplify the
1253         clause that sets the length attribute.
1254         (*sibcall_value_nonlocal_sysv<mode>): Likewise.
1256 2018-01-24  Tom de Vries  <tom@codesourcery.com>
1258         PR target/83589
1259         * config/nvptx/nvptx.c (WORKAROUND_PTXJIT_BUG_2): Define to 1.
1260         (nvptx_pc_set, nvptx_condjump_label): New function. Copy from jump.c.
1261         Add strict parameter.
1262         (prevent_branch_around_nothing): Insert dummy insn between branch to
1263         label and label with no ptx insn inbetween.
1264         * config/nvptx/nvptx.md (define_insn "fake_nop"): New insn.
1266 2018-01-24  Tom de Vries  <tom@codesourcery.com>
1268         PR target/81352
1269         * config/nvptx/nvptx.c (nvptx_single): Add exit insn after noreturn call
1270         for neutered threads in warp.
1271         * config/nvptx/nvptx.md (define_insn "exit"): New insn.
1273 2018-01-24  Richard Biener  <rguenther@suse.de>
1275         PR tree-optimization/83176
1276         * tree-chrec.c (chrec_fold_plus_1): Handle (signed T){(T) .. }
1277         operands.
1279 2018-01-24  Richard Biener  <rguenther@suse.de>
1281         PR tree-optimization/82819
1282         * graphite-isl-ast-to-gimple.c (binary_op_to_tree): Avoid
1283         code generating pluses that are no-ops in the target precision.
1285 2018-01-24  Richard Biener  <rguenther@suse.de>
1287         PR middle-end/84000
1288         * tree-cfg.c (replace_loop_annotate): Handle annot_expr_parallel_kind.
1290 2018-01-23  Jan Hubicka  <hubicka@ucw.cz>
1292         * cfgcleanup.c (try_crossjump_to_edge): Use combine_with_count
1293         to merge probabilities.
1294         * predict.c (probably_never_executed): Also mark as cold functions
1295         with global 0 profile and guessed local profile.
1296         * profile-count.c (profile_probability::combine_with_count): New
1297         member function.
1298         * profile-count.h (profile_probability::operator*,
1299         profile_probability::operator*=, profile_probability::operator/,
1300         profile_probability::operator/=): Reduce precision to adjusted
1301         and set value to guessed on contradictory divisions.
1302         (profile_probability::combine_with_freq): Remove.
1303         (profile_probability::combine_wiht_count): Declare.
1304         (profile_count::force_nonzero):: Set to adjusted.
1305         (profile_count::probability_in):: Set quality to adjusted.
1306         * tree-ssa-tail-merge.c (replace_block_by): Use
1307         combine_with_count.
1309 2018-01-23  Andrew Waterman  <andrew@sifive.com>
1310             Jim Wilson  <jimw@sifive.com>
1312         * config/riscv/riscv.c (riscv_stack_boundary): New.
1313         (riscv_option_override): Set riscv_stack_boundary.  Handle
1314         riscv_preferred_stack_boundary_arg.
1315         * config/riscv/riscv.h (MIN_STACK_BOUNDARY, ABI_STACK_BOUNDARY): New.
1316         (BIGGEST_ALIGNMENT): Set to STACK_BOUNDARY.
1317         (STACK_BOUNDARY): Set to riscv_stack_boundary.
1318         (RISCV_STACK_ALIGN): Use STACK_BOUNDARY.
1319         * config/riscv/riscv.opt (mpreferred-stack-boundary): New.
1320         * doc/invoke.tex (RISC-V Options): Add -mpreferred-stack-boundary.
1322 2018-01-23  H.J. Lu  <hongjiu.lu@intel.com>
1324         PR target/83905
1325         * config/i386/i386.c (ix86_expand_prologue): Use cost reference
1326         of struct ix86_frame.
1327         (ix86_expand_epilogue): Likewise.  Add a local variable for
1328         the reg_save_offset field in struct ix86_frame.
1330 2018-01-23  Bin Cheng  <bin.cheng@arm.com>
1332         PR tree-optimization/82604
1333         * tree-loop-distribution.c (enum partition_kind): New enum item
1334         PKIND_PARTIAL_MEMSET.
1335         (partition_builtin_p): Support above new enum item.
1336         (generate_code_for_partition): Ditto.
1337         (compute_access_range): Differentiate cases that equality can be
1338         proven at all loops, the innermost loops or no loops.
1339         (classify_builtin_st, classify_builtin_ldst): Adjust call to above
1340         function.  Set PKIND_PARTIAL_MEMSET for partition appropriately.
1341         (finalize_partitions, distribute_loop): Don't fuse partition of
1342         PKIND_PARTIAL_MEMSET kind when distributing 3-level loop nest.
1343         (prepare_perfect_loop_nest): Distribute 3-level loop nest only if
1344         parloop is enabled.
1346 2018-01-23  Martin Liska  <mliska@suse.cz>
1348         * predict.def (PRED_INDIR_CALL): Set probability to PROB_EVEN in
1349         order to ignore the predictor.
1350         (PRED_POLYMORPHIC_CALL): Likewise.
1351         (PRED_RECURSIVE_CALL): Likewise.
1353 2018-01-23  Martin Liska  <mliska@suse.cz>
1355         * tree-profile.c (tree_profiling): Print function header to
1356         aware reader which function we are working on.
1357         * value-prof.c (gimple_find_values_to_profile): Do not print
1358         not interesting value histograms.
1360 2018-01-23  Martin Liska  <mliska@suse.cz>
1362         * profile-count.h (enum profile_quality): Add
1363         profile_uninitialized as the first value. Do not number values
1364         as they are zero based.
1365         (profile_count::verify): Update sanity check.
1366         (profile_probability::verify): Likewise.
1368 2018-01-23  Nathan Sidwell  <nathan@acm.org>
1370         * doc/invoke.texi (ffor-scope): Deprecate.
1372 2018-01-23  David Malcolm  <dmalcolm@redhat.com>
1374         PR tree-optimization/83510
1375         * domwalk.c (set_all_edges_as_executable): New function.
1376         (dom_walker::dom_walker): Convert bool param
1377         "skip_unreachable_blocks" to enum reachability.  Move setup of
1378         edge flags to set_all_edges_as_executable and only do it when
1379         reachability is REACHABLE_BLOCKS.
1380         * domwalk.h (enum dom_walker::reachability): New enum.
1381         (dom_walker::dom_walker): Convert bool param
1382         "skip_unreachable_blocks" to enum reachability.
1383         (set_all_edges_as_executable): New decl.
1384         * graphite-scop-detection.c  (gather_bbs::gather_bbs): Convert
1385         from false for "skip_unreachable_blocks" to ALL_BLOCKS for
1386         "reachability".
1387         * tree-ssa-dom.c (dom_opt_dom_walker::dom_opt_dom_walker): Likewise,
1388         but converting true to REACHABLE_BLOCKS.
1389         * tree-ssa-sccvn.c (sccvn_dom_walker::sccvn_dom_walker): Likewise.
1390         * tree-vrp.c
1391         (check_array_bounds_dom_walker::check_array_bounds_dom_walker):
1392         Likewise, but converting it to REACHABLE_BLOCKS_PRESERVING_FLAGS.
1393         (vrp_dom_walker::vrp_dom_walker): Likewise, but converting it to
1394         REACHABLE_BLOCKS.
1395         (vrp_prop::vrp_finalize): Call set_all_edges_as_executable
1396         if check_all_array_refs will be called.
1398 2018-01-23  David Malcolm  <dmalcolm@redhat.com>
1400         * tree.c (selftest::test_location_wrappers): Add more test
1401         coverage.
1403 2018-01-23  David Malcolm  <dmalcolm@redhat.com>
1405         * sbitmap.c (selftest::test_set_range): Fix memory leaks.
1406         (selftest::test_bit_in_range): Likewise.
1408 2018-01-23  Richard Sandiford  <richard.sandiford@linaro.org>
1410         PR testsuite/83888
1411         * doc/sourcebuild.texi (vect_float): Say that the selector
1412         only describes the situation when -funsafe-math-optimizations is on.
1413         (vect_float_strict): Document.
1415 2018-01-23  Richard Sandiford  <richard.sandiford@linaro.org>
1417         PR tree-optimization/83965
1418         * tree-vect-patterns.c (vect_reassociating_reduction_p): New function.
1419         (vect_recog_dot_prod_pattern, vect_recog_sad_pattern): Use it
1420         instead of checking only for a reduction.
1421         (vect_recog_widen_sum_pattern): Likewise.
1423 2018-01-23  Jan Hubicka  <hubicka@ucw.cz>
1425         * predict.c (probably_never_executed): Only use precise profile info.
1426         (compute_function_frequency): Skip after inlining hack since we now
1427         have quality checking.
1429 2018-01-23  Jan Hubicka  <hubicka@ucw.cz>
1431         * profile-count.h (profile_probability::very_unlikely,
1432         profile_probability::unlikely, profile_probability::even): Set
1433         precision to guessed.
1435 2018-01-23  Richard Biener  <rguenther@suse.de>
1437         PR tree-optimization/83963
1438         * graphite-scop-detection.c (scop_detection::harmful_loop_in_region):
1439         Properly terminate dominator walk when crossing the exit edge not
1440         when visiting its source block.
1442 2018-01-23  Jakub Jelinek  <jakub@redhat.com>
1444         PR c++/83918
1445         * tree.c (maybe_wrap_with_location): Use NON_LVALUE_EXPR rather than
1446         VIEW_CONVERT_EXPR to wrap CONST_DECLs.
1448 2018-01-22  Jakub Jelinek  <jakub@redhat.com>
1450         PR tree-optimization/83957
1451         * omp-expand.c (expand_omp_for_generic): Ignore virtual PHIs.  Remove
1452         semicolon after for body surrounded by braces.
1454         PR tree-optimization/83081
1455         * profile-count.h (profile_probability::split): New method.
1456         * dojump.c (do_jump_1) <case TRUTH_ANDIF_EXPR, case TRUTH_ORIF_EXPR>:
1457         Use profile_probability::split.
1458         (do_compare_rtx_and_jump): Fix adjustment of probabilities
1459         when splitting a single conditional jump into 2.
1461 2018-01-22  David Malcolm  <dmalcolm@redhat.com>
1463         PR tree-optimization/69452
1464         * tree-ssa-loop-im.c (class move_computations_dom_walker): Remove
1465         decl.
1467 2018-01-22  Sebastian Perta  <sebastian.perta@renesas.com>
1469         * config/rl78/rl78-expand.md: New define_expand "bswaphi2"
1470         * config/rl78/rl78-virt.md: New define_insn "*bswaphi2_virt"
1471         * config/rl78/rl78-real.md: New define_insn "*bswaphi2_real"
1473 2018-01-22  Sebastian Perta  <sebastian.perta@renesas.com>
1475         * config/rl78/rl78-protos.h: New function declaration rl78_split_movdi
1476         * config/rl78/rl78.md: New define_expand "movdi"
1477         * config/rl78/rl78.c: New function definition rl78_split_movdi
1479 2018-01-22  Michael Meissner  <meissner@linux.vnet.ibm.com>
1481         PR target/83862
1482         * config/rs6000/rs6000-protos.h (rs6000_split_signbit): Delete,
1483         no longer used.
1484         * config/rs6000/rs6000.c (rs6000_split_signbit): Likewise.
1485         * config/rs6000/rs6000.md (signbit<mode>2): Change code for IEEE
1486         128-bit to produce an UNSPEC move to get the double word with the
1487         signbit and then a shift directly to do signbit.
1488         (signbit<mode>2_dm): Replace old IEEE 128-bit signbit
1489         implementation with a new version that just does either a direct
1490         move or a regular move.  Move memory interface to separate insns.
1491         Move insns so they are next to the expander.
1492         (signbit<mode>2_dm_mem_be): New combiner insns to combine load
1493         with signbit move.  Split big and little endian case.
1494         (signbit<mode>2_dm_mem_le): Likewise.
1495         (signbit<mode>2_dm_<su>ext): Delete, no longer used.
1496         (signbit<mode>2_dm2): Likewise.
1498 2018-01-22  Sebastian Perta  <sebastian.perta@renesas.com>
1500         * config/rl78/rl78.md: New define_expand "anddi3".
1502 2018-01-22  Sebastian Perta  <sebastian.perta@renesas.com>
1504         * config/rl78/rl78.md: New define_expand "umindi3".
1506 2018-01-22  Sebastian Perta  <sebastian.perta@renesas.com>
1508         * config/rl78/rl78.md: New define_expand "smindi3".
1510 2018-01-22  Sebastian Perta  <sebastian.perta@renesas.com>
1512         * config/rl78/rl78.md: New define_expand "smaxdi3".
1514 2018-01-22 Carl Love <cel@us.ibm.com>
1516         * config/rs6000/rs6000-builtin.def (ST_ELEMREV_V1TI, LD_ELEMREV_V1TI,
1517         LVX_V1TI): Add macro expansion.
1518         * config/rs6000/rs6000-c.c (altivec_builtin_types): Add argument
1519         definitions for VSX_BUILTIN_VEC_XST_BE, VSX_BUILTIN_VEC_ST,
1520         VSX_BUILTIN_VEC_XL, LD_ELEMREV_V1TI builtins.
1521         * config/rs6000/rs6000-p8swap.c (insn_is_swappable_p);
1522         Change check to determine if the instruction is a byte reversing
1523         entry.  Fix typo in comment.
1524         * config/rs6000/rs6000.c (altivec_expand_builtin): Add case entry
1525         for VSX_BUILTIN_ST_ELEMREV_V1TI and VSX_BUILTIN_LD_ELEMREV_V1TI.
1526         Add def_builtin calls for new builtins.
1527         * config/rs6000/vsx.md (vsx_st_elemrev_v1ti, vsx_ld_elemrev_v1ti):
1528         Add define_insn expansion.
1530 2018-01-22  Sebastian Perta  <sebastian.perta@renesas.com>
1532         * config/rl78/rl78.md: New define_expand "umaxdi3".
1534 2018-01-22  Sebastian Perta  <sebastian.perta@renesas.com>
1536         * config/rl78/rl78.c (rl78_note_reg_set): fixed dead reg check
1537         for non-QImode registers
1539 2018-01-22  Richard Biener  <rguenther@suse.de>
1541         PR tree-optimization/83963
1542         * graphite-scop-detection.c (scop_detection::get_sese): Delay
1543         including the loop exit block.
1544         (scop_detection::merge_sese): Likewise.
1545         (scop_detection::add_scop): Do it here instead.
1547 2018-01-22  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
1549         * doc/sourcebuild.texi (arm_softfloat): Document.
1551 2018-01-21  John David Anglin  <danglin@gcc.gnu.org>
1553         PR gcc/77734
1554         * config/pa/pa.c (pa_function_ok_for_sibcall): Use
1555         targetm.binds_local_p instead of TREE_PUBLIC to check local binding.
1556         Move TARGET_PORTABLE_RUNTIME check after TARGET_64BIT check.
1558 2018-01-21  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
1559             David Edelsohn <dje.gcc@gmail.com>
1561         PR target/83946
1562         * config/rs6000/rs6000.md (*call_indirect_nonlocal_sysv<mode>):
1563         Change "crset eq" to "crset 2".
1564         (*call_value_indirect_nonlocal_sysv<mode>): Likewise.
1565         (*call_indirect_aix<mode>_nospec): Likewise.
1566         (*call_value_indirect_aix<mode>_nospec): Likewise.
1567         (*call_indirect_elfv2<mode>_nospec): Likewise.
1568         (*call_value_indirect_elfv2<mode>_nospec): Likewise.
1569         (*sibcall_nonlocal_sysv<mode>): Change "crset eq" to "crset 2";
1570         change assembly output from . to $.
1571         (*sibcall_value_nonlocal_sysv<mode>): Likewise.
1572         (indirect_jump<mode>_nospec): Change assembly output from . to $.
1573         (*tablejump<mode>_internal1_nospec): Likewise.
1575 2018-01-21  Oleg Endo  <olegendo@gcc.gnu.org>
1577         PR target/80870
1578         * config/sh/sh_optimize_sett_clrt.cc:
1579         Use INCLUDE_ALGORITHM and INCLUDE_VECTOR instead of direct includes.
1581 2018-01-20  Richard Sandiford  <richard.sandiford@linaro.org>
1583         PR tree-optimization/83940
1584         * tree-vect-stmts.c (vect_truncate_gather_scatter_offset): Set
1585         offset_dt to vect_constant_def rather than vect_unknown_def_type.
1586         (vect_check_load_store_mask): Add a mask_dt_out parameter and
1587         use it to pass back the definition type.
1588         (vect_check_store_rhs): Likewise rhs_dt_out.
1589         (vect_build_gather_load_calls): Add a mask_dt argument and use
1590         it instead of a call to vect_is_simple_use.
1591         (vectorizable_store): Update calls to vect_check_load_store_mask
1592         and vect_check_store_rhs.  Use the dt returned by the latter instead
1593         of scatter_src_dt.  Use the cached mask_dt and gs_info.offset_dt
1594         instead of calls to vect_is_simple_use.  Pass the scalar rather
1595         than the vector operand to vect_is_simple_use when handling
1596         second and subsequent copies of an rhs value.
1597         (vectorizable_load): Update calls to vect_check_load_store_mask
1598         and vect_build_gather_load_calls.  Use the cached mask_dt and
1599         gs_info.offset_dt instead of calls to vect_is_simple_use.
1601 2018-01-20  Jakub Jelinek  <jakub@redhat.com>
1603         PR middle-end/83945
1604         * tree-emutls.c: Include gimplify.h.
1605         (lower_emutls_2): New function.
1606         (lower_emutls_1): If ADDR_EXPR is a gimple invariant and walk_tree
1607         with lower_emutls_2 callback finds some TLS decl in it, unshare_expr
1608         it before further processing.
1610         PR target/83930
1611         * simplify-rtx.c (simplify_binary_operation_1) <case UMOD>: Use
1612         UINTVAL (trueop1) instead of INTVAL (op1).
1614 2018-01-19  Jakub Jelinek  <jakub@redhat.com>
1616         PR debug/81570
1617         PR debug/83728
1618         * dwarf2cfi.c (DEFAULT_INCOMING_FRAME_SP_OFFSET): Define to
1619         INCOMING_FRAME_SP_OFFSET if not defined.
1620         (scan_trace): Add ENTRY argument.  If true and
1621         DEFAULT_INCOMING_FRAME_SP_OFFSET != INCOMING_FRAME_SP_OFFSET,
1622         emit a note to adjust the CFA offset.
1623         (create_cfi_notes): Adjust scan_trace callers.
1624         (create_cie_data): Use DEFAULT_INCOMING_FRAME_SP_OFFSET rather than
1625         INCOMING_FRAME_SP_OFFSET in the CIE.
1626         * config/i386/i386.h (DEFAULT_INCOMING_FRAME_SP_OFFSET): Define.
1627         * config/stormy16/stormy16.h (DEFAULT_INCOMING_FRAME_SP_OFFSET):
1628         Likewise.
1629         * doc/tm.texi.in (DEFAULT_INCOMING_FRAME_SP_OFFSET): Document.
1630         * doc/tm.texi: Regenerated.
1632 2018-01-19  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
1634         PR rtl-optimization/83147
1635         * lra-constraints.c (remove_inheritance_pseudos): Use
1636         lra_substitute_pseudo_within_insn.
1638 2018-01-19  Tom de Vries  <tom@codesourcery.com>
1639             Cesar Philippidis  <cesar@codesourcery.com>
1641         PR target/83920
1642         * config/nvptx/nvptx.c (nvptx_single): Fix jit workaround.
1644 2018-01-19  Cesar Philippidis  <cesar@codesourcery.com>
1646         PR target/83790
1647         * config/nvptx/nvptx.c (output_init_frag): Don't use generic address
1648         spaces for function labels.
1650 2018-01-19  Martin Liska  <mliska@suse.cz>
1652         * predict.def (PRED_LOOP_EXIT): Change from 85 to 89.
1653         (PRED_LOOP_EXIT_WITH_RECURSION): Change from 72 to 78.
1654         (PRED_LOOP_EXTRA_EXIT): Change from 83 to 67.
1655         (PRED_OPCODE_POSITIVE): Change from 64 to 59.
1656         (PRED_TREE_OPCODE_POSITIVE): Change from 64 to 59.
1657         (PRED_CONST_RETURN): Change from 69 to 65.
1658         (PRED_NULL_RETURN): Change from 91 to 71.
1659         (PRED_LOOP_IV_COMPARE_GUESS): Change from 98 to 64.
1660         (PRED_LOOP_GUARD): Change from 66 to 73.
1662 2018-01-19  Martin Liska  <mliska@suse.cz>
1664         * predict.c (predict_insn_def): Add new assert.
1665         (struct branch_predictor): Change type to signed integer.
1666         (test_prediction_value_range): Amend test to cover
1667         PROB_UNINITIALIZED.
1668         * predict.def (PRED_LOOP_ITERATIONS): Use the new constant.
1669         (PRED_LOOP_ITERATIONS_GUESSED): Likewise.
1670         (PRED_LOOP_ITERATIONS_MAX): Likewise.
1671         (PRED_LOOP_IV_COMPARE): Likewise.
1672         * predict.h (PROB_UNINITIALIZED): Define new constant.
1674 2018-01-19  Martin Liska  <mliska@suse.cz>
1676         * predict.c (dump_prediction): Add new format for
1677         analyze_brprob.py script which is enabled with -details
1678         suboption.
1679         * profile-count.h (precise_p): New function.
1681 2018-01-19  Richard Sandiford  <richard.sandiford@linaro.org>
1683         PR tree-optimization/83922
1684         * tree-vect-loop.c (vect_verify_full_masking): Return false if
1685         there are no statements that need masking.
1686         (vect_active_double_reduction_p): New function.
1687         (vect_analyze_loop_operations): Use it when handling phis that
1688         are not in the loop header.
1690 2018-01-19  Richard Sandiford  <richard.sandiford@linaro.org>
1692         PR tree-optimization/83914
1693         * tree-vect-loop.c (vectorizable_induction): Don't convert
1694         init_expr or apply the peeling adjustment for inductions
1695         that are nested within the vectorized loop.
1697 2018-01-19  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
1699         * config/arm/thumb2.md (*thumb2_negsi2_short): Use RSB mnemonic
1700         instead of NEG.
1702 2018-01-18  Jakub Jelinek  <jakub@redhat.com>
1704         PR sanitizer/81715
1705         PR testsuite/83882
1706         * function.h (gimplify_parameters): Add gimple_seq * argument.
1707         * function.c: Include gimple.h and options.h.
1708         (gimplify_parameters): Add cleanup argument, add CLOBBER stmts
1709         for the added local temporaries if needed.
1710         * gimplify.c (gimplify_body): Adjust gimplify_parameters caller,
1711         if there are any parameter cleanups, wrap whole body into a
1712         try/finally with the cleanups.
1714 2018-01-18  Wilco Dijkstra  <wdijkstr@arm.com>
1716         PR target/82964
1717         * config/aarch64/aarch64.c (aarch64_legitimate_constant_p):
1718         Use GET_MODE_CLASS for scalar floating point.
1720 2018-01-18  Jan Hubicka  <hubicka@ucw.cz>
1722         PR ipa/82256
1723         patch by PaX Team
1724         * cgraphclones.c (cgraph_node::create_version_clone_with_body):
1725         Fix call of call_cgraph_insertion_hooks.
1727 2018-01-18  Martin Sebor  <msebor@redhat.com>
1729         * doc/invoke.texi (-Wclass-memaccess): Tweak text.
1731 2018-01-18  Jan Hubicka  <hubicka@ucw.cz>
1733         PR ipa/83619
1734         * cgraph.c (cgraph_edge::redirect_call_stmt_to_callee): Update edge
1735         frequencies.
1737 2018-01-18  Boris Kolpackov  <boris@codesynthesis.com>
1739         PR other/70268
1740         * common.opt: (-ffile-prefix-map): New option.
1741         * opts.c (common_handle_option): Defer it.
1742         * opts-global.c (handle_common_deferred_options): Handle it.
1743         * debug.h (remap_debug_filename, add_debug_prefix_map): Move to...
1744         * file-prefix-map.h: New file.
1745         (remap_debug_filename, add_debug_prefix_map): ...here.
1746         (add_macro_prefix_map, add_file_prefix_map, remap_macro_filename): New.
1747         * final.c (debug_prefix_map, add_debug_prefix_map
1748         remap_debug_filename): Move to...
1749         * file-prefix-map.c: New file.
1750         (file_prefix_map, add_prefix_map, remap_filename) ...here and rename,
1751         generalize, get rid of alloca(), use strrchr() instead of strchr().
1752         (add_macro_prefix_map, add_debug_prefix_map, add_file_prefix_map):
1753         Implement in terms of add_prefix_map().
1754         (remap_macro_filename, remap_debug_filename): Implement in term of
1755         remap_filename().
1756         * Makefile.in (OBJS, PLUGIN_HEADERS): Add new files.
1757         * builtins.c (fold_builtin_FILE): Call remap_macro_filename().
1758         * dbxout.c: Include file-prefix-map.h.
1759         * varasm.c: Likewise.
1760         * vmsdbgout.c: Likewise.
1761         * xcoffout.c: Likewise.
1762         * dwarf2out.c: Likewise plus omit new options from DW_AT_producer.
1763         * doc/cppopts.texi (-fmacro-prefix-map): Document.
1764         * doc/invoke.texi (-ffile-prefix-map): Document.
1765         (-fdebug-prefix-map): Update description.
1767 2018-01-18  Martin Liska  <mliska@suse.cz>
1769         * config/i386/i386.c (indirect_thunk_name): Document that also
1770         lfence is emitted.
1771         (output_indirect_thunk): Document why both instructions
1772         (pause and lfence) are generated.
1774 2018-01-18  Richard Biener  <rguenther@suse.de>
1776         PR tree-optimization/83887
1777         * graphite-scop-detection.c
1778         (scop_detection::get_nearest_dom_with_single_entry): Remove.
1779         (scop_detection::get_nearest_pdom_with_single_exit): Likewise.
1780         (scop_detection::merge_sese): Re-implement with a flood-fill
1781         algorithm that properly finds a SESE region if it exists.
1783 2018-01-18  Jakub Jelinek  <jakub@redhat.com>
1785         PR c/61240
1786         * match.pd ((P + A) - P, P - (P + A), (P + A) - (P + B)): For
1787         pointer_diff optimizations use view_convert instead of convert.
1789 2018-01-17  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
1791         * config/rs6000/rs6000.md (*call_indirect_nonlocal_sysv<mode>):
1792         Generate different code for -mno-speculate-indirect-jumps.
1793         (*call_value_indirect_nonlocal_sysv<mode>): Likewise.
1794         (*call_indirect_aix<mode>): Disable for
1795         -mno-speculate-indirect-jumps.
1796         (*call_indirect_aix<mode>_nospec): New define_insn.
1797         (*call_value_indirect_aix<mode>): Disable for
1798         -mno-speculate-indirect-jumps.
1799         (*call_value_indirect_aix<mode>_nospec): New define_insn.
1800         (*sibcall_nonlocal_sysv<mode>): Generate different code for
1801         -mno-speculate-indirect-jumps.
1802         (*sibcall_value_nonlocal_sysv<mode>): Likewise.
1804 2018-01-17  Michael Meissner  <meissner@linux.vnet.ibm.com>
1806         * config/rs6000/rs6000.c (rs6000_emit_move): If we load or store a
1807         long double type, set the flags for noting the default long double
1808         type, even if we don't pass or return a long double type.
1810 2018-01-17  Jan Hubicka  <hubicka@ucw.cz>
1812         PR ipa/83051
1813         * ipa-inline.c (flatten_function): Do not overwrite final inlining
1814         failure.
1816 2018-01-17  Will Schmidt  <will_schmidt@vnet.ibm.com>
1818         * config/rs6000/rs6000.c (rs6000_gimple_builtin): Add gimple folding
1819         support for merge[hl].
1820         (fold_mergehl_helper): New helper function.
1821         (tree-vector-builder.h): New #include for tree_vector_builder usage.
1822         * config/rs6000/altivec.md (altivec_vmrghw_direct): Add xxmrghw insn.
1823         (altivec_vmrglw_direct): Add xxmrglw insn.
1825 2018-01-17  Andrew Waterman  <andrew@sifive.com>
1827         * config/riscv/riscv.c (riscv_conditional_register_usage): If
1828         UNITS_PER_FP_ARG is 0, set call_used_regs to 1 for all FP regs.
1830 2018-01-17  David Malcolm  <dmalcolm@redhat.com>
1832         PR lto/83121
1833         * ipa-devirt.c (add_type_duplicate): When comparing memory layout,
1834         call the lto_location_cache before reading the
1835         DECL_SOURCE_LOCATION of the types.
1837 2018-01-17  Wilco Dijkstra  <wdijkstr@arm.com>
1838             Richard Sandiford  <richard.sandiford@linaro.org>
1840         * config/aarch64/aarch64.md (movti_aarch64): Use Uti constraint.
1841         * config/aarch64/aarch64.c (aarch64_mov128_immediate): New function.
1842         (aarch64_legitimate_constant_p): Just support CONST_DOUBLE
1843         SF/DF/TF mode to avoid creating illegal CONST_WIDE_INT immediates.
1844         * config/aarch64/aarch64-protos.h (aarch64_mov128_immediate):
1845         Add declaration.
1846         * config/aarch64/constraints.md (aarch64_movti_operand):
1847         Limit immediates.
1848         * config/aarch64/predicates.md (Uti): Add new constraint.
1850 2018-01-17 Carl Love  <cel@us.ibm.com>
1851         * config/rs6000/vsx.md (define_expand xl_len_r,
1852         define_expand stxvl, define_expand *stxvl): Add match_dup argument.
1853         (define_insn): Add, match_dup 1 argument to define_insn stxvll and
1854         lxvll.
1855         (define_expand, define_insn): Move the shift left from  the
1856         define_insn to the define_expand for lxvl and stxvl instructions.
1857         * config/rs6000/rs6000-builtin.def (BU_P9V_64BIT_VSX_2): Change LXVL
1858         and XL_LEN_R definitions to PURE.
1860 2018-01-17  Uros Bizjak  <ubizjak@gmail.com>
1862         * config/i386/i386.c (indirect_thunk_name): Declare regno
1863         as unsigned int.  Compare regno with INVALID_REGNUM.
1864         (output_indirect_thunk): Ditto.
1865         (output_indirect_thunk_function): Ditto.
1866         (ix86_code_end): Declare regno as unsigned int.  Use INVALID_REGNUM
1867         in the call to output_indirect_thunk_function.
1869 2018-01-17  Richard Sandiford  <richard.sandiford@linaro.org>
1871         PR middle-end/83884
1872         * expr.c (expand_expr_real_1): Use the size of GET_MODE (op0)
1873         rather than the size of inner_type to determine the stack slot size
1874         when handling VIEW_CONVERT_EXPRs on strict-alignment targets.
1876 2018-01-16  Sebastian Peryt  <sebastian.peryt@intel.com>
1878         PR target/83546
1879         * config/i386/i386.c (ix86_option_override_internal): Add PTA_RDRND
1880         to PTA_SILVERMONT.
1882 2018-01-16  Michael Meissner  <meissner@linux.vnet.ibm.com>
1884         * config.gcc (powerpc*-linux*-*): Add support for 64-bit little
1885         endian Linux systems to optionally enable multilibs for selecting
1886         the long double type if the user configured an explicit type.
1887         * config/rs6000/rs6000.h (TARGET_IEEEQUAD_MULTILIB): Indicate we
1888         have no long double multilibs if not defined.
1889         * config/rs6000/rs6000.c (rs6000_option_override_internal): Do not
1890         warn if the user used -mabi={ieee,ibm}longdouble and we built
1891         multilibs for long double.
1892         * config/rs6000/linux64.h (MULTILIB_DEFAULTS_IEEE): Define as the
1893         appropriate multilib option.
1894         (MULTILIB_DEFAULTS): Add MULTILIB_DEFAULTS_IEEE to the default
1895         multilib options.
1896         * config/rs6000/t-ldouble-linux64le-ibm: New configuration files
1897         for building long double multilibs.
1898         * config/rs6000/t-ldouble-linux64le-ieee: Likewise.
1900 2018-01-16  John David Anglin  <danglin@gcc.gnu.org>
1902         * config.gcc (hppa*-*-linux*): Change callee copies ABI to caller
1903         copies.
1905         * config/pa.h (MALLOC_ABI_ALIGNMENT): Set 32-bit alignment default to
1906         64 bits.
1907         * config/pa/pa32-linux.h (MALLOC_ABI_ALIGNMENT): Set alignment to
1908         128 bits.
1910         * config/pa/som.h (ASM_DECLARE_FUNCTION_NAME): Cleanup type and mode
1911         variables.
1913         * config/pa/pa.c (pa_function_arg_size): Apply CEIL to GET_MODE_SIZE
1914         return value.
1916 2018-01-16  Eric Botcazou  <ebotcazou@adacore.com>
1918         * gimple-ssa-warn-restrict.c (builtin_memref::builtin_memref): For an
1919         ADDR_EXPR, do not count the offset of a COMPONENT_REF twice.
1921 2018-01-16  Kelvin Nilsen  <kelvin@gcc.gnu.org>
1923         * config/rs6000/rs6000-p8swap.c (rs6000_gen_stvx): Generate
1924         different rtl trees depending on TARGET_64BIT.
1925         (rs6000_gen_lvx): Likewise.
1927 2018-01-16  Eric Botcazou  <ebotcazou@adacore.com>
1929         * config/visium/visium.md (nop): Tweak comment.
1930         (hazard_nop): Likewise.
1932 2018-01-16  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
1934         * config/rs6000/rs6000.c (rs6000_opt_vars): Add entry for
1935         -mspeculate-indirect-jumps.
1936         * config/rs6000/rs6000.md (*call_indirect_elfv2<mode>): Disable
1937         for -mno-speculate-indirect-jumps.
1938         (*call_indirect_elfv2<mode>_nospec): New define_insn.
1939         (*call_value_indirect_elfv2<mode>): Disable for
1940         -mno-speculate-indirect-jumps.
1941         (*call_value_indirect_elfv2<mode>_nospec): New define_insn.
1942         (indirect_jump): Emit different RTL for
1943         -mno-speculate-indirect-jumps.
1944         (*indirect_jump<mode>): Disable for
1945         -mno-speculate-indirect-jumps.
1946         (*indirect_jump<mode>_nospec): New define_insn.
1947         (tablejump): Emit different RTL for
1948         -mno-speculate-indirect-jumps.
1949         (tablejumpsi): Disable for -mno-speculate-indirect-jumps.
1950         (tablejumpsi_nospec): New define_expand.
1951         (tablejumpdi): Disable for -mno-speculate-indirect-jumps.
1952         (tablejumpdi_nospec): New define_expand.
1953         (*tablejump<mode>_internal1): Disable for
1954         -mno-speculate-indirect-jumps.
1955         (*tablejump<mode>_internal1_nospec): New define_insn.
1956         * config/rs6000/rs6000.opt (mspeculate-indirect-jumps): New
1957         option.
1959 2018-01-16  Artyom Skrobov tyomitch@gmail.com
1961         * caller-save.c (insert_save): Drop unnecessary parameter.  All
1962         callers updated.
1964 2018-01-16  Jakub Jelinek  <jakub@redhat.com>
1965             Richard Biener  <rguenth@suse.de>
1967         PR libgomp/83590
1968         * gimplify.c (gimplify_one_sizepos): For is_gimple_constant (expr)
1969         return early, inline manually is_gimple_sizepos.  Make sure if we
1970         call gimplify_expr we don't end up with a gimple constant.
1971         * tree.c (variably_modified_type_p): Don't return true for
1972         is_gimple_constant (_t).  Inline manually is_gimple_sizepos.
1973         * gimplify.h (is_gimple_sizepos): Remove.
1975 2018-01-16  Richard Sandiford  <richard.sandiford@linaro.org>
1977         PR tree-optimization/83857
1978         * tree-vect-loop.c (vect_analyze_loop_operations): Don't call
1979         vectorizable_live_operation for pure SLP statements.
1980         (vectorizable_live_operation): Handle PHIs.
1982 2018-01-16  Richard Biener  <rguenther@suse.de>
1984         PR tree-optimization/83867
1985         * tree-vect-stmts.c (vect_transform_stmt): Precompute
1986         nested_in_vect_loop_p since the scalar stmt may get invalidated.
1988 2018-01-16  Jakub Jelinek  <jakub@redhat.com>
1990         PR c/83844
1991         * stor-layout.c (handle_warn_if_not_align): Use byte_position and
1992         multiple_of_p instead of unchecked tree_to_uhwi and UHWI check.
1993         If off is not INTEGER_CST, issue a may not be aligned warning
1994         rather than isn't aligned.  Use isn%'t rather than isn't.
1995         * fold-const.c (multiple_of_p) <case BIT_AND_EXPR>: Don't fall through
1996         into MULT_EXPR.
1997         <case MULT_EXPR>: Improve the case when bottom and one of the
1998         MULT_EXPR operands are INTEGER_CSTs and bottom is multiple of that
1999         operand, in that case check if the other operand is multiple of
2000         bottom divided by the INTEGER_CST operand.
2002 2018-01-16  Richard Sandiford  <richard.sandiford@linaro.org>
2004         PR target/83858
2005         * config/pa/pa.h (FUNCTION_ARG_SIZE): Delete.
2006         * config/pa/pa-protos.h (pa_function_arg_size): Declare.
2007         * config/pa/som.h (ASM_DECLARE_FUNCTION_NAME): Use
2008         pa_function_arg_size instead of FUNCTION_ARG_SIZE.
2009         * config/pa/pa.c (pa_function_arg_advance): Likewise.
2010         (pa_function_arg, pa_arg_partial_bytes): Likewise.
2011         (pa_function_arg_size): New function.
2013 2018-01-16  Richard Sandiford  <richard.sandiford@linaro.org>
2015         * fold-const.c (fold_ternary_loc): Construct the vec_perm_indices
2016         in a separate statement.
2018 2018-01-16  Richard Sandiford  <richard.sandiford@linaro.org>
2020         PR tree-optimization/83847
2021         * tree-vect-data-refs.c (vect_analyze_data_ref_accesses): Don't
2022         group gathers and scatters.
2024 2018-01-16  Jakub Jelinek  <jakub@redhat.com>
2026         PR rtl-optimization/86620
2027         * params.def (max-sched-ready-insns): Bump minimum value to 1.
2029         PR rtl-optimization/83213
2030         * recog.c (peep2_attempt): Copy over CROSSING_JUMP_P from peepinsn
2031         to last if both are JUMP_INSNs.
2033         PR tree-optimization/83843
2034         * gimple-ssa-store-merging.c
2035         (imm_store_chain_info::output_merged_store): Handle bit_not_p on
2036         store_immediate_info for bswap/nop orig_stores.
2038 2018-01-15  Andrew Waterman  <andrew@sifive.com>
2040         * config/riscv/riscv.c (riscv_rtx_costs) <MULT>: Increase cost if
2041         !TARGET_MUL.
2042         <UDIV>: Increase cost if !TARGET_DIV.
2044 2018-01-15  Segher Boessenkool  <segher@kernel.crashing.org>
2046         * config/rs6000/rs6000.md (define_attr "type"): Remove delayed_cr.
2047         (define_attr "cr_logical_3op"): New.
2048         (cceq_ior_compare): Adjust.
2049         (cceq_ior_compare_complement): Adjust.
2050         (*cceq_rev_compare): Adjust.
2051         * config/rs6000/rs6000.c (rs6000_adjust_cost): Adjust.
2052         (is_cracked_insn): Adjust.
2053         (insn_must_be_first_in_group): Adjust.
2054         * config/rs6000/40x.md: Adjust.
2055         * config/rs6000/440.md: Adjust.
2056         * config/rs6000/476.md: Adjust.
2057         * config/rs6000/601.md: Adjust.
2058         * config/rs6000/603.md: Adjust.
2059         * config/rs6000/6xx.md: Adjust.
2060         * config/rs6000/7450.md: Adjust.
2061         * config/rs6000/7xx.md: Adjust.
2062         * config/rs6000/8540.md: Adjust.
2063         * config/rs6000/cell.md: Adjust.
2064         * config/rs6000/e300c2c3.md: Adjust.
2065         * config/rs6000/e500mc.md: Adjust.
2066         * config/rs6000/e500mc64.md: Adjust.
2067         * config/rs6000/e5500.md: Adjust.
2068         * config/rs6000/e6500.md: Adjust.
2069         * config/rs6000/mpc.md: Adjust.
2070         * config/rs6000/power4.md: Adjust.
2071         * config/rs6000/power5.md: Adjust.
2072         * config/rs6000/power6.md: Adjust.
2073         * config/rs6000/power7.md: Adjust.
2074         * config/rs6000/power8.md: Adjust.
2075         * config/rs6000/power9.md: Adjust.
2076         * config/rs6000/rs64.md: Adjust.
2077         * config/rs6000/titan.md: Adjust.
2079 2018-01-15  H.J. Lu  <hongjiu.lu@intel.com>
2081         * config/i386/predicates.md (indirect_branch_operand): Rewrite
2082         ix86_indirect_branch_register logic.
2084 2018-01-15  H.J. Lu  <hongjiu.lu@intel.com>
2086         * config/i386/constraints.md (Bs): Update
2087         ix86_indirect_branch_register check.  Don't check
2088         ix86_indirect_branch_register with GOT_memory_operand.
2089         (Bw): Likewise.
2090         * config/i386/predicates.md (GOT_memory_operand): Don't check
2091         ix86_indirect_branch_register here.
2092         (GOT32_symbol_operand): Likewise.
2094 2018-01-15  H.J. Lu  <hongjiu.lu@intel.com>
2096         * config/i386/predicates.md (constant_call_address_operand):
2097         Rewrite ix86_indirect_branch_register logic.
2098         (sibcall_insn_operand): Likewise.
2100 2018-01-15  H.J. Lu  <hongjiu.lu@intel.com>
2102         * config/i386/constraints.md (Bs): Replace
2103         ix86_indirect_branch_thunk_register with
2104         ix86_indirect_branch_register.
2105         (Bw): Likewise.
2106         * config/i386/i386.md (indirect_jump): Likewise.
2107         (tablejump): Likewise.
2108         (*sibcall_memory): Likewise.
2109         (*sibcall_value_memory): Likewise.
2110         Peepholes of indirect call and jump via memory: Likewise.
2111         * config/i386/i386.opt: Likewise.
2112         * config/i386/predicates.md (indirect_branch_operand): Likewise.
2113         (GOT_memory_operand): Likewise.
2114         (call_insn_operand): Likewise.
2115         (sibcall_insn_operand): Likewise.
2116         (GOT32_symbol_operand): Likewise.
2118 2018-01-15  Jakub Jelinek  <jakub@redhat.com>
2120         PR middle-end/83837
2121         * omp-expand.c (expand_omp_atomic_pipeline): Use loaded_val
2122         type rather than type addr's type points to.
2123         (expand_omp_atomic_mutex): Likewise.
2124         (expand_omp_atomic): Likewise.
2126 2018-01-15  H.J. Lu  <hongjiu.lu@intel.com>
2128         PR target/83839
2129         * config/i386/i386.c (output_indirect_thunk_function): Use
2130         ASM_OUTPUT_LABEL, instead of ASM_OUTPUT_DEF, for TARGET_MACHO
2131         for  __x86_return_thunk.
2133 2018-01-15  Richard Biener  <rguenther@suse.de>
2135         PR middle-end/83850
2136         * expmed.c (extract_bit_field_1): Fix typo.
2138 2018-01-15  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
2140         PR target/83687
2141         * config/arm/iterators.md (VF): New mode iterator.
2142         * config/arm/neon.md (neon_vabd<mode>_2): Use the above.
2143         Remove integer-related logic from pattern.
2144         (neon_vabd<mode>_3): Likewise.
2146 2018-01-15  Jakub Jelinek  <jakub@redhat.com>
2148         PR middle-end/82694
2149         * common.opt (fstrict-overflow): No longer an alias.
2150         (fwrapv-pointer): New option.
2151         * tree.h (TYPE_OVERFLOW_WRAPS, TYPE_OVERFLOW_UNDEFINED): Define
2152         also for pointer types based on flag_wrapv_pointer.
2153         * opts.c (common_handle_option) <case OPT_fstrict_overflow>: Set
2154         opts->x_flag_wrap[pv] to !value, clear opts->x_flag_trapv if
2155         opts->x_flag_wrapv got set.
2156         * fold-const.c (fold_comparison, fold_binary_loc): Revert 2017-08-01
2157         changes, just use TYPE_OVERFLOW_UNDEFINED on pointer type instead of
2158         POINTER_TYPE_OVERFLOW_UNDEFINED.
2159         * match.pd: Likewise in address comparison pattern.
2160         * doc/invoke.texi: Document -fwrapv and -fstrict-overflow.
2162 2018-01-15  Richard Biener  <rguenther@suse.de>
2164         PR lto/83804
2165         * tree.c (free_lang_data_in_type): Always unlink TYPE_DECLs
2166         from TYPE_FIELDS.  Free TYPE_BINFO if not used by devirtualization.
2167         Reset type names to their identifier if their TYPE_DECL doesn't
2168         have linkage (and thus is used for ODR and devirt).
2169         (save_debug_info_for_decl): Remove.
2170         (save_debug_info_for_type): Likewise.
2171         (add_tree_to_fld_list): Adjust.
2172         * tree-pretty-print.c (dump_generic_node): Make dumping of
2173         type names more robust.
2175 2018-01-15  Richard Biener  <rguenther@suse.de>
2177         * BASE-VER: Bump to 8.0.1.
2179 2018-01-14  Martin Sebor  <msebor@redhat.com>
2181         PR other/83508
2182         * builtins.c (check_access): Avoid warning when the no-warning bit
2183         is set.
2185 2018-01-14  Cory Fields  <cory-nospam-@coryfields.com>
2187         * tree-ssa-loop-im.c (sort_bbs_in_loop_postorder_cmp): Stabilize sort.
2188         * ira-color (allocno_hard_regs_compare): Likewise.
2190 2018-01-14  Nathan Rossi  <nathan@nathanrossi.com>
2192         PR target/83013
2193         * config/microblaze/microblaze.c (microblaze_asm_output_ident):
2194         Use .pushsection/.popsection.
2196 2018-01-14  Martin Sebor  <msebor@redhat.com>
2198         PR c++/81327
2199         * doc/invoke.texi (-Wlass-memaccess): Document suppression by casting.
2201 2018-01-14  Jakub Jelinek  <jakub@redhat.com>
2203         * config.gcc (i[34567]86-*-*): Remove one duplicate gfniintrin.h
2204         entry from extra_headers.
2205         (x86_64-*-*): Remove two duplicate gfniintrin.h entries from
2206         extra_headers, make the list bitwise identical to the i?86-*-* one.
2208 2018-01-14  H.J. Lu  <hongjiu.lu@intel.com>
2210         * config/i386/i386.c (ix86_set_indirect_branch_type): Disallow
2211         -mcmodel=large with -mindirect-branch=thunk,
2212         -mindirect-branch=thunk-extern, -mfunction-return=thunk and
2213         -mfunction-return=thunk-extern.
2214         * doc/invoke.texi: Document -mcmodel=large is incompatible with
2215         -mindirect-branch=thunk, -mindirect-branch=thunk-extern,
2216         -mfunction-return=thunk and -mfunction-return=thunk-extern.
2218 2018-01-14  H.J. Lu  <hongjiu.lu@intel.com>
2220         * config/i386/i386.c (print_reg): Print the name of the full
2221         integer register without '%'.
2222         (ix86_print_operand): Handle 'V'.
2223          * doc/extend.texi: Document 'V' modifier.
2225 2018-01-14  H.J. Lu  <hongjiu.lu@intel.com>
2227         * config/i386/constraints.md (Bs): Disallow memory operand for
2228         -mindirect-branch-register.
2229         (Bw): Likewise.
2230         * config/i386/predicates.md (indirect_branch_operand): Likewise.
2231         (GOT_memory_operand): Likewise.
2232         (call_insn_operand): Likewise.
2233         (sibcall_insn_operand): Likewise.
2234         (GOT32_symbol_operand): Likewise.
2235         * config/i386/i386.md (indirect_jump): Call convert_memory_address
2236         for -mindirect-branch-register.
2237         (tablejump): Likewise.
2238         (*sibcall_memory): Likewise.
2239         (*sibcall_value_memory): Likewise.
2240         Disallow peepholes of indirect call and jump via memory for
2241         -mindirect-branch-register.
2242         (*call_pop): Replace m with Bw.
2243         (*call_value_pop): Likewise.
2244         (*sibcall_pop_memory): Replace m with Bs.
2245         * config/i386/i386.opt (mindirect-branch-register): New option.
2246         * doc/invoke.texi: Document -mindirect-branch-register option.
2248 2018-01-14  H.J. Lu  <hongjiu.lu@intel.com>
2250         * config/i386/i386-protos.h (ix86_output_function_return): New.
2251         * config/i386/i386.c (ix86_set_indirect_branch_type): Also
2252         set function_return_type.
2253         (indirect_thunk_name): Add ret_p to indicate thunk for function
2254         return.
2255         (output_indirect_thunk_function): Pass false to
2256         indirect_thunk_name.
2257         (ix86_output_indirect_branch_via_reg): Likewise.
2258         (ix86_output_indirect_branch_via_push): Likewise.
2259         (output_indirect_thunk_function): Create alias for function
2260         return thunk if regno < 0.
2261         (ix86_output_function_return): New function.
2262         (ix86_handle_fndecl_attribute): Handle function_return.
2263         (ix86_attribute_table): Add function_return.
2264         * config/i386/i386.h (machine_function): Add
2265         function_return_type.
2266         * config/i386/i386.md (simple_return_internal): Use
2267         ix86_output_function_return.
2268         (simple_return_internal_long): Likewise.
2269         * config/i386/i386.opt (mfunction-return=): New option.
2270         (indirect_branch): Mention -mfunction-return=.
2271         * doc/extend.texi: Document function_return function attribute.
2272         * doc/invoke.texi: Document -mfunction-return= option.
2274 2018-01-14  H.J. Lu  <hongjiu.lu@intel.com>
2276         * config/i386/i386-opts.h (indirect_branch): New.
2277         * config/i386/i386-protos.h (ix86_output_indirect_jmp): Likewise.
2278         * config/i386/i386.c (ix86_using_red_zone): Disallow red-zone
2279         with local indirect jump when converting indirect call and jump.
2280         (ix86_set_indirect_branch_type): New.
2281         (ix86_set_current_function): Call ix86_set_indirect_branch_type.
2282         (indirectlabelno): New.
2283         (indirect_thunk_needed): Likewise.
2284         (indirect_thunk_bnd_needed): Likewise.
2285         (indirect_thunks_used): Likewise.
2286         (indirect_thunks_bnd_used): Likewise.
2287         (INDIRECT_LABEL): Likewise.
2288         (indirect_thunk_name): Likewise.
2289         (output_indirect_thunk): Likewise.
2290         (output_indirect_thunk_function): Likewise.
2291         (ix86_output_indirect_branch_via_reg): Likewise.
2292         (ix86_output_indirect_branch_via_push): Likewise.
2293         (ix86_output_indirect_branch): Likewise.
2294         (ix86_output_indirect_jmp): Likewise.
2295         (ix86_code_end): Call output_indirect_thunk_function if needed.
2296         (ix86_output_call_insn): Call ix86_output_indirect_branch if
2297         needed.
2298         (ix86_handle_fndecl_attribute): Handle indirect_branch.
2299         (ix86_attribute_table): Add indirect_branch.
2300         * config/i386/i386.h (machine_function): Add indirect_branch_type
2301         and has_local_indirect_jump.
2302         * config/i386/i386.md (indirect_jump): Set has_local_indirect_jump
2303         to true.
2304         (tablejump): Likewise.
2305         (*indirect_jump): Use ix86_output_indirect_jmp.
2306         (*tablejump_1): Likewise.
2307         (simple_return_indirect_internal): Likewise.
2308         * config/i386/i386.opt (mindirect-branch=): New option.
2309         (indirect_branch): New.
2310         (keep): Likewise.
2311         (thunk): Likewise.
2312         (thunk-inline): Likewise.
2313         (thunk-extern): Likewise.
2314         * doc/extend.texi: Document indirect_branch function attribute.
2315         * doc/invoke.texi: Document -mindirect-branch= option.
2317 2018-01-14  Jan Hubicka  <hubicka@ucw.cz>
2319         PR ipa/83051
2320         * ipa-inline.c (edge_badness): Tolerate roundoff errors.
2322 2018-01-14  Richard Sandiford  <richard.sandiford@linaro.org>
2324         * ipa-inline.c (want_inline_small_function_p): Return false if
2325         inlining has already failed with CIF_FINAL_ERROR.
2326         (update_caller_keys): Call want_inline_small_function_p before
2327         can_inline_edge_p.
2328         (update_callee_keys): Likewise.
2330 2018-01-10  Kelvin Nilsen  <kelvin@gcc.gnu.org>
2332         * config/rs6000/rs6000-p8swap.c (rs6000_sum_of_two_registers_p):
2333         New function.
2334         (rs6000_quadword_masked_address_p): Likewise.
2335         (quad_aligned_load_p): Likewise.
2336         (quad_aligned_store_p): Likewise.
2337         (const_load_sequence_p): Add comment to describe the outer-most loop.
2338         (mimic_memory_attributes_and_flags): New function.
2339         (rs6000_gen_stvx): Likewise.
2340         (replace_swapped_aligned_store): Likewise.
2341         (rs6000_gen_lvx): Likewise.
2342         (replace_swapped_aligned_load): Likewise.
2343         (replace_swapped_load_constant): Capitalize argument name in
2344         comment describing this function.
2345         (rs6000_analyze_swaps): Add a third pass to search for vector loads
2346         and stores that access quad-word aligned addresses and replace
2347         with stvx or lvx instructions when appropriate.
2348         * config/rs6000/rs6000-protos.h (rs6000_sum_of_two_registers_p):
2349         New function prototype.
2350         (rs6000_quadword_masked_address_p): Likewise.
2351         (rs6000_gen_lvx): Likewise.
2352         (rs6000_gen_stvx): Likewise.
2353         * config/rs6000/vsx.md (*vsx_le_perm_load_<mode>): For modes
2354         VSX_D (V2DF, V2DI), modify this split to select lvx instruction
2355         when memory address is aligned.
2356         (*vsx_le_perm_load_<mode>): For modes VSX_W (V4SF, V4SI), modify
2357         this split to select lvx instruction when memory address is aligned.
2358         (*vsx_le_perm_load_v8hi): Modify this split to select lvx
2359         instruction when memory address is aligned.
2360         (*vsx_le_perm_load_v16qi): Likewise.
2361         (four unnamed splitters): Modify to select the stvx instruction
2362         when memory is aligned.
2364 2018-01-13  Jan Hubicka  <hubicka@ucw.cz>
2366         * predict.c (determine_unlikely_bbs): Handle correctly BBs
2367         which appears in the queue multiple times.
2369 2018-01-13  Richard Sandiford  <richard.sandiford@linaro.org>
2370             Alan Hayward  <alan.hayward@arm.com>
2371             David Sherwood  <david.sherwood@arm.com>
2373         * tree-vectorizer.h (vec_lower_bound): New structure.
2374         (_loop_vec_info): Add check_nonzero and lower_bounds.
2375         (LOOP_VINFO_CHECK_NONZERO): New macro.
2376         (LOOP_VINFO_LOWER_BOUNDS): Likewise.
2377         (LOOP_REQUIRES_VERSIONING_FOR_ALIAS): Check lower_bounds too.
2378         * tree-data-ref.h (dr_with_seg_len): Add access_size and align
2379         fields.  Make seg_len the distance travelled, not including the
2380         access size.
2381         (dr_direction_indicator): Declare.
2382         (dr_zero_step_indicator): Likewise.
2383         (dr_known_forward_stride_p): Likewise.
2384         * tree-data-ref.c: Include stringpool.h, tree-vrp.h and
2385         tree-ssanames.h.
2386         (runtime_alias_check_p): Allow runtime alias checks with
2387         variable strides.
2388         (operator ==): Compare access_size and align.
2389         (prune_runtime_alias_test_list): Rework for new distinction between
2390         the access_size and seg_len.
2391         (create_intersect_range_checks_index): Likewise.  Cope with polynomial
2392         segment lengths.
2393         (get_segment_min_max): New function.
2394         (create_intersect_range_checks): Use it.
2395         (dr_step_indicator): New function.
2396         (dr_direction_indicator): Likewise.
2397         (dr_zero_step_indicator): Likewise.
2398         (dr_known_forward_stride_p): Likewise.
2399         * tree-loop-distribution.c (data_ref_segment_size): Return
2400         DR_STEP * (niters - 1).
2401         (compute_alias_check_pairs): Update call to the dr_with_seg_len
2402         constructor.
2403         * tree-vect-data-refs.c (vect_check_nonzero_value): New function.
2404         (vect_preserves_scalar_order_p): New function, split out from...
2405         (vect_analyze_data_ref_dependence): ...here.  Check for zero steps.
2406         (vect_vfa_segment_size): Return DR_STEP * (length_factor - 1).
2407         (vect_vfa_access_size): New function.
2408         (vect_vfa_align): Likewise.
2409         (vect_compile_time_alias): Take access_size_a and access_b arguments.
2410         (dump_lower_bound): New function.
2411         (vect_check_lower_bound): Likewise.
2412         (vect_small_gap_p): Likewise.
2413         (vectorizable_with_step_bound_p): Likewise.
2414         (vect_prune_runtime_alias_test_list): Ignore cross-iteration
2415         depencies if the vectorization factor is 1.  Convert the checks
2416         for nonzero steps into checks on the bounds of DR_STEP.  Try using
2417         a bunds check for variable steps if the minimum required step is
2418         relatively small. Update calls to the dr_with_seg_len
2419         constructor and to vect_compile_time_alias.
2420         * tree-vect-loop-manip.c (vect_create_cond_for_lower_bounds): New
2421         function.
2422         (vect_loop_versioning): Call it.
2423         * tree-vect-loop.c (vect_analyze_loop_2): Clear LOOP_VINFO_LOWER_BOUNDS
2424         when retrying.
2425         (vect_estimate_min_profitable_iters): Account for any bounds checks.
2427 2018-01-13  Richard Sandiford  <richard.sandiford@linaro.org>
2428             Alan Hayward  <alan.hayward@arm.com>
2429             David Sherwood  <david.sherwood@arm.com>
2431         * doc/sourcebuild.texi (vect_scatter_store): Document.
2432         * optabs.def (scatter_store_optab, mask_scatter_store_optab): New
2433         optabs.
2434         * doc/md.texi (scatter_store@var{m}, mask_scatter_store@var{m}):
2435         Document.
2436         * genopinit.c (main): Add supports_vec_scatter_store and
2437         supports_vec_scatter_store_cached to target_optabs.
2438         * gimple.h (gimple_expr_type): Handle IFN_SCATTER_STORE and
2439         IFN_MASK_SCATTER_STORE.
2440         * internal-fn.def (SCATTER_STORE, MASK_SCATTER_STORE): New internal
2441         functions.
2442         * internal-fn.h (internal_store_fn_p): Declare.
2443         (internal_fn_stored_value_index): Likewise.
2444         * internal-fn.c (scatter_store_direct): New macro.
2445         (expand_scatter_store_optab_fn): New function.
2446         (direct_scatter_store_optab_supported_p): New macro.
2447         (internal_store_fn_p): New function.
2448         (internal_gather_scatter_fn_p): Handle IFN_SCATTER_STORE and
2449         IFN_MASK_SCATTER_STORE.
2450         (internal_fn_mask_index): Likewise.
2451         (internal_fn_stored_value_index): New function.
2452         (internal_gather_scatter_fn_supported_p): Adjust operand numbers
2453         for scatter stores.
2454         * optabs-query.h (supports_vec_scatter_store_p): Declare.
2455         * optabs-query.c (supports_vec_scatter_store_p): New function.
2456         * tree-vectorizer.h (vect_get_store_rhs): Declare.
2457         * tree-vect-data-refs.c (vect_analyze_data_ref_access): Return
2458         true for scatter stores.
2459         (vect_gather_scatter_fn_p): Handle scatter stores too.
2460         (vect_check_gather_scatter): Consider using scatter stores if
2461         supports_vec_scatter_store_p.
2462         * tree-vect-patterns.c (vect_try_gather_scatter_pattern): Handle
2463         scatter stores too.
2464         * tree-vect-stmts.c (exist_non_indexing_operands_for_use_p): Use
2465         internal_fn_stored_value_index.
2466         (check_load_store_masking): Handle scatter stores too.
2467         (vect_get_store_rhs): Make public.
2468         (vectorizable_call): Use internal_store_fn_p.
2469         (vectorizable_store): Handle scatter store internal functions.
2470         (vect_transform_stmt): Compare GROUP_STORE_COUNT with GROUP_SIZE
2471         when deciding whether the end of the group has been reached.
2472         * config/aarch64/aarch64.md (UNSPEC_ST1_SCATTER): New unspec.
2473         * config/aarch64/aarch64-sve.md (scatter_store<mode>): New expander.
2474         (mask_scatter_store<mode>): New insns.
2476 2018-01-13  Richard Sandiford  <richard.sandiford@linaro.org>
2477             Alan Hayward  <alan.hayward@arm.com>
2478             David Sherwood  <david.sherwood@arm.com>
2480         * tree-vectorizer.h (vect_gather_scatter_fn_p): Declare.
2481         * tree-vect-data-refs.c (vect_gather_scatter_fn_p): Make public.
2482         * tree-vect-stmts.c (vect_truncate_gather_scatter_offset): New
2483         function.
2484         (vect_use_strided_gather_scatters_p): Take a masked_p argument.
2485         Use vect_truncate_gather_scatter_offset if we can't treat the
2486         operation as a normal gather load or scatter store.
2487         (get_group_load_store_type): Take the gather_scatter_info
2488         as argument.  Try using a gather load or scatter store for
2489         single-element groups.
2490         (get_load_store_type): Update calls to get_group_load_store_type
2491         and vect_use_strided_gather_scatters_p.
2493 2018-01-13  Richard Sandiford  <richard.sandiford@linaro.org>
2494             Alan Hayward  <alan.hayward@arm.com>
2495             David Sherwood  <david.sherwood@arm.com>
2497         * tree-vectorizer.h (vect_create_data_ref_ptr): Take an extra
2498         optional tree argument.
2499         * tree-vect-data-refs.c (vect_check_gather_scatter): Check for
2500         null target hooks.
2501         (vect_create_data_ref_ptr): Take the iv_step as an optional argument,
2502         but continue to use the current value as a fallback.
2503         (bump_vector_ptr): Use operand_equal_p rather than tree_int_cst_compare
2504         to compare the updates.
2505         * tree-vect-stmts.c (vect_use_strided_gather_scatters_p): New function.
2506         (get_load_store_type): Use it when handling a strided access.
2507         (vect_get_strided_load_store_ops): New function.
2508         (vect_get_data_ptr_increment): Likewise.
2509         (vectorizable_load): Handle strided gather loads.  Always pass
2510         a step to vect_create_data_ref_ptr and bump_vector_ptr.
2512 2018-01-13  Richard Sandiford  <richard.sandiford@linaro.org>
2513             Alan Hayward  <alan.hayward@arm.com>
2514             David Sherwood  <david.sherwood@arm.com>
2516         * doc/md.texi (gather_load@var{m}): Document.
2517         (mask_gather_load@var{m}): Likewise.
2518         * genopinit.c (main): Add supports_vec_gather_load and
2519         supports_vec_gather_load_cached to target_optabs.
2520         * optabs-tree.c (init_tree_optimization_optabs): Use
2521         ggc_cleared_alloc to allocate target_optabs.
2522         * optabs.def (gather_load_optab, mask_gather_laod_optab): New optabs.
2523         * internal-fn.def (GATHER_LOAD, MASK_GATHER_LOAD): New internal
2524         functions.
2525         * internal-fn.h (internal_load_fn_p): Declare.
2526         (internal_gather_scatter_fn_p): Likewise.
2527         (internal_fn_mask_index): Likewise.
2528         (internal_gather_scatter_fn_supported_p): Likewise.
2529         * internal-fn.c (gather_load_direct): New macro.
2530         (expand_gather_load_optab_fn): New function.
2531         (direct_gather_load_optab_supported_p): New macro.
2532         (direct_internal_fn_optab): New function.
2533         (internal_load_fn_p): Likewise.
2534         (internal_gather_scatter_fn_p): Likewise.
2535         (internal_fn_mask_index): Likewise.
2536         (internal_gather_scatter_fn_supported_p): Likewise.
2537         * optabs-query.c (supports_at_least_one_mode_p): New function.
2538         (supports_vec_gather_load_p): Likewise.
2539         * optabs-query.h (supports_vec_gather_load_p): Declare.
2540         * tree-vectorizer.h (gather_scatter_info): Add ifn, element_type
2541         and memory_type field.
2542         (NUM_PATTERNS): Bump to 15.
2543         * tree-vect-data-refs.c: Include internal-fn.h.
2544         (vect_gather_scatter_fn_p): New function.
2545         (vect_describe_gather_scatter_call): Likewise.
2546         (vect_check_gather_scatter): Try using internal functions for
2547         gather loads.  Recognize existing calls to a gather load function.
2548         (vect_analyze_data_refs): Consider using gather loads if
2549         supports_vec_gather_load_p.
2550         * tree-vect-patterns.c (vect_get_load_store_mask): New function.
2551         (vect_get_gather_scatter_offset_type): Likewise.
2552         (vect_convert_mask_for_vectype): Likewise.
2553         (vect_add_conversion_to_patterm): Likewise.
2554         (vect_try_gather_scatter_pattern): Likewise.
2555         (vect_recog_gather_scatter_pattern): New pattern recognizer.
2556         (vect_vect_recog_func_ptrs): Add it.
2557         * tree-vect-stmts.c (exist_non_indexing_operands_for_use_p): Use
2558         internal_fn_mask_index and internal_gather_scatter_fn_p.
2559         (check_load_store_masking): Take the gather_scatter_info as an
2560         argument and handle gather loads.
2561         (vect_get_gather_scatter_ops): New function.
2562         (vectorizable_call): Check internal_load_fn_p.
2563         (vectorizable_load): Likewise.  Handle gather load internal
2564         functions.
2565         (vectorizable_store): Update call to check_load_store_masking.
2566         * config/aarch64/aarch64.md (UNSPEC_LD1_GATHER): New unspec.
2567         * config/aarch64/iterators.md (SVE_S, SVE_D): New mode iterators.
2568         * config/aarch64/predicates.md (aarch64_gather_scale_operand_w)
2569         (aarch64_gather_scale_operand_d): New predicates.
2570         * config/aarch64/aarch64-sve.md (gather_load<mode>): New expander.
2571         (mask_gather_load<mode>): New insns.
2573 2018-01-13  Richard Sandiford  <richard.sandiford@linaro.org>
2574             Alan Hayward  <alan.hayward@arm.com>
2575             David Sherwood  <david.sherwood@arm.com>
2577         * optabs.def (fold_left_plus_optab): New optab.
2578         * doc/md.texi (fold_left_plus_@var{m}): Document.
2579         * internal-fn.def (IFN_FOLD_LEFT_PLUS): New internal function.
2580         * internal-fn.c (fold_left_direct): Define.
2581         (expand_fold_left_optab_fn): Likewise.
2582         (direct_fold_left_optab_supported_p): Likewise.
2583         * fold-const-call.c (fold_const_fold_left): New function.
2584         (fold_const_call): Use it to fold CFN_FOLD_LEFT_PLUS.
2585         * tree-parloops.c (valid_reduction_p): New function.
2586         (gather_scalar_reductions): Use it.
2587         * tree-vectorizer.h (FOLD_LEFT_REDUCTION): New vect_reduction_type.
2588         (vect_finish_replace_stmt): Declare.
2589         * tree-vect-loop.c (fold_left_reduction_fn): New function.
2590         (needs_fold_left_reduction_p): New function, split out from...
2591         (vect_is_simple_reduction): ...here.  Accept reductions that
2592         forbid reassociation, but give them type FOLD_LEFT_REDUCTION.
2593         (vect_force_simple_reduction): Also store the reduction type in
2594         the assignment's STMT_VINFO_REDUC_TYPE.
2595         (vect_model_reduction_cost): Handle FOLD_LEFT_REDUCTION.
2596         (merge_with_identity): New function.
2597         (vect_expand_fold_left): Likewise.
2598         (vectorize_fold_left_reduction): Likewise.
2599         (vectorizable_reduction): Handle FOLD_LEFT_REDUCTION.  Leave the
2600         scalar phi in place for it.  Check for target support and reject
2601         cases that would reassociate the operation.  Defer the transform
2602         phase to vectorize_fold_left_reduction.
2603         * config/aarch64/aarch64.md (UNSPEC_FADDA): New unspec.
2604         * config/aarch64/aarch64-sve.md (fold_left_plus_<mode>): New expander.
2605         (*fold_left_plus_<mode>, *pred_fold_left_plus_<mode>): New insns.
2607 2018-01-13  Richard Sandiford  <richard.sandiford@linaro.org>
2609         * tree-if-conv.c (predicate_mem_writes): Remove redundant
2610         call to ifc_temp_var.
2612 2018-01-13  Richard Sandiford  <richard.sandiford@linaro.org>
2613             Alan Hayward  <alan.hayward@arm.com>
2614             David Sherwood  <david.sherwood@arm.com>
2616         * target.def (legitimize_address_displacement): Take the original
2617         offset as a poly_int.
2618         * targhooks.h (default_legitimize_address_displacement): Update
2619         accordingly.
2620         * targhooks.c (default_legitimize_address_displacement): Likewise.
2621         * doc/tm.texi: Regenerate.
2622         * lra-constraints.c (base_plus_disp_to_reg): Take the displacement
2623         as an argument, moving assert of ad->disp == ad->disp_term to...
2624         (process_address_1): ...here.  Update calls to base_plus_disp_to_reg.
2625         Try calling targetm.legitimize_address_displacement before expanding
2626         the address rather than afterwards, and adjust for the new interface.
2627         * config/aarch64/aarch64.c (aarch64_legitimize_address_displacement):
2628         Match the new hook interface.  Handle SVE addresses.
2629         * config/sh/sh.c (sh_legitimize_address_displacement): Make the
2630         new hook interface.
2632 2018-01-13  Richard Sandiford  <richard.sandiford@linaro.org>
2634         * Makefile.in (OBJS): Add early-remat.o.
2635         * target.def (select_early_remat_modes): New hook.
2636         * doc/tm.texi.in (TARGET_SELECT_EARLY_REMAT_MODES): New hook.
2637         * doc/tm.texi: Regenerate.
2638         * targhooks.h (default_select_early_remat_modes): Declare.
2639         * targhooks.c (default_select_early_remat_modes): New function.
2640         * timevar.def (TV_EARLY_REMAT): New timevar.
2641         * passes.def (pass_early_remat): New pass.
2642         * tree-pass.h (make_pass_early_remat): Declare.
2643         * early-remat.c: New file.
2644         * config/aarch64/aarch64.c (aarch64_select_early_remat_modes): New
2645         function.
2646         (TARGET_SELECT_EARLY_REMAT_MODES): Define.
2648 2018-01-13  Richard Sandiford  <richard.sandiford@linaro.org>
2649             Alan Hayward  <alan.hayward@arm.com>
2650             David Sherwood  <david.sherwood@arm.com>
2652         * tree-vect-loop-manip.c (vect_gen_scalar_loop_niters): Replace
2653         vfm1 with a bound_epilog parameter.
2654         (vect_do_peeling): Update calls accordingly, and move the prologue
2655         call earlier in the function.  Treat the base bound_epilog as 0 for
2656         fully-masked loops and retain vf - 1 for other loops.  Add 1 to
2657         this base when peeling for gaps.
2658         * tree-vect-loop.c (vect_analyze_loop_2): Allow peeling for gaps
2659         with fully-masked loops.
2660         (vect_estimate_min_profitable_iters): Handle the single peeled
2661         iteration in that case.
2663 2018-01-13  Richard Sandiford  <richard.sandiford@linaro.org>
2664             Alan Hayward  <alan.hayward@arm.com>
2665             David Sherwood  <david.sherwood@arm.com>
2667         * tree-vect-data-refs.c (vect_analyze_group_access_1): Allow
2668         single-element interleaving even if the size is not a power of 2.
2669         * tree-vect-stmts.c (get_load_store_type): Disallow elementwise
2670         accesses for single-element interleaving if the group size is
2671         not a power of 2.
2673 2018-01-13  Richard Sandiford  <richard.sandiford@linaro.org>
2674             Alan Hayward  <alan.hayward@arm.com>
2675             David Sherwood  <david.sherwood@arm.com>
2677         * doc/md.texi (fold_extract_last_@var{m}): Document.
2678         * doc/sourcebuild.texi (vect_fold_extract_last): Likewise.
2679         * optabs.def (fold_extract_last_optab): New optab.
2680         * internal-fn.def (FOLD_EXTRACT_LAST): New internal function.
2681         * internal-fn.c (fold_extract_direct): New macro.
2682         (expand_fold_extract_optab_fn): Likewise.
2683         (direct_fold_extract_optab_supported_p): Likewise.
2684         * tree-vectorizer.h (EXTRACT_LAST_REDUCTION): New vect_reduction_type.
2685         * tree-vect-loop.c (vect_model_reduction_cost): Handle
2686         EXTRACT_LAST_REDUCTION.
2687         (get_initial_def_for_reduction): Do not create an initial vector
2688         for EXTRACT_LAST_REDUCTION reductions.
2689         (vectorizable_reduction): Leave the scalar phi in place for
2690         EXTRACT_LAST_REDUCTIONs.  Try using EXTRACT_LAST_REDUCTION
2691         ahead of INTEGER_INDUC_COND_REDUCTION.  Do not check for an
2692         epilogue code for EXTRACT_LAST_REDUCTION and defer the
2693         transform phase to vectorizable_condition.
2694         * tree-vect-stmts.c (vect_finish_stmt_generation_1): New function,
2695         split out from...
2696         (vect_finish_stmt_generation): ...here.
2697         (vect_finish_replace_stmt): New function.
2698         (vectorizable_condition): Handle EXTRACT_LAST_REDUCTION.
2699         * config/aarch64/aarch64-sve.md (fold_extract_last_<mode>): New
2700         pattern.
2701         * config/aarch64/aarch64.md (UNSPEC_CLASTB): New unspec.
2703 2018-01-13  Richard Sandiford  <richard.sandiford@linaro.org>
2704             Alan Hayward  <alan.hayward@arm.com>
2705             David Sherwood  <david.sherwood@arm.com>
2707         * doc/md.texi (extract_last_@var{m}): Document.
2708         * optabs.def (extract_last_optab): New optab.
2709         * internal-fn.def (EXTRACT_LAST): New internal function.
2710         * internal-fn.c (cond_unary_direct): New macro.
2711         (expand_cond_unary_optab_fn): Likewise.
2712         (direct_cond_unary_optab_supported_p): Likewise.
2713         * tree-vect-loop.c (vectorizable_live_operation): Allow fully-masked
2714         loops using EXTRACT_LAST.
2715         * config/aarch64/aarch64-sve.md (aarch64_sve_lastb<mode>): Rename to...
2716         (extract_last_<mode>): ...this optab.
2717         (vec_extract<mode><Vel>): Update accordingly.
2719 2018-01-13  Richard Sandiford  <richard.sandiford@linaro.org>
2720             Alan Hayward  <alan.hayward@arm.com>
2721             David Sherwood  <david.sherwood@arm.com>
2723         * target.def (empty_mask_is_expensive): New hook.
2724         * doc/tm.texi.in (TARGET_VECTORIZE_EMPTY_MASK_IS_EXPENSIVE): New hook.
2725         * doc/tm.texi: Regenerate.
2726         * targhooks.h (default_empty_mask_is_expensive): Declare.
2727         * targhooks.c (default_empty_mask_is_expensive): New function.
2728         * tree-vectorizer.c (vectorize_loops): Only call optimize_mask_stores
2729         if the target says that empty masks are expensive.
2730         * config/aarch64/aarch64.c (aarch64_empty_mask_is_expensive):
2731         New function.
2732         (TARGET_VECTORIZE_EMPTY_MASK_IS_EXPENSIVE): Redefine.
2734 2018-01-13  Richard Sandiford  <richard.sandiford@linaro.org>
2735             Alan Hayward  <alan.hayward@arm.com>
2736             David Sherwood  <david.sherwood@arm.com>
2738         * tree-vectorizer.h (_loop_vec_info::mask_skip_niters): New field.
2739         (LOOP_VINFO_MASK_SKIP_NITERS): New macro.
2740         (vect_use_loop_mask_for_alignment_p): New function.
2741         (vect_prepare_for_masked_peels, vect_gen_while_not): Declare.
2742         * tree-vect-loop-manip.c (vect_set_loop_masks_directly): Add an
2743         niters_skip argument.  Make sure that the first niters_skip elements
2744         of the first iteration are inactive.
2745         (vect_set_loop_condition_masked): Handle LOOP_VINFO_MASK_SKIP_NITERS.
2746         Update call to vect_set_loop_masks_directly.
2747         (get_misalign_in_elems): New function, split out from...
2748         (vect_gen_prolog_loop_niters): ...here.
2749         (vect_update_init_of_dr): Take a code argument that specifies whether
2750         the adjustment should be added or subtracted.
2751         (vect_update_init_of_drs): Likewise.
2752         (vect_prepare_for_masked_peels): New function.
2753         (vect_do_peeling): Skip prologue peeling if we're using a mask
2754         instead.  Update call to vect_update_inits_of_drs.
2755         * tree-vect-loop.c (_loop_vec_info::_loop_vec_info): Initialize
2756         mask_skip_niters.
2757         (vect_analyze_loop_2): Allow fully-masked loops with peeling for
2758         alignment.  Do not include the number of peeled iterations in
2759         the minimum threshold in that case.
2760         (vectorizable_induction): Adjust the start value down by
2761         LOOP_VINFO_MASK_SKIP_NITERS iterations.
2762         (vect_transform_loop): Call vect_prepare_for_masked_peels.
2763         Take the number of skipped iterations into account when calculating
2764         the loop bounds.
2765         * tree-vect-stmts.c (vect_gen_while_not): New function.
2767 2018-01-13  Richard Sandiford  <richard.sandiford@linaro.org>
2768             Alan Hayward  <alan.hayward@arm.com>
2769             David Sherwood  <david.sherwood@arm.com>
2771         * doc/sourcebuild.texi (vect_fully_masked): Document.
2772         * params.def (PARAM_MIN_VECT_LOOP_BOUND): Change minimum and
2773         default value to 0.
2774         * tree-vect-loop.c (vect_analyze_loop_costing): New function,
2775         split out from...
2776         (vect_analyze_loop_2): ...here. Don't check the vectorization
2777         factor against the number of loop iterations if the loop is
2778         fully-masked.
2780 2018-01-13  Richard Sandiford  <richard.sandiford@linaro.org>
2781             Alan Hayward  <alan.hayward@arm.com>
2782             David Sherwood  <david.sherwood@arm.com>
2784         * tree-ssa-loop-ivopts.c (USE_ADDRESS): Split into...
2785         (USE_REF_ADDRESS, USE_PTR_ADDRESS): ...these new use types.
2786         (dump_groups): Update accordingly.
2787         (iv_use::mem_type): New member variable.
2788         (address_p): New function.
2789         (record_use): Add a mem_type argument and initialize the new
2790         mem_type field.
2791         (record_group_use): Add a mem_type argument.  Use address_p.
2792         Remove obsolete null checks of base_object.  Update call to record_use.
2793         (find_interesting_uses_op): Update call to record_group_use.
2794         (find_interesting_uses_cond): Likewise.
2795         (find_interesting_uses_address): Likewise.
2796         (get_mem_type_for_internal_fn): New function.
2797         (find_address_like_use): Likewise.
2798         (find_interesting_uses_stmt): Try find_address_like_use before
2799         calling find_interesting_uses_op.
2800         (addr_offset_valid_p): Use the iv mem_type field as the type
2801         of the addressed memory.
2802         (add_autoinc_candidates): Likewise.
2803         (get_address_cost): Likewise.
2804         (split_small_address_groups_p): Use address_p.
2805         (split_address_groups): Likewise.
2806         (add_iv_candidate_for_use): Likewise.
2807         (autoinc_possible_for_pair): Likewise.
2808         (rewrite_groups): Likewise.
2809         (get_use_type): Check for USE_REF_ADDRESS instead of USE_ADDRESS.
2810         (determine_group_iv_cost): Update after split of USE_ADDRESS.
2811         (get_alias_ptr_type_for_ptr_address): New function.
2812         (rewrite_use_address): Rewrite address uses in calls that were
2813         identified by find_address_like_use.
2815 2018-01-13  Richard Sandiford  <richard.sandiford@linaro.org>
2816             Alan Hayward  <alan.hayward@arm.com>
2817             David Sherwood  <david.sherwood@arm.com>
2819         * expr.c (expand_expr_addr_expr_1): Handle ADDR_EXPRs of
2820         TARGET_MEM_REFs.
2821         * gimple-expr.h (is_gimple_addressable: Likewise.
2822         * gimple-expr.c (is_gimple_address): Likewise.
2823         * internal-fn.c (expand_call_mem_ref): New function.
2824         (expand_mask_load_optab_fn): Use it.
2825         (expand_mask_store_optab_fn): Likewise.
2827 2018-01-13  Richard Sandiford  <richard.sandiford@linaro.org>
2828             Alan Hayward  <alan.hayward@arm.com>
2829             David Sherwood  <david.sherwood@arm.com>
2831         * doc/md.texi (cond_add@var{mode}, cond_sub@var{mode})
2832         (cond_and@var{mode}, cond_ior@var{mode}, cond_xor@var{mode})
2833         (cond_smin@var{mode}, cond_smax@var{mode}, cond_umin@var{mode})
2834         (cond_umax@var{mode}): Document.
2835         * optabs.def (cond_add_optab, cond_sub_optab, cond_and_optab)
2836         (cond_ior_optab, cond_xor_optab, cond_smin_optab, cond_smax_optab)
2837         (cond_umin_optab, cond_umax_optab): New optabs.
2838         * internal-fn.def (COND_ADD, COND_SUB, COND_MIN, COND_MAX, COND_AND)
2839         (COND_IOR, COND_XOR): New internal functions.
2840         * internal-fn.h (get_conditional_internal_fn): Declare.
2841         * internal-fn.c (cond_binary_direct): New macro.
2842         (expand_cond_binary_optab_fn): Likewise.
2843         (direct_cond_binary_optab_supported_p): Likewise.
2844         (get_conditional_internal_fn): New function.
2845         * tree-vect-loop.c (vectorizable_reduction): Handle fully-masked loops.
2846         Cope with reduction statements that are vectorized as calls rather
2847         than assignments.
2848         * config/aarch64/aarch64-sve.md (cond_<optab><mode>): New insns.
2849         * config/aarch64/iterators.md (UNSPEC_COND_ADD, UNSPEC_COND_SUB)
2850         (UNSPEC_COND_SMAX, UNSPEC_COND_UMAX, UNSPEC_COND_SMIN)
2851         (UNSPEC_COND_UMIN, UNSPEC_COND_AND, UNSPEC_COND_ORR)
2852         (UNSPEC_COND_EOR): New unspecs.
2853         (optab): Add mappings for them.
2854         (SVE_COND_INT_OP, SVE_COND_FP_OP): New int iterators.
2855         (sve_int_op, sve_fp_op): New int attributes.
2857 2018-01-13  Richard Sandiford  <richard.sandiford@linaro.org>
2858             Alan Hayward  <alan.hayward@arm.com>
2859             David Sherwood  <david.sherwood@arm.com>
2861         * optabs.def (while_ult_optab): New optab.
2862         * doc/md.texi (while_ult@var{m}@var{n}): Document.
2863         * internal-fn.def (WHILE_ULT): New internal function.
2864         * internal-fn.h (direct_internal_fn_supported_p): New override
2865         that takes two types as argument.
2866         * internal-fn.c (while_direct): New macro.
2867         (expand_while_optab_fn): New function.
2868         (convert_optab_supported_p): Likewise.
2869         (direct_while_optab_supported_p): New macro.
2870         * wide-int.h (wi::udiv_ceil): New function.
2871         * tree-vectorizer.h (rgroup_masks): New structure.
2872         (vec_loop_masks): New typedef.
2873         (_loop_vec_info): Add masks, mask_compare_type, can_fully_mask_p
2874         and fully_masked_p.
2875         (LOOP_VINFO_CAN_FULLY_MASK_P, LOOP_VINFO_FULLY_MASKED_P)
2876         (LOOP_VINFO_MASKS, LOOP_VINFO_MASK_COMPARE_TYPE): New macros.
2877         (vect_max_vf): New function.
2878         (slpeel_make_loop_iterate_ntimes): Delete.
2879         (vect_set_loop_condition, vect_get_loop_mask_type, vect_gen_while)
2880         (vect_halve_mask_nunits, vect_double_mask_nunits): Declare.
2881         (vect_record_loop_mask, vect_get_loop_mask): Likewise.
2882         * tree-vect-loop-manip.c: Include tree-ssa-loop-niter.h,
2883         internal-fn.h, stor-layout.h and optabs-query.h.
2884         (vect_set_loop_mask): New function.
2885         (add_preheader_seq): Likewise.
2886         (add_header_seq): Likewise.
2887         (interleave_supported_p): Likewise.
2888         (vect_maybe_permute_loop_masks): Likewise.
2889         (vect_set_loop_masks_directly): Likewise.
2890         (vect_set_loop_condition_masked): Likewise.
2891         (vect_set_loop_condition_unmasked): New function, split out from
2892         slpeel_make_loop_iterate_ntimes.
2893         (slpeel_make_loop_iterate_ntimes): Rename to..
2894         (vect_set_loop_condition): ...this.  Use vect_set_loop_condition_masked
2895         for fully-masked loops and vect_set_loop_condition_unmasked otherwise.
2896         (vect_do_peeling): Update call accordingly.
2897         (vect_gen_vector_loop_niters): Use VF as the step for fully-masked
2898         loops.
2899         * tree-vect-loop.c (_loop_vec_info::_loop_vec_info): Initialize
2900         mask_compare_type, can_fully_mask_p and fully_masked_p.
2901         (release_vec_loop_masks): New function.
2902         (_loop_vec_info): Use it to free the loop masks.
2903         (can_produce_all_loop_masks_p): New function.
2904         (vect_get_max_nscalars_per_iter): Likewise.
2905         (vect_verify_full_masking): Likewise.
2906         (vect_analyze_loop_2): Save LOOP_VINFO_CAN_FULLY_MASK_P around
2907         retries, and free the mask rgroups before retrying.  Check loop-wide
2908         reasons for disallowing fully-masked loops.  Make the final decision
2909         about whether use a fully-masked loop or not.
2910         (vect_estimate_min_profitable_iters): Do not assume that peeling
2911         for the number of iterations will be needed for fully-masked loops.
2912         (vectorizable_reduction): Disable fully-masked loops.
2913         (vectorizable_live_operation): Likewise.
2914         (vect_halve_mask_nunits): New function.
2915         (vect_double_mask_nunits): Likewise.
2916         (vect_record_loop_mask): Likewise.
2917         (vect_get_loop_mask): Likewise.
2918         (vect_transform_loop): Handle the case in which the final loop
2919         iteration might handle a partial vector.  Call vect_set_loop_condition
2920         instead of slpeel_make_loop_iterate_ntimes.
2921         * tree-vect-stmts.c: Include tree-ssa-loop-niter.h and gimple-fold.h.
2922         (check_load_store_masking): New function.
2923         (prepare_load_store_mask): Likewise.
2924         (vectorizable_store): Handle fully-masked loops.
2925         (vectorizable_load): Likewise.
2926         (supportable_widening_operation): Use vect_halve_mask_nunits for
2927         booleans.
2928         (supportable_narrowing_operation): Likewise vect_double_mask_nunits.
2929         (vect_gen_while): New function.
2930         * config/aarch64/aarch64.md (umax<mode>3): New expander.
2931         (aarch64_uqdec<mode>): New insn.
2933 2018-01-13  Richard Sandiford  <richard.sandiford@linaro.org>
2934             Alan Hayward  <alan.hayward@arm.com>
2935             David Sherwood  <david.sherwood@arm.com>
2937         * optabs.def (reduc_and_scal_optab, reduc_ior_scal_optab)
2938         (reduc_xor_scal_optab): New optabs.
2939         * doc/md.texi (reduc_and_scal_@var{m}, reduc_ior_scal_@var{m})
2940         (reduc_xor_scal_@var{m}): Document.
2941         * doc/sourcebuild.texi (vect_logical_reduc): Likewise.
2942         * internal-fn.def (IFN_REDUC_AND, IFN_REDUC_IOR, IFN_REDUC_XOR): New
2943         internal functions.
2944         * fold-const-call.c (fold_const_call): Handle them.
2945         * tree-vect-loop.c (reduction_fn_for_scalar_code): Return the new
2946         internal functions for BIT_AND_EXPR, BIT_IOR_EXPR and BIT_XOR_EXPR.
2947         * config/aarch64/aarch64-sve.md (reduc_<bit_reduc>_scal_<mode>):
2948         (*reduc_<bit_reduc>_scal_<mode>): New patterns.
2949         * config/aarch64/iterators.md (UNSPEC_ANDV, UNSPEC_ORV)
2950         (UNSPEC_XORV): New unspecs.
2951         (optab): Add entries for them.
2952         (BITWISEV): New int iterator.
2953         (bit_reduc_op): New int attributes.
2955 2018-01-13  Richard Sandiford  <richard.sandiford@linaro.org>
2956             Alan Hayward  <alan.hayward@arm.com>
2957             David Sherwood  <david.sherwood@arm.com>
2959         * doc/md.texi (vec_shl_insert_@var{m}): New optab.
2960         * internal-fn.def (VEC_SHL_INSERT): New internal function.
2961         * optabs.def (vec_shl_insert_optab): New optab.
2962         * tree-vectorizer.h (can_duplicate_and_interleave_p): Declare.
2963         (duplicate_and_interleave): Likewise.
2964         * tree-vect-loop.c: Include internal-fn.h.
2965         (neutral_op_for_slp_reduction): New function, split out from
2966         get_initial_defs_for_reduction.
2967         (get_initial_def_for_reduction): Handle option 2 for variable-length
2968         vectors by loading the neutral value into a vector and then shifting
2969         the initial value into element 0.
2970         (get_initial_defs_for_reduction): Replace the code argument with
2971         the neutral value calculated by neutral_op_for_slp_reduction.
2972         Use gimple_build_vector for constant-length vectors.
2973         Use IFN_VEC_SHL_INSERT for variable-length vectors if all
2974         but the first group_size elements have a neutral value.
2975         Use duplicate_and_interleave otherwise.
2976         (vect_create_epilog_for_reduction): Take a neutral_op parameter.
2977         Update call to get_initial_defs_for_reduction.  Handle SLP
2978         reductions for variable-length vectors by creating one vector
2979         result for each scalar result, with the elements associated
2980         with other scalar results stubbed out with the neutral value.
2981         (vectorizable_reduction): Call neutral_op_for_slp_reduction.
2982         Require IFN_VEC_SHL_INSERT for double reductions on
2983         variable-length vectors, or SLP reductions that have
2984         a neutral value.  Require can_duplicate_and_interleave_p
2985         support for variable-length unchained SLP reductions if there
2986         is no neutral value, such as for MIN/MAX reductions.  Also require
2987         the number of vector elements to be a multiple of the number of
2988         SLP statements when doing variable-length unchained SLP reductions.
2989         Update call to vect_create_epilog_for_reduction.
2990         * tree-vect-slp.c (can_duplicate_and_interleave_p): Make public
2991         and remove initial values.
2992         (duplicate_and_interleave): Make public.
2993         * config/aarch64/aarch64.md (UNSPEC_INSR): New unspec.
2994         * config/aarch64/aarch64-sve.md (vec_shl_insert_<mode>): New insn.
2996 2018-01-13  Richard Sandiford  <richard.sandiford@linaro.org>
2997             Alan Hayward  <alan.hayward@arm.com>
2998             David Sherwood  <david.sherwood@arm.com>
3000         * tree-vect-slp.c: Include gimple-fold.h and internal-fn.h
3001         (can_duplicate_and_interleave_p): New function.
3002         (vect_get_and_check_slp_defs): Take the vector of statements
3003         rather than just the current one.  Remove excess parentheses.
3004         Restriction rejectinon of vect_constant_def and vect_external_def
3005         for variable-length vectors to boolean types, or types for which
3006         can_duplicate_and_interleave_p is false.
3007         (vect_build_slp_tree_2): Update call to vect_get_and_check_slp_defs.
3008         (duplicate_and_interleave): New function.
3009         (vect_get_constant_vectors): Use gimple_build_vector for
3010         constant-length vectors and suitable variable-length constant
3011         vectors.  Use duplicate_and_interleave for other variable-length
3012         vectors.  Don't defer the update when inserting new statements.
3014 2018-01-13  Richard Sandiford  <richard.sandiford@linaro.org>
3015             Alan Hayward  <alan.hayward@arm.com>
3016             David Sherwood  <david.sherwood@arm.com>
3018         * tree-vect-loop.c (vect_estimate_min_profitable_iters): Make sure
3019         min_profitable_iters doesn't go negative.
3021 2018-01-13  Richard Sandiford  <richard.sandiford@linaro.org>
3022             Alan Hayward  <alan.hayward@arm.com>
3023             David Sherwood  <david.sherwood@arm.com>
3025         * doc/md.texi (vec_mask_load_lanes@var{m}@var{n}): Document.
3026         (vec_mask_store_lanes@var{m}@var{n}): Likewise.
3027         * optabs.def (vec_mask_load_lanes_optab): New optab.
3028         (vec_mask_store_lanes_optab): Likewise.
3029         * internal-fn.def (MASK_LOAD_LANES): New internal function.
3030         (MASK_STORE_LANES): Likewise.
3031         * internal-fn.c (mask_load_lanes_direct): New macro.
3032         (mask_store_lanes_direct): Likewise.
3033         (expand_mask_load_optab_fn): Handle masked operations.
3034         (expand_mask_load_lanes_optab_fn): New macro.
3035         (expand_mask_store_optab_fn): Handle masked operations.
3036         (expand_mask_store_lanes_optab_fn): New macro.
3037         (direct_mask_load_lanes_optab_supported_p): Likewise.
3038         (direct_mask_store_lanes_optab_supported_p): Likewise.
3039         * tree-vectorizer.h (vect_store_lanes_supported): Take a masked_p
3040         parameter.
3041         (vect_load_lanes_supported): Likewise.
3042         * tree-vect-data-refs.c (strip_conversion): New function.
3043         (can_group_stmts_p): Likewise.
3044         (vect_analyze_data_ref_accesses): Use it instead of checking
3045         for a pair of assignments.
3046         (vect_store_lanes_supported): Take a masked_p parameter.
3047         (vect_load_lanes_supported): Likewise.
3048         * tree-vect-loop.c (vect_analyze_loop_2): Update calls to
3049         vect_store_lanes_supported and vect_load_lanes_supported.
3050         * tree-vect-slp.c (vect_analyze_slp_instance): Likewise.
3051         * tree-vect-stmts.c (get_group_load_store_type): Take a masked_p
3052         parameter.  Don't allow gaps for masked accesses.
3053         Use vect_get_store_rhs.  Update calls to vect_store_lanes_supported
3054         and vect_load_lanes_supported.
3055         (get_load_store_type): Take a masked_p parameter and update
3056         call to get_group_load_store_type.
3057         (vectorizable_store): Update call to get_load_store_type.
3058         Handle IFN_MASK_STORE_LANES.
3059         (vectorizable_load): Update call to get_load_store_type.
3060         Handle IFN_MASK_LOAD_LANES.
3062 2018-01-13  Richard Sandiford  <richard.sandiford@linaro.org>
3063             Alan Hayward  <alan.hayward@arm.com>
3064             David Sherwood  <david.sherwood@arm.com>
3066         * config/aarch64/aarch64-modes.def: Define x2, x3 and x4 vector
3067         modes for SVE.
3068         * config/aarch64/aarch64-protos.h
3069         (aarch64_sve_struct_memory_operand_p): Declare.
3070         * config/aarch64/iterators.md (SVE_STRUCT): New mode iterator.
3071         (vector_count, insn_length, VSINGLE, vsingle): New mode attributes.
3072         (VPRED, vpred): Handle SVE structure modes.
3073         * config/aarch64/constraints.md (Utx): New constraint.
3074         * config/aarch64/predicates.md (aarch64_sve_struct_memory_operand)
3075         (aarch64_sve_struct_nonimmediate_operand): New predicates.
3076         * config/aarch64/aarch64.md (UNSPEC_LDN, UNSPEC_STN): New unspecs.
3077         * config/aarch64/aarch64-sve.md (mov<mode>, *aarch64_sve_mov<mode>_le)
3078         (*aarch64_sve_mov<mode>_be, pred_mov<mode>): New patterns for
3079         structure modes.  Split into pieces after RA.
3080         (vec_load_lanes<mode><vsingle>, vec_mask_load_lanes<mode><vsingle>)
3081         (vec_store_lanes<mode><vsingle>, vec_mask_store_lanes<mode><vsingle>):
3082         New patterns.
3083         * config/aarch64/aarch64.c (aarch64_classify_vector_mode): Handle
3084         SVE structure modes.
3085         (aarch64_classify_address): Likewise.
3086         (sizetochar): Move earlier in file.
3087         (aarch64_print_operand): Handle SVE register lists.
3088         (aarch64_array_mode): New function.
3089         (aarch64_sve_struct_memory_operand_p): Likewise.
3090         (TARGET_ARRAY_MODE): Redefine.
3092 2018-01-13  Richard Sandiford  <richard.sandiford@linaro.org>
3093             Alan Hayward  <alan.hayward@arm.com>
3094             David Sherwood  <david.sherwood@arm.com>
3096         * target.def (array_mode): New target hook.
3097         * doc/tm.texi.in (TARGET_ARRAY_MODE): New hook.
3098         * doc/tm.texi: Regenerate.
3099         * hooks.h (hook_optmode_mode_uhwi_none): Declare.
3100         * hooks.c (hook_optmode_mode_uhwi_none): New function.
3101         * tree-vect-data-refs.c (vect_lanes_optab_supported_p): Use
3102         targetm.array_mode.
3103         * stor-layout.c (mode_for_array): Likewise.  Support polynomial
3104         type sizes.
3106 2018-01-13  Richard Sandiford  <richard.sandiford@linaro.org>
3107             Alan Hayward  <alan.hayward@arm.com>
3108             David Sherwood  <david.sherwood@arm.com>
3110         * fold-const.c (fold_binary_loc): Check the argument types
3111         rather than the result type when testing for a vector operation.
3113 2018-01-13  Richard Sandiford  <richard.sandiford@linaro.org>
3115         * doc/tm.texi.in (DWARF_LAZY_REGISTER_VALUE): Document.
3116         * doc/tm.texi: Regenerate.
3118 2018-01-13  Richard Sandiford  <richard.sandiford@linaro.org>
3119             Alan Hayward  <alan.hayward@arm.com>
3120             David Sherwood  <david.sherwood@arm.com>
3122         * doc/invoke.texi (-msve-vector-bits=): Document new option.
3123         (sve): Document new AArch64 extension.
3124         * doc/md.texi (w): Extend the description of the AArch64
3125         constraint to include SVE vectors.
3126         (Upl, Upa): Document new AArch64 predicate constraints.
3127         * config/aarch64/aarch64-opts.h (aarch64_sve_vector_bits_enum): New
3128         enum.
3129         * config/aarch64/aarch64.opt (sve_vector_bits): New enum.
3130         (msve-vector-bits=): New option.
3131         * config/aarch64/aarch64-option-extensions.def (fp, simd): Disable
3132         SVE when these are disabled.
3133         (sve): New extension.
3134         * config/aarch64/aarch64-modes.def: Define SVE vector and predicate
3135         modes.  Adjust their number of units based on aarch64_sve_vg.
3136         (MAX_BITSIZE_MODE_ANY_MODE): Define.
3137         * config/aarch64/aarch64-protos.h (ADDR_QUERY_ANY): New
3138         aarch64_addr_query_type.
3139         (aarch64_const_vec_all_same_in_range_p, aarch64_sve_pred_mode)
3140         (aarch64_sve_cnt_immediate_p, aarch64_sve_addvl_addpl_immediate_p)
3141         (aarch64_sve_inc_dec_immediate_p, aarch64_add_offset_temporaries)
3142         (aarch64_split_add_offset, aarch64_output_sve_cnt_immediate)
3143         (aarch64_output_sve_addvl_addpl, aarch64_output_sve_inc_dec_immediate)
3144         (aarch64_output_sve_mov_immediate, aarch64_output_ptrue): Declare.
3145         (aarch64_simd_imm_zero_p): Delete.
3146         (aarch64_check_zero_based_sve_index_immediate): Declare.
3147         (aarch64_sve_index_immediate_p, aarch64_sve_arith_immediate_p)
3148         (aarch64_sve_bitmask_immediate_p, aarch64_sve_dup_immediate_p)
3149         (aarch64_sve_cmp_immediate_p, aarch64_sve_float_arith_immediate_p)
3150         (aarch64_sve_float_mul_immediate_p): Likewise.
3151         (aarch64_classify_symbol): Take the offset as a HOST_WIDE_INT
3152         rather than an rtx.
3153         (aarch64_sve_ld1r_operand_p, aarch64_sve_ldr_operand_p): Declare.
3154         (aarch64_expand_mov_immediate): Take a gen_vec_duplicate callback.
3155         (aarch64_emit_sve_pred_move, aarch64_expand_sve_mem_move): Declare.
3156         (aarch64_expand_sve_vec_cmp_int, aarch64_expand_sve_vec_cmp_float)
3157         (aarch64_expand_sve_vcond, aarch64_expand_sve_vec_perm): Declare.
3158         (aarch64_regmode_natural_size): Likewise.
3159         * config/aarch64/aarch64.h (AARCH64_FL_SVE): New macro.
3160         (AARCH64_FL_V8_3, AARCH64_FL_RCPC, AARCH64_FL_DOTPROD): Shift
3161         left one place.
3162         (AARCH64_ISA_SVE, TARGET_SVE): New macros.
3163         (FIXED_REGISTERS, CALL_USED_REGISTERS, REGISTER_NAMES): Add entries
3164         for VG and the SVE predicate registers.
3165         (V_ALIASES): Add a "z"-prefixed alias.
3166         (FIRST_PSEUDO_REGISTER): Change to P15_REGNUM + 1.
3167         (AARCH64_DWARF_VG, AARCH64_DWARF_P0): New macros.
3168         (PR_REGNUM_P, PR_LO_REGNUM_P): Likewise.
3169         (PR_LO_REGS, PR_HI_REGS, PR_REGS): New reg_classes.
3170         (REG_CLASS_NAMES): Add entries for them.
3171         (REG_CLASS_CONTENTS): Likewise.  Update ALL_REGS to include VG
3172         and the predicate registers.
3173         (aarch64_sve_vg): Declare.
3174         (BITS_PER_SVE_VECTOR, BYTES_PER_SVE_VECTOR, BYTES_PER_SVE_PRED)
3175         (SVE_BYTE_MODE, MAX_COMPILE_TIME_VEC_BYTES): New macros.
3176         (REGMODE_NATURAL_SIZE): Define.
3177         * config/aarch64/aarch64-c.c (aarch64_update_cpp_builtins): Handle
3178         SVE macros.
3179         * config/aarch64/aarch64.c: Include cfgrtl.h.
3180         (simd_immediate_info): Add a constructor for series vectors,
3181         and an associated step field.
3182         (aarch64_sve_vg): New variable.
3183         (aarch64_dbx_register_number): Handle VG and the predicate registers.
3184         (aarch64_vect_struct_mode_p, aarch64_vector_mode_p): Delete.
3185         (VEC_ADVSIMD, VEC_SVE_DATA, VEC_SVE_PRED, VEC_STRUCT, VEC_ANY_SVE)
3186         (VEC_ANY_DATA, VEC_STRUCT): New constants.
3187         (aarch64_advsimd_struct_mode_p, aarch64_sve_pred_mode_p)
3188         (aarch64_classify_vector_mode, aarch64_vector_data_mode_p)
3189         (aarch64_sve_data_mode_p, aarch64_sve_pred_mode)
3190         (aarch64_get_mask_mode): New functions.
3191         (aarch64_hard_regno_nregs): Handle SVE data modes for FP_REGS
3192         and FP_LO_REGS.  Handle PR_REGS, PR_LO_REGS and PR_HI_REGS.
3193         (aarch64_hard_regno_mode_ok): Handle VG.  Also handle the SVE
3194         predicate modes and predicate registers.  Explicitly restrict
3195         GPRs to modes of 16 bytes or smaller.  Only allow FP registers
3196         to store a vector mode if it is recognized by
3197         aarch64_classify_vector_mode.
3198         (aarch64_regmode_natural_size): New function.
3199         (aarch64_hard_regno_caller_save_mode): Return the original mode
3200         for predicates.
3201         (aarch64_sve_cnt_immediate_p, aarch64_output_sve_cnt_immediate)
3202         (aarch64_sve_addvl_addpl_immediate_p, aarch64_output_sve_addvl_addpl)
3203         (aarch64_sve_inc_dec_immediate_p, aarch64_output_sve_inc_dec_immediate)
3204         (aarch64_add_offset_1_temporaries, aarch64_offset_temporaries): New
3205         functions.
3206         (aarch64_add_offset): Add a temp2 parameter.  Assert that temp1
3207         does not overlap dest if the function is frame-related.  Handle
3208         SVE constants.
3209         (aarch64_split_add_offset): New function.
3210         (aarch64_add_sp, aarch64_sub_sp): Add temp2 parameters and pass
3211         them aarch64_add_offset.
3212         (aarch64_allocate_and_probe_stack_space): Add a temp2 parameter
3213         and update call to aarch64_sub_sp.
3214         (aarch64_add_cfa_expression): New function.
3215         (aarch64_expand_prologue): Pass extra temporary registers to the
3216         functions above.  Handle the case in which we need to emit new
3217         DW_CFA_expressions for registers that were originally saved
3218         relative to the stack pointer, but now have to be expressed
3219         relative to the frame pointer.
3220         (aarch64_output_mi_thunk): Pass extra temporary registers to the
3221         functions above.
3222         (aarch64_expand_epilogue): Likewise.  Prevent inheritance of
3223         IP0 and IP1 values for SVE frames.
3224         (aarch64_expand_vec_series): New function.
3225         (aarch64_expand_sve_widened_duplicate): Likewise.
3226         (aarch64_expand_sve_const_vector): Likewise.
3227         (aarch64_expand_mov_immediate): Add a gen_vec_duplicate parameter.
3228         Handle SVE constants.  Use emit_move_insn to move a force_const_mem
3229         into the register, rather than emitting a SET directly.
3230         (aarch64_emit_sve_pred_move, aarch64_expand_sve_mem_move)
3231         (aarch64_get_reg_raw_mode, offset_4bit_signed_scaled_p)
3232         (offset_6bit_unsigned_scaled_p, aarch64_offset_7bit_signed_scaled_p)
3233         (offset_9bit_signed_scaled_p): New functions.
3234         (aarch64_replicate_bitmask_imm): New function.
3235         (aarch64_bitmask_imm): Use it.
3236         (aarch64_cannot_force_const_mem): Reject expressions involving
3237         a CONST_POLY_INT.  Update call to aarch64_classify_symbol.
3238         (aarch64_classify_index): Handle SVE indices, by requiring
3239         a plain register index with a scale that matches the element size.
3240         (aarch64_classify_address): Handle SVE addresses.  Assert that
3241         the mode of the address is VOIDmode or an integer mode.
3242         Update call to aarch64_classify_symbol.
3243         (aarch64_classify_symbolic_expression): Update call to
3244         aarch64_classify_symbol.
3245         (aarch64_const_vec_all_in_range_p): New function.
3246         (aarch64_print_vector_float_operand): Likewise.
3247         (aarch64_print_operand): Handle 'N' and 'C'.  Use "zN" rather than
3248         "vN" for FP registers with SVE modes.  Handle (const ...) vectors
3249         and the FP immediates 1.0 and 0.5.
3250         (aarch64_print_address_internal): Handle SVE addresses.
3251         (aarch64_print_operand_address): Use ADDR_QUERY_ANY.
3252         (aarch64_regno_regclass): Handle predicate registers.
3253         (aarch64_secondary_reload): Handle big-endian reloads of SVE
3254         data modes.
3255         (aarch64_class_max_nregs): Handle SVE modes and predicate registers.
3256         (aarch64_rtx_costs): Check for ADDVL and ADDPL instructions.
3257         (aarch64_convert_sve_vector_bits): New function.
3258         (aarch64_override_options): Use it to handle -msve-vector-bits=.
3259         (aarch64_classify_symbol): Take the offset as a HOST_WIDE_INT
3260         rather than an rtx.
3261         (aarch64_legitimate_constant_p): Use aarch64_classify_vector_mode.
3262         Handle SVE vector and predicate modes.  Accept VL-based constants
3263         that need only one temporary register, and VL offsets that require
3264         no temporary registers.
3265         (aarch64_conditional_register_usage): Mark the predicate registers
3266         as fixed if SVE isn't available.
3267         (aarch64_vector_mode_supported_p): Use aarch64_classify_vector_mode.
3268         Return true for SVE vector and predicate modes.
3269         (aarch64_simd_container_mode): Take the number of bits as a poly_int64
3270         rather than an unsigned int.  Handle SVE modes.
3271         (aarch64_preferred_simd_mode): Update call accordingly.  Handle
3272         SVE modes.
3273         (aarch64_autovectorize_vector_sizes): Add BYTES_PER_SVE_VECTOR
3274         if SVE is enabled.
3275         (aarch64_sve_index_immediate_p, aarch64_sve_arith_immediate_p)
3276         (aarch64_sve_bitmask_immediate_p, aarch64_sve_dup_immediate_p)
3277         (aarch64_sve_cmp_immediate_p, aarch64_sve_float_arith_immediate_p)
3278         (aarch64_sve_float_mul_immediate_p): New functions.
3279         (aarch64_sve_valid_immediate): New function.
3280         (aarch64_simd_valid_immediate): Use it as the fallback for SVE vectors.
3281         Explicitly reject structure modes.  Check for INDEX constants.
3282         Handle PTRUE and PFALSE constants.
3283         (aarch64_check_zero_based_sve_index_immediate): New function.
3284         (aarch64_simd_imm_zero_p): Delete.
3285         (aarch64_mov_operand_p): Use aarch64_simd_valid_immediate for
3286         vector modes.  Accept constants in the range of CNT[BHWD].
3287         (aarch64_simd_scalar_immediate_valid_for_move): Explicitly
3288         ask for an Advanced SIMD mode.
3289         (aarch64_sve_ld1r_operand_p, aarch64_sve_ldr_operand_p): New functions.
3290         (aarch64_simd_vector_alignment): Handle SVE predicates.
3291         (aarch64_vectorize_preferred_vector_alignment): New function.
3292         (aarch64_simd_vector_alignment_reachable): Use it instead of
3293         the vector size.
3294         (aarch64_shift_truncation_mask): Use aarch64_vector_data_mode_p.
3295         (aarch64_output_sve_mov_immediate, aarch64_output_ptrue): New
3296         functions.
3297         (MAX_VECT_LEN): Delete.
3298         (expand_vec_perm_d): Add a vec_flags field.
3299         (emit_unspec2, aarch64_expand_sve_vec_perm): New functions.
3300         (aarch64_evpc_trn, aarch64_evpc_uzp, aarch64_evpc_zip)
3301         (aarch64_evpc_ext): Don't apply a big-endian lane correction
3302         for SVE modes.
3303         (aarch64_evpc_rev): Rename to...
3304         (aarch64_evpc_rev_local): ...this.  Use a predicated operation for SVE.
3305         (aarch64_evpc_rev_global): New function.
3306         (aarch64_evpc_dup): Enforce a 64-byte range for SVE DUP.
3307         (aarch64_evpc_tbl): Use MAX_COMPILE_TIME_VEC_BYTES instead of
3308         MAX_VECT_LEN.
3309         (aarch64_evpc_sve_tbl): New function.
3310         (aarch64_expand_vec_perm_const_1): Update after rename of
3311         aarch64_evpc_rev.  Handle SVE permutes too, trying
3312         aarch64_evpc_rev_global and using aarch64_evpc_sve_tbl rather
3313         than aarch64_evpc_tbl.
3314         (aarch64_vectorize_vec_perm_const): Initialize vec_flags.
3315         (aarch64_sve_cmp_operand_p, aarch64_unspec_cond_code)
3316         (aarch64_gen_unspec_cond, aarch64_expand_sve_vec_cmp_int)
3317         (aarch64_emit_unspec_cond, aarch64_emit_unspec_cond_or)
3318         (aarch64_emit_inverted_unspec_cond, aarch64_expand_sve_vec_cmp_float)
3319         (aarch64_expand_sve_vcond): New functions.
3320         (aarch64_modes_tieable_p): Use aarch64_vector_data_mode_p instead
3321         of aarch64_vector_mode_p.
3322         (aarch64_dwarf_poly_indeterminate_value): New function.
3323         (aarch64_compute_pressure_classes): Likewise.
3324         (aarch64_can_change_mode_class): Likewise.
3325         (TARGET_GET_RAW_RESULT_MODE, TARGET_GET_RAW_ARG_MODE): Redefine.
3326         (TARGET_VECTORIZE_PREFERRED_VECTOR_ALIGNMENT): Likewise.
3327         (TARGET_VECTORIZE_GET_MASK_MODE): Likewise.
3328         (TARGET_DWARF_POLY_INDETERMINATE_VALUE): Likewise.
3329         (TARGET_COMPUTE_PRESSURE_CLASSES): Likewise.
3330         (TARGET_CAN_CHANGE_MODE_CLASS): Likewise.
3331         * config/aarch64/constraints.md (Upa, Upl, Uav, Uat, Usv, Usi, Utr)
3332         (Uty, Dm, vsa, vsc, vsd, vsi, vsn, vsl, vsm, vsA, vsM, vsN): New
3333         constraints.
3334         (Dn, Dl, Dr): Accept const as well as const_vector.
3335         (Dz): Likewise.  Compare against CONST0_RTX.
3336         * config/aarch64/iterators.md: Refer to "Advanced SIMD" instead
3337         of "vector" where appropriate.
3338         (SVE_ALL, SVE_BH, SVE_BHS, SVE_BHSI, SVE_HSDI, SVE_HSF, SVE_SD)
3339         (SVE_SDI, SVE_I, SVE_F, PRED_ALL, PRED_BHS): New mode iterators.
3340         (UNSPEC_SEL, UNSPEC_ANDF, UNSPEC_IORF, UNSPEC_XORF, UNSPEC_COND_LT)
3341         (UNSPEC_COND_LE, UNSPEC_COND_EQ, UNSPEC_COND_NE, UNSPEC_COND_GE)
3342         (UNSPEC_COND_GT, UNSPEC_COND_LO, UNSPEC_COND_LS, UNSPEC_COND_HS)
3343         (UNSPEC_COND_HI, UNSPEC_COND_UO): New unspecs.
3344         (Vetype, VEL, Vel, VWIDE, Vwide, vw, vwcore, V_INT_EQUIV)
3345         (v_int_equiv): Extend to SVE modes.
3346         (Vesize, V128, v128, Vewtype, V_FP_EQUIV, v_fp_equiv, VPRED): New
3347         mode attributes.
3348         (LOGICAL_OR, SVE_INT_UNARY, SVE_FP_UNARY): New code iterators.
3349         (optab): Handle popcount, smin, smax, umin, umax, abs and sqrt.
3350         (logical_nn, lr, sve_int_op, sve_fp_op): New code attributs.
3351         (LOGICALF, OPTAB_PERMUTE, UNPACK, UNPACK_UNSIGNED, SVE_COND_INT_CMP)
3352         (SVE_COND_FP_CMP): New int iterators.
3353         (perm_hilo): Handle the new unpack unspecs.
3354         (optab, logicalf_op, su, perm_optab, cmp_op, imm_con): New int
3355         attributes.
3356         * config/aarch64/predicates.md (aarch64_sve_cnt_immediate)
3357         (aarch64_sve_addvl_addpl_immediate, aarch64_split_add_offset_immediate)
3358         (aarch64_pluslong_or_poly_operand, aarch64_nonmemory_operand)
3359         (aarch64_equality_operator, aarch64_constant_vector_operand)
3360         (aarch64_sve_ld1r_operand, aarch64_sve_ldr_operand): New predicates.
3361         (aarch64_sve_nonimmediate_operand): Likewise.
3362         (aarch64_sve_general_operand): Likewise.
3363         (aarch64_sve_dup_operand, aarch64_sve_arith_immediate): Likewise.
3364         (aarch64_sve_sub_arith_immediate, aarch64_sve_inc_dec_immediate)
3365         (aarch64_sve_logical_immediate, aarch64_sve_mul_immediate): Likewise.
3366         (aarch64_sve_dup_immediate, aarch64_sve_cmp_vsc_immediate): Likewise.
3367         (aarch64_sve_cmp_vsd_immediate, aarch64_sve_index_immediate): Likewise.
3368         (aarch64_sve_float_arith_immediate): Likewise.
3369         (aarch64_sve_float_arith_with_sub_immediate): Likewise.
3370         (aarch64_sve_float_mul_immediate, aarch64_sve_arith_operand): Likewise.
3371         (aarch64_sve_add_operand, aarch64_sve_logical_operand): Likewise.
3372         (aarch64_sve_lshift_operand, aarch64_sve_rshift_operand): Likewise.
3373         (aarch64_sve_mul_operand, aarch64_sve_cmp_vsc_operand): Likewise.
3374         (aarch64_sve_cmp_vsd_operand, aarch64_sve_index_operand): Likewise.
3375         (aarch64_sve_float_arith_operand): Likewise.
3376         (aarch64_sve_float_arith_with_sub_operand): Likewise.
3377         (aarch64_sve_float_mul_operand): Likewise.
3378         (aarch64_sve_vec_perm_operand): Likewise.
3379         (aarch64_pluslong_operand): Include aarch64_sve_addvl_addpl_immediate.
3380         (aarch64_mov_operand): Accept const_poly_int and const_vector.
3381         (aarch64_simd_lshift_imm, aarch64_simd_rshift_imm): Accept const
3382         as well as const_vector.
3383         (aarch64_simd_imm_zero, aarch64_simd_imm_minus_one): Move earlier
3384         in file.  Use CONST0_RTX and CONSTM1_RTX.
3385         (aarch64_simd_or_scalar_imm_zero): Likewise.  Add match_codes.
3386         (aarch64_simd_reg_or_zero): Accept const as well as const_vector.
3387         Use aarch64_simd_imm_zero.
3388         * config/aarch64/aarch64-sve.md: New file.
3389         * config/aarch64/aarch64.md: Include it.
3390         (VG_REGNUM, P0_REGNUM, P7_REGNUM, P15_REGNUM): New register numbers.
3391         (UNSPEC_REV, UNSPEC_LD1_SVE, UNSPEC_ST1_SVE, UNSPEC_MERGE_PTRUE)
3392         (UNSPEC_PTEST_PTRUE, UNSPEC_UNPACKSHI, UNSPEC_UNPACKUHI)
3393         (UNSPEC_UNPACKSLO, UNSPEC_UNPACKULO, UNSPEC_PACK)
3394         (UNSPEC_FLOAT_CONVERT, UNSPEC_WHILE_LO): New unspec constants.
3395         (sve): New attribute.
3396         (enabled): Disable instructions with the sve attribute unless
3397         TARGET_SVE.
3398         (movqi, movhi): Pass CONST_POLY_INT operaneds through
3399         aarch64_expand_mov_immediate.
3400         (*mov<mode>_aarch64, *movsi_aarch64, *movdi_aarch64): Handle
3401         CNT[BHSD] immediates.
3402         (movti): Split CONST_POLY_INT moves into two halves.
3403         (add<mode>3): Accept aarch64_pluslong_or_poly_operand.
3404         Split additions that need a temporary here if the destination
3405         is the stack pointer.
3406         (*add<mode>3_aarch64): Handle ADDVL and ADDPL immediates.
3407         (*add<mode>3_poly_1): New instruction.
3408         (set_clobber_cc): New expander.
3410 2018-01-13  Richard Sandiford  <richard.sandiford@linaro.org>
3412         * simplify-rtx.c (simplify_immed_subreg): Add an inner_bytes
3413         parameter and use it instead of GET_MODE_SIZE (innermode).  Use
3414         inner_bytes * BITS_PER_UNIT instead of GET_MODE_BITSIZE (innermode).
3415         Use CEIL (inner_bytes, GET_MODE_UNIT_SIZE (innermode)) instead of
3416         GET_MODE_NUNITS (innermode).  Also add a first_elem parameter.
3417         Change innermode from fixed_mode_size to machine_mode.
3418         (simplify_subreg): Update call accordingly.  Handle a constant-sized
3419         subreg of a variable-length CONST_VECTOR.
3421 2018-01-13  Richard Sandiford  <richard.sandiford@linaro.org>
3422             Alan Hayward  <alan.hayward@arm.com>
3423             David Sherwood  <david.sherwood@arm.com>
3425         * tree-ssa-address.c (mem_ref_valid_without_offset_p): New function.
3426         (add_offset_to_base): New function, split out from...
3427         (create_mem_ref): ...here.  When handling a scale other than 1,
3428         check first whether the address is valid without the offset.
3429         Add it into the base if so, leaving the index and scale as-is.
3431 2018-01-12  Jakub Jelinek  <jakub@redhat.com>
3433         PR c++/83778
3434         * config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin): Call
3435         fold_for_warn before checking if arg2 is INTEGER_CST.
3437 2018-01-12  Segher Boessenkool  <segher@kernel.crashing.org>
3439         * config/rs6000/predicates.md (load_multiple_operation): Delete.
3440         (store_multiple_operation): Delete.
3441         * config/rs6000/rs6000-cpus.def (601): Remove MASK_STRING.
3442         * config/rs6000/rs6000-protos.h (rs6000_output_load_multiple): Delete.
3443         * config/rs6000/rs6000-string.c (expand_block_move): Delete everything
3444         guarded by TARGET_STRING.
3445         (rs6000_output_load_multiple): Delete.
3446         * config/rs6000/rs6000.c (rs6000_option_override_internal): Delete
3447         OPTION_MASK_STRING / TARGET_STRING handling.
3448         (print_operand) <'N', 'O'>: Add comment that these are unused now.
3449         (const rs6000_opt_masks) <"string">: Change mask to 0.
3450         * config/rs6000/rs6000.h (TARGET_DEFAULT): Remove MASK_STRING.
3451         (MASK_STRING): Delete.
3452         * config/rs6000/rs6000.md (*mov<mode>_string): Delete TARGET_STRING
3453         parts.  Simplify.
3454         (load_multiple): Delete.
3455         (*ldmsi8): Delete.
3456         (*ldmsi7): Delete.
3457         (*ldmsi6): Delete.
3458         (*ldmsi5): Delete.
3459         (*ldmsi4): Delete.
3460         (*ldmsi3): Delete.
3461         (store_multiple): Delete.
3462         (*stmsi8): Delete.
3463         (*stmsi7): Delete.
3464         (*stmsi6): Delete.
3465         (*stmsi5): Delete.
3466         (*stmsi4): Delete.
3467         (*stmsi3): Delete.
3468         (movmemsi_8reg): Delete.
3469         (corresponding unnamed define_insn): Delete.
3470         (movmemsi_6reg): Delete.
3471         (corresponding unnamed define_insn): Delete.
3472         (movmemsi_4reg): Delete.
3473         (corresponding unnamed define_insn): Delete.
3474         (movmemsi_2reg): Delete.
3475         (corresponding unnamed define_insn): Delete.
3476         (movmemsi_1reg): Delete.
3477         (corresponding unnamed define_insn): Delete.
3478         * config/rs6000/rs6000.opt (mno-string): New.
3479         (mstring): Replace by deprecation warning stub.
3480         * doc/invoke.texi (RS/6000 and PowerPC Options): Delete -mstring.
3482 2018-01-12  Jakub Jelinek  <jakub@redhat.com>
3484         * regrename.c (regrename_do_replace): If replacing the same
3485         reg multiple times, try to reuse last created gen_raw_REG.
3487         PR debug/81155
3488         * bb-reorder.c (pass_partition_blocks::gate): In lto don't partition
3489         main to workaround a bug in GDB.
3491 2018-01-12  Tom de Vries  <tom@codesourcery.com>
3493         PR target/83737
3494         * config.gcc (nvptx*-*-*): Set use_gcc_stdint=wrap.
3496 2018-01-12  Vladimir Makarov  <vmakarov@redhat.com>
3498         PR rtl-optimization/80481
3499         * ira-color.c (get_cap_member): New function.
3500         (allocnos_conflict_by_live_ranges_p): Use it.
3501         (slot_coalesced_allocno_live_ranges_intersect_p): Add assert.
3502         (setup_slot_coalesced_allocno_live_ranges): Ditto.
3504 2018-01-12  Uros Bizjak  <ubizjak@gmail.com>
3506         PR target/83628
3507         * config/alpha/alpha.md (*saddsi_1): New insn_ans_split pattern.
3508         (*saddl_se_1): Ditto.
3509         (*ssubsi_1): Ditto.
3510         (*ssubl_se_1): Ditto.
3512 2018-01-12  Richard Sandiford  <richard.sandiford@linaro.org>
3514         * tree-predcom.c (aff_combination_dr_offset): Use wi::to_poly_widest
3515         rather than wi::to_widest for DR_INITs.
3516         * tree-vect-data-refs.c (vect_find_same_alignment_drs): Use
3517         wi::to_poly_offset rather than wi::to_offset for DR_INIT.
3518         (vect_analyze_data_ref_accesses): Require both DR_INITs to be
3519         INTEGER_CSTs.
3520         (vect_analyze_group_access_1): Note that here.
3522 2018-01-12  Richard Sandiford  <richard.sandiford@linaro.org>
3524         * tree-vectorizer.c (get_vec_alignment_for_array_type): Handle
3525         polynomial type sizes.
3527 2018-01-12  Richard Sandiford  <richard.sandiford@linaro.org>
3529         * gimplify.c (gimple_add_tmp_var_fn): Allow variables to have a
3530         poly_uint64 size, rather than requiring an unsigned HOST_WIDE_INT size.
3531         (gimple_add_tmp_var): Likewise.
3533 2018-01-12  Martin Liska  <mliska@suse.cz>
3535         * gimple.c (gimple_alloc_counts): Use uint64_t instead of int.
3536         (gimple_alloc_sizes): Likewise.
3537         (dump_gimple_statistics): Use PRIu64 in printf format.
3538         * gimple.h: Change uint64_t to int.
3540 2018-01-12  Martin Liska  <mliska@suse.cz>
3542         * tree-core.h: Use uint64_t instead of int.
3543         * tree.c (tree_node_counts): Likewise.
3544         (tree_node_sizes): Likewise.
3545         (dump_tree_statistics): Use PRIu64 in printf format.
3547 2018-01-12  Martin Liska  <mliska@suse.cz>
3549         * Makefile.in: As qsort_chk is implemented in vec.c, add
3550         vec.o to linkage of gencfn-macros.
3551         * tree.c (build_new_poly_int_cst): Add CXX_MEM_STAT_INFO as it's
3552         passing the info to record_node_allocation_statistics.
3553         (test_vector_cst_patterns): Add CXX_MEM_STAT_INFO to declaration
3554         and pass the info.
3555         * ggc-common.c (struct ggc_usage): Add operator== and use
3556         it in operator< and compare function.
3557         * mem-stats.h (struct mem_usage): Likewise.
3558         * vec.c (struct vec_usage): Remove operator< and compare
3559         function. Can be simply inherited.
3561 2018-01-12  Martin Jambor  <mjambor@suse.cz>
3563         PR target/81616
3564         * params.def: New parameter PARAM_AVOID_FMA_MAX_BITS.
3565         * tree-ssa-math-opts.c: Include domwalk.h.
3566         (convert_mult_to_fma_1): New function.
3567         (fma_transformation_info): New type.
3568         (fma_deferring_state): Likewise.
3569         (cancel_fma_deferring): New function.
3570         (result_of_phi): Likewise.
3571         (last_fma_candidate_feeds_initial_phi): Likewise.
3572         (convert_mult_to_fma): Added deferring logic, split actual
3573         transformation to convert_mult_to_fma_1.
3574         (math_opts_dom_walker): New type.
3575         (math_opts_dom_walker::after_dom_children): New method, body moved
3576         here from pass_optimize_widening_mul::execute, added deferring logic
3577         bits.
3578         (pass_optimize_widening_mul::execute): Moved most of code to
3579         math_opts_dom_walker::after_dom_children.
3580         * config/i386/x86-tune.def (X86_TUNE_AVOID_128FMA_CHAINS): New.
3581         * config/i386/i386.c (ix86_option_override_internal): Added
3582         maybe_setting of PARAM_AVOID_FMA_MAX_BITS.
3584 2018-01-12  Richard Biener  <rguenther@suse.de>
3586         PR debug/83157
3587         * dwarf2out.c (gen_variable_die): Do not reset old_die for
3588         inline instance vars.
3590 2018-01-12  Oleg Endo  <olegendo@gcc.gnu.org>
3592         PR target/81819
3593         * config/rx/rx.c (rx_is_restricted_memory_address):
3594         Handle SUBREG case.
3596 2018-01-12  Richard Biener  <rguenther@suse.de>
3598         PR tree-optimization/80846
3599         * target.def (split_reduction): New target hook.
3600         * targhooks.c (default_split_reduction): New function.
3601         * targhooks.h (default_split_reduction): Declare.
3602         * tree-vect-loop.c (vect_create_epilog_for_reduction): If the
3603         target requests first reduce vectors by combining low and high
3604         parts.
3605         * tree-vect-stmts.c (vect_gen_perm_mask_any): Adjust.
3606         (get_vectype_for_scalar_type_and_size): Export.
3607         * tree-vectorizer.h (get_vectype_for_scalar_type_and_size): Declare.
3608         * doc/tm.texi.in (TARGET_VECTORIZE_SPLIT_REDUCTION): Document.
3609         * doc/tm.texi: Regenerate.
3610         * config/i386/i386.c (ix86_split_reduction): Implement
3611         TARGET_VECTORIZE_SPLIT_REDUCTION.
3613 2018-01-12  Eric Botcazou  <ebotcazou@adacore.com>
3615         PR target/83368
3616         * config/sparc/sparc.h (PIC_OFFSET_TABLE_REGNUM): Set to INVALID_REGNUM
3617         in PIC mode except for TARGET_VXWORKS_RTP.
3618         * config/sparc/sparc.c: Include cfgrtl.h.
3619         (TARGET_INIT_PIC_REG): Define.
3620         (TARGET_USE_PSEUDO_PIC_REG): Likewise.
3621         (sparc_pic_register_p): New predicate.
3622         (sparc_legitimate_address_p): Use it.
3623         (sparc_legitimize_pic_address): Likewise.
3624         (sparc_delegitimize_address): Likewise.
3625         (sparc_mode_dependent_address_p): Likewise.
3626         (gen_load_pcrel_sym): Remove 4th parameter.
3627         (load_got_register): Adjust call to above.  Remove obsolete stuff.
3628         (sparc_expand_prologue): Do not call load_got_register here.
3629         (sparc_flat_expand_prologue): Likewise.
3630         (sparc_output_mi_thunk): Set the pic_offset_table_rtx object.
3631         (sparc_use_pseudo_pic_reg): New function.
3632         (sparc_init_pic_reg): Likewise.
3633         * config/sparc/sparc.md (vxworks_load_got): Set the GOT register.
3634         (builtin_setjmp_receiver): Enable only for TARGET_VXWORKS_RTP.
3636 2018-01-12  Christophe Lyon  <christophe.lyon@linaro.org>
3638         * doc/sourcebuild.texi (Effective-Target Keywords, Other attributes):
3639         Add item for branch_cost.
3641 2018-01-12  Eric Botcazou  <ebotcazou@adacore.com>
3643         PR rtl-optimization/83565
3644         * rtlanal.c (nonzero_bits1): On WORD_REGISTER_OPERATIONS machines, do
3645         not extend the result to a larger mode for rotate operations.
3646         (num_sign_bit_copies1): Likewise.
3648 2018-01-12  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
3650         PR target/40411
3651         * config/sol2.h (STARTFILE_ARCH_SPEC): Don't use with -shared or
3652         -symbolic.
3653         Use values-Xc.o for -pedantic.
3654         Link with values-xpg4.o for C90, values-xpg6.o otherwise.
3656 2018-01-12  Martin Liska  <mliska@suse.cz>
3658         PR ipa/83054
3659         * ipa-devirt.c (final_warning_record::grow_type_warnings):
3660         New function.
3661         (possible_polymorphic_call_targets): Use it.
3662         (ipa_devirt): Likewise.
3664 2018-01-12  Martin Liska  <mliska@suse.cz>
3666         * profile-count.h (enum profile_quality): Use 0 as invalid
3667         enum value of profile_quality.
3669 2018-01-12  Chung-Ju Wu  <jasonwucj@gmail.com>
3671         * doc/invoke.texi (NDS32 Options): Add -mext-perf, -mext-perf2 and
3672         -mext-string options.
3674 2018-01-12  Richard Biener  <rguenther@suse.de>
3676         * lto-streamer-out.c (DFS::DFS_write_tree_body): Process
3677         DECL_DEBUG_EXPR conditional on DECL_HAS_DEBUG_EXPR_P.
3678         * tree-streamer-in.c (lto_input_ts_decl_common_tree_pointers):
3679         Likewise.
3680         * tree-streamer-out.c (write_ts_decl_common_tree_pointers): Likewise.
3682 2018-01-11  Michael Meissner  <meissner@linux.vnet.ibm.com>
3684         * configure.ac (--with-long-double-format): Add support for the
3685         configuration option to change the default long double format on
3686         PowerPC systems.
3687         * config.gcc (powerpc*-linux*-*): Likewise.
3688         * configure: Regenerate.
3689         * config/rs6000/rs6000-c.c (rs6000_cpu_cpp_builtins): If long
3690         double is IEEE, define __KC__ and __KF__ to allow floatn.h to be
3691         used without modification.
3693 2018-01-11  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
3695         * config/rs6000/rs6000-builtin.def (BU_P7_MISC_X): New #define.
3696         (SPEC_BARRIER): New instantiation of BU_P7_MISC_X.
3697         * config/rs6000/rs6000.c (rs6000_expand_builtin): Handle
3698         MISC_BUILTIN_SPEC_BARRIER.
3699         (rs6000_init_builtins): Likewise.
3700         * config/rs6000/rs6000.md (UNSPECV_SPEC_BARRIER): New UNSPECV
3701         enum value.
3702         (speculation_barrier): New define_insn.
3703         * doc/extend.texi: Document __builtin_speculation_barrier.
3705 2018-01-11  Jakub Jelinek  <jakub@redhat.com>
3707         PR target/83203
3708         * config/i386/i386.c (ix86_expand_vector_init_one_nonzero): If one_var
3709         is 0, for V{8,16}S[IF] and V[48]D[IF]mode use gen_vec_set<mode>_0.
3710         * config/i386/sse.md (VI8_AVX_AVX512F, VI4F_256_512): New mode
3711         iterators.
3712         (ssescalarmodesuffix): Add 512-bit vectors.  Use "d" or "q" for
3713         integral modes instead of "ss" and "sd".
3714         (vec_set<mode>_0): New define_insns for 256-bit and 512-bit
3715         vectors with 32-bit and 64-bit elements.
3716         (vecdupssescalarmodesuffix): New mode attribute.
3717         (vec_dup<mode>): Use it.
3719 2018-01-11  H.J. Lu  <hongjiu.lu@intel.com>
3721         PR target/83330
3722         * config/i386/i386.c (ix86_compute_frame_layout): Align stack
3723         frame if argument is passed on stack.
3725 2018-01-11  Jakub Jelinek  <jakub@redhat.com>
3727         PR target/82682
3728         * ree.c (combine_reaching_defs): Optimize also
3729         reg2=exp; reg1=reg2; reg2=any_extend(reg1); into
3730         reg2=any_extend(exp); reg1=reg2;, formatting fix.
3732 2018-01-11  Jan Hubicka  <hubicka@ucw.cz>
3734         PR middle-end/83189
3735         * gimple-ssa-isolate-paths.c (isolate_path): Fix profile update.
3737 2018-01-11  Jan Hubicka  <hubicka@ucw.cz>
3739         PR middle-end/83718
3740         * tree-inline.c (copy_cfg_body): Adjust num&den for scaling
3741         after they are computed.
3743 2018-01-11  Bin Cheng  <bin.cheng@arm.com>
3745         PR tree-optimization/83695
3746         * gimple-loop-linterchange.cc
3747         (tree_loop_interchange::interchange_loops): Call scev_reset_htab to
3748         reset cached scev information after interchange.
3749         (pass_linterchange::execute): Remove call to scev_reset_htab.
3751 2018-01-11  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
3753         * config/arm/arm_neon.h (vfmlal_lane_low_u32, vfmlal_lane_high_u32,
3754         vfmlalq_laneq_low_u32, vfmlalq_lane_low_u32, vfmlal_laneq_low_u32,
3755         vfmlalq_laneq_high_u32, vfmlalq_lane_high_u32, vfmlal_laneq_high_u32,
3756         vfmlsl_lane_low_u32, vfmlsl_lane_high_u32, vfmlslq_laneq_low_u32,
3757         vfmlslq_lane_low_u32, vfmlsl_laneq_low_u32, vfmlslq_laneq_high_u32,
3758         vfmlslq_lane_high_u32, vfmlsl_laneq_high_u32): Define.
3759         * config/arm/arm_neon_builtins.def (vfmal_lane_low,
3760         vfmal_lane_lowv4hf, vfmal_lane_lowv8hf, vfmal_lane_high,
3761         vfmal_lane_highv4hf, vfmal_lane_highv8hf, vfmsl_lane_low,
3762         vfmsl_lane_lowv4hf, vfmsl_lane_lowv8hf, vfmsl_lane_high,
3763         vfmsl_lane_highv4hf, vfmsl_lane_highv8hf): New sets of builtins.
3764         * config/arm/iterators.md (VFMLSEL2, vfmlsel2): New mode attributes.
3765         (V_lane_reg): Likewise.
3766         * config/arm/neon.md (neon_vfm<vfml_op>l_lane_<vfml_half><VCVTF:mode>):
3767         New define_expand.
3768         (neon_vfm<vfml_op>l_lane_<vfml_half><vfmlsel2><mode>): Likewise.
3769         (vfmal_lane_low<mode>_intrinsic,
3770         vfmal_lane_low<vfmlsel2><mode>_intrinsic,
3771         vfmal_lane_high<vfmlsel2><mode>_intrinsic,
3772         vfmal_lane_high<mode>_intrinsic, vfmsl_lane_low<mode>_intrinsic,
3773         vfmsl_lane_low<vfmlsel2><mode>_intrinsic,
3774         vfmsl_lane_high<vfmlsel2><mode>_intrinsic,
3775         vfmsl_lane_high<mode>_intrinsic): New define_insns.
3777 2018-01-11  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
3779         * config/arm/arm-cpus.in (fp16fml): New feature.
3780         (ALL_SIMD): Add fp16fml.
3781         (armv8.2-a): Add fp16fml as an option.
3782         (armv8.3-a): Likewise.
3783         (armv8.4-a): Add fp16fml as part of fp16.
3784         * config/arm/arm.h (TARGET_FP16FML): Define.
3785         * config/arm/arm-c.c (arm_cpu_builtins): Define __ARM_FEATURE_FP16_FML
3786         when appropriate.
3787         * config/arm/arm-modes.def (V2HF): Define.
3788         * config/arm/arm_neon.h (vfmlal_low_u32, vfmlsl_low_u32,
3789         vfmlal_high_u32, vfmlsl_high_u32, vfmlalq_low_u32,
3790         vfmlslq_low_u32, vfmlalq_high_u32, vfmlslq_high_u32): Define.
3791         * config/arm/arm_neon_builtins.def (vfmal_low, vfmal_high,
3792         vfmsl_low, vfmsl_high): New set of builtins.
3793         * config/arm/iterators.md (PLUSMINUS): New code iterator.
3794         (vfml_op): New code attribute.
3795         (VFMLHALVES): New int iterator.
3796         (VFML, VFMLSEL): New mode attributes.
3797         (V_reg): Define mapping for V2HF.
3798         (V_hi, V_lo): New mode attributes.
3799         (VF_constraint): Likewise.
3800         (vfml_half, vfml_half_selector): New int attributes.
3801         * config/arm/neon.md (neon_vfm<vfml_op>l_<vfml_half><mode>): New
3802         define_expand.
3803         (vfmal_low<mode>_intrinsic, vfmsl_high<mode>_intrinsic,
3804         vfmal_high<mode>_intrinsic, vfmsl_low<mode>_intrinsic):
3805         New define_insn.
3806         * config/arm/t-arm-elf (v8_fps): Add fp16fml.
3807         * config/arm/t-multilib (v8_2_a_simd_variants): Add fp16fml.
3808         * config/arm/unspecs.md (UNSPEC_VFML_LO, UNSPEC_VFML_HI): New unspecs.
3809         * doc/invoke.texi (ARM Options): Document fp16fml.  Update armv8.4-a
3810         documentation.
3811         * doc/sourcebuild.texi (arm_fp16fml_neon_ok, arm_fp16fml_neon):
3812         Document new effective target and option set.
3814 2018-01-11  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
3816         * config/arm/arm-cpus.in (armv8_4): New feature.
3817         (ARMv8_4a): New fgroup.
3818         (armv8.4-a): New arch.
3819         * config/arm/arm-tables.opt: Regenerate.
3820         * config/arm/t-aprofile: Add matching rules for -march=armv8.4-a.
3821         * config/arm/t-arm-elf (all_v8_archs): Add armv8.4-a.
3822         * config/arm/t-multilib (v8_4_a_simd_variants): New variable.
3823         Add matching rules for -march=armv8.4-a and extensions.
3824         * doc/invoke.texi (ARM Options): Document -march=armv8.4-a.
3826 2018-01-11  Oleg Endo  <olegendo@gcc.gnu.org>
3828         PR target/81821
3829         * config/rx/rx.md (BW): New mode attribute.
3830         (sync_lock_test_and_setsi): Add mode suffix to insn output.
3832 2018-01-11  Richard Biener  <rguenther@suse.de>
3834         PR tree-optimization/83435
3835         * graphite.c (canonicalize_loop_form): Ignore fake loop exit edges.
3836         * graphite-scop-detection.c (scop_detection::get_sese): Likewise.
3837         * tree-vrp.c (add_assert_info): Drop TREE_OVERFLOW if they appear.
3839 2018-01-11  Richard Sandiford  <richard.sandiford@linaro.org>
3840             Alan Hayward  <alan.hayward@arm.com>
3841             David Sherwood  <david.sherwood@arm.com>
3843         * config/aarch64/aarch64.c (aarch64_address_info): Add a const_offset
3844         field.
3845         (aarch64_classify_address): Initialize it.  Track polynomial offsets.
3846         (aarch64_print_address_internal): Use it to check for a zero offset.
3848 2018-01-11  Richard Sandiford  <richard.sandiford@linaro.org>
3849             Alan Hayward  <alan.hayward@arm.com>
3850             David Sherwood  <david.sherwood@arm.com>
3852         * config/aarch64/aarch64-modes.def (NUM_POLY_INT_COEFFS): Set to 2.
3853         * config/aarch64/aarch64-protos.h (aarch64_initial_elimination_offset):
3854         Return a poly_int64 rather than a HOST_WIDE_INT.
3855         (aarch64_offset_7bit_signed_scaled_p): Take the offset as a poly_int64
3856         rather than a HOST_WIDE_INT.
3857         * config/aarch64/aarch64.h (aarch64_frame): Protect with
3858         HAVE_POLY_INT_H rather than HOST_WIDE_INT.  Change locals_offset,
3859         hard_fp_offset, frame_size, initial_adjust, callee_offset and
3860         final_offset from HOST_WIDE_INT to poly_int64.
3861         * config/aarch64/aarch64-builtins.c (aarch64_simd_expand_args): Use
3862         to_constant when getting the number of units in an Advanced SIMD
3863         mode.
3864         (aarch64_builtin_vectorized_function): Check for a constant number
3865         of units.
3866         * config/aarch64/aarch64-simd.md (mov<mode>): Handle polynomial
3867         GET_MODE_SIZE.
3868         (aarch64_ld<VSTRUCT:nregs>_lane<VALLDIF:mode>): Use the nunits
3869         attribute instead of GET_MODE_NUNITS.
3870         * config/aarch64/aarch64.c (aarch64_hard_regno_nregs)
3871         (aarch64_class_max_nregs): Use the constant_lowest_bound of the
3872         GET_MODE_SIZE for fixed-size registers.
3873         (aarch64_const_vec_all_same_in_range_p): Use const_vec_duplicate_p.
3874         (aarch64_hard_regno_call_part_clobbered, aarch64_classify_index)
3875         (aarch64_mode_valid_for_sched_fusion_p, aarch64_classify_address)
3876         (aarch64_legitimize_address_displacement, aarch64_secondary_reload)
3877         (aarch64_print_operand, aarch64_print_address_internal)
3878         (aarch64_address_cost, aarch64_rtx_costs, aarch64_register_move_cost)
3879         (aarch64_short_vector_p, aapcs_vfp_sub_candidate)
3880         (aarch64_simd_attr_length_rglist, aarch64_operands_ok_for_ldpstp):
3881         Handle polynomial GET_MODE_SIZE.
3882         (aarch64_hard_regno_caller_save_mode): Likewise.  Return modes
3883         wider than SImode without modification.
3884         (tls_symbolic_operand_type): Use strip_offset instead of split_const.
3885         (aarch64_pass_by_reference, aarch64_layout_arg, aarch64_pad_reg_upward)
3886         (aarch64_gimplify_va_arg_expr): Assert that we don't yet handle
3887         passing and returning SVE modes.
3888         (aarch64_function_value, aarch64_layout_arg): Use gen_int_mode
3889         rather than GEN_INT.
3890         (aarch64_emit_probe_stack_range): Take the size as a poly_int64
3891         rather than a HOST_WIDE_INT, but call sorry if it isn't constant.
3892         (aarch64_allocate_and_probe_stack_space): Likewise.
3893         (aarch64_layout_frame): Cope with polynomial offsets.
3894         (aarch64_save_callee_saves, aarch64_restore_callee_saves): Take the
3895         start_offset as a poly_int64 rather than a HOST_WIDE_INT.  Track
3896         polynomial offsets.
3897         (offset_9bit_signed_unscaled_p, offset_12bit_unsigned_scaled_p)
3898         (aarch64_offset_7bit_signed_scaled_p): Take the offset as a
3899         poly_int64 rather than a HOST_WIDE_INT.
3900         (aarch64_get_separate_components, aarch64_process_components)
3901         (aarch64_expand_prologue, aarch64_expand_epilogue)
3902         (aarch64_use_return_insn_p): Handle polynomial frame offsets.
3903         (aarch64_anchor_offset): New function, split out from...
3904         (aarch64_legitimize_address): ...here.
3905         (aarch64_builtin_vectorization_cost): Handle polynomial
3906         TYPE_VECTOR_SUBPARTS.
3907         (aarch64_simd_check_vect_par_cnst_half): Handle polynomial
3908         GET_MODE_NUNITS.
3909         (aarch64_simd_make_constant, aarch64_expand_vector_init): Get the
3910         number of elements from the PARALLEL rather than the mode.
3911         (aarch64_shift_truncation_mask): Use GET_MODE_UNIT_BITSIZE
3912         rather than GET_MODE_BITSIZE.
3913         (aarch64_evpc_trn, aarch64_evpc_uzp, aarch64_evpc_ext)
3914         (aarch64_evpc_rev, aarch64_evpc_dup, aarch64_evpc_zip)
3915         (aarch64_expand_vec_perm_const_1): Handle polynomial
3916         d->perm.length () and d->perm elements.
3917         (aarch64_evpc_tbl): Likewise.  Use nelt rather than GET_MODE_NUNITS.
3918         Apply to_constant to d->perm elements.
3919         (aarch64_simd_valid_immediate, aarch64_vec_fpconst_pow_of_2): Handle
3920         polynomial CONST_VECTOR_NUNITS.
3921         (aarch64_move_pointer): Take amount as a poly_int64 rather
3922         than an int.
3923         (aarch64_progress_pointer): Avoid temporary variable.
3924         * config/aarch64/aarch64.md (aarch64_<crc_variant>): Use
3925         the mode attribute instead of GET_MODE.
3927 2018-01-11  Richard Sandiford  <richard.sandiford@linaro.org>
3928             Alan Hayward  <alan.hayward@arm.com>
3929             David Sherwood  <david.sherwood@arm.com>
3931         * config/aarch64/aarch64.c (aarch64_force_temporary): Assert that
3932         x exists before using it.
3933         (aarch64_add_constant_internal): Rename to...
3934         (aarch64_add_offset_1): ...this.  Replace regnum with separate
3935         src and dest rtxes.  Handle the case in which they're different,
3936         including when the offset is zero.  Replace scratchreg with an rtx.
3937         Use 2 additions if there is no spare register into which we can
3938         move a 16-bit constant.
3939         (aarch64_add_constant): Delete.
3940         (aarch64_add_offset): Replace reg with separate src and dest
3941         rtxes.  Take a poly_int64 offset instead of a HOST_WIDE_INT.
3942         Use aarch64_add_offset_1.
3943         (aarch64_add_sp, aarch64_sub_sp): Take the scratch register as
3944         an rtx rather than an int.  Take the delta as a poly_int64
3945         rather than a HOST_WIDE_INT.  Use aarch64_add_offset.
3946         (aarch64_expand_mov_immediate): Update uses of aarch64_add_offset.
3947         (aarch64_expand_prologue): Update calls to aarch64_sub_sp,
3948         aarch64_allocate_and_probe_stack_space and aarch64_add_offset.
3949         (aarch64_expand_epilogue): Update calls to aarch64_add_offset
3950         and aarch64_add_sp.
3951         (aarch64_output_mi_thunk): Use aarch64_add_offset rather than
3952         aarch64_add_constant.
3954 2018-01-11  Richard Sandiford  <richard.sandiford@linaro.org>
3956         * config/aarch64/aarch64.c (aarch64_reinterpret_float_as_int):
3957         Use scalar_float_mode.
3959 2018-01-11  Richard Sandiford  <richard.sandiford@linaro.org>
3961         * config/aarch64/aarch64-simd.md
3962         (aarch64_fml<f16mac1>l<f16quad>_low<mode>): Avoid GET_MODE_NUNITS.
3963         (aarch64_fml<f16mac1>l<f16quad>_high<mode>): Likewise.
3964         (aarch64_fml<f16mac1>l_lane_lowv2sf): Likewise.
3965         (aarch64_fml<f16mac1>l_lane_highv2sf): Likewise.
3966         (aarch64_fml<f16mac1>lq_laneq_lowv4sf): Likewise.
3967         (aarch64_fml<f16mac1>lq_laneq_highv4sf): Likewise.
3968         (aarch64_fml<f16mac1>l_laneq_lowv2sf): Likewise.
3969         (aarch64_fml<f16mac1>l_laneq_highv2sf): Likewise.
3970         (aarch64_fml<f16mac1>lq_lane_lowv4sf): Likewise.
3971         (aarch64_fml<f16mac1>lq_lane_highv4sf): Likewise.
3973 2018-01-11  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>
3975         PR target/83514
3976         * config/arm/arm.c (arm_declare_function_name): Set arch_to_print if
3977         targ_options->x_arm_arch_string is non NULL.
3979 2018-01-11  Tamar Christina  <tamar.christina@arm.com>
3981         * config/aarch64/aarch64.h
3982         (AARCH64_FL_FOR_ARCH8_4): Add  AARCH64_FL_DOTPROD.
3984 2018-01-11  Sudakshina Das  <sudi.das@arm.com>
3986         PR target/82096
3987         * expmed.c (emit_store_flag_force): Swap if const op0
3988         and change VOIDmode to mode of op0.
3990 2018-01-11  Richard Sandiford  <richard.sandiford@linaro.org>
3992         PR rtl-optimization/83761
3993         * caller-save.c (replace_reg_with_saved_mem): Pass bits rather
3994         than bytes to mode_for_size.
3996 2018-01-10  Jan Hubicka  <hubicka@ucw.cz>
3998         PR middle-end/83189
3999         * gfortran.fortran-torture/compile/pr83189.f90: New testcase.
4000         * tree-ssa-loop-manip.c (tree_transform_and_unroll_loop): Handle zero
4001         profile.
4003 2018-01-10  Jan Hubicka  <hubicka@ucw.cz>
4005         PR middle-end/83575
4006         * cfgrtl.c (rtl_verify_edges): Only verify fixability of partition
4007         when in layout mode.
4008         (cfg_layout_finalize): Do not verify cfg before we are out of layout.
4009         * cfgcleanup.c (try_optimize_cfg): Only verify flow info when doing
4010         partition fixup.
4012 2018-01-10  Michael Collison  <michael.collison@arm.com>
4014         * config/aarch64/aarch64-modes.def (V2HF): New VECTOR_MODE.
4015         * config/aarch64/aarch64-option-extension.def: Add
4016         AARCH64_OPT_EXTENSION of 'fp16fml'.
4017         * config/aarch64/aarch64-c.c (aarch64_update_cpp_builtins):
4018         (__ARM_FEATURE_FP16_FML): Define if TARGET_F16FML is true.
4019         * config/aarch64/predicates.md (aarch64_lane_imm3): New predicate.
4020         * config/aarch64/constraints.md (Ui7): New constraint.
4021         * config/aarch64/iterators.md (VFMLA_W): New mode iterator.
4022         (VFMLA_SEL_W): Ditto.
4023         (f16quad): Ditto.
4024         (f16mac1): Ditto.
4025         (VFMLA16_LOW): New int iterator.
4026         (VFMLA16_HIGH): Ditto.
4027         (UNSPEC_FMLAL): New unspec.
4028         (UNSPEC_FMLSL): Ditto.
4029         (UNSPEC_FMLAL2): Ditto.
4030         (UNSPEC_FMLSL2): Ditto.
4031         (f16mac): New code attribute.
4032         * config/aarch64/aarch64-simd-builtins.def
4033         (aarch64_fmlal_lowv2sf): Ditto.
4034         (aarch64_fmlsl_lowv2sf): Ditto.
4035         (aarch64_fmlalq_lowv4sf): Ditto.
4036         (aarch64_fmlslq_lowv4sf): Ditto.
4037         (aarch64_fmlal_highv2sf): Ditto.
4038         (aarch64_fmlsl_highv2sf): Ditto.
4039         (aarch64_fmlalq_highv4sf): Ditto.
4040         (aarch64_fmlslq_highv4sf): Ditto.
4041         (aarch64_fmlal_lane_lowv2sf): Ditto.
4042         (aarch64_fmlsl_lane_lowv2sf): Ditto.
4043         (aarch64_fmlal_laneq_lowv2sf): Ditto.
4044         (aarch64_fmlsl_laneq_lowv2sf): Ditto.
4045         (aarch64_fmlalq_lane_lowv4sf): Ditto.
4046         (aarch64_fmlsl_lane_lowv4sf): Ditto.
4047         (aarch64_fmlalq_laneq_lowv4sf): Ditto.
4048         (aarch64_fmlsl_laneq_lowv4sf): Ditto.
4049         (aarch64_fmlal_lane_highv2sf): Ditto.
4050         (aarch64_fmlsl_lane_highv2sf): Ditto.
4051         (aarch64_fmlal_laneq_highv2sf): Ditto.
4052         (aarch64_fmlsl_laneq_highv2sf): Ditto.
4053         (aarch64_fmlalq_lane_highv4sf): Ditto.
4054         (aarch64_fmlsl_lane_highv4sf): Ditto.
4055         (aarch64_fmlalq_laneq_highv4sf): Ditto.
4056         (aarch64_fmlsl_laneq_highv4sf): Ditto.
4057         * config/aarch64/aarch64-simd.md:
4058         (aarch64_fml<f16mac1>l<f16quad>_low<mode>): New pattern.
4059         (aarch64_fml<f16mac1>l<f16quad>_high<mode>): Ditto.
4060         (aarch64_simd_fml<f16mac1>l<f16quad>_low<mode>): Ditto.
4061         (aarch64_simd_fml<f16mac1>l<f16quad>_high<mode>): Ditto.
4062         (aarch64_fml<f16mac1>l_lane_lowv2sf): Ditto.
4063         (aarch64_fml<f16mac1>l_lane_highv2sf): Ditto.
4064         (aarch64_simd_fml<f16mac>l_lane_lowv2sf): Ditto.
4065         (aarch64_simd_fml<f16mac>l_lane_highv2sf): Ditto.
4066         (aarch64_fml<f16mac1>lq_laneq_lowv4sf): Ditto.
4067         (aarch64_fml<f16mac1>lq_laneq_highv4sf): Ditto.
4068         (aarch64_simd_fml<f16mac>lq_laneq_lowv4sf): Ditto.
4069         (aarch64_simd_fml<f16mac>lq_laneq_highv4sf): Ditto.
4070         (aarch64_fml<f16mac1>l_laneq_lowv2sf): Ditto.
4071         (aarch64_fml<f16mac1>l_laneq_highv2sf): Ditto.
4072         (aarch64_simd_fml<f16mac>l_laneq_lowv2sf): Ditto.
4073         (aarch64_simd_fml<f16mac>l_laneq_highv2sf): Ditto.
4074         (aarch64_fml<f16mac1>lq_lane_lowv4sf): Ditto.
4075         (aarch64_fml<f16mac1>lq_lane_highv4sf): Ditto.
4076         (aarch64_simd_fml<f16mac>lq_lane_lowv4sf): Ditto.
4077         (aarch64_simd_fml<f16mac>lq_lane_highv4sf): Ditto.
4078         * config/aarch64/arm_neon.h (vfmlal_low_u32): New intrinsic.
4079         (vfmlsl_low_u32): Ditto.
4080         (vfmlalq_low_u32): Ditto.
4081         (vfmlslq_low_u32): Ditto.
4082         (vfmlal_high_u32): Ditto.
4083         (vfmlsl_high_u32): Ditto.
4084         (vfmlalq_high_u32): Ditto.
4085         (vfmlslq_high_u32): Ditto.
4086         (vfmlal_lane_low_u32): Ditto.
4087         (vfmlsl_lane_low_u32): Ditto.
4088         (vfmlal_laneq_low_u32): Ditto.
4089         (vfmlsl_laneq_low_u32): Ditto.
4090         (vfmlalq_lane_low_u32): Ditto.
4091         (vfmlslq_lane_low_u32): Ditto.
4092         (vfmlalq_laneq_low_u32): Ditto.
4093         (vfmlslq_laneq_low_u32): Ditto.
4094         (vfmlal_lane_high_u32): Ditto.
4095         (vfmlsl_lane_high_u32): Ditto.
4096         (vfmlal_laneq_high_u32): Ditto.
4097         (vfmlsl_laneq_high_u32): Ditto.
4098         (vfmlalq_lane_high_u32): Ditto.
4099         (vfmlslq_lane_high_u32): Ditto.
4100         (vfmlalq_laneq_high_u32): Ditto.
4101         (vfmlslq_laneq_high_u32): Ditto.
4102         * config/aarch64/aarch64.h (AARCH64_FL_F16SML): New flag.
4103         (AARCH64_FL_FOR_ARCH8_4): New.
4104         (AARCH64_ISA_F16FML): New ISA flag.
4105         (TARGET_F16FML): New feature flag for fp16fml.
4106         (doc/invoke.texi): Document new fp16fml option.
4108 2018-01-10  Michael Collison  <michael.collison@arm.com>
4110         * config/aarch64/aarch64-builtins.c:
4111         (aarch64_types_ternopu_imm_qualifiers, TYPES_TERNOPUI): New.
4112         * config/aarch64/aarch64-c.c (aarch64_update_cpp_builtins):
4113         (__ARM_FEATURE_SHA3): Define if TARGET_SHA3 is true.
4114         * config/aarch64/aarch64.h (AARCH64_FL_SHA3): New flags.
4115         (AARCH64_ISA_SHA3): New ISA flag.
4116         (TARGET_SHA3): New feature flag for sha3.
4117         * config/aarch64/iterators.md (sha512_op): New int attribute.
4118         (CRYPTO_SHA512): New int iterator.
4119         (UNSPEC_SHA512H): New unspec.
4120         (UNSPEC_SHA512H2): Ditto.
4121         (UNSPEC_SHA512SU0): Ditto.
4122         (UNSPEC_SHA512SU1): Ditto.
4123         * config/aarch64/aarch64-simd-builtins.def
4124         (aarch64_crypto_sha512hqv2di): New builtin.
4125         (aarch64_crypto_sha512h2qv2di): Ditto.
4126         (aarch64_crypto_sha512su0qv2di): Ditto.
4127         (aarch64_crypto_sha512su1qv2di): Ditto.
4128         (aarch64_eor3qv8hi): Ditto.
4129         (aarch64_rax1qv2di): Ditto.
4130         (aarch64_xarqv2di): Ditto.
4131         (aarch64_bcaxqv8hi): Ditto.
4132         * config/aarch64/aarch64-simd.md:
4133         (aarch64_crypto_sha512h<sha512_op>qv2di): New pattern.
4134         (aarch64_crypto_sha512su0qv2di): Ditto.
4135         (aarch64_crypto_sha512su1qv2di): Ditto.
4136         (aarch64_eor3qv8hi): Ditto.
4137         (aarch64_rax1qv2di): Ditto.
4138         (aarch64_xarqv2di): Ditto.
4139         (aarch64_bcaxqv8hi): Ditto.
4140         * config/aarch64/arm_neon.h (vsha512hq_u64): New intrinsic.
4141         (vsha512h2q_u64): Ditto.
4142         (vsha512su0q_u64): Ditto.
4143         (vsha512su1q_u64): Ditto.
4144         (veor3q_u16): Ditto.
4145         (vrax1q_u64): Ditto.
4146         (vxarq_u64): Ditto.
4147         (vbcaxq_u16): Ditto.
4148         * config/arm/types.md (crypto_sha512): New type attribute.
4149         (crypto_sha3): Ditto.
4150         (doc/invoke.texi): Document new sha3 option.
4152 2018-01-10  Michael Collison  <michael.collison@arm.com>
4154         * config/aarch64/aarch64-builtins.c:
4155         (aarch64_types_quadopu_imm_qualifiers, TYPES_QUADOPUI): New.
4156         * config/aarch64/aarch64-c.c (aarch64_update_cpp_builtins):
4157         (__ARM_FEATURE_SM3): Define if TARGET_SM4 is true.
4158         (__ARM_FEATURE_SM4): Define if TARGET_SM4 is true.
4159         * config/aarch64/aarch64.h (AARCH64_FL_SM4): New flags.
4160         (AARCH64_ISA_SM4): New ISA flag.
4161         (TARGET_SM4): New feature flag for sm4.
4162         * config/aarch64/aarch64-simd-builtins.def
4163         (aarch64_sm3ss1qv4si): Ditto.
4164         (aarch64_sm3tt1aq4si): Ditto.
4165         (aarch64_sm3tt1bq4si): Ditto.
4166         (aarch64_sm3tt2aq4si): Ditto.
4167         (aarch64_sm3tt2bq4si): Ditto.
4168         (aarch64_sm3partw1qv4si): Ditto.
4169         (aarch64_sm3partw2qv4si): Ditto.
4170         (aarch64_sm4eqv4si): Ditto.
4171         (aarch64_sm4ekeyqv4si): Ditto.
4172         * config/aarch64/aarch64-simd.md:
4173         (aarch64_sm3ss1qv4si): Ditto.
4174         (aarch64_sm3tt<sm3tt_op>qv4si): Ditto.
4175         (aarch64_sm3partw<sm3part_op>qv4si): Ditto.
4176         (aarch64_sm4eqv4si): Ditto.
4177         (aarch64_sm4ekeyqv4si): Ditto.
4178         * config/aarch64/iterators.md (sm3tt_op): New int iterator.
4179         (sm3part_op): Ditto.
4180         (CRYPTO_SM3TT): Ditto.
4181         (CRYPTO_SM3PART): Ditto.
4182         (UNSPEC_SM3SS1): New unspec.
4183         (UNSPEC_SM3TT1A): Ditto.
4184         (UNSPEC_SM3TT1B): Ditto.
4185         (UNSPEC_SM3TT2A): Ditto.
4186         (UNSPEC_SM3TT2B): Ditto.
4187         (UNSPEC_SM3PARTW1): Ditto.
4188         (UNSPEC_SM3PARTW2): Ditto.
4189         (UNSPEC_SM4E): Ditto.
4190         (UNSPEC_SM4EKEY): Ditto.
4191         * config/aarch64/constraints.md (Ui2): New constraint.
4192         * config/aarch64/predicates.md (aarch64_imm2): New predicate.
4193         * config/arm/types.md (crypto_sm3): New type attribute.
4194         (crypto_sm4): Ditto.
4195         * config/aarch64/arm_neon.h (vsm3ss1q_u32): New intrinsic.
4196         (vsm3tt1aq_u32): Ditto.
4197         (vsm3tt1bq_u32): Ditto.
4198         (vsm3tt2aq_u32): Ditto.
4199         (vsm3tt2bq_u32): Ditto.
4200         (vsm3partw1q_u32): Ditto.
4201         (vsm3partw2q_u32): Ditto.
4202         (vsm4eq_u32): Ditto.
4203         (vsm4ekeyq_u32): Ditto.
4204         (doc/invoke.texi): Document new sm4 option.
4206 2018-01-10  Michael Collison  <michael.collison@arm.com>
4208         * config/aarch64/aarch64-arches.def (armv8.4-a): New architecture.
4209         * config/aarch64/aarch64.h (AARCH64_ISA_V8_4): New ISA flag.
4210         (AARCH64_FL_FOR_ARCH8_4): New.
4211         (AARCH64_FL_V8_4): New flag.
4212         (doc/invoke.texi): Document new armv8.4-a option.
4214 2018-01-10  Michael Collison  <michael.collison@arm.com>
4216         * config/aarch64/aarch64-c.c (aarch64_update_cpp_builtins):
4217         (__ARM_FEATURE_AES): Define if TARGET_AES is true.
4218         (__ARM_FEATURE_SHA2): Define if TARGET_SHA2 is true.
4219         * config/aarch64/aarch64-option-extension.def: Add
4220         AARCH64_OPT_EXTENSION of 'sha2'.
4221         (aes): Add AARCH64_OPT_EXTENSION of 'aes'.
4222         (crypto): Disable sha2 and aes if crypto disabled.
4223         (crypto): Enable aes and sha2 if enabled.
4224         (simd): Disable sha2 and aes if simd disabled.
4225         * config/aarch64/aarch64.h (AARCH64_FL_AES, AARCH64_FL_SHA2):
4226         New flags.
4227         (AARCH64_ISA_AES, AARCH64_ISA_SHA2): New ISA flags.
4228         (TARGET_SHA2): New feature flag for sha2.
4229         (TARGET_AES): New feature flag for aes.
4230         * config/aarch64/aarch64-simd.md:
4231         (aarch64_crypto_aes<aes_op>v16qi): Make pattern
4232         conditional on TARGET_AES.
4233         (aarch64_crypto_aes<aesmc_op>v16qi): Ditto.
4234         (aarch64_crypto_sha1hsi): Make pattern conditional
4235         on TARGET_SHA2.
4236         (aarch64_crypto_sha1hv4si): Ditto.
4237         (aarch64_be_crypto_sha1hv4si): Ditto.
4238         (aarch64_crypto_sha1su1v4si): Ditto.
4239         (aarch64_crypto_sha1<sha1_op>v4si): Ditto.
4240         (aarch64_crypto_sha1su0v4si): Ditto.
4241         (aarch64_crypto_sha256h<sha256_op>v4si): Ditto.
4242         (aarch64_crypto_sha256su0v4si): Ditto.
4243         (aarch64_crypto_sha256su1v4si): Ditto.
4244         (doc/invoke.texi): Document new aes and sha2 options.
4246 2018-01-10  Martin Sebor  <msebor@redhat.com>
4248         PR tree-optimization/83781
4249         * gimple-fold.c (get_range_strlen): Avoid treating arrays of pointers
4250         as string arrays.
4252 2018-01-11  Martin Sebor  <msebor@gmail.com>
4253             Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>
4255         PR tree-optimization/83501
4256         PR tree-optimization/81703
4258         * tree-ssa-strlen.c (get_string_cst): Rename...
4259         (get_string_len): ...to this.  Handle global constants.
4260         (handle_char_store): Adjust.
4262 2018-01-10  Kito Cheng  <kito.cheng@gmail.com>
4263             Jim Wilson  <jimw@sifive.com>
4265         * config/riscv/riscv-protos.h (riscv_output_return): New.
4266         * config/riscv/riscv.c (struct machine_function): New naked_p field.
4267         (riscv_attribute_table, riscv_output_return),
4268         (riscv_handle_fndecl_attribute, riscv_naked_function_p),
4269         (riscv_allocate_stack_slots_for_args, riscv_warn_func_return): New.
4270         (riscv_compute_frame_info): Only compute frame->mask if not a naked
4271         function.
4272         (riscv_expand_prologue): Add early return for naked function.
4273         (riscv_expand_epilogue): Likewise.
4274         (riscv_function_ok_for_sibcall): Return false for naked function.
4275         (riscv_set_current_function): New.
4276         (TARGET_SET_CURRENT_FUNCTION, TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS),
4277         (TARGET_ATTRIBUTE_TABLE, TARGET_WARN_FUNC_RETURN): New.
4278         * config/riscv/riscv.md (simple_return): Call riscv_output_return.
4279         * doc/extend.texi (RISC-V Function Attributes): New.
4281 2018-01-10  Michael Meissner  <meissner@linux.vnet.ibm.com>
4283         * config/rs6000/rs6000.c (is_complex_IBM_long_double): Explicitly
4284         check for 128-bit long double before checking TCmode.
4285         * config/rs6000/rs6000.h (FLOAT128_IEEE_P): Explicitly check for
4286         128-bit long doubles before checking TFmode or TCmode.
4287         (FLOAT128_IBM_P): Likewise.
4289 2018-01-10  Martin Sebor  <msebor@redhat.com>
4291         PR tree-optimization/83671
4292         * builtins.c (c_strlen): Unconditionally return zero for the empty
4293         string.
4294         Use -Warray-bounds for warnings.
4295         * gimple-fold.c (get_range_strlen): Handle non-constant lengths
4296         for non-constant array indices with COMPONENT_REF, arrays of
4297         arrays, and pointers to arrays.
4298         (gimple_fold_builtin_strlen): Determine and set length range for
4299         non-constant character arrays.
4301 2018-01-10  Aldy Hernandez  <aldyh@redhat.com>
4303         PR middle-end/81897
4304         * tree-ssa-uninit.c (convert_control_dep_chain_into_preds): Skip
4305         empty blocks.
4307 2018-01-10  Eric Botcazou  <ebotcazou@adacore.com>
4309         * dwarf2out.c (dwarf2out_var_location): Do not pass NULL to fprintf.
4311 2018-01-10  Peter Bergner  <bergner@vnet.ibm.com>
4313         PR target/83399
4314         * config/rs6000/rs6000.c (print_operand) <'y'>: Use
4315         VECTOR_MEM_ALTIVEC_OR_VSX_P.
4316         * config/rs6000/vsx.md (*vsx_le_perm_load_<mode> for VSX_D): Use
4317         indexed_or_indirect_operand predicate.
4318         (*vsx_le_perm_load_<mode> for VSX_W): Likewise.
4319         (*vsx_le_perm_load_v8hi): Likewise.
4320         (*vsx_le_perm_load_v16qi): Likewise.
4321         (*vsx_le_perm_store_<mode> for VSX_D): Likewise.
4322         (*vsx_le_perm_store_<mode> for VSX_W): Likewise.
4323         (*vsx_le_perm_store_v8hi): Likewise.
4324         (*vsx_le_perm_store_v16qi): Likewise.
4325         (eight unnamed splitters): Likewise.
4327 2018-01-10  Peter Bergner  <bergner@vnet.ibm.com>
4329         * config/rs6000/x86intrin.h: Change #warning to #error. Update message.
4330         * config/rs6000/emmintrin.h: Likewise.
4331         * config/rs6000/mmintrin.h: Likewise.
4332         * config/rs6000/xmmintrin.h: Likewise.
4334 2018-01-10  David Malcolm  <dmalcolm@redhat.com>
4336         PR c++/43486
4337         * tree-core.h: Document EXPR_LOCATION_WRAPPER_P's usage of
4338         "public_flag".
4339         * tree.c (tree_nop_conversion): Return true for location wrapper
4340         nodes.
4341         (maybe_wrap_with_location): New function.
4342         (selftest::check_strip_nops): New function.
4343         (selftest::test_location_wrappers): New function.
4344         (selftest::tree_c_tests): Call it.
4345         * tree.h (STRIP_ANY_LOCATION_WRAPPER): New macro.
4346         (maybe_wrap_with_location): New decl.
4347         (EXPR_LOCATION_WRAPPER_P): New macro.
4348         (location_wrapper_p): New inline function.
4349         (tree_strip_any_location_wrapper): New inline function.
4351 2018-01-10  H.J. Lu  <hongjiu.lu@intel.com>
4353         PR target/83735
4354         * config/i386/i386.c (ix86_compute_frame_layout): Always adjust
4355         stack_realign_offset for the largest alignment of stack slot
4356         actually used.
4357         (ix86_find_max_used_stack_alignment): New function.
4358         (ix86_finalize_stack_frame_flags): Use it.  Set
4359         max_used_stack_alignment if we don't realign stack.
4360         * config/i386/i386.h (machine_function): Add
4361         max_used_stack_alignment.
4363 2018-01-10  Christophe Lyon  <christophe.lyon@linaro.org>
4365         * config/arm/arm.opt (-mbranch-cost): New option.
4366         * config/arm/arm.h (BRANCH_COST): Take arm_branch_cost into
4367         account.
4369 2018-01-10  Segher Boessenkool  <segher@kernel.crashing.org>
4371         PR target/83629
4372         * config/rs6000/rs6000.md (load_toc_v4_PIC_2, load_toc_v4_PIC_3b,
4373         load_toc_v4_PIC_3c): Wrap const term in CONST RTL.
4375 2018-01-10  Richard Biener  <rguenther@suse.de>
4377         PR debug/83765
4378         * dwarf2out.c (gen_subprogram_die): Hoist old_die && declaration
4379         early out so it also covers the case where we have a non-NULL
4380         origin.
4382 2018-01-10  Richard Sandiford  <richard.sandiford@linaro.org>
4384         PR tree-optimization/83753
4385         * tree-vect-stmts.c (get_group_load_store_type): Use VMAT_CONTIGUOUS
4386         for non-strided grouped accesses if the number of elements is 1.
4388 2018-01-10  Jan Hubicka  <hubicka@ucw.cz>
4390         PR target/81616
4391         * i386.c (ix86_vectorize_builtin_gather): Check TARGET_USE_GATHER.
4392         * i386.h (TARGET_USE_GATHER): Define.
4393         * x86-tune.def (X86_TUNE_USE_GATHER): New.
4395 2018-01-10  Martin Liska  <mliska@suse.cz>
4397         PR bootstrap/82831
4398         * basic-block.h (CLEANUP_NO_PARTITIONING): New define.
4399         * bb-reorder.c (pass_reorder_blocks::execute): Do not clean up
4400         partitioning.
4401         * cfgcleanup.c (try_optimize_cfg): Fix up partitioning if
4402         CLEANUP_NO_PARTITIONING is not set.
4404 2018-01-10  Richard Sandiford  <richard.sandiford@linaro.org>
4406         * doc/rtl.texi: Remove documentation of (const ...) wrappers
4407         for vectors, as a partial revert of r254296.
4408         * rtl.h (const_vec_p): Delete.
4409         (const_vec_duplicate_p): Don't test for vector CONSTs.
4410         (unwrap_const_vec_duplicate, const_vec_series_p): Likewise.
4411         * expmed.c (make_tree): Likewise.
4413         Revert:
4414         * common.md (E, F): Use CONSTANT_P instead of checking for
4415         CONST_VECTOR.
4416         * emit-rtl.c (gen_lowpart_common): Use const_vec_p instead of
4417         checking for CONST_VECTOR.
4419 2018-01-09  Jan Hubicka  <hubicka@ucw.cz>
4421         PR middle-end/83575
4422         * predict.c (force_edge_cold): Handle in more sane way edges
4423         with no prediction.
4425 2018-01-09  Carl Love  <cel@us.ibm.com>
4427         * config/rs6002/altivec.md (p8_vmrgow): Add support for V2DI, V2DF,
4428         V4SI, V4SF types.
4429         (p8_vmrgew): Add support for V2DI, V2DF, V4SF types.
4430         * config/rs6000/rs6000-builtin.def: Add definitions for FLOAT2_V2DF,
4431         VMRGEW_V2DI, VMRGEW_V2DF, VMRGEW_V4SF, VMRGOW_V4SI, VMRGOW_V4SF,
4432         VMRGOW_V2DI, VMRGOW_V2DF.  Remove definition for VMRGOW.
4433         * config/rs6000/rs6000-c.c (VSX_BUILTIN_VEC_FLOAT2,
4434         P8V_BUILTIN_VEC_VMRGEW, P8V_BUILTIN_VEC_VMRGOW):  Add definitions.
4435         * config/rs6000/rs6000-protos.h: Add extern defition for
4436         rs6000_generate_float2_double_code.
4437         * config/rs6000/rs6000.c (rs6000_generate_float2_double_code): Add
4438         function.
4439         * config/rs6000/vsx.md (vsx_xvcdpsp): Add define_insn.
4440         (float2_v2df): Add define_expand.
4442 2018-01-09  Uros Bizjak  <ubizjak@gmail.com>
4444         PR target/83628
4445         * combine.c (force_int_to_mode) <case ASHIFT>: Use mode instead of
4446         op_mode in the force_to_mode call.
4448 2018-01-09  Richard Sandiford  <richard.sandiford@linaro.org>
4450         * config/aarch64/aarch64.c (aarch64_evpc_trn): Use d.perm.series_p
4451         instead of checking each element individually.
4452         (aarch64_evpc_uzp): Likewise.
4453         (aarch64_evpc_zip): Likewise.
4454         (aarch64_evpc_ext): Likewise.
4455         (aarch64_evpc_rev): Likewise.
4456         (aarch64_evpc_dup): Test the encoding for a single duplicated element,
4457         instead of checking each element individually.  Return true without
4458         generating rtl if
4459         (aarch64_vectorize_vec_perm_const): Use all_from_input_p to test
4460         whether all selected elements come from the same input, instead of
4461         checking each element individually.  Remove calls to gen_rtx_REG,
4462         start_sequence and end_sequence and instead assert that no rtl is
4463         generated.
4465 2018-01-09  Richard Sandiford  <richard.sandiford@linaro.org>
4467         * config/aarch64/aarch64.c (aarch64_legitimate_constant_p): Fix
4468         order of HIGH and CONST checks.
4470 2018-01-09  Richard Sandiford  <richard.sandiford@linaro.org>
4472         * tree-vect-stmts.c (permute_vec_elements): Create a fresh variable
4473         if the destination isn't an SSA_NAME.
4475 2018-01-09  Richard Biener  <rguenther@suse.de>
4477         PR tree-optimization/83668
4478         * graphite.c (canonicalize_loop_closed_ssa): Add edge argument,
4479         move prologue...
4480         (canonicalize_loop_form): ... here, renamed from ...
4481         (canonicalize_loop_closed_ssa_form): ... this and amended to
4482         swap successor edges for loop exit blocks to make us use
4483         the RPO order we need for initial schedule generation.
4485 2018-01-09  Joseph Myers  <joseph@codesourcery.com>
4487         PR tree-optimization/64811
4488         * match.pd: When optimizing comparisons with Inf, avoid
4489         introducing or losing exceptions from comparisons with NaN.
4491 2018-01-09  Martin Liska  <mliska@suse.cz>
4493         PR sanitizer/82517
4494         * asan.c (shadow_mem_size): Add gcc_assert.
4496 2018-01-09  Georg-Johann Lay  <avr@gjlay.de>
4498         Don't save registers in main().
4500         PR target/83738
4501         * doc/invoke.texi (AVR Options) [-mmain-is-OS_task]: Document it.
4502         * config/avr/avr.opt (-mmain-is-OS_task): New target option.
4503         * config/avr/avr.c (avr_set_current_function): Don't error if
4504         naked, OS_task or OS_main are specified at the same time.
4505         (avr_function_ok_for_sibcall): Don't disable sibcalls for OS_task,
4506         OS_main.
4507         (avr_insert_attributes) [-mmain-is-OS_task] <main>: Add OS_task
4508         attribute.
4509         * common/config/avr/avr-common.c (avr_option_optimization_table):
4510         Switch on -mmain-is-OS_task for optimizing compilations.
4512 2018-01-09  Richard Biener  <rguenther@suse.de>
4514         PR tree-optimization/83572
4515         * graphite.c: Include cfganal.h.
4516         (graphite_transform_loops): Connect infinite loops to exit
4517         and remove fake edges at the end.
4519 2018-01-09  Jan Hubicka  <hubicka@ucw.cz>
4521         * ipa-inline.c (edge_badness): Revert accidental checkin.
4523 2018-01-09  Jan Hubicka  <hubicka@ucw.cz>
4525         PR ipa/80763
4526         * ipa-comdats.c (set_comdat_group): Only set comdat group of real
4527         symbols; not inline clones.
4529 2018-01-09  Jakub Jelinek  <jakub@redhat.com>
4531         PR target/83507
4532         * modulo-sched.c (schedule_reg_moves): Punt if we'd need to move
4533         hard registers.  Formatting fixes.
4535         PR preprocessor/83722
4536         * gcc.c (try_generate_repro): Pass
4537         &temp_stderr_files[RETRY_ICE_ATTEMPTS - 1] rather than
4538         &temp_stdout_files[RETRY_ICE_ATTEMPTS - 1] as last argument to
4539         do_report_bug.
4541 2018-01-08  Monk Chiang  <sh.chiang04@gmail.com>
4542             Kito Cheng  <kito.cheng@gmail.com>
4544         * config/riscv/riscv.c (machine_function::is_leaf): Remove field.
4545         (riscv_leaf_function_p): Delete.
4546         (riscv_function_ok_for_sibcall): Return false when TARGET_SAVE_RESTORE.
4548 2018-01-08  Aaron Sawdey  <acsawdey@linux.vnet.ibm.com>
4550         * config/rs6000/rs6000-string.c (do_load_for_compare_from_addr): New
4551         function.
4552         (do_ifelse): New function.
4553         (do_isel): New function.
4554         (do_sub3): New function.
4555         (do_add3): New function.
4556         (do_load_mask_compare): New function.
4557         (do_overlap_load_compare): New function.
4558         (expand_compare_loop): New function.
4559         (expand_block_compare): Call expand_compare_loop() when appropriate.
4560         * config/rs6000/rs6000.opt (-mblock-compare-inline-limit): Change
4561         option description.
4562         (-mblock-compare-inline-loop-limit): New option.
4564 2018-01-08  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
4566         PR target/83677
4567         * config/rs6000/altivec.md (*altivec_vpermr_<mode>_internal):
4568         Reverse order of second and third operands in first alternative.
4569         * config/rs6000/rs6000.c (rs6000_expand_vector_set): Reverse order
4570         of first and second elements in UNSPEC_VPERMR vector.
4571         (altivec_expand_vec_perm_le): Likewise.
4573 2018-01-08  Jeff Law  <law@redhat.com>
4575         PR rtl-optimizatin/81308
4576         * tree-switch-conversion.c (cfg_altered): New file scoped static.
4577         (process_switch): If group_case_labels makes a change, then set
4578         cfg_altered.
4579         (pass_convert_switch::execute): If a switch is converted, then
4580         set cfg_altered.  Return TODO_cfg_cleanup if cfg_altered is true.
4582         PR rtl-optimization/81308
4583         * recog.c (split_all_insns): Conditionally cleanup the CFG after
4584         splitting insns.
4586 2018-01-08  Vidya Praveen  <vidyapraveen@arm.com>
4588         PR target/83663 - Revert r255946
4589         * config/aarch64/aarch64.c (aarch64_expand_vector_init): Modify code
4590         generation for cases where splatting a value is not useful.
4591         * simplify-rtx.c (simplify_ternary_operation): Simplify vec_merge
4592         across a vec_duplicate and a paradoxical subreg forming a vector
4593         mode to a vec_concat.
4595 2018-01-08  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
4597         * config/arm/t-aprofile (MULTILIB_MATCHES): Add mapping rules for
4598         -march=armv8.3-a variants.
4599         * config/arm/t-multilib: Likewise.
4600         * config/arm/t-arm-elf: Likewise.  Handle dotprod extension.
4602 2018-01-08  Aaron Sawdey  <acsawdey@linux.vnet.ibm.com>
4604         * config/rs6000/rs6000.md (cceq_ior_compare): Remove * so I can use it
4605         to generate rtl.
4606         (cceq_ior_compare_complement): Give it a name so I can use it, and
4607         change boolean_or_operator predicate to boolean_operator so it can
4608         be used to generate a crand.
4609         (eqne): New code iterator.
4610         (bd/bd_neg): New code_attrs.
4611         (<bd>_<mode>): New name for ctr<mode>_internal[12] now combined into
4612         a single define_insn.
4613         (<bd>tf_<mode>): A new insn pattern for the conditional form branch
4614         decrement (bdnzt/bdnzf/bdzt/bdzf).
4615         * config/rs6000/rs6000.c (rs6000_legitimate_combined_insn): Updated
4616         with the new names of the branch decrement patterns, and added the
4617         names of the branch decrement conditional patterns.
4619 2018-01-08  Richard Biener  <rguenther@suse.de>
4621         PR tree-optimization/83563
4622         * graphite.c (canonicalize_loop_closed_ssa_form): Reset the SCEV
4623         cache.
4625 2018-01-08  Richard Biener  <rguenther@suse.de>
4627         PR middle-end/83713
4628         * convert.c (do_narrow): Properly guard TYPE_OVERFLOW_WRAPS checks.
4630 2018-01-08  Richard Biener  <rguenther@suse.de>
4632         PR tree-optimization/83685
4633         * tree-ssa-pre.c (create_expression_by_pieces): Do not insert
4634         references to abnormals.
4636 2018-01-08  Richard Biener  <rguenther@suse.de>
4638         PR lto/83719
4639         * dwarf2out.c (output_indirect_strings): Handle empty
4640         skeleton_debug_str_hash.
4641         (dwarf2out_early_finish): Index strings for -gsplit-dwarf.
4643 2018-01-08  Claudiu Zissulescu  <claziss@synopsys.com>
4645         * config/arc/arc.c (TARGET_TRAMPOLINE_ADJUST_ADDRESS): Delete.
4646         (emit_store_direct): Likewise.
4647         (arc_trampoline_adjust_address): Likewise.
4648         (arc_asm_trampoline_template): New function.
4649         (arc_initialize_trampoline): Use asm_trampoline_template.
4650         (TARGET_ASM_TRAMPOLINE_TEMPLATE): Define.
4651         * config/arc/arc.h (TRAMPOLINE_SIZE): Adjust to 16.
4652         * config/arc/arc.md (flush_icache): Delete pattern.
4654 2018-01-08  Claudiu Zissulescu  <claziss@synopsys.com>
4656         * config/arc/arc-c.def (__ARC_UNALIGNED__): New define.
4657         * config/arc/arc.h (STRICT_ALIGNMENT): Control this macro using
4658         munaligned-access.
4660 2018-01-08  Sebastian Huber  <sebastian.huber@embedded-brains.de>
4662         PR target/83681
4663         * config/epiphany/epiphany.h (make_pass_mode_switch_use): Guard
4664         by not USED_FOR_TARGET.
4665         (make_pass_resolve_sw_modes): Likewise.
4667 2018-01-08  Sebastian Huber  <sebastian.huber@embedded-brains.de>
4669         * config/nios2/nios2.h (nios2_section_threshold): Guard by not
4670         USED_FOR_TARGET.
4672 2018-01-08  Richard Biener  <rguenther@suse.de>
4674         PR middle-end/83580
4675         * tree-data-ref.c (split_constant_offset): Remove STRIP_NOPS.
4677 2018-01-08  Richard Biener  <rguenther@suse.de>
4679         PR middle-end/83517
4680         * match.pd ((t * 2) / 2) -> t): Add missing :c.
4682 2018-01-06  Aldy Hernandez  <aldyh@redhat.com>
4684         PR middle-end/81897
4685         * tree-ssa-uninit.c (compute_control_dep_chain): Do not bail on
4686         basic blocks with a small number of successors.
4687         (convert_control_dep_chain_into_preds): Improve handling of
4688         forwarder blocks.
4689         (dump_predicates): Split apart into...
4690         (dump_pred_chain): ...here...
4691         (dump_pred_info): ...and here.
4692         (can_one_predicate_be_invalidated_p): Add debugging printfs.
4693         (can_chain_union_be_invalidated_p): Improve check for invalidation
4694         of paths.
4695         (uninit_uses_cannot_happen): Avoid unnecessary if
4696         convert_control_dep_chain_into_preds yielded nothing.
4698 2018-01-06  Martin Sebor  <msebor@redhat.com>
4700         PR tree-optimization/83640
4701         * gimple-ssa-warn-restrict.c (builtin_access::builtin_access): Avoid
4702         subtracting negative offset from size.
4703         (builtin_access::overlap): Adjust offset bounds of the access to fall
4704         within the size of the object if possible.
4706 2018-01-06  Richard Sandiford  <richard.sandiford@linaro.org>
4708         PR rtl-optimization/83699
4709         * expmed.c (extract_bit_field_1): Restrict the vector usage of
4710         extract_bit_field_as_subreg to cases in which the extracted
4711         value is also a vector.
4713         * lra-constraints.c (process_alt_operands): Test for the equivalence
4714         substitutions when detecting a possible reload cycle.
4716 2018-01-06  Jakub Jelinek  <jakub@redhat.com>
4718         PR debug/83480
4719         * toplev.c (process_options): Don't enable debug_nonbind_markers_p
4720         by default if flag_selective_schedling{,2}.  Formatting fixes.
4722         PR rtl-optimization/83682
4723         * rtl.h (const_vec_duplicate_p): Only return true for VEC_DUPLICATE
4724         if it has non-VECTOR_MODE element mode.
4725         (vec_duplicate_p): Likewise.
4727         PR middle-end/83694
4728         * cfgexpand.c (expand_debug_expr): Punt if mode1 is VOIDmode
4729         and bitsize might be greater than MAX_BITSIZE_MODE_ANY_INT.
4731 2018-01-05  Jakub Jelinek  <jakub@redhat.com>
4733         PR target/83604
4734         * config/i386/i386-builtin.def
4735         (__builtin_ia32_vgf2p8affineinvqb_v64qi,
4736         __builtin_ia32_vgf2p8affineqb_v64qi, __builtin_ia32_vgf2p8mulb_v64qi):
4737         Require also OPTION_MASK_ISA_AVX512F in addition to
4738         OPTION_MASK_ISA_GFNI.
4739         (__builtin_ia32_vgf2p8affineinvqb_v16qi_mask,
4740         __builtin_ia32_vgf2p8affineqb_v16qi_mask): Require
4741         OPTION_MASK_ISA_AVX512VL instead of OPTION_MASK_ISA_SSE in addition
4742         to OPTION_MASK_ISA_GFNI.
4743         (__builtin_ia32_vgf2p8mulb_v32qi_mask): Require
4744         OPTION_MASK_ISA_AVX512VL in addition to OPTION_MASK_ISA_GFNI and
4745         OPTION_MASK_ISA_AVX512BW.
4746         (__builtin_ia32_vgf2p8mulb_v16qi_mask): Require
4747         OPTION_MASK_ISA_AVX512VL instead of OPTION_MASK_ISA_AVX512BW in
4748         addition to OPTION_MASK_ISA_GFNI.
4749         (__builtin_ia32_vgf2p8affineinvqb_v16qi,
4750         __builtin_ia32_vgf2p8affineqb_v16qi, __builtin_ia32_vgf2p8mulb_v16qi):
4751         Require OPTION_MASK_ISA_SSE2 instead of OPTION_MASK_ISA_SSE in addition
4752         to OPTION_MASK_ISA_GFNI.
4753         * config/i386/i386.c (def_builtin): Change to builtin isa/isa2 being
4754         a requirement for all ISAs rather than any of them with a few
4755         exceptions.
4756         (ix86_add_new_builtins): Clear OPTION_MASK_ISA_64BIT from isa before
4757         processing.
4758         (ix86_expand_builtin): Require all ISAs from builtin's isa and isa2
4759         bitmasks to be enabled with 3 exceptions, instead of requiring any
4760         enabled ISA with lots of exceptions.
4761         * config/i386/sse.md (vgf2p8affineinvqb_<mode><mask_name>,
4762         vgf2p8affineqb_<mode><mask_name>, vgf2p8mulb_<mode><mask_name>):
4763         Change avx512bw in isa attribute to avx512f.
4764         * config/i386/sgxintrin.h: Add license boilerplate.
4765         * config/i386/vaesintrin.h: Likewise.  Fix macro spelling __AVX512F
4766         to __AVX512F__ and __AVX512VL to __AVX512VL__.
4767         (_mm256_aesdec_epi128, _mm256_aesdeclast_epi128, _mm256_aesenc_epi128,
4768         _mm256_aesenclast_epi128): Enable temporarily avx if __AVX__ is not
4769         defined.
4770         * config/i386/gfniintrin.h (_mm_gf2p8mul_epi8,
4771         _mm_gf2p8affineinv_epi64_epi8, _mm_gf2p8affine_epi64_epi8): Enable
4772         temporarily sse2 rather than sse if not enabled already.
4774         PR target/83604
4775         * config/i386/sse.md (VI248_VLBW): Rename to ...
4776         (VI248_AVX512VL): ... this.  Don't guard V32HI with TARGET_AVX512BW.
4777         (vpshrd_<mode><mask_name>, vpshld_<mode><mask_name>,
4778         vpshrdv_<mode>, vpshrdv_<mode>_mask, vpshrdv_<mode>_maskz,
4779         vpshrdv_<mode>_maskz_1, vpshldv_<mode>, vpshldv_<mode>_mask,
4780         vpshldv_<mode>_maskz, vpshldv_<mode>_maskz_1): Use VI248_AVX512VL
4781         mode iterator instead of VI248_VLBW.
4783 2018-01-05  Jan Hubicka  <hubicka@ucw.cz>
4785         * ipa-fnsummary.c (record_modified_bb_info): Add OP.
4786         (record_modified): Skip clobbers; add debug output.
4787         (param_change_prob): Use sreal frequencies.
4789 2018-01-05  Richard Sandiford  <richard.sandiford@linaro.org>
4791         * tree-vect-data-refs.c (vect_compute_data_ref_alignment): Don't
4792         punt for user-aligned variables.
4794 2018-01-05  Richard Sandiford  <richard.sandiford@linaro.org>
4796         * tree-chrec.c (chrec_contains_symbols): Return true for
4797         POLY_INT_CST.
4799 2018-01-05  Sudakshina Das  <sudi.das@arm.com>
4801         PR target/82439
4802         * simplify-rtx.c (simplify_relational_operation_1): Add simplifications
4803         of (x|y) == x for BICS pattern.
4805 2018-01-05  Jakub Jelinek  <jakub@redhat.com>
4807         PR tree-optimization/83605
4808         * gimple-ssa-strength-reduction.c: Include tree-eh.h.
4809         (find_candidates_dom_walker::before_dom_children): Ignore stmts that
4810         can throw.
4812 2018-01-05  Sebastian Huber  <sebastian.huber@embedded-brains.de>
4814         * config.gcc (epiphany-*-elf*): Add (epiphany-*-rtems*) configuration.
4815         * config/epiphany/rtems.h: New file.
4817 2018-01-04  Jakub Jelinek  <jakub@redhat.com>
4818             Uros Bizjak  <ubizjak@gmail.com>
4820         PR target/83554
4821         * config/i386/i386.md (*<rotate_insn>hi3_1 splitter): Use
4822         QIreg_operand instead of register_operand predicate.
4823         * config/i386/i386.c (ix86_rop_should_change_byte_p,
4824         set_rop_modrm_reg_bits, ix86_mitigate_rop): Use -mmitigate-rop in
4825         comments instead of -fmitigate[-_]rop.
4827 2018-01-04  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
4829         PR bootstrap/81926
4830         * cgraphunit.c (symbol_table::compile): Switch to text_section
4831         before calling assembly_start debug hook.
4832         * run-rtl-passes.c (run_rtl_passes): Likewise.
4833         Include output.h.
4835 2018-01-04  Richard Sandiford  <richard.sandiford@linaro.org>
4837         * tree-vrp.c (extract_range_from_binary_expr_1): Check
4838         range_int_cst_p rather than !symbolic_range_p before calling
4839         extract_range_from_multiplicative_op_1.
4841 2018-01-04  Jeff Law  <law@redhat.com>
4843         * tree-ssa-math-opts.c (execute_cse_reciprocals_1): Remove
4844         redundant test in assertion.
4846 2018-01-04  Richard Sandiford  <richard.sandiford@linaro.org>
4848         * doc/rtl.texi: Document machine_mode wrapper classes.
4850 2018-01-04  Richard Sandiford  <richard.sandiford@linaro.org>
4852         * fold-const.c (fold_ternary_loc): Check tree_fits_uhwi_p before
4853         using tree_to_uhwi.
4855 2018-01-04  Richard Sandiford  <richard.sandiford@linaro.org>
4857         * tree-ssa-forwprop.c (is_combined_permutation_identity): Allow
4858         the VEC_PERM_EXPR fold to fail.
4860 2018-01-04  Jakub Jelinek  <jakub@redhat.com>
4862         PR debug/83585
4863         * bb-reorder.c (insert_section_boundary_note): Set has_bb_partition
4864         to switched_sections.
4866 2018-01-04  Richard Sandiford  <richard.sandiford@linaro.org>
4868         PR target/83680
4869         * config/arm/arm.c (arm_vectorize_vec_perm_const): Fix inverted
4870         test for d.testing.
4872 2018-01-04  Peter Bergner  <bergner@vnet.ibm.com>
4874         PR target/83387
4875         * config/rs6000/rs6000.c (rs6000_discover_homogeneous_aggregate): Do not
4876         allow arguments in FP registers if TARGET_HARD_FLOAT is false.
4878 2018-01-04  Jakub Jelinek  <jakub@redhat.com>
4880         PR debug/83666
4881         * cfgexpand.c (expand_debug_expr) <case BIT_FIELD_REF>: Punt if mode
4882         is BLKmode and bitpos not zero or mode change is needed.
4884 2018-01-04  Richard Sandiford  <richard.sandiford@linaro.org>
4886         PR target/83675
4887         * config/sparc/sparc.c (sparc_vectorize_vec_perm_const): Require
4888         TARGET_VIS2.
4890 2018-01-04  Uros Bizjak  <ubizjak@gmail.com>
4892         PR target/83628
4893         * config/alpha/alpha.md (*sadd<modesuffix>): Use ASHIFT
4894         instead of MULT rtx.  Update all corresponding splitters.
4895         (*saddl_se): Ditto.
4896         (*ssub<modesuffix>): Ditto.
4897         (*ssubl_se): Ditto.
4898         (*cmp_sadd_di): Update split patterns.
4899         (*cmp_sadd_si): Ditto.
4900         (*cmp_sadd_sidi): Ditto.
4901         (*cmp_ssub_di): Ditto.
4902         (*cmp_ssub_si): Ditto.
4903         (*cmp_ssub_sidi): Ditto.
4904         * config/alpha/predicates.md (const23_operand): New predicate.
4905         * config/alpha/alpha.c (alpha_rtx_costs) [PLUS, MINUS]:
4906         Look for ASHIFT, not MULT inner operand.
4907         (alpha_split_conditional_move): Update for *sadd<modesuffix> change.
4909 2018-01-04  Martin Liska  <mliska@suse.cz>
4911         PR gcov-profile/83669
4912         * gcov.c (output_intermediate_file): Add version to intermediate
4913         gcov file.
4914         * doc/gcov.texi: Document new field 'version' in intermediate
4915         file format. Fix location of '-k' option of gcov command.
4917 2018-01-04  Martin Liska  <mliska@suse.cz>
4919         PR ipa/82352
4920         * ipa-icf.c (sem_function::merge): Do not cross comdat boundary.
4922 2018-01-04  Jakub Jelinek  <jakub@redhat.com>
4924         * gimple-ssa-sprintf.c (parse_directive): Cast second dir.len to uhwi.
4926 2018-01-03  Martin Sebor  <msebor@redhat.com>
4928         PR tree-optimization/83655
4929         * gimple-ssa-warn-restrict.c (wrestrict_dom_walker::check_call): Avoid
4930         checking calls with invalid arguments.
4932 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
4934         * tree-vect-stmts.c (vect_get_store_rhs): New function.
4935         (vectorizable_mask_load_store): Delete.
4936         (vectorizable_call): Return false for masked loads and stores.
4937         (vectorizable_store): Handle IFN_MASK_STORE.  Use vect_get_store_rhs
4938         instead of gimple_assign_rhs1.
4939         (vectorizable_load): Handle IFN_MASK_LOAD.
4940         (vect_transform_stmt): Don't set is_store for call_vec_info_type.
4942 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
4944         * tree-vect-stmts.c (vect_build_gather_load_calls): New function,
4945         split out from..,
4946         (vectorizable_mask_load_store): ...here.
4947         (vectorizable_load): ...and here.
4949 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
4951         * tree-vect-stmts.c (vect_build_all_ones_mask)
4952         (vect_build_zero_merge_argument): New functions, split out from...
4953         (vectorizable_load): ...here.
4955 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
4957         * tree-vect-stmts.c (vect_check_store_rhs): New function,
4958         split out from...
4959         (vectorizable_mask_load_store): ...here.
4960         (vectorizable_store): ...and here.
4962 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
4964         * tree-vect-stmts.c (vect_check_load_store_mask): New function,
4965         split out from...
4966         (vectorizable_mask_load_store): ...here.
4968 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
4970         * tree-vectorizer.h (vec_load_store_type): Moved from tree-vec-stmts.c
4971         (vect_model_store_cost): Take a vec_load_store_type instead of a
4972         vect_def_type.
4973         * tree-vect-stmts.c (vec_load_store_type): Move to tree-vectorizer.h.
4974         (vect_model_store_cost): Take a vec_load_store_type instead of a
4975         vect_def_type.
4976         (vectorizable_mask_load_store): Update accordingly.
4977         (vectorizable_store): Likewise.
4978         * tree-vect-slp.c (vect_analyze_slp_cost_1): Update accordingly.
4980 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
4982         * tree-vect-loop.c (vect_transform_loop): Stub out scalar
4983         IFN_MASK_LOAD calls here rather than...
4984         * tree-vect-stmts.c (vectorizable_mask_load_store): ...here.
4986 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
4987             Alan Hayward  <alan.hayward@arm.com>
4988             David Sherwood  <david.sherwood@arm.com>
4990         * expmed.c (extract_bit_field_1): For vector extracts,
4991         fall back to extract_bit_field_as_subreg if vec_extract
4992         isn't available.
4994 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
4995             Alan Hayward  <alan.hayward@arm.com>
4996             David Sherwood  <david.sherwood@arm.com>
4998         * lra-spills.c (pseudo_reg_slot_compare): Sort slots by whether
4999         they are variable or constant sized.
5000         (assign_stack_slot_num_and_sort_pseudos): Don't reuse variable-sized
5001         slots for constant-sized data.
5003 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5004             Alan Hayward  <alan.hayward@arm.com>
5005             David Sherwood  <david.sherwood@arm.com>
5007         * tree-vect-patterns.c (vect_recog_mask_conversion_pattern): When
5008         handling COND_EXPRs with boolean comparisons, try to find a better
5009         basis for the mask type than the boolean itself.
5011 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5013         * doc/rtl.texi (MAX_BITSIZE_MODE_ANY_MODE): Describe how the default
5014         is calculated and how it can be overridden.
5015         * genmodes.c (max_bitsize_mode_any_mode): New variable.
5016         (create_modes): Initialize it from MAX_BITSIZE_MODE_ANY_MODE,
5017         if defined.
5018         (emit_max_int): Use it to set the output MAX_BITSIZE_MODE_ANY_MODE,
5019         if nonzero.
5021 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5022             Alan Hayward  <alan.hayward@arm.com>
5023             David Sherwood  <david.sherwood@arm.com>
5025         * config/aarch64/aarch64-protos.h (aarch64_output_simd_mov_immediate):
5026         Remove the mode argument.
5027         (aarch64_simd_valid_immediate): Remove the mode and inverse
5028         arguments.
5029         * config/aarch64/iterators.md (bitsize): New iterator.
5030         * config/aarch64/aarch64-simd.md (*aarch64_simd_mov<mode>, and<mode>3)
5031         (ior<mode>3): Update calls to aarch64_output_simd_mov_immediate.
5032         * config/aarch64/constraints.md (Do, Db, Dn): Update calls to
5033         aarch64_simd_valid_immediate.
5034         * config/aarch64/predicates.md (aarch64_reg_or_orr_imm): Likewise.
5035         (aarch64_reg_or_bic_imm): Likewise.
5036         * config/aarch64/aarch64.c (simd_immediate_info): Replace mvn
5037         with an insn_type enum and msl with a modifier_type enum.
5038         Replace element_width with a scalar_mode.  Change the shift
5039         to unsigned int.  Add constructors for scalar_float_mode and
5040         scalar_int_mode elements.
5041         (aarch64_vect_float_const_representable_p): Delete.
5042         (aarch64_can_const_movi_rtx_p)
5043         (aarch64_simd_scalar_immediate_valid_for_move)
5044         (aarch64_simd_make_constant): Update call to
5045         aarch64_simd_valid_immediate.
5046         (aarch64_advsimd_valid_immediate_hs): New function.
5047         (aarch64_advsimd_valid_immediate): Likewise.
5048         (aarch64_simd_valid_immediate): Remove mode and inverse
5049         arguments.  Rewrite to use the above.  Use const_vec_duplicate_p
5050         to detect duplicated constants and use aarch64_float_const_zero_rtx_p
5051         and aarch64_float_const_representable_p on the result.
5052         (aarch64_output_simd_mov_immediate): Remove mode argument.
5053         Update call to aarch64_simd_valid_immediate and use of
5054         simd_immediate_info.
5055         (aarch64_output_scalar_simd_mov_immediate): Update call
5056         accordingly.
5058 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5059             Alan Hayward  <alan.hayward@arm.com>
5060             David Sherwood  <david.sherwood@arm.com>
5062         * machmode.h (mode_precision): Prefix with CONST_MODE_PRECISION.
5063         (mode_nunits): Likewise CONST_MODE_NUNITS.
5064         * machmode.def (ADJUST_NUNITS): Document.
5065         * genmodes.c (mode_data::need_nunits_adj): New field.
5066         (blank_mode): Update accordingly.
5067         (adj_nunits): New variable.
5068         (print_maybe_const_decl): Replace CATEGORY with a NEEDS_ADJ
5069         parameter.
5070         (emit_mode_size_inline): Set need_bytesize_adj for all modes
5071         listed in adj_nunits.
5072         (emit_mode_nunits_inline): Set need_nunits_adj for all modes
5073         listed in adj_nunits.  Don't emit case statements for such modes.
5074         (emit_insn_modes_h): Emit definitions of CONST_MODE_NUNITS
5075         and CONST_MODE_PRECISION.  Make CONST_MODE_SIZE expand to
5076         nothing if adj_nunits is nonnull.
5077         (emit_mode_precision, emit_mode_nunits): Use print_maybe_const_decl.
5078         (emit_mode_unit_size, emit_mode_base_align, emit_mode_ibit)
5079         (emit_mode_fbit): Update use of print_maybe_const_decl.
5080         (emit_move_size): Likewise.  Treat the array as non-const
5081         if adj_nunits.
5082         (emit_mode_adjustments): Handle adj_nunits.
5084 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5086         * machmode.def (VECTOR_MODES_WITH_PREFIX): Document.
5087         * genmodes.c (VECTOR_MODES_WITH_PREFIX): New macro.
5088         (VECTOR_MODES): Use it.
5089         (make_vector_modes): Take the prefix as an argument.
5091 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5092             Alan Hayward  <alan.hayward@arm.com>
5093             David Sherwood  <david.sherwood@arm.com>
5095         * mode-classes.def (MODE_VECTOR_BOOL): New mode class.
5096         * machmode.h (INTEGRAL_MODE_P, VECTOR_MODE_P): Return true
5097         for MODE_VECTOR_BOOL.
5098         * machmode.def (VECTOR_BOOL_MODE): Document.
5099         * genmodes.c (VECTOR_BOOL_MODE): New macro.
5100         (make_vector_bool_mode): New function.
5101         (complete_mode, emit_mode_wider, emit_mode_adjustments): Handle
5102         MODE_VECTOR_BOOL.
5103         * lto-streamer-in.c (lto_input_mode_table): Likewise.
5104         * rtx-vector-builder.c (rtx_vector_builder::find_cached_value):
5105         Likewise.
5106         * stor-layout.c (int_mode_for_mode): Likewise.
5107         * tree.c (build_vector_type_for_mode): Likewise.
5108         * varasm.c (output_constant_pool_2): Likewise.
5109         * emit-rtl.c (init_emit_once): Make sure that CONST1_RTX (BImode) and
5110         CONSTM1_RTX (BImode) are the same thing.  Initialize const_tiny_rtx
5111         for MODE_VECTOR_BOOL.
5112         * expr.c (expand_expr_real_1): Use VECTOR_MODE_P instead of a list
5113         of mode class checks.
5114         * tree-vect-generic.c (expand_vector_operation): Use VECTOR_MODE_P
5115         instead of a list of mode class checks.
5116         (expand_vector_scalar_condition): Likewise.
5117         (type_for_widest_vector_mode): Handle BImode as an inner mode.
5119 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5120             Alan Hayward  <alan.hayward@arm.com>
5121             David Sherwood  <david.sherwood@arm.com>
5123         * machmode.h (mode_size): Change from unsigned short to
5124         poly_uint16_pod.
5125         (mode_to_bytes): Return a poly_uint16 rather than an unsigned short.
5126         (GET_MODE_SIZE): Return a constant if ONLY_FIXED_SIZE_MODES,
5127         or if measurement_type is not polynomial.
5128         (fixed_size_mode::includes_p): Check for constant-sized modes.
5129         * genmodes.c (emit_mode_size_inline): Make mode_size_inline
5130         return a poly_uint16 rather than an unsigned short.
5131         (emit_mode_size): Change the type of mode_size from unsigned short
5132         to poly_uint16_pod.  Use ZERO_COEFFS for the initializer.
5133         (emit_mode_adjustments): Cope with polynomial vector sizes.
5134         * lto-streamer-in.c (lto_input_mode_table): Use bp_unpack_poly_value
5135         for GET_MODE_SIZE.
5136         * lto-streamer-out.c (lto_write_mode_table): Use bp_pack_poly_value
5137         for GET_MODE_SIZE.
5138         * auto-inc-dec.c (try_merge): Treat GET_MODE_SIZE as polynomial.
5139         * builtins.c (expand_ifn_atomic_compare_exchange_into_call): Likewise.
5140         * caller-save.c (setup_save_areas): Likewise.
5141         (replace_reg_with_saved_mem): Likewise.
5142         * calls.c (emit_library_call_value_1): Likewise.
5143         * combine-stack-adj.c (combine_stack_adjustments_for_block): Likewise.
5144         * combine.c (simplify_set, make_extraction, simplify_shift_const_1)
5145         (gen_lowpart_for_combine): Likewise.
5146         * convert.c (convert_to_integer_1): Likewise.
5147         * cse.c (equiv_constant, cse_insn): Likewise.
5148         * cselib.c (autoinc_split, cselib_hash_rtx): Likewise.
5149         (cselib_subst_to_values): Likewise.
5150         * dce.c (word_dce_process_block): Likewise.
5151         * df-problems.c (df_word_lr_mark_ref): Likewise.
5152         * dwarf2cfi.c (init_one_dwarf_reg_size): Likewise.
5153         * dwarf2out.c (multiple_reg_loc_descriptor, mem_loc_descriptor)
5154         (concat_loc_descriptor, concatn_loc_descriptor, loc_descriptor)
5155         (rtl_for_decl_location): Likewise.
5156         * emit-rtl.c (gen_highpart, widen_memory_access): Likewise.
5157         * expmed.c (extract_bit_field_1, extract_integral_bit_field): Likewise.
5158         * expr.c (emit_group_load_1, clear_storage_hints): Likewise.
5159         (emit_move_complex, emit_move_multi_word, emit_push_insn): Likewise.
5160         (expand_expr_real_1): Likewise.
5161         * function.c (assign_parm_setup_block_p, assign_parm_setup_block)
5162         (pad_below): Likewise.
5163         * gimple-fold.c (optimize_atomic_compare_exchange_p): Likewise.
5164         * gimple-ssa-store-merging.c (rhs_valid_for_store_merging_p): Likewise.
5165         * ira.c (get_subreg_tracking_sizes): Likewise.
5166         * ira-build.c (ira_create_allocno_objects): Likewise.
5167         * ira-color.c (coalesced_pseudo_reg_slot_compare): Likewise.
5168         (ira_sort_regnos_for_alter_reg): Likewise.
5169         * ira-costs.c (record_operand_costs): Likewise.
5170         * lower-subreg.c (interesting_mode_p, simplify_gen_subreg_concatn)
5171         (resolve_simple_move): Likewise.
5172         * lra-constraints.c (get_reload_reg, operands_match_p): Likewise.
5173         (process_addr_reg, simplify_operand_subreg, curr_insn_transform)
5174         (lra_constraints): Likewise.
5175         (CONST_POOL_OK_P): Reject variable-sized modes.
5176         * lra-spills.c (slot, assign_mem_slot, pseudo_reg_slot_compare)
5177         (add_pseudo_to_slot, lra_spill): Likewise.
5178         * omp-low.c (omp_clause_aligned_alignment): Likewise.
5179         * optabs-query.c (get_best_extraction_insn): Likewise.
5180         * optabs-tree.c (expand_vec_cond_expr_p): Likewise.
5181         * optabs.c (expand_vec_perm_var, expand_vec_cond_expr): Likewise.
5182         (expand_mult_highpart, valid_multiword_target_p): Likewise.
5183         * recog.c (offsettable_address_addr_space_p): Likewise.
5184         * regcprop.c (maybe_mode_change): Likewise.
5185         * reginfo.c (choose_hard_reg_mode, record_subregs_of_mode): Likewise.
5186         * regrename.c (build_def_use): Likewise.
5187         * regstat.c (dump_reg_info): Likewise.
5188         * reload.c (complex_word_subreg_p, push_reload, find_dummy_reload)
5189         (find_reloads, find_reloads_subreg_address): Likewise.
5190         * reload1.c (eliminate_regs_1): Likewise.
5191         * rtlanal.c (for_each_inc_dec_find_inc_dec, rtx_cost): Likewise.
5192         * simplify-rtx.c (avoid_constant_pool_reference): Likewise.
5193         (simplify_binary_operation_1, simplify_subreg): Likewise.
5194         * targhooks.c (default_function_arg_padding): Likewise.
5195         (default_hard_regno_nregs, default_class_max_nregs): Likewise.
5196         * tree-cfg.c (verify_gimple_assign_binary): Likewise.
5197         (verify_gimple_assign_ternary): Likewise.
5198         * tree-inline.c (estimate_move_cost): Likewise.
5199         * tree-ssa-forwprop.c (simplify_vector_constructor): Likewise.
5200         * tree-ssa-loop-ivopts.c (add_autoinc_candidates): Likewise.
5201         (get_address_cost_ainc): Likewise.
5202         * tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Likewise.
5203         (vect_supportable_dr_alignment): Likewise.
5204         * tree-vect-loop.c (vect_determine_vectorization_factor): Likewise.
5205         (vectorizable_reduction): Likewise.
5206         * tree-vect-stmts.c (vectorizable_assignment, vectorizable_shift)
5207         (vectorizable_operation, vectorizable_load): Likewise.
5208         * tree.c (build_same_sized_truth_vector_type): Likewise.
5209         * valtrack.c (cleanup_auto_inc_dec): Likewise.
5210         * var-tracking.c (emit_note_insn_var_location): Likewise.
5211         * config/arc/arc.h (ASM_OUTPUT_CASE_END): Use as_a <scalar_int_mode>.
5212         (ADDR_VEC_ALIGN): Likewise.
5214 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5215             Alan Hayward  <alan.hayward@arm.com>
5216             David Sherwood  <david.sherwood@arm.com>
5218         * machmode.h (mode_to_bits): Return a poly_uint16 rather than an
5219         unsigned short.
5220         (GET_MODE_BITSIZE): Return a constant if ONLY_FIXED_SIZE_MODES,
5221         or if measurement_type is polynomial.
5222         * calls.c (shift_return_value): Treat GET_MODE_BITSIZE as polynomial.
5223         * combine.c (make_extraction): Likewise.
5224         * dse.c (find_shift_sequence): Likewise.
5225         * dwarf2out.c (mem_loc_descriptor): Likewise.
5226         * expmed.c (store_integral_bit_field, extract_bit_field_1): Likewise.
5227         (extract_bit_field, extract_low_bits): Likewise.
5228         * expr.c (convert_move, convert_modes, emit_move_insn_1): Likewise.
5229         (optimize_bitfield_assignment_op, expand_assignment): Likewise.
5230         (store_expr_with_bounds, store_field, expand_expr_real_1): Likewise.
5231         * fold-const.c (optimize_bit_field_compare, merge_ranges): Likewise.
5232         * gimple-fold.c (optimize_atomic_compare_exchange_p): Likewise.
5233         * reload.c (find_reloads): Likewise.
5234         * reload1.c (alter_reg): Likewise.
5235         * stor-layout.c (bitwise_mode_for_mode, compute_record_mode): Likewise.
5236         * targhooks.c (default_secondary_memory_needed_mode): Likewise.
5237         * tree-if-conv.c (predicate_mem_writes): Likewise.
5238         * tree-ssa-strlen.c (handle_builtin_memcmp): Likewise.
5239         * tree-vect-patterns.c (adjust_bool_pattern): Likewise.
5240         * tree-vect-stmts.c (vectorizable_simd_clone_call): Likewise.
5241         * valtrack.c (dead_debug_insert_temp): Likewise.
5242         * varasm.c (mergeable_constant_section): Likewise.
5243         * config/sh/sh.h (LOCAL_ALIGNMENT): Use as_a <fixed_size_mode>.
5245 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5246             Alan Hayward  <alan.hayward@arm.com>
5247             David Sherwood  <david.sherwood@arm.com>
5249         * expr.c (expand_assignment): Cope with polynomial mode sizes
5250         when assigning to a CONCAT.
5252 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5253             Alan Hayward  <alan.hayward@arm.com>
5254             David Sherwood  <david.sherwood@arm.com>
5256         * machmode.h (mode_precision): Change from unsigned short to
5257         poly_uint16_pod.
5258         (mode_to_precision): Return a poly_uint16 rather than an unsigned
5259         short.
5260         (GET_MODE_PRECISION): Return a constant if ONLY_FIXED_SIZE_MODES,
5261         or if measurement_type is not polynomial.
5262         (HWI_COMPUTABLE_MODE_P): Turn into a function.  Optimize the case
5263         in which the mode is already known to be a scalar_int_mode.
5264         * genmodes.c (emit_mode_precision): Change the type of mode_precision
5265         from unsigned short to poly_uint16_pod.  Use ZERO_COEFFS for the
5266         initializer.
5267         * lto-streamer-in.c (lto_input_mode_table): Use bp_unpack_poly_value
5268         for GET_MODE_PRECISION.
5269         * lto-streamer-out.c (lto_write_mode_table): Use bp_pack_poly_value
5270         for GET_MODE_PRECISION.
5271         * combine.c (update_rsp_from_reg_equal): Treat GET_MODE_PRECISION
5272         as polynomial.
5273         (try_combine, find_split_point, combine_simplify_rtx): Likewise.
5274         (expand_field_assignment, make_extraction): Likewise.
5275         (make_compound_operation_int, record_dead_and_set_regs_1): Likewise.
5276         (get_last_value): Likewise.
5277         * convert.c (convert_to_integer_1): Likewise.
5278         * cse.c (cse_insn): Likewise.
5279         * expr.c (expand_expr_real_1): Likewise.
5280         * lra-constraints.c (simplify_operand_subreg): Likewise.
5281         * optabs-query.c (can_atomic_load_p): Likewise.
5282         * optabs.c (expand_atomic_load): Likewise.
5283         (expand_atomic_store): Likewise.
5284         * ree.c (combine_reaching_defs): Likewise.
5285         * rtl.h (partial_subreg_p, paradoxical_subreg_p): Likewise.
5286         * rtlanal.c (nonzero_bits1, lsb_bitfield_op_p): Likewise.
5287         * tree.h (type_has_mode_precision_p): Likewise.
5288         * ubsan.c (instrument_si_overflow): Likewise.
5290 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5291             Alan Hayward  <alan.hayward@arm.com>
5292             David Sherwood  <david.sherwood@arm.com>
5294         * tree.h (TYPE_VECTOR_SUBPARTS): Turn into a function and handle
5295         polynomial numbers of units.
5296         (SET_TYPE_VECTOR_SUBPARTS): Likewise.
5297         (valid_vector_subparts_p): New function.
5298         (build_vector_type): Remove temporary shim and take the number
5299         of units as a poly_uint64 rather than an int.
5300         (build_opaque_vector_type): Take the number of units as a
5301         poly_uint64 rather than an int.
5302         * tree.c (build_vector_from_ctor): Handle polynomial
5303         TYPE_VECTOR_SUBPARTS.
5304         (type_hash_canon_hash, type_cache_hasher::equal): Likewise.
5305         (uniform_vector_p, vector_type_mode, build_vector): Likewise.
5306         (build_vector_from_val): If the number of units is variable,
5307         use build_vec_duplicate_cst for constant operands and
5308         VEC_DUPLICATE_EXPR otherwise.
5309         (make_vector_type): Remove temporary is_constant ().
5310         (build_vector_type, build_opaque_vector_type): Take the number of
5311         units as a poly_uint64 rather than an int.
5312         (check_vector_cst): Handle polynomial TYPE_VECTOR_SUBPARTS and
5313         VECTOR_CST_NELTS.
5314         * cfgexpand.c (expand_debug_expr): Likewise.
5315         * expr.c (count_type_elements, categorize_ctor_elements_1): Likewise.
5316         (store_constructor, expand_expr_real_1): Likewise.
5317         (const_scalar_mask_from_tree): Likewise.
5318         * fold-const-call.c (fold_const_reduction): Likewise.
5319         * fold-const.c (const_binop, const_unop, fold_convert_const): Likewise.
5320         (operand_equal_p, fold_vec_perm, fold_ternary_loc): Likewise.
5321         (native_encode_vector, vec_cst_ctor_to_array): Likewise.
5322         (fold_relational_const): Likewise.
5323         (native_interpret_vector): Likewise.  Change the size from an
5324         int to an unsigned int.
5325         * gimple-fold.c (gimple_fold_stmt_to_constant_1): Handle polynomial
5326         TYPE_VECTOR_SUBPARTS.
5327         (gimple_fold_indirect_ref, gimple_build_vector): Likewise.
5328         (gimple_build_vector_from_val): Use VEC_DUPLICATE_EXPR when
5329         duplicating a non-constant operand into a variable-length vector.
5330         * hsa-brig.c (hsa_op_immed::emit_to_buffer): Handle polynomial
5331         TYPE_VECTOR_SUBPARTS and VECTOR_CST_NELTS.
5332         * ipa-icf.c (sem_variable::equals): Likewise.
5333         * match.pd: Likewise.
5334         * omp-simd-clone.c (simd_clone_subparts): Likewise.
5335         * print-tree.c (print_node): Likewise.
5336         * stor-layout.c (layout_type): Likewise.
5337         * targhooks.c (default_builtin_vectorization_cost): Likewise.
5338         * tree-cfg.c (verify_gimple_comparison): Likewise.
5339         (verify_gimple_assign_binary): Likewise.
5340         (verify_gimple_assign_ternary): Likewise.
5341         (verify_gimple_assign_single): Likewise.
5342         * tree-pretty-print.c (dump_generic_node): Likewise.
5343         * tree-ssa-forwprop.c (simplify_vector_constructor): Likewise.
5344         (simplify_bitfield_ref, is_combined_permutation_identity): Likewise.
5345         * tree-vect-data-refs.c (vect_permute_store_chain): Likewise.
5346         (vect_grouped_load_supported, vect_permute_load_chain): Likewise.
5347         (vect_shift_permute_load_chain): Likewise.
5348         * tree-vect-generic.c (nunits_for_known_piecewise_op): Likewise.
5349         (expand_vector_condition, optimize_vector_constructor): Likewise.
5350         (lower_vec_perm, get_compute_type): Likewise.
5351         * tree-vect-loop.c (vect_determine_vectorization_factor): Likewise.
5352         (get_initial_defs_for_reduction, vect_transform_loop): Likewise.
5353         * tree-vect-patterns.c (vect_recog_bool_pattern): Likewise.
5354         (vect_recog_mask_conversion_pattern): Likewise.
5355         * tree-vect-slp.c (vect_supported_load_permutation_p): Likewise.
5356         (vect_get_constant_vectors, vect_transform_slp_perm_load): Likewise.
5357         * tree-vect-stmts.c (perm_mask_for_reverse): Likewise.
5358         (get_group_load_store_type, vectorizable_mask_load_store): Likewise.
5359         (vectorizable_bswap, simd_clone_subparts, vectorizable_assignment)
5360         (vectorizable_shift, vectorizable_operation, vectorizable_store)
5361         (vectorizable_load, vect_is_simple_cond, vectorizable_comparison)
5362         (supportable_widening_operation): Likewise.
5363         (supportable_narrowing_operation): Likewise.
5364         * tree-vector-builder.c (tree_vector_builder::binary_encoded_nelts):
5365         Likewise.
5366         * varasm.c (output_constant): Likewise.
5368 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5369             Alan Hayward  <alan.hayward@arm.com>
5370             David Sherwood  <david.sherwood@arm.com>
5372         * tree-vect-data-refs.c (vect_permute_store_chain): Reorganize
5373         so that both the length == 3 and length != 3 cases set up their
5374         own permute vectors.  Add comments explaining why we know the
5375         number of elements is constant.
5376         (vect_permute_load_chain): Likewise.
5378 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5379             Alan Hayward  <alan.hayward@arm.com>
5380             David Sherwood  <david.sherwood@arm.com>
5382         * machmode.h (mode_nunits): Change from unsigned char to
5383         poly_uint16_pod.
5384         (ONLY_FIXED_SIZE_MODES): New macro.
5385         (pod_mode::measurement_type, scalar_int_mode::measurement_type)
5386         (scalar_float_mode::measurement_type, scalar_mode::measurement_type)
5387         (complex_mode::measurement_type, fixed_size_mode::measurement_type):
5388         New typedefs.
5389         (mode_to_nunits): Return a poly_uint16 rather than an unsigned short.
5390         (GET_MODE_NUNITS): Return a constant if ONLY_FIXED_SIZE_MODES,
5391         or if measurement_type is not polynomial.
5392         * genmodes.c (ZERO_COEFFS): New macro.
5393         (emit_mode_nunits_inline): Make mode_nunits_inline return a
5394         poly_uint16.
5395         (emit_mode_nunits): Change the type of mode_nunits to poly_uint16_pod.
5396         Use ZERO_COEFFS when emitting initializers.
5397         * data-streamer.h (bp_pack_poly_value): New function.
5398         (bp_unpack_poly_value): Likewise.
5399         * lto-streamer-in.c (lto_input_mode_table): Use bp_unpack_poly_value
5400         for GET_MODE_NUNITS.
5401         * lto-streamer-out.c (lto_write_mode_table): Use bp_pack_poly_value
5402         for GET_MODE_NUNITS.
5403         * tree.c (make_vector_type): Remove temporary shim and make
5404         the real function take the number of units as a poly_uint64
5405         rather than an int.
5406         (build_vector_type_for_mode): Handle polynomial nunits.
5407         * dwarf2out.c (loc_descriptor, add_const_value_attribute): Likewise.
5408         * emit-rtl.c (const_vec_series_p_1): Likewise.
5409         (gen_rtx_CONST_VECTOR): Likewise.
5410         * fold-const.c (test_vec_duplicate_folding): Likewise.
5411         * genrecog.c (validate_pattern): Likewise.
5412         * optabs-query.c (can_vec_perm_var_p, can_mult_highpart_p): Likewise.
5413         * optabs-tree.c (expand_vec_cond_expr_p): Likewise.
5414         * optabs.c (expand_vector_broadcast, expand_binop_directly): Likewise.
5415         (shift_amt_for_vec_perm_mask, expand_vec_perm_var): Likewise.
5416         (expand_vec_cond_expr, expand_mult_highpart): Likewise.
5417         * rtlanal.c (subreg_get_info): Likewise.
5418         * tree-vect-data-refs.c (vect_grouped_store_supported): Likewise.
5419         (vect_grouped_load_supported): Likewise.
5420         * tree-vect-generic.c (type_for_widest_vector_mode): Likewise.
5421         * tree-vect-loop.c (have_whole_vector_shift): Likewise.
5422         * simplify-rtx.c (simplify_unary_operation_1): Likewise.
5423         (simplify_const_unary_operation, simplify_binary_operation_1)
5424         (simplify_const_binary_operation, simplify_ternary_operation)
5425         (test_vector_ops_duplicate, test_vector_ops): Likewise.
5426         (simplify_immed_subreg): Use GET_MODE_NUNITS on a fixed_size_mode
5427         instead of CONST_VECTOR_NUNITS.
5428         * varasm.c (output_constant_pool_2): Likewise.
5429         * rtx-vector-builder.c (rtx_vector_builder::build): Only include the
5430         explicit-encoded elements in the XVEC for variable-length vectors.
5432 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5434         * lra-constraints.c (curr_insn_transform): Use partial_subreg_p.
5436 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5437             Alan Hayward  <alan.hayward@arm.com>
5438             David Sherwood  <david.sherwood@arm.com>
5440         * coretypes.h (fixed_size_mode): Declare.
5441         (fixed_size_mode_pod): New typedef.
5442         * builtins.h (target_builtins::x_apply_args_mode)
5443         (target_builtins::x_apply_result_mode): Change type to
5444         fixed_size_mode_pod.
5445         * builtins.c (apply_args_size, apply_result_size, result_vector)
5446         (expand_builtin_apply_args_1, expand_builtin_apply)
5447         (expand_builtin_return): Update accordingly.
5449 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5451         * cse.c (hash_rtx_cb): Hash only the encoded elements.
5452         * cselib.c (cselib_hash_rtx): Likewise.
5453         * expmed.c (make_tree): Build VECTOR_CSTs directly from the
5454         CONST_VECTOR encoding.
5456 2018-01-03  Jakub Jelinek  <jakub@redhat.com>
5457             Jeff Law  <law@redhat.com>
5459         PR target/83641
5460         * config/i386/i386.c (ix86_adjust_stack_and_probe_stack_clash): For
5461         noreturn probe, use gen_pop instead of ix86_emit_restore_reg_using_pop,
5462         only set RTX_FRAME_RELATED_P on both the push and pop if cfa_reg is sp
5463         and add REG_CFA_ADJUST_CFA notes in that case to both insns.
5465         PR target/83641
5466         * config/i386/i386.c (ix86_adjust_stack_and_probe_stack_clash): Do not
5467         explicitly probe *sp in a noreturn function if there were any callee
5468         register saves or frame pointer is needed.
5470 2018-01-03  Jakub Jelinek  <jakub@redhat.com>
5472         PR debug/83621
5473         * cfgexpand.c (expand_debug_expr): Return NULL if mode is
5474         BLKmode for ternary, binary or unary expressions.
5476         PR debug/83645
5477         * var-tracking.c (delete_vta_debug_insn): New inline function.
5478         (delete_vta_debug_insns): Add USE_CFG argument, if true, walk just
5479         insns from get_insns () to NULL instead of each bb separately.
5480         Use delete_vta_debug_insn.  No longer static.
5481         (vt_debug_insns_local, variable_tracking_main_1): Adjust
5482         delete_vta_debug_insns callers.
5483         * rtl.h (delete_vta_debug_insns): Declare.
5484         * final.c (rest_of_handle_final): Call delete_vta_debug_insns
5485         instead of variable_tracking_main.
5487 2018-01-03  Martin Sebor  <msebor@redhat.com>
5489         PR tree-optimization/83603
5490         * calls.c (maybe_warn_nonstring_arg): Avoid accessing function
5491         arguments past the endof the argument list in functions declared
5492         without a prototype.
5493         * gimple-ssa-warn-restrict.c (wrestrict_dom_walker::check_call):
5494         Avoid checking when arguments are null.
5496 2018-01-03  Martin Sebor  <msebor@redhat.com>
5498         PR c/83559
5499         * doc/extend.texi (attribute const): Fix a typo.
5500         * ipa-pure-const.c ((warn_function_const, warn_function_pure): Avoid
5501         issuing -Wsuggest-attribute for void functions.
5503 2018-01-03  Martin Sebor  <msebor@redhat.com>
5505         * gimple-ssa-warn-restrict.c (builtin_memref::builtin_memref): Use
5506         offset_int::from instead of wide_int::to_shwi.
5507         (maybe_diag_overlap): Remove assertion.
5508         Use HOST_WIDE_INT_PRINT_DEC instead of %lli.
5509         * gimple-ssa-sprintf.c (format_directive): Same.
5510         (parse_directive): Same.
5511         (sprintf_dom_walker::compute_format_length): Same.
5512         (try_substitute_return_value): Same.
5514 2018-01-03  Jeff Law  <law@redhat.com>
5516         PR middle-end/83654
5517         * explow.c (anti_adjust_stack_and_probe_stack_clash): Test a
5518         non-constant residual for zero at runtime and avoid probing in
5519         that case.  Reorganize code for trailing problem to mirror handling
5520         of the residual.
5522 2018-01-03  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>
5524         PR tree-optimization/83501
5525         * tree-ssa-strlen.c (get_string_cst): New.
5526         (handle_char_store): Call get_string_cst.
5528 2018-01-03  Martin Liska  <mliska@suse.cz>
5530         PR tree-optimization/83593
5531         * tree-ssa-strlen.c: Include tree-cfg.h.
5532         (strlen_check_and_optimize_stmt): Add new argument cleanup_eh.
5533         (strlen_dom_walker): Add new member variable m_cleanup_cfg.
5534         (strlen_dom_walker::strlen_dom_walker): Initialize m_cleanup_cfg
5535         to false.
5536         (strlen_dom_walker::before_dom_children): Call
5537         gimple_purge_dead_eh_edges. Dump tranformation with details
5538         dump flags.
5539         (strlen_dom_walker::before_dom_children): Update call by adding
5540         new argument cleanup_eh.
5541         (pass_strlen::execute): Return TODO_cleanup_cfg if needed.
5543 2018-01-03  Martin Liska  <mliska@suse.cz>
5545         PR ipa/83549
5546         * cif-code.def (VARIADIC_THUNK): New enum value.
5547         * ipa-fnsummary.c (compute_fn_summary): Do not inline variadic
5548         thunks.
5550 2018-01-03  Jan Beulich  <jbeulich@suse.com>
5552         * sse.md (mov<mode>_internal): Tighten condition for when to use
5553         vmovdqu<ssescalarsize> for TI and OI modes.
5555 2018-01-03  Jakub Jelinek  <jakub@redhat.com>
5557         Update copyright years.
5559 2018-01-03  Martin Liska  <mliska@suse.cz>
5561         PR ipa/83594
5562         * ipa-visibility.c (function_and_variable_visibility): Skip
5563         functions with noipa attribure.
5565 2018-01-03  Jakub Jelinek  <jakub@redhat.com>
5567         * gcc.c (process_command): Update copyright notice dates.
5568         * gcov-dump.c (print_version): Ditto.
5569         * gcov.c (print_version): Ditto.
5570         * gcov-tool.c (print_version): Ditto.
5571         * gengtype.c (create_file): Ditto.
5572         * doc/cpp.texi: Bump @copying's copyright year.
5573         * doc/cppinternals.texi: Ditto.
5574         * doc/gcc.texi: Ditto.
5575         * doc/gccint.texi: Ditto.
5576         * doc/gcov.texi: Ditto.
5577         * doc/install.texi: Ditto.
5578         * doc/invoke.texi: Ditto.
5580 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5582         * vector-builder.h (vector_builder::m_full_nelts): Change from
5583         unsigned int to poly_uint64.
5584         (vector_builder::full_nelts): Update prototype accordingly.
5585         (vector_builder::new_vector): Likewise.
5586         (vector_builder::encoded_full_vector_p): Handle polynomial full_nelts.
5587         (vector_builder::operator ==): Likewise.
5588         (vector_builder::finalize): Likewise.
5589         * int-vector-builder.h (int_vector_builder::int_vector_builder):
5590         Take the number of elements as a poly_uint64 rather than an
5591         unsigned int.
5592         * vec-perm-indices.h (vec_perm_indices::m_nelts_per_input): Change
5593         from unsigned int to poly_uint64.
5594         (vec_perm_indices::vec_perm_indices): Update prototype accordingly.
5595         (vec_perm_indices::new_vector): Likewise.
5596         (vec_perm_indices::length): Likewise.
5597         (vec_perm_indices::nelts_per_input): Likewise.
5598         (vec_perm_indices::input_nelts): Likewise.
5599         * vec-perm-indices.c (vec_perm_indices::new_vector): Take the
5600         number of elements per input as a poly_uint64 rather than an
5601         unsigned int.  Use the original encoding for variable-length
5602         vectors, rather than clamping each individual element.
5603         For the second and subsequent elements in each pattern,
5604         clamp the step and base before clamping their sum.
5605         (vec_perm_indices::series_p): Handle polynomial element counts.
5606         (vec_perm_indices::all_in_range_p): Likewise.
5607         (vec_perm_indices_to_tree): Likewise.
5608         (vec_perm_indices_to_rtx): Likewise.
5609         * tree-vect-stmts.c (vect_gen_perm_mask_any): Likewise.
5610         * tree-vector-builder.c (tree_vector_builder::new_unary_operation)
5611         (tree_vector_builder::new_binary_operation): Handle polynomial
5612         element counts.  Return false if we need to know the number
5613         of elements at compile time.
5614         * fold-const.c (fold_vec_perm): Punt if the number of elements
5615         isn't known at compile time.
5617 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5619         * vec-perm-indices.h (vec_perm_builder): Change element type
5620         from HOST_WIDE_INT to poly_int64.
5621         (vec_perm_indices::element_type): Update accordingly.
5622         (vec_perm_indices::clamp): Handle polynomial element_types.
5623         * vec-perm-indices.c (vec_perm_indices::series_p): Likewise.
5624         (vec_perm_indices::all_in_range_p): Likewise.
5625         (tree_to_vec_perm_builder): Check for poly_int64 trees rather
5626         than shwi trees.
5627         * vector-builder.h (vector_builder::stepped_sequence_p): Handle
5628         polynomial vec_perm_indices element types.
5629         * int-vector-builder.h (int_vector_builder::equal_p): Likewise.
5630         * fold-const.c (fold_vec_perm): Likewise.
5631         * optabs.c (shift_amt_for_vec_perm_mask): Likewise.
5632         * tree-vect-generic.c (lower_vec_perm): Likewise.
5633         * tree-vect-slp.c (vect_transform_slp_perm_load): Likewise.
5634         * config/aarch64/aarch64.c (aarch64_evpc_tbl): Cast d->perm
5635         element type to HOST_WIDE_INT.
5637 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5638             Alan Hayward  <alan.hayward@arm.com>
5639             David Sherwood  <david.sherwood@arm.com>
5641         * alias.c (addr_side_effect_eval): Take the size as a poly_int64
5642         rather than an int.  Use plus_constant.
5643         (memrefs_conflict_p): Take the sizes as poly_int64s rather than ints.
5644         Take the offset "c" as a poly_int64 rather than a HOST_WIDE_INT.
5646 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5647             Alan Hayward  <alan.hayward@arm.com>
5648             David Sherwood  <david.sherwood@arm.com>
5650         * calls.c (emit_call_1, expand_call): Change struct_value_size from
5651         a HOST_WIDE_INT to a poly_int64.
5653 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5654             Alan Hayward  <alan.hayward@arm.com>
5655             David Sherwood  <david.sherwood@arm.com>
5657         * calls.c (load_register_parameters): Cope with polynomial
5658         mode sizes.  Require a constant size for BLKmode parameters
5659         that aren't described by a PARALLEL.  If BLOCK_REG_PADDING
5660         forces a parameter to be padded at the lsb end in order to
5661         fill a complete number of words, require the parameter size
5662         to be ordered wrt UNITS_PER_WORD.
5664 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5665             Alan Hayward  <alan.hayward@arm.com>
5666             David Sherwood  <david.sherwood@arm.com>
5668         * reload1.c (spill_stack_slot_width): Change element type
5669         from unsigned int to poly_uint64_pod.
5670         (alter_reg): Treat mode sizes as polynomial.
5672 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5673             Alan Hayward  <alan.hayward@arm.com>
5674             David Sherwood  <david.sherwood@arm.com>
5676         * reload.c (complex_word_subreg_p): New function.
5677         (reload_inner_reg_of_subreg, push_reload): Use it.
5679 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5680             Alan Hayward  <alan.hayward@arm.com>
5681             David Sherwood  <david.sherwood@arm.com>
5683         * lra-constraints.c (process_alt_operands): Reject matched
5684         operands whose sizes aren't ordered.
5685         (match_reload): Refer to this check here.
5687 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5688             Alan Hayward  <alan.hayward@arm.com>
5689             David Sherwood  <david.sherwood@arm.com>
5691         * builtins.c (expand_ifn_atomic_compare_exchange_into_call): Assert
5692         that the mode size is in the set {1, 2, 4, 8, 16}.
5694 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5695             Alan Hayward  <alan.hayward@arm.com>
5696             David Sherwood  <david.sherwood@arm.com>
5698         * var-tracking.c (adjust_mems): Treat mode sizes as polynomial.
5699         Use plus_constant instead of gen_rtx_PLUS.
5701 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5702             Alan Hayward  <alan.hayward@arm.com>
5703             David Sherwood  <david.sherwood@arm.com>
5705         * config/cr16/cr16-protos.h (cr16_push_rounding): Declare.
5706         * config/cr16/cr16.h (PUSH_ROUNDING): Move implementation to...
5707         * config/cr16/cr16.c (cr16_push_rounding): ...this new function.
5708         * config/h8300/h8300-protos.h (h8300_push_rounding): Declare.
5709         * config/h8300/h8300.h (PUSH_ROUNDING): Move implementation to...
5710         * config/h8300/h8300.c (h8300_push_rounding): ...this new function.
5711         * config/i386/i386-protos.h (ix86_push_rounding): Declare.
5712         * config/i386/i386.h (PUSH_ROUNDING): Move implementation to...
5713         * config/i386/i386.c (ix86_push_rounding): ...this new function.
5714         * config/m32c/m32c-protos.h (m32c_push_rounding): Take and return
5715         a poly_int64.
5716         * config/m32c/m32c.c (m32c_push_rounding): Likewise.
5717         * config/m68k/m68k-protos.h (m68k_push_rounding): Declare.
5718         * config/m68k/m68k.h (PUSH_ROUNDING): Move implementation to...
5719         * config/m68k/m68k.c (m68k_push_rounding): ...this new function.
5720         * config/pdp11/pdp11-protos.h (pdp11_push_rounding): Declare.
5721         * config/pdp11/pdp11.h (PUSH_ROUNDING): Move implementation to...
5722         * config/pdp11/pdp11.c (pdp11_push_rounding): ...this new function.
5723         * config/stormy16/stormy16-protos.h (xstormy16_push_rounding): Declare.
5724         * config/stormy16/stormy16.h (PUSH_ROUNDING): Move implementation to...
5725         * config/stormy16/stormy16.c (xstormy16_push_rounding): ...this new
5726         function.
5727         * expr.c (emit_move_resolve_push): Treat the input and result
5728         of PUSH_ROUNDING as a poly_int64.
5729         (emit_move_complex_push, emit_single_push_insn_1): Likewise.
5730         (emit_push_insn): Likewise.
5731         * lra-eliminations.c (mark_not_eliminable): Likewise.
5732         * recog.c (push_operand): Likewise.
5733         * reload1.c (elimination_effects): Likewise.
5734         * rtlanal.c (nonzero_bits1): Likewise.
5735         * calls.c (store_one_arg): Likewise.  Require the padding to be
5736         known at compile time.
5738 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5739             Alan Hayward  <alan.hayward@arm.com>
5740             David Sherwood  <david.sherwood@arm.com>
5742         * expr.c (emit_single_push_insn_1): Treat mode sizes as polynomial.
5743         Use plus_constant instead of gen_rtx_PLUS.
5745 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5746             Alan Hayward  <alan.hayward@arm.com>
5747             David Sherwood  <david.sherwood@arm.com>
5749         * auto-inc-dec.c (set_inc_state): Take the mode size as a poly_int64
5750         rather than an int.
5752 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5753             Alan Hayward  <alan.hayward@arm.com>
5754             David Sherwood  <david.sherwood@arm.com>
5756         * expr.c (expand_expr_real_1): Use tree_to_poly_uint64
5757         instead of int_size_in_bytes when handling VIEW_CONVERT_EXPRs
5758         via stack temporaries.  Treat the mode size as polynomial too.
5760 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5761             Alan Hayward  <alan.hayward@arm.com>
5762             David Sherwood  <david.sherwood@arm.com>
5764         * expr.c (expand_expr_real_2): When handling conversions involving
5765         unions, apply tree_to_poly_uint64 to the TYPE_SIZE rather than
5766         multiplying int_size_in_bytes by BITS_PER_UNIT.  Treat GET_MODE_BISIZE
5767         as a poly_uint64 too.
5769 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5770             Alan Hayward  <alan.hayward@arm.com>
5771             David Sherwood  <david.sherwood@arm.com>
5773         * rtlanal.c (subreg_get_info): Handle polynomial mode sizes.
5775 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5776             Alan Hayward  <alan.hayward@arm.com>
5777             David Sherwood  <david.sherwood@arm.com>
5779         * combine.c (can_change_dest_mode): Handle polynomial
5780         REGMODE_NATURAL_SIZE.
5781         * expmed.c (store_bit_field_1): Likewise.
5782         * expr.c (store_constructor): Likewise.
5783         * emit-rtl.c (validate_subreg): Operate on polynomial mode sizes
5784         and polynomial REGMODE_NATURAL_SIZE.
5785         (gen_lowpart_common): Likewise.
5786         * reginfo.c (record_subregs_of_mode): Likewise.
5787         * rtlanal.c (read_modify_subreg_p): Likewise.
5789 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5790             Alan Hayward  <alan.hayward@arm.com>
5791             David Sherwood  <david.sherwood@arm.com>
5793         * internal-fn.c (expand_vector_ubsan_overflow): Handle polynomial
5794         numbers of elements.
5796 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5797             Alan Hayward  <alan.hayward@arm.com>
5798             David Sherwood  <david.sherwood@arm.com>
5800         * match.pd: Cope with polynomial numbers of vector elements.
5802 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5803             Alan Hayward  <alan.hayward@arm.com>
5804             David Sherwood  <david.sherwood@arm.com>
5806         * fold-const.c (fold_indirect_ref_1): Handle polynomial offsets
5807         in a POINTER_PLUS_EXPR.
5809 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5810             Alan Hayward  <alan.hayward@arm.com>
5811             David Sherwood  <david.sherwood@arm.com>
5813         * omp-simd-clone.c (simd_clone_subparts): New function.
5814         (simd_clone_init_simd_arrays): Use it instead of TYPE_VECTOR_SUBPARTS.
5815         (ipa_simd_modify_function_body): Likewise.
5817 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5818             Alan Hayward  <alan.hayward@arm.com>
5819             David Sherwood  <david.sherwood@arm.com>
5821         * tree-vect-generic.c (nunits_for_known_piecewise_op): New function.
5822         (expand_vector_piecewise): Use it instead of TYPE_VECTOR_SUBPARTS.
5823         (expand_vector_addition, add_rshift, expand_vector_divmod): Likewise.
5824         (expand_vector_condition, vector_element): Likewise.
5825         (subparts_gt): New function.
5826         (get_compute_type): Use subparts_gt.
5827         (count_type_subparts): Delete.
5828         (expand_vector_operations_1): Use subparts_gt instead of
5829         count_type_subparts.
5831 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5832             Alan Hayward  <alan.hayward@arm.com>
5833             David Sherwood  <david.sherwood@arm.com>
5835         * tree-vect-data-refs.c (vect_no_alias_p): Replace with...
5836         (vect_compile_time_alias): ...this new function.  Do the calculation
5837         on poly_ints rather than trees.
5838         (vect_prune_runtime_alias_test_list): Update call accordingly.
5840 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5841             Alan Hayward  <alan.hayward@arm.com>
5842             David Sherwood  <david.sherwood@arm.com>
5844         * tree-vect-slp.c (vect_build_slp_tree_1): Handle polynomial
5845         numbers of units.
5846         (vect_schedule_slp_instance): Likewise.
5848 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5849             Alan Hayward  <alan.hayward@arm.com>
5850             David Sherwood  <david.sherwood@arm.com>
5852         * tree-vect-slp.c (vect_get_and_check_slp_defs): Reject
5853         constant and extern definitions for variable-length vectors.
5854         (vect_get_constant_vectors): Note that the number of units
5855         is known to be constant.
5857 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5858             Alan Hayward  <alan.hayward@arm.com>
5859             David Sherwood  <david.sherwood@arm.com>
5861         * tree-vect-stmts.c (vectorizable_conversion): Treat the number
5862         of units as polynomial.  Choose between WIDE and NARROW based
5863         on multiple_p.
5865 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5866             Alan Hayward  <alan.hayward@arm.com>
5867             David Sherwood  <david.sherwood@arm.com>
5869         * tree-vect-stmts.c (simd_clone_subparts): New function.
5870         (vectorizable_simd_clone_call): Use it instead of TYPE_VECTOR_SUBPARTS.
5872 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5873             Alan Hayward  <alan.hayward@arm.com>
5874             David Sherwood  <david.sherwood@arm.com>
5876         * tree-vect-stmts.c (vectorizable_call): Treat the number of
5877         vectors as polynomial.  Use build_index_vector for
5878         IFN_GOMP_SIMD_LANE.
5880 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5881             Alan Hayward  <alan.hayward@arm.com>
5882             David Sherwood  <david.sherwood@arm.com>
5884         * tree-vect-stmts.c (get_load_store_type): Treat the number of
5885         units as polynomial.  Reject VMAT_ELEMENTWISE and VMAT_STRIDED_SLP
5886         for variable-length vectors.
5887         (vectorizable_mask_load_store): Treat the number of units as
5888         polynomial, asserting that it is constant if the condition has
5889         already been enforced.
5890         (vectorizable_store, vectorizable_load): Likewise.
5892 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5893             Alan Hayward  <alan.hayward@arm.com>
5894             David Sherwood  <david.sherwood@arm.com>
5896         * tree-vect-loop.c (vectorizable_live_operation): Treat the number
5897         of units as polynomial.  Punt if we can't tell at compile time
5898         which vector contains the final result.
5900 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5901             Alan Hayward  <alan.hayward@arm.com>
5902             David Sherwood  <david.sherwood@arm.com>
5904         * tree-vect-loop.c (vectorizable_induction): Treat the number
5905         of units as polynomial.  Punt on SLP inductions.  Use an integer
5906         VEC_SERIES_EXPR for variable-length integer reductions.  Use a
5907         cast of such a series for variable-length floating-point
5908         reductions.
5910 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5911             Alan Hayward  <alan.hayward@arm.com>
5912             David Sherwood  <david.sherwood@arm.com>
5914         * tree.h (build_index_vector): Declare.
5915         * tree.c (build_index_vector): New function.
5916         * tree-vect-loop.c (get_initial_defs_for_reduction): Treat the number
5917         of units as polynomial, forcibly converting it to a constant if
5918         vectorizable_reduction has already enforced the condition.
5919         (vect_create_epilog_for_reduction): Likewise.  Use build_index_vector
5920         to create a {1,2,3,...} vector.
5921         (vectorizable_reduction): Treat the number of units as polynomial.
5922         Choose vectype_in based on the largest scalar element size rather
5923         than the smallest number of units.  Enforce the restrictions
5924         relied on above.
5926 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5927             Alan Hayward  <alan.hayward@arm.com>
5928             David Sherwood  <david.sherwood@arm.com>
5930         * tree-vect-data-refs.c (vector_alignment_reachable_p): Treat the
5931         number of units as polynomial.
5933 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5934             Alan Hayward  <alan.hayward@arm.com>
5935             David Sherwood  <david.sherwood@arm.com>
5937         * target.h (vector_sizes, auto_vector_sizes): New typedefs.
5938         * target.def (autovectorize_vector_sizes): Return the vector sizes
5939         by pointer, using vector_sizes rather than a bitmask.
5940         * targhooks.h (default_autovectorize_vector_sizes): Update accordingly.
5941         * targhooks.c (default_autovectorize_vector_sizes): Likewise.
5942         * config/aarch64/aarch64.c (aarch64_autovectorize_vector_sizes):
5943         Likewise.
5944         * config/arc/arc.c (arc_autovectorize_vector_sizes): Likewise.
5945         * config/arm/arm.c (arm_autovectorize_vector_sizes): Likewise.
5946         * config/i386/i386.c (ix86_autovectorize_vector_sizes): Likewise.
5947         * config/mips/mips.c (mips_autovectorize_vector_sizes): Likewise.
5948         * omp-general.c (omp_max_vf): Likewise.
5949         * omp-low.c (omp_clause_aligned_alignment): Likewise.
5950         * optabs-query.c (can_vec_mask_load_store_p): Likewise.
5951         * tree-vect-loop.c (vect_analyze_loop): Likewise.
5952         * tree-vect-slp.c (vect_slp_bb): Likewise.
5953         * doc/tm.texi: Regenerate.
5954         * tree-vectorizer.h (current_vector_size): Change from an unsigned int
5955         to a poly_uint64.
5956         * tree-vect-stmts.c (get_vectype_for_scalar_type_and_size): Take
5957         the vector size as a poly_uint64 rather than an unsigned int.
5958         (current_vector_size): Change from an unsigned int to a poly_uint64.
5959         (get_vectype_for_scalar_type): Update accordingly.
5960         * tree.h (build_truth_vector_type): Take the size and number of
5961         units as a poly_uint64 rather than an unsigned int.
5962         (build_vector_type): Add a temporary overload that takes
5963         the number of units as a poly_uint64 rather than an unsigned int.
5964         * tree.c (make_vector_type): Likewise.
5965         (build_truth_vector_type): Take the number of units as a poly_uint64
5966         rather than an unsigned int.
5968 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5969             Alan Hayward  <alan.hayward@arm.com>
5970             David Sherwood  <david.sherwood@arm.com>
5972         * target.def (get_mask_mode): Take the number of units and length
5973         as poly_uint64s rather than unsigned ints.
5974         * targhooks.h (default_get_mask_mode): Update accordingly.
5975         * targhooks.c (default_get_mask_mode): Likewise.
5976         * config/i386/i386.c (ix86_get_mask_mode): Likewise.
5977         * doc/tm.texi: Regenerate.
5979 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5980             Alan Hayward  <alan.hayward@arm.com>
5981             David Sherwood  <david.sherwood@arm.com>
5983         * omp-general.h (omp_max_vf): Return a poly_uint64 instead of an int.
5984         * omp-general.c (omp_max_vf): Likewise.
5985         * omp-expand.c (omp_adjust_chunk_size): Update call to omp_max_vf.
5986         (expand_omp_simd): Handle polynomial safelen.
5987         * omp-low.c (omplow_simd_context): Add a default constructor.
5988         (omplow_simd_context::max_vf): Change from int to poly_uint64.
5989         (lower_rec_simd_input_clauses): Update accordingly.
5990         (lower_rec_input_clauses): Likewise.
5992 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
5993             Alan Hayward  <alan.hayward@arm.com>
5994             David Sherwood  <david.sherwood@arm.com>
5996         * tree-vectorizer.h (vect_nunits_for_cost): New function.
5997         * tree-vect-loop.c (vect_model_reduction_cost): Use it.
5998         * tree-vect-slp.c (vect_analyze_slp_cost_1): Likewise.
5999         (vect_analyze_slp_cost): Likewise.
6000         * tree-vect-stmts.c (vect_model_store_cost): Likewise.
6001         (vect_model_load_cost): Likewise.
6003 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
6004             Alan Hayward  <alan.hayward@arm.com>
6005             David Sherwood  <david.sherwood@arm.com>
6007         * tree-vect-slp.c (vect_record_max_nunits, vect_build_slp_tree_1)
6008         (vect_build_slp_tree_2, vect_build_slp_tree): Change max_nunits
6009         from an unsigned int * to a poly_uint64_pod *.
6010         (calculate_unrolling_factor): New function.
6011         (vect_analyze_slp_instance): Use it.  Track polynomial max_nunits.
6013 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
6014             Alan Hayward  <alan.hayward@arm.com>
6015             David Sherwood  <david.sherwood@arm.com>
6017         * tree-vectorizer.h (_slp_instance::unrolling_factor): Change
6018         from an unsigned int to a poly_uint64.
6019         (_loop_vec_info::slp_unrolling_factor): Likewise.
6020         (_loop_vec_info::vectorization_factor): Change from an int
6021         to a poly_uint64.
6022         (MAX_VECTORIZATION_FACTOR): Bump from 64 to INT_MAX.
6023         (vect_get_num_vectors): New function.
6024         (vect_update_max_nunits, vect_vf_for_cost): Likewise.
6025         (vect_get_num_copies): Use vect_get_num_vectors.
6026         (vect_analyze_data_ref_dependences): Change max_vf from an int *
6027         to an unsigned int *.
6028         (vect_analyze_data_refs): Change min_vf from an int * to a
6029         poly_uint64 *.
6030         (vect_transform_slp_perm_load): Take the vf as a poly_uint64 rather
6031         than an unsigned HOST_WIDE_INT.
6032         * tree-vect-data-refs.c (vect_analyze_possibly_independent_ddr)
6033         (vect_analyze_data_ref_dependence): Change max_vf from an int *
6034         to an unsigned int *.
6035         (vect_analyze_data_ref_dependences): Likewise.
6036         (vect_compute_data_ref_alignment): Handle polynomial vf.
6037         (vect_enhance_data_refs_alignment): Likewise.
6038         (vect_prune_runtime_alias_test_list): Likewise.
6039         (vect_shift_permute_load_chain): Likewise.
6040         (vect_supportable_dr_alignment): Likewise.
6041         (dependence_distance_ge_vf): Take the vectorization factor as a
6042         poly_uint64 rather than an unsigned HOST_WIDE_INT.
6043         (vect_analyze_data_refs): Change min_vf from an int * to a
6044         poly_uint64 *.
6045         * tree-vect-loop-manip.c (vect_gen_scalar_loop_niters): Take
6046         vfm1 as a poly_uint64 rather than an int.  Make the same change
6047         for the returned bound_scalar.
6048         (vect_gen_vector_loop_niters): Handle polynomial vf.
6049         (vect_do_peeling): Likewise.  Update call to
6050         vect_gen_scalar_loop_niters and handle polynomial bound_scalars.
6051         (vect_gen_vector_loop_niters_mult_vf): Assert that the vf must
6052         be constant.
6053         * tree-vect-loop.c (vect_determine_vectorization_factor)
6054         (vect_update_vf_for_slp, vect_analyze_loop_2): Handle polynomial vf.
6055         (vect_get_known_peeling_cost): Likewise.
6056         (vect_estimate_min_profitable_iters, vectorizable_reduction): Likewise.
6057         (vect_worthwhile_without_simd_p, vectorizable_induction): Likewise.
6058         (vect_transform_loop): Likewise.  Use the lowest possible VF when
6059         updating the upper bounds of the loop.
6060         (vect_min_worthwhile_factor): Make static.  Return an unsigned int
6061         rather than an int.
6062         * tree-vect-slp.c (vect_attempt_slp_rearrange_stmts): Cope with
6063         polynomial unroll factors.
6064         (vect_analyze_slp_cost_1, vect_analyze_slp_instance): Likewise.
6065         (vect_make_slp_decision): Likewise.
6066         (vect_supported_load_permutation_p): Likewise, and polynomial
6067         vf too.
6068         (vect_analyze_slp_cost): Handle polynomial vf.
6069         (vect_slp_analyze_node_operations): Likewise.
6070         (vect_slp_analyze_bb_1): Likewise.
6071         (vect_transform_slp_perm_load): Take the vf as a poly_uint64 rather
6072         than an unsigned HOST_WIDE_INT.
6073         * tree-vect-stmts.c (vectorizable_simd_clone_call, vectorizable_store)
6074         (vectorizable_load): Handle polynomial vf.
6075         * tree-vectorizer.c (simduid_to_vf::vf): Change from an int to
6076         a poly_uint64.
6077         (adjust_simduid_builtins, shrink_simd_arrays): Update accordingly.
6079 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
6080             Alan Hayward  <alan.hayward@arm.com>
6081             David Sherwood  <david.sherwood@arm.com>
6083         * match.pd: Handle bit operations involving three constants
6084         and try to fold one pair.
6086 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
6088         * tree-vect-loop-manip.c: Include gimple-fold.h.
6089         (slpeel_make_loop_iterate_ntimes): Add step, final_iv and
6090         niters_maybe_zero parameters.  Handle other cases besides a step of 1.
6091         (vect_gen_vector_loop_niters): Add a step_vector_ptr parameter.
6092         Add a path that uses a step of VF instead of 1, but disable it
6093         for now.
6094         (vect_do_peeling): Add step_vector, niters_vector_mult_vf_var
6095         and niters_no_overflow parameters.  Update calls to
6096         slpeel_make_loop_iterate_ntimes and vect_gen_vector_loop_niters.
6097         Create a new SSA name if the latter choses to use a ste other
6098         than zero, and return it via niters_vector_mult_vf_var.
6099         * tree-vect-loop.c (vect_transform_loop): Update calls to
6100         vect_do_peeling, vect_gen_vector_loop_niters and
6101         slpeel_make_loop_iterate_ntimes.
6102         * tree-vectorizer.h (slpeel_make_loop_iterate_ntimes, vect_do_peeling)
6103         (vect_gen_vector_loop_niters): Update declarations after above changes.
6105 2018-01-02  Michael Meissner  <meissner@linux.vnet.ibm.com>
6107         * config/rs6000/rs6000.md (floor<mode>2): Add support for IEEE
6108         128-bit round to integer instructions.
6109         (ceil<mode>2): Likewise.
6110         (btrunc<mode>2): Likewise.
6111         (round<mode>2): Likewise.
6113 2018-01-02  Aaron Sawdey  <acsawdey@linux.vnet.ibm.com>
6115         * config/rs6000/rs6000-string.c (expand_block_move): Allow the use of
6116         unaligned VSX load/store on P8/P9.
6117         (expand_block_clear): Allow the use of unaligned VSX
6118         load/store on P8/P9.
6120 2018-01-02  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
6122         * config/rs6000/rs6000-p8swap.c (swap_feeds_both_load_and_store):
6123         New function.
6124         (rs6000_analyze_swaps): Mark a web unoptimizable if it contains a
6125         swap associated with both a load and a store.
6127 2018-01-02  Andrew Waterman  <andrew@sifive.com>
6129         * config/riscv/linux.h (ICACHE_FLUSH_FUNC): New.
6130         * config/riscv/riscv.md (clear_cache): Use it.
6132 2018-01-02  Artyom Skrobov  <tyomitch@gmail.com>
6134         * web.c: Remove out-of-date comment.
6136 2018-01-02  Richard Sandiford  <richard.sandiford@linaro.org>
6138         * expr.c (fixup_args_size_notes): Check that any existing
6139         REG_ARGS_SIZE notes are correct, and don't try to re-add them.
6140         (emit_single_push_insn_1): Move stack_pointer_delta adjustment to...
6141         (emit_single_push_insn): ...here.
6143 2018-01-02  Richard Sandiford  <richard.sandiford@linaro.org>
6145         * rtl.h (CONST_VECTOR_ELT): Redefine to const_vector_elt.
6146         (const_vector_encoded_nelts): New function.
6147         (CONST_VECTOR_NUNITS): Redefine to use GET_MODE_NUNITS.
6148         (const_vector_int_elt, const_vector_elt): Declare.
6149         * emit-rtl.c (const_vector_int_elt_1): New function.
6150         (const_vector_elt): Likewise.
6151         * simplify-rtx.c (simplify_immed_subreg): Avoid taking the address
6152         of CONST_VECTOR_ELT.
6154 2018-01-02  Richard Sandiford  <richard.sandiford@linaro.org>
6156         * expr.c: Include rtx-vector-builder.h.
6157         (const_vector_mask_from_tree): Use rtx_vector_builder and operate
6158         directly on the tree encoding.
6159         (const_vector_from_tree): Likewise.
6160         * optabs.c: Include rtx-vector-builder.h.
6161         (expand_vec_perm_var): Use rtx_vector_builder and create a repeating
6162         sequence of "u" values.
6163         * vec-perm-indices.c: Include rtx-vector-builder.h.
6164         (vec_perm_indices_to_rtx): Use rtx_vector_builder and operate
6165         directly on the vec_perm_indices encoding.
6167 2018-01-02  Richard Sandiford  <richard.sandiford@linaro.org>
6169         * doc/rtl.texi (const_vector): Describe new encoding scheme.
6170         * Makefile.in (OBJS): Add rtx-vector-builder.o.
6171         * rtx-vector-builder.h: New file.
6172         * rtx-vector-builder.c: Likewise.
6173         * rtl.h (rtx_def::u2): Add a const_vector field.
6174         (CONST_VECTOR_NPATTERNS): New macro.
6175         (CONST_VECTOR_NELTS_PER_PATTERN): Likewise.
6176         (CONST_VECTOR_DUPLICATE_P): Likewise.
6177         (CONST_VECTOR_STEPPED_P): Likewise.
6178         (CONST_VECTOR_ENCODED_ELT): Likewise.
6179         (const_vec_duplicate_p): Check for a duplicated vector encoding.
6180         (unwrap_const_vec_duplicate): Likewise.
6181         (const_vec_series_p): Check for a non-duplicated vector encoding.
6182         Say that the function only returns true for integer vectors.
6183         * emit-rtl.c: Include rtx-vector-builder.h.
6184         (gen_const_vec_duplicate_1): Delete.
6185         (gen_const_vector): Call gen_const_vec_duplicate instead of
6186         gen_const_vec_duplicate_1.
6187         (const_vec_series_p_1): Operate directly on the CONST_VECTOR encoding.
6188         (gen_const_vec_duplicate): Use rtx_vector_builder.
6189         (gen_const_vec_series): Likewise.
6190         (gen_rtx_CONST_VECTOR): Likewise.
6191         * config/powerpcspe/powerpcspe.c: Include rtx-vector-builder.h.
6192         (swap_const_vector_halves): Take an rtx pointer rather than rtx.
6193         Build a new vector rather than modifying a CONST_VECTOR in-place.
6194         (handle_special_swappables): Update call accordingly.
6195         * config/rs6000/rs6000-p8swap.c: Include rtx-vector-builder.h.
6196         (swap_const_vector_halves): Take an rtx pointer rather than rtx.
6197         Build a new vector rather than modifying a CONST_VECTOR in-place.
6198         (handle_special_swappables): Update call accordingly.
6200 2018-01-02  Richard Sandiford  <richard.sandiford@linaro.org>
6202         * simplify-rtx.c (simplify_const_binary_operation): Use
6203         CONST_VECTOR_ELT instead of XVECEXP.
6205 2018-01-02  Richard Sandiford  <richard.sandiford@linaro.org>
6207         * tree-cfg.c (verify_gimple_assign_ternary): Allow the size of
6208         the selector elements to be different from the data elements
6209         if the selector is a VECTOR_CST.
6210         * tree-vect-stmts.c (vect_gen_perm_mask_any): Use a vector of
6211         ssizetype for the selector.
6213 2018-01-02  Richard Sandiford  <richard.sandiford@linaro.org>
6215         * optabs.c (shift_amt_for_vec_perm_mask): Try using series_p
6216         before testing each element individually.
6217         * tree-vect-generic.c (lower_vec_perm): Likewise.
6219 2018-01-02  Richard Sandiford  <richard.sandiford@linaro.org>
6221         * selftest.h (selftest::vec_perm_indices_c_tests): Declare.
6222         * selftest-run-tests.c (selftest::run_tests): Call it.
6223         * vector-builder.h (vector_builder::operator ==): New function.
6224         (vector_builder::operator !=): Likewise.
6225         * vec-perm-indices.h (vec_perm_indices::series_p): Declare.
6226         (vec_perm_indices::all_from_input_p): New function.
6227         * vec-perm-indices.c (vec_perm_indices::series_p): Likewise.
6228         (test_vec_perm_12, selftest::vec_perm_indices_c_tests): Likewise.
6229         * fold-const.c (fold_ternary_loc): Use tree_to_vec_perm_builder
6230         instead of reading the VECTOR_CST directly.  Detect whether both
6231         vector inputs are the same before constructing the vec_perm_indices,
6232         and update the number of inputs argument accordingly.  Use the
6233         utility functions added above.  Only construct sel2 if we need to.
6235 2018-01-02  Richard Sandiford  <richard.sandiford@linaro.org>
6237         * optabs.c (expand_vec_perm_var): Use an explicit encoding for
6238         the broadcast of the low byte.
6239         (expand_mult_highpart): Use an explicit encoding for the permutes.
6240         * optabs-query.c (can_mult_highpart_p): Likewise.
6241         * tree-vect-loop.c (calc_vec_perm_mask_for_shift): Likewise.
6242         * tree-vect-stmts.c (perm_mask_for_reverse): Likewise.
6243         (vectorizable_bswap): Likewise.
6244         * tree-vect-data-refs.c (vect_grouped_store_supported): Use an
6245         explicit encoding for the power-of-2 permutes.
6246         (vect_permute_store_chain): Likewise.
6247         (vect_grouped_load_supported): Likewise.
6248         (vect_permute_load_chain): Likewise.
6250 2018-01-02  Richard Sandiford  <richard.sandiford@linaro.org>
6252         * vec-perm-indices.h (vec_perm_indices_to_tree): Declare.
6253         * vec-perm-indices.c (vec_perm_indices_to_tree): New function.
6254         * tree-ssa-forwprop.c (simplify_vector_constructor): Use it.
6255         * tree-vect-slp.c (vect_transform_slp_perm_load): Likewise.
6256         * tree-vect-stmts.c (vectorizable_bswap): Likewise.
6257         (vect_gen_perm_mask_any): Likewise.
6259 2018-01-02  Richard Sandiford  <richard.sandiford@linaro.org>
6261         * int-vector-builder.h: New file.
6262         * vec-perm-indices.h: Include int-vector-builder.h.
6263         (vec_perm_indices): Redefine as an int_vector_builder.
6264         (auto_vec_perm_indices): Delete.
6265         (vec_perm_builder): Redefine as a stand-alone class.
6266         (vec_perm_indices::vec_perm_indices): New function.
6267         (vec_perm_indices::clamp): Likewise.
6268         * vec-perm-indices.c: Include fold-const.h and tree-vector-builder.h.
6269         (vec_perm_indices::new_vector): New function.
6270         (vec_perm_indices::new_expanded_vector): Update for new
6271         vec_perm_indices class.
6272         (vec_perm_indices::rotate_inputs): New function.
6273         (vec_perm_indices::all_in_range_p): Operate directly on the
6274         encoded form, without computing elided elements.
6275         (tree_to_vec_perm_builder): Operate directly on the VECTOR_CST
6276         encoding.  Update for new vec_perm_indices class.
6277         * optabs.c (expand_vec_perm_const): Create a vec_perm_indices for
6278         the given vec_perm_builder.
6279         (expand_vec_perm_var): Update vec_perm_builder constructor.
6280         (expand_mult_highpart): Use vec_perm_builder instead of
6281         auto_vec_perm_indices.
6282         * optabs-query.c (can_mult_highpart_p): Use vec_perm_builder and
6283         vec_perm_indices instead of auto_vec_perm_indices.  Use a single
6284         or double series encoding as appropriate.
6285         * fold-const.c (fold_ternary_loc): Use vec_perm_builder and
6286         vec_perm_indices instead of auto_vec_perm_indices.
6287         * tree-ssa-forwprop.c (simplify_vector_constructor): Likewise.
6288         * tree-vect-data-refs.c (vect_grouped_store_supported): Likewise.
6289         (vect_permute_store_chain): Likewise.
6290         (vect_grouped_load_supported): Likewise.
6291         (vect_permute_load_chain): Likewise.
6292         (vect_shift_permute_load_chain): Likewise.
6293         * tree-vect-slp.c (vect_build_slp_tree_1): Likewise.
6294         (vect_transform_slp_perm_load): Likewise.
6295         (vect_schedule_slp_instance): Likewise.
6296         * tree-vect-stmts.c (perm_mask_for_reverse): Likewise.
6297         (vectorizable_mask_load_store): Likewise.
6298         (vectorizable_bswap): Likewise.
6299         (vectorizable_store): Likewise.
6300         (vectorizable_load): Likewise.
6301         * tree-vect-generic.c (lower_vec_perm): Use vec_perm_builder and
6302         vec_perm_indices instead of auto_vec_perm_indices.  Use
6303         tree_to_vec_perm_builder to read the vector from a tree.
6304         * tree-vect-loop.c (calc_vec_perm_mask_for_shift): Take a
6305         vec_perm_builder instead of a vec_perm_indices.
6306         (have_whole_vector_shift): Use vec_perm_builder and
6307         vec_perm_indices instead of auto_vec_perm_indices.  Leave the
6308         truncation to calc_vec_perm_mask_for_shift.
6309         (vect_create_epilog_for_reduction): Likewise.
6310         * config/aarch64/aarch64.c (expand_vec_perm_d::perm): Change
6311         from auto_vec_perm_indices to vec_perm_indices.
6312         (aarch64_expand_vec_perm_const_1): Use rotate_inputs on d.perm
6313         instead of changing individual elements.
6314         (aarch64_vectorize_vec_perm_const): Use new_vector to install
6315         the vector in d.perm.
6316         * config/arm/arm.c (expand_vec_perm_d::perm): Change
6317         from auto_vec_perm_indices to vec_perm_indices.
6318         (arm_expand_vec_perm_const_1): Use rotate_inputs on d.perm
6319         instead of changing individual elements.
6320         (arm_vectorize_vec_perm_const): Use new_vector to install
6321         the vector in d.perm.
6322         * config/powerpcspe/powerpcspe.c (rs6000_expand_extract_even):
6323         Update vec_perm_builder constructor.
6324         (rs6000_expand_interleave): Likewise.
6325         * config/rs6000/rs6000.c (rs6000_expand_extract_even): Likewise.
6326         (rs6000_expand_interleave): Likewise.
6328 2018-01-02  Richard Sandiford  <richard.sandiford@linaro.org>
6330         * optabs-query.c (can_vec_perm_var_p): Check whether lowering
6331         to qimode could truncate the indices.
6332         * optabs.c (expand_vec_perm_var): Likewise.
6334 2018-01-02  Richard Sandiford  <richard.sandiford@linaro.org>
6336         * Makefile.in (OBJS): Add vec-perm-indices.o.
6337         * vec-perm-indices.h: New file.
6338         * vec-perm-indices.c: Likewise.
6339         * target.h (vec_perm_indices): Replace with a forward class
6340         declaration.
6341         (auto_vec_perm_indices): Move to vec-perm-indices.h.
6342         * optabs.h: Include vec-perm-indices.h.
6343         (expand_vec_perm): Delete.
6344         (selector_fits_mode_p, expand_vec_perm_var): Declare.
6345         (expand_vec_perm_const): Declare.
6346         * target.def (vec_perm_const_ok): Replace with...
6347         (vec_perm_const): ...this new hook.
6348         * doc/tm.texi.in (TARGET_VECTORIZE_VEC_PERM_CONST_OK): Replace with...
6349         (TARGET_VECTORIZE_VEC_PERM_CONST): ...this new hook.
6350         * doc/tm.texi: Regenerate.
6351         * optabs.def (vec_perm_const): Delete.
6352         * doc/md.texi (vec_perm_const): Likewise.
6353         (vec_perm): Refer to TARGET_VECTORIZE_VEC_PERM_CONST.
6354         * expr.c (expand_expr_real_2): Use expand_vec_perm_const rather than
6355         expand_vec_perm for constant permutation vectors.  Assert that
6356         the mode of variable permutation vectors is the integer equivalent
6357         of the mode that is being permuted.
6358         * optabs-query.h (selector_fits_mode_p): Declare.
6359         * optabs-query.c: Include vec-perm-indices.h.
6360         (selector_fits_mode_p): New function.
6361         (can_vec_perm_const_p): Check whether targetm.vectorize.vec_perm_const
6362         is defined, instead of checking whether the vec_perm_const_optab
6363         exists.  Use targetm.vectorize.vec_perm_const instead of
6364         targetm.vectorize.vec_perm_const_ok.  Check whether the indices
6365         fit in the vector mode before using a variable permute.
6366         * optabs.c (shift_amt_for_vec_perm_mask): Take a mode and a
6367         vec_perm_indices instead of an rtx.
6368         (expand_vec_perm): Replace with...
6369         (expand_vec_perm_const): ...this new function.  Take the selector
6370         as a vec_perm_indices rather than an rtx.  Also take the mode of
6371         the selector.  Update call to shift_amt_for_vec_perm_mask.
6372         Use targetm.vectorize.vec_perm_const instead of vec_perm_const_optab.
6373         Use vec_perm_indices::new_expanded_vector to expand the original
6374         selector into bytes.  Check whether the indices fit in the vector
6375         mode before using a variable permute.
6376         (expand_vec_perm_var): Make global.
6377         (expand_mult_highpart): Use expand_vec_perm_const.
6378         * fold-const.c: Includes vec-perm-indices.h.
6379         * tree-ssa-forwprop.c: Likewise.
6380         * tree-vect-data-refs.c: Likewise.
6381         * tree-vect-generic.c: Likewise.
6382         * tree-vect-loop.c: Likewise.
6383         * tree-vect-slp.c: Likewise.
6384         * tree-vect-stmts.c: Likewise.
6385         * config/aarch64/aarch64-protos.h (aarch64_expand_vec_perm_const):
6386         Delete.
6387         * config/aarch64/aarch64-simd.md (vec_perm_const<mode>): Delete.
6388         * config/aarch64/aarch64.c (aarch64_expand_vec_perm_const)
6389         (aarch64_vectorize_vec_perm_const_ok): Fuse into...
6390         (aarch64_vectorize_vec_perm_const): ...this new function.
6391         (TARGET_VECTORIZE_VEC_PERM_CONST_OK): Delete.
6392         (TARGET_VECTORIZE_VEC_PERM_CONST): Redefine.
6393         * config/arm/arm-protos.h (arm_expand_vec_perm_const): Delete.
6394         * config/arm/vec-common.md (vec_perm_const<mode>): Delete.
6395         * config/arm/arm.c (TARGET_VECTORIZE_VEC_PERM_CONST_OK): Delete.
6396         (TARGET_VECTORIZE_VEC_PERM_CONST): Redefine.
6397         (arm_expand_vec_perm_const, arm_vectorize_vec_perm_const_ok): Merge
6398         into...
6399         (arm_vectorize_vec_perm_const): ...this new function.  Explicitly
6400         check for NEON modes.
6401         * config/i386/i386-protos.h (ix86_expand_vec_perm_const): Delete.
6402         * config/i386/sse.md (VEC_PERM_CONST, vec_perm_const<mode>): Delete.
6403         * config/i386/i386.c (ix86_expand_vec_perm_const_1): Update comment.
6404         (ix86_expand_vec_perm_const, ix86_vectorize_vec_perm_const_ok): Merge
6405         into...
6406         (ix86_vectorize_vec_perm_const): ...this new function.  Incorporate
6407         the old VEC_PERM_CONST conditions.
6408         * config/ia64/ia64-protos.h (ia64_expand_vec_perm_const): Delete.
6409         * config/ia64/vect.md (vec_perm_const<mode>): Delete.
6410         * config/ia64/ia64.c (ia64_expand_vec_perm_const)
6411         (ia64_vectorize_vec_perm_const_ok): Merge into...
6412         (ia64_vectorize_vec_perm_const): ...this new function.
6413         * config/mips/loongson.md (vec_perm_const<mode>): Delete.
6414         * config/mips/mips-msa.md (vec_perm_const<mode>): Delete.
6415         * config/mips/mips-ps-3d.md (vec_perm_constv2sf): Delete.
6416         * config/mips/mips-protos.h (mips_expand_vec_perm_const): Delete.
6417         * config/mips/mips.c (mips_expand_vec_perm_const)
6418         (mips_vectorize_vec_perm_const_ok): Merge into...
6419         (mips_vectorize_vec_perm_const): ...this new function.
6420         * config/powerpcspe/altivec.md (vec_perm_constv16qi): Delete.
6421         * config/powerpcspe/paired.md (vec_perm_constv2sf): Delete.
6422         * config/powerpcspe/spe.md (vec_perm_constv2si): Delete.
6423         * config/powerpcspe/vsx.md (vec_perm_const<mode>): Delete.
6424         * config/powerpcspe/powerpcspe-protos.h (altivec_expand_vec_perm_const)
6425         (rs6000_expand_vec_perm_const): Delete.
6426         * config/powerpcspe/powerpcspe.c (TARGET_VECTORIZE_VEC_PERM_CONST_OK):
6427         Delete.
6428         (TARGET_VECTORIZE_VEC_PERM_CONST): Redefine.
6429         (altivec_expand_vec_perm_const_le): Take each operand individually.
6430         Operate on constant selectors rather than rtxes.
6431         (altivec_expand_vec_perm_const): Likewise.  Update call to
6432         altivec_expand_vec_perm_const_le.
6433         (rs6000_expand_vec_perm_const): Delete.
6434         (rs6000_vectorize_vec_perm_const_ok): Delete.
6435         (rs6000_vectorize_vec_perm_const): New function.
6436         (rs6000_do_expand_vec_perm): Take a vec_perm_builder instead of
6437         an element count and rtx array.
6438         (rs6000_expand_extract_even): Update call accordingly.
6439         (rs6000_expand_interleave): Likewise.
6440         * config/rs6000/altivec.md (vec_perm_constv16qi): Delete.
6441         * config/rs6000/paired.md (vec_perm_constv2sf): Delete.
6442         * config/rs6000/vsx.md (vec_perm_const<mode>): Delete.
6443         * config/rs6000/rs6000-protos.h (altivec_expand_vec_perm_const)
6444         (rs6000_expand_vec_perm_const): Delete.
6445         * config/rs6000/rs6000.c (TARGET_VECTORIZE_VEC_PERM_CONST_OK): Delete.
6446         (TARGET_VECTORIZE_VEC_PERM_CONST): Redefine.
6447         (altivec_expand_vec_perm_const_le): Take each operand individually.
6448         Operate on constant selectors rather than rtxes.
6449         (altivec_expand_vec_perm_const): Likewise.  Update call to
6450         altivec_expand_vec_perm_const_le.
6451         (rs6000_expand_vec_perm_const): Delete.
6452         (rs6000_vectorize_vec_perm_const_ok): Delete.
6453         (rs6000_vectorize_vec_perm_const): New function.  Remove stray
6454         reference to the SPE evmerge intructions.
6455         (rs6000_do_expand_vec_perm): Take a vec_perm_builder instead of
6456         an element count and rtx array.
6457         (rs6000_expand_extract_even): Update call accordingly.
6458         (rs6000_expand_interleave): Likewise.
6459         * config/sparc/sparc.md (vec_perm_constv8qi): Delete in favor of...
6460         * config/sparc/sparc.c (sparc_vectorize_vec_perm_const): ...this
6461         new function.
6462         (TARGET_VECTORIZE_VEC_PERM_CONST): Redefine.
6464 2018-01-02  Richard Sandiford  <richard.sandiford@linaro.org>
6466         * optabs.c (expand_vec_perm_1): Assert that SEL has an integer
6467         vector mode and that that mode matches the mode of the data
6468         being permuted.
6469         (expand_vec_perm): Split handling of non-CONST_VECTOR selectors
6470         out into expand_vec_perm_var.  Do all CONST_VECTOR handling here,
6471         directly using expand_vec_perm_1 when forcing selectors into
6472         registers.
6473         (expand_vec_perm_var): New function, split out from expand_vec_perm.
6475 2018-01-02  Richard Sandiford  <richard.sandiford@linaro.org>
6477         * optabs-query.h (can_vec_perm_p): Delete.
6478         (can_vec_perm_var_p, can_vec_perm_const_p): Declare.
6479         * optabs-query.c (can_vec_perm_p): Split into...
6480         (can_vec_perm_var_p, can_vec_perm_const_p): ...these two functions.
6481         (can_mult_highpart_p): Use can_vec_perm_const_p to test whether a
6482         particular selector is valid.
6483         * tree-ssa-forwprop.c (simplify_vector_constructor): Likewise.
6484         * tree-vect-data-refs.c (vect_grouped_store_supported): Likewise.
6485         (vect_grouped_load_supported): Likewise.
6486         (vect_shift_permute_load_chain): Likewise.
6487         * tree-vect-slp.c (vect_build_slp_tree_1): Likewise.
6488         (vect_transform_slp_perm_load): Likewise.
6489         * tree-vect-stmts.c (perm_mask_for_reverse): Likewise.
6490         (vectorizable_bswap): Likewise.
6491         (vect_gen_perm_mask_checked): Likewise.
6492         * fold-const.c (fold_ternary_loc): Likewise.  Don't take
6493         implementations of variable permutation vectors into account
6494         when deciding which selector to use.
6495         * tree-vect-loop.c (have_whole_vector_shift): Don't check whether
6496         vec_perm_const_optab is supported; instead use can_vec_perm_const_p
6497         with a false third argument.
6498         * tree-vect-generic.c (lower_vec_perm): Use can_vec_perm_const_p
6499         to test whether the constant selector is valid and can_vec_perm_var_p
6500         to test whether a variable selector is valid.
6502 2018-01-02  Richard Sandiford  <richard.sandiford@linaro.org>
6504         * optabs-query.h (can_vec_perm_p): Take a const vec_perm_indices *.
6505         * optabs-query.c (can_vec_perm_p): Likewise.
6506         * fold-const.c (fold_vec_perm): Take a const vec_perm_indices &
6507         instead of vec_perm_indices.
6508         * tree-vectorizer.h (vect_gen_perm_mask_any): Likewise,
6509         (vect_gen_perm_mask_checked): Likewise,
6510         * tree-vect-stmts.c (vect_gen_perm_mask_any): Likewise,
6511         (vect_gen_perm_mask_checked): Likewise,
6513 2018-01-02  Richard Sandiford  <richard.sandiford@linaro.org>
6515         * optabs-query.h (qimode_for_vec_perm): Declare.
6516         * optabs-query.c (can_vec_perm_p): Split out qimode search to...
6517         (qimode_for_vec_perm): ...this new function.
6518         * optabs.c (expand_vec_perm): Use qimode_for_vec_perm.
6520 2018-01-02  Aaron Sawdey  <acsawdey@linux.vnet.ibm.com>
6522         * rtlanal.c (canonicalize_condition): Return 0 if final rtx
6523         does not have a conditional at the top.
6525 2018-01-02  Richard Biener  <rguenther@suse.de>
6527         * ipa-inline.c (big_speedup_p): Fix expression.
6529 2018-01-02  Jan Hubicka  <hubicka@ucw.cz>
6531         PR target/81616
6532         * config/i386/x86-tune-costs.h: Increase cost of integer load costs
6533         for generic 4->6.
6535 2018-01-02  Jan Hubicka  <hubicka@ucw.cz>
6537         PR target/81616
6538         Generic tuning.
6539         * x86-tune-costs.h (generic_cost): Reduce cost of FDIV 20->17,
6540         cost of sqrt 20->14, DIVSS 18->13, DIVSD 32->17, SQRtSS 30->14
6541         and SQRTsD 58->18, cond_not_taken_branch_cost. 2->1. Increase
6542         cond_taken_branch_cost 3->4.
6544 2018-01-01  Jakub Jelinek  <jakub@redhat.com>
6546         PR tree-optimization/83581
6547         * tree-loop-distribution.c (pass_loop_distribution::execute): Return
6548         TODO_cleanup_cfg if any changes have been made.
6550         PR middle-end/83608
6551         * expr.c (store_expr_with_bounds): Use simplify_gen_subreg instead of
6552         convert_modes if target mode has the right side, but different mode
6553         class.
6555         PR middle-end/83609
6556         * expr.c (expand_assignment): Fix up a typo in simplify_gen_subreg
6557         last argument when extracting from CONCAT.  If either from_real or
6558         from_imag is NULL, use expansion through memory.  If result is not
6559         a CONCAT and simplify_gen_subreg fails, try to simplify_gen_subreg
6560         the parts directly to inner mode, if even that fails, use expansion
6561         through memory.
6563         PR middle-end/83623
6564         * expmed.c (expand_shift_1): For 2-byte rotates by BITS_PER_UNIT,
6565         check for bswap in mode rather than HImode and use that in expand_unop
6566         too.
6568 Copyright (C) 2018 Free Software Foundation, Inc.
6570 Copying and distribution of this file, with or without modification,
6571 are permitted in any medium without royalty provided the copyright
6572 notice and this notice are preserved.