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