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