1. 19 May, 2015 40 commits
    • S/390 vector types are only 8 byte aligned. · 17521813
      gcc/testsuite/
      	* lib/target-supports.exp: Vector do not always have natural
                alignment on s390*.
      
      From-SVN: r223403
      Andreas Krebbel committed
    • loop-invariant.c (create_new_invariant): Don't calculate address cost if mode is… · 315a349c
      loop-invariant.c (create_new_invariant): Don't calculate address cost if mode is not a scalar integer.
      
      2015-05-19  David Sherwood  <david.sherwood@arm.com>
      
      	* loop-invariant.c (create_new_invariant): Don't calculate address cost
      	if mode is not a scalar integer.
      	(get_inv_cost): Increase computational cost for unused invariants.
      
      	* gcc.dg/loop-invariant.c: New testcase.
      
      From-SVN: r223402
      David Sherwood committed
    • These testcases require disabling hardware vector support on S/390. · 0aaaa54a
      gcc/testsuite/
      	* gcc.dg/tree-ssa/gen-vect-11b.c: Disable vector
      	  instructions on s390*.
      	  * gcc.dg/tree-ssa/gen-vect-11c.c: Likewise.
      
      From-SVN: r223400
      Andreas Krebbel committed
    • S/390 Add zvector testcases. · 2f8fda12
      gcc/testsuite/
      	* gcc.target/s390/zvector/vec-dbl-math-compile-1.c: New test.
      	* gcc.target/s390/zvector/vec-genbytemask-1.c: New test.
      	* gcc.target/s390/zvector/vec-genmask-1.c: New test.
      	* gcc.target/s390/zvector/vec-lcbb-1.c: New test.
      	* gcc.target/s390/zvector/vec-overloading-1.c: New test.
      	* gcc.target/s390/zvector/vec-overloading-2.c: New test.
      	* gcc.target/s390/zvector/vec-overloading-3.c: New test.
      	* gcc.target/s390/zvector/vec-overloading-4.c: New test.
      	* gcc.target/s390/zvector/vec-test-mask-1.c: New test.
      	* gcc.target/s390/zvector/vec-elem-1.c: New test.
      
      From-SVN: r223399
      Andreas Krebbel committed
    • S/390 zvector builtin support. · 3af82a61
      With this patch GCC implements an Altivec style set of builtins to
      make use of vector instructions in C/C++ code.  This is provided for
      compatibility with the IBM XL compiler.
      
      gcc/
      	* config.gcc: Add vecintrin.h to extra_headers.  Add s390-c.o to
      	c_target_objs and cxx_target_objs.  Add t-s390 to tmake_file.
      	* config/s390/s390-builtin-types.def: New file.
      	* config/s390/s390-builtins.def: New file.
      	* config/s390/s390-builtins.h: New file.
      	* config/s390/s390-c.c: New file.
      	* config/s390/s390-modes.def: Add modes CCVEQANY, CCVH,
      	CCVHANY, CCVHU, CCVHUANY, CCVFHANY, CCVFHEANY.
      	* config/s390/s390-protos.h (s390_expand_vec_compare_cc)
      	(s390_cpu_cpp_builtins, s390_register_target_pragmas): Add
      	prototypes.
      	* config/s390/s390.c (s390-builtins.h, s390-builtins.def):
      	Include.
      	(flags_builtin, flags_overloaded_builtin_var, s390_builtin_types)
      	(s390_builtin_fn_types, s390_builtin_decls, code_for_builtin): New
      	variable definitions.
      	(s390_const_operand_ok): New function.
      	(s390_expand_builtin): Rewrite.
      	(s390_init_builtins): New function.
      	(s390_handle_vectorbool_attribute): New function.
      	(s390_attribute_table): Add s390_vector_bool attribute.
      	(s390_match_ccmode_set): Handle new cc modes CCVH, CCVHU.
      	(s390_branch_condition_mask): Generate masks for new modes.
      	(s390_expand_vec_compare_cc): New function.
      	(s390_mangle_type): Add mangling for vector bool types.
      	(enum s390_builtin): Remove.
      	(s390_atomic_assign_expand_fenv): Rename constants for sfpc and
      	efpc builtins.
      	* config/s390/s390.h (TARGET_CPU_CPP_BUILTINS): Call
      	s390_cpu_cpp_builtins.
      	(REGISTER_TARGET_PRAGMAS): New macro.
      	* config/s390/s390.md: Define more UNSPEC_VEC_* constants.
      	(insn_cmp mode attribute): Add new CC modes.
      	(s390_sfpc, s390_efpc): Rename patterns to sfpc and efpc.
      	(lcbb): New pattern definition.
      	* config/s390/s390intrin.h: Include vecintrin.h.
      	* config/s390/t-s390: New file.
      	* config/s390/vecintrin.h: New file.
      	* config/s390/vector.md: Include vx-builtins.md.
      	* config/s390/vx-builtins.md: New file.S/390 zvector builtin support.
      
      From-SVN: r223398
      Andreas Krebbel committed
    • S/390 Add vector scalar instruction support. · 6e5b5de8
      With this patch GCC makes use of the vector instruction which are
      available in single element mode.  By using these instructions scalar
      double operations can use 32 registers.
      
      gcc/
      	* config/s390/s390-modes.def: Add new modes CCVEQ, CCVFH, and
      	CCVFHE.
      	* config/s390/s390.c (s390_match_ccmode_set): Handle new modes.
      	(s390_select_ccmode): Likewise.
      	(s390_canonicalize_comparison): Swap operands if necessary.
      	(s390_expand_vec_compare_scalar): Expand DFmode compare using
      	single element vector instructions.
      	(s390_emit_compare): Call s390_expand_vec_compare_scalar.
      	(s390_branch_condition_mask): Generate CC masks for the new modes.
      	* config/s390/s390.md (v0, vf, vd): New mode attributes.
      	(VFCMP, asm_fcmp, insn_cmp): New mode iterator and attributes.
      	(*vec_cmp<insn_cmp>df_cconly, *fixuns_truncdfdi2_z13)
      	(*fix_trunc<BFP:mode><GPR:mode>2_bfp, *floatunsdidf2_z13)
      	(*floatuns<GPR:mode><FP:mode>2, *extendsfdf2_z13)
      	(*extend<DSF:mode><BFP:mode>2): New insn definition.
      	(fix_trunc<BFP:mode><GPR:mode>2_bfp, loatuns<GPR:mode><FP:mode>2)
      	(extend<DSF:mode><BFP:mode>2): Turn into expander.
      	(floatdi<mode>2, truncdfsf2, add<mode>3, sub<mode>3, mul<mode>3)
      	(div<mode>3, *neg<mode>2, *abs<mode>2, *negabs<mode>2)
      	(sqrt<mode>2): Add vector instruction.
      
      gcc/testsuite/
      	* gcc.target/s390/vector/vec-scalar-cmp-1.c: New test.
      
      From-SVN: r223397
      Andreas Krebbel committed
    • S/390: Vector base support - testcases · 91b019a3
      gcc/testsuite/
      	* gcc.target/s390/s390.exp
      	(check_effective_target_vector): New check.
      	* gcc.target/s390/vector/vec-abi-1.c: New test.
      	* gcc.target/s390/vector/vec-abi-2.c: New test.
      	* gcc.target/s390/vector/vec-abi-3.c: New test.
      	* gcc.target/s390/vector/vec-abi-4.c: New test.
      	* gcc.target/s390/vector/vec-abi-align-1.c: New test.
      	* gcc.target/s390/vector/vec-abi-single-1.c: New test.
      	* gcc.target/s390/vector/vec-abi-single-2.c: New test.
      	* gcc.target/s390/vector/vec-abi-struct-1.c: New test.
      	* gcc.target/s390/vector/vec-abi-vararg-1.c: New test.
      	* gcc.target/s390/vector/vec-abi-vararg-2.c: New test.
      	* gcc.target/s390/vector/vec-clobber-1.c: New test.
      	* gcc.target/s390/vector/vec-cmp-1.c: New test.
      	* gcc.target/s390/vector/vec-cmp-2.c: New test.
      	* gcc.target/s390/vector/vec-dbl-math-compile-1.c: New test.
      	* gcc.target/s390/vector/vec-genbytemask-1.c: New test.
      	* gcc.target/s390/vector/vec-genbytemask-2.c: New test.
      	* gcc.target/s390/vector/vec-genmask-1.c: New test.
      	* gcc.target/s390/vector/vec-genmask-2.c: New test.
      	* gcc.target/s390/vector/vec-init-1.c: New test.
      	* gcc.target/s390/vector/vec-int-math-compile-1.c: New test.
      	* gcc.target/s390/vector/vec-shift-1.c: New test.
      	* gcc.target/s390/vector/vec-sub-1.c: New test.
      
      From-SVN: r223396
      Andreas Krebbel committed
    • S/390 Vector base support. · 085261c8
      gcc/
      	* config/s390/constraints.md (j00, jm1, jxx, jyy, v): New
      	constraints.
      	* config/s390/predicates.md (const0_operand, constm1_operand)
      	(constable_operand): Accept vector operands.
      	* config/s390/s390-modes.def: Add supported vector modes.
      	* config/s390/s390-protos.h (s390_cannot_change_mode_class)
      	(s390_function_arg_vector, s390_contiguous_bitmask_vector_p)
      	(s390_bytemask_vector_p, s390_expand_vec_strlen)
      	(s390_expand_vec_compare, s390_expand_vcond)
      	(s390_expand_vec_init): Add prototypes.
      	* config/s390/s390.c (VEC_ARG_NUM_REG): New macro.
      	(s390_vector_mode_supported_p): New function.
      	(s390_contiguous_bitmask_p): Mask out the irrelevant bits.
      	(s390_contiguous_bitmask_vector_p): New function.
      	(s390_bytemask_vector_p): New function.
      	(s390_split_ok_p): Vector regs don't work either.
      	(regclass_map): Add VEC_REGS.
      	(s390_legitimate_constant_p): Handle vector constants.
      	(s390_cannot_force_const_mem): Handle CONST_VECTOR.
      	(legitimate_reload_vector_constant_p): New function.
      	(s390_preferred_reload_class): Handle CONST_VECTOR.
      	(s390_reload_symref_address):  Likewise.
      	(s390_secondary_reload): Vector memory instructions only support
      	short displacements.  Rename reload*_nonoffmem* to reload*_la*.
      	(s390_emit_ccraw_jump): New function.
      	(s390_expand_vec_strlen): New function.
      	(s390_expand_vec_compare): New function.
      	(s390_expand_vcond): New function.
      	(s390_expand_vec_init): New function.
      	(s390_dwarf_frame_reg_mode): New function.
      	(print_operand): Handle addresses with 'O' and 'R' constraints.
      	(NR_C_MODES, constant_modes): Add vector modes.
      	(s390_output_pool_entry): Handle vector constants.
      	(s390_hard_regno_mode_ok): Handle vector registers.
      	(s390_class_max_nregs): Likewise.
      	(s390_cannot_change_mode_class): New function.
      	(s390_invalid_arg_for_unprototyped_fn): New function.
      	(s390_function_arg_vector): New function.
      	(s390_function_arg_float): Remove size variable.
      	(s390_pass_by_reference): Handle vector arguments.
      	(s390_function_arg_advance): Likewise.
      	(s390_function_arg): Likewise.
      	(s390_return_in_memory): Vector values are returned in a VR if
      	possible.
      	(s390_function_and_libcall_value): Handle vector arguments.
      	(s390_gimplify_va_arg): Likewise.
      	(s390_call_saved_register_used): Consider the arguments named.
      	(s390_conditional_register_usage): Disable v16-v31 for non-vec
      	targets.
      	(s390_preferred_simd_mode): New function.
      	(s390_support_vector_misalignment): New function.
      	(s390_vector_alignment): New function.
      	(TARGET_STRICT_ARGUMENT_NAMING, TARGET_DWARF_FRAME_REG_MODE)
      	(TARGET_VECTOR_MODE_SUPPORTED_P)
      	(TARGET_INVALID_ARG_FOR_UNPROTOTYPED_FN)
      	(TARGET_VECTORIZE_PREFERRED_SIMD_MODE)
      	(TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT)
      	(TARGET_VECTOR_ALIGNMENT): Define target macro.
      	* config/s390/s390.h (FUNCTION_ARG_PADDING): Define macro.
      	(FIRST_PSEUDO_REGISTER): Increase value.
      	(VECTOR_NOFP_REGNO_P, VECTOR_REGNO_P, VECTOR_NOFP_REG_P)
      	(VECTOR_REG_P): Define macros.
      	(FIXED_REGISTERS, CALL_USED_REGISTERS)
      	(CALL_REALLY_USED_REGISTERS, REG_ALLOC_ORDER)
      	(HARD_REGNO_CALL_PART_CLOBBERED, REG_CLASS_NAMES)
      	(FUNCTION_ARG_REGNO_P, FUNCTION_VALUE_REGNO_P, REGISTER_NAMES):
      	Add vector registers.
      	(CANNOT_CHANGE_MODE_CLASS): Call C function.
      	(enum reg_class): Add VEC_REGS, ADDR_VEC_REGS, GENERAL_VEC_REGS.
      	(SECONDARY_MEMORY_NEEDED): Allow SF<->SI mode moves without
      	memory.
      	(DBX_REGISTER_NUMBER, FIRST_VEC_ARG_REGNO, LAST_VEC_ARG_REGNO)
      	(SHORT_DISP_IN_RANGE, VECTOR_STORE_FLAG_VALUE): Define macro.
      	* config/s390/s390.md (UNSPEC_VEC_*): New constants.
      	(VR*_REGNUM): New constants.
      	(ALL): New mode iterator.
      	(INTALL): Remove mode iterator.
      	Include vector.md.
      	(movti): Implement TImode moves for VRs.
      	Disable TImode splitter for VR targets.
      	Implement splitting TImode GPR<->VR moves.
      	(reload*_tomem_z10, reload*_toreg_z10): Replace INTALL with ALL.
      	(reload<mode>_nonoffmem_in, reload<mode>_nonoffmem_out): Rename to
      	reload<mode>_la_in, reload<mode>_la_out.
      	(*movdi_64, *movsi_zarch, *movhi, *movqi, *mov<mode>_64dfp)
      	(*mov<mode>_64, *mov<mode>_31): Add vector instructions.
      	(TD/TF mode splitter): Enable for GPRs only (formerly !FP).
      	(mov<mode> SF SD): Prefer lder, lde for loading.
      	Add lrl and strl instructions.
      	Add vector instructions.
      	(strlen<mode>): Rename old strlen<mode> to strlen_srst<mode>.
      	Call s390_expand_vec_strlen on z13.
      	(*cc_to_int): Change predicate to nonimmediate_operand.
      	(addti3): Rename to *addti3.  New expander.
      	(subti3): Rename to *subti3.  New expander.
      	* config/s390/vector.md: New file.
      
      From-SVN: r223395
      Andreas Krebbel committed
    • S/390 Add -march/-mtune=z13 option. · 55ac540c
      gcc/
      	* common/config/s390/s390-common.c (processor_flags_table): Add
      	z13.
      	* config.gcc: Add z13.
      	* config/s390/s390-opts.h (enum processor_type): Add
      	PROCESSOR_2964_Z13.
      	* config/s390/s390.c (s390_adjust_priority): Check for
      	PROCESSOR_2964_Z13.
      	(s390_reorg): Likewise.
      	(s390_sched_reorder): Likewise.
      	(s390_sched_variable_issue): Likewise.
      	(s390_loop_unroll_adjust): Likewise.
      	(s390_option_override): Likewise. Default to -mvx when available.
      	* config/s390/s390.h (enum processor_flags): Add PF_Z13 and PF_VX.
      	(TARGET_CPU_Z13, TARGET_CPU_VX, TARGET_Z13, TARGET_VX)
      	(TARGET_VX_ABI): Define macros.
      	macros.
      	(TARGET_DEFAULT): Add MASK_OPT_VX.
      	* config/s390/s390.md ("cpu" attribute): Add z13.
      	("cpu_facility" attribute): Add vec.
      	* config/s390/s390.opt (processor_type): Add z13.
      	(mvx): New options.
      	* doc/invoke.texi: Add z13 option for -march.
      
      From-SVN: r223393
      Andreas Krebbel committed
    • S/390: Make shift_count_or_setmem_operand predicate to check for mode. · 9e8ea2fc
      gcc/
      	* config/s390/predicates.md (shift_count_or_setmem_operand):
              Add mode check to make sure that only scalar integer values
              are accepted.
      
      From-SVN: r223392
      Andreas Krebbel committed
    • tree.c (verify_type_variant): Fix #undef. · 872d5034
      
      	* tree.c (verify_type_variant): Fix #undef.
      	(gimple_canonical_types_compatible_p): Move here from lto.c
      	(verify_type): Verify TYPE_CANONICAL compatibility.
      	* tree.h (gimple_canonical_types_compatible_p): Declare.
      
      	* lto.c (gimple_canonical_types_compatible_p): Move to tree.c
      
      From-SVN: r223391
      Jan Hubicka committed
    • re PR middle-end/66199 (lastprivate/linear clause issues on combined constructs) · 41b37d5e
      	PR middle-end/66199
      	* tree.h (OMP_TEAMS_COMBINED): Define.
      	* gimplify.c (enum gimplify_omp_var_data): Add
      	GOVD_LINEAR_LASTPRIVATE_NO_OUTER.
      	(enum omp_region_type): Add ORT_COMBINED_TEAMS.
      	(omp_notice_variable): Accept both ORT_TEAMS
      	and ORT_COMBINED_TEAMS.  Don't recurse if
      	GOVD_LINEAR_LASTPRIVATE_NO_OUTER is set and either
      	GOVD_LINEAR is set, or GOVD_LASTPRIVATE without
      	GOVD_FIRSTPRIVATE.
      	(omp_no_lastprivate): New function.
      	(gimplify_scan_omp_clauses): For OMP_CLAUSE_LASTPRIVATE
      	and OMP_CLAUSE_LINEAR, if omp_no_lastprivate, don't
      	notice_outer and set appropriate bits, otherwise make
      	sure default(none) combined constructs won't complain.
      	(gimplify_adjust_omp_clauses): Remove OMP_CLAUSE_LINEAR
      	outer special casing, for OMP_CLAUSE_LASTPRIVATE if
      	omp_no_lastprivate either remove the clause or turn it
      	into OMP_CLAUSE_PRIVATE.
      	(gimplify_omp_for): Fix up handling of implicit
      	lastprivate or linear iterators.
      	(gimplify_omp_workshare): For OMP_TEAMS_COMBINED use
      	ORT_COMBINED_TEAMS.
      	* omp-low.c (lower_omp_for_lastprivate): For combined
      	for simd use fd.loop.n2 from the for rather than simd.
      gcc/c/
      	* c-parser.c (c_parser_omp_for_loop): Don't add
      	OMP_CLAUSE_SHARED to OMP_PARALLEL_CLAUSES when moving
      	OMP_CLAUSE_LASTPRIVATE clause to OMP_FOR_CLAUSES.
      	(c_parser_omp_teams): Set OMP_TEAMS_COMBINED for combined
      	constructs.
      gcc/cp/
      	* parser.c (cp_parser_omp_for_loop): Don't add
      	OMP_CLAUSE_SHARED to OMP_PARALLEL_CLAUSES when moving
      	OMP_CLAUSE_LASTPRIVATE clause to OMP_FOR_CLAUSES.
      	(cp_parser_omp_teams): Set OMP_TEAMS_COMBINED for combined
      	constructs.
      gcc/fortran/
      	* trans-openmp.c (gfc_trans_omp_teams): Set OMP_TEAMS_COMBINED for
      	combined constructs.
      	(gfc_trans_omp_target): Make sure BIND_EXPR has non-NULL
      	BIND_EXPR_BLOCK.
      libgomp/
      	* testsuite/libgomp.c/pr66199-1.c: New test.
      	* testsuite/libgomp.c/pr66199-2.c: New test.
      	* testsuite/libgomp.c++/pr66199-1.C: New test.
      	* testsuite/libgomp.c++/pr66199-2.C: New test.
      	* testsuite/libgomp.fortran/pr66199-1.f90: New test.
      	* testsuite/libgomp.fortran/pr66199-2.f90: New test.
      
      From-SVN: r223387
      Jakub Jelinek committed
    • vqshrun_n.c: New file. · 94c8e7ab
      2015-05-19  Christophe Lyon  <christophe.lyon@linaro.org>
      
      	* gcc.target/aarch64/advsimd-intrinsics/vqshrun_n.c: New file.
      
      From-SVN: r223386
      Christophe Lyon committed
    • vqshrn_n.c: New file. · 83846a59
      2015-05-19  Christophe Lyon  <christophe.lyon@linaro.org>
      
      	* gcc.target/aarch64/advsimd-intrinsics/vqshrn_n.c: New file.
      
      From-SVN: r223385
      Christophe Lyon committed
    • vqshlu_n.c: New file. · 72cdfda4
      2015-05-19  Christophe Lyon  <christophe.lyon@linaro.org>
      
      	* gcc.target/aarch64/advsimd-intrinsics/vqshlu_n.c: New file.
      
      From-SVN: r223384
      Christophe Lyon committed
    • cris.c (cris_expand_prologue): Use gen_raw_REG instead of gen_rtx_raw_REG. · e5561c83
      gcc/
      	* config/cris/cris.c (cris_expand_prologue): Use gen_raw_REG
      	instead of gen_rtx_raw_REG.
      	(cris_expand_epilogue): Likewise.
      	* config/microblaze/microblaze.c (microblaze_classify_address):
      	Likewise.
      	* config/sparc/sparc.md: Likewise.
      
      From-SVN: r223383
      Richard Sandiford committed
    • vqshl_n.c: New file. · 1b2cb3e7
      2015-05-19  Christophe Lyon  <christophe.lyon@linaro.org>
      
      	* gcc.target/aarch64/advsimd-intrinsics/vqshl_n.c: New file.
      
      From-SVN: r223382
      Christophe Lyon committed
    • vqshl.c: New file. · 09f8fc7f
      2015-05-19  Christophe Lyon  <christophe.lyon@linaro.org>
      
      	* gcc.target/aarch64/advsimd-intrinsics/vqshl.c: New file.
      
      From-SVN: r223381
      Christophe Lyon committed
    • vqrshrun_n.c: New file. · fd2069df
      2015-05-19  Christophe Lyon  <christophe.lyon@linaro.org>
      
      	* gcc.target/aarch64/advsimd-intrinsics/vqrshrun_n.c: New file.
      
      From-SVN: r223380
      Christophe Lyon committed
    • vqrshrn_n.c: New file. · 059a79e7
      2015-05-19  Christophe Lyon  <christophe.lyon@linaro.org>
      
      	* gcc.target/aarch64/advsimd-intrinsics/vqrshrn_n.c: New file.
      
      From-SVN: r223379
      Christophe Lyon committed
    • vqrshl.c: New file. · cace06d1
      2015-05-19  Christophe Lyon  <christophe.lyon@linaro.org>
      
      	* gcc.target/aarch64/advsimd-intrinsics/vqrshl.c: New file.
      
      From-SVN: r223377
      Christophe Lyon committed
    • vqrdmulh_n.c: New file. · 396fa23a
      2015-05-19  Christophe Lyon  <christophe.lyon@linaro.org>
      
      	* gcc.target/aarch64/advsimd-intrinsics/vqrdmulh_n.c: New file.
      
      From-SVN: r223376
      Christophe Lyon committed
    • vqrdmulh_lane.c: New file. · 4f24fac1
      2015-05-19  Christophe Lyon  <christophe.lyon@linaro.org>
      
      	* gcc.target/aarch64/advsimd-intrinsics/vqrdmulh_lane.c: New file.
      
      From-SVN: r223375
      Christophe Lyon committed
    • vqrdmulh.c: New file. · bb16a134
      2015-05-19  Christophe Lyon  <christophe.lyon@linaro.org>
      
      	* gcc.target/aarch64/advsimd-intrinsics/vqrdmulh.c: New file.
      
      From-SVN: r223374
      Christophe Lyon committed
    • vqmovun.c: New file. · bdf3a527
      2015-05-19  Christophe Lyon  <christophe.lyon@linaro.org>
      
      	* gcc.target/aarch64/advsimd-intrinsics/vqmovun.c: New file.
      
      From-SVN: r223373
      Christophe Lyon committed
    • vqmovn.c: New file. · f9eb770f
      2015-05-19  Christophe Lyon  <christophe.lyon@linaro.org>
      
      	* gcc.target/aarch64/advsimd-intrinsics/vqmovn.c: New file.
      
      From-SVN: r223372
      Christophe Lyon committed
    • * config/alpha/alpha.c (alpha_legitimize_reload_address) · c799797d
      	(alpha_preferred_reload_class, alpha_legitimate_constant_p): Use
      	CONST_INT_P, CONST_SCALAR_INT_P and CONST_DOUBLE_P predicates.
      	(alpha_split_reload_pair) <case CONST_INT, case CONST_WIDE_INT>:
      	Use CASE_CONST_SCALAR_INT.
      	(print_operand) <case 'M'>: Use mode_width_operand to check the
      	value of the constant.
      	* config/alpha/alpha.md (movti): Use CONST_SCALAR_INT_P predicate.
      	* config/alpha/predicates.md (input_operand): Use general_operand
      	instead of match_code as operand check.
      	(symbolic_operand): Use match_code with subexpression digits.
      	* config/alpha/constraints.md (Q): Ditto.
      
      From-SVN: r223371
      Uros Bizjak committed
    • optabs: Fix vec_perm -> V16QI middle end lowering. · a2780ddb
      The current implementation re-uses the location of the selection
      pattern to generate a new one.  This fails if the pattern resides in a
      read-only location.
      
      gcc/
      	* optabs.c (expand_vec_perm): Don't re-use SEL as target operand.
      
      From-SVN: r223369
      Andreas Krebbel committed
    • S/390 Fix secondary reload issue with store/load relative operands. · 05702110
      We need a scratch register for loading from or storing to a symbolic
      memory reference where we cannot use the load/store relative
      instructions for.  However, the check currently fails to handle
      floating point modes in GPRs correctly.
      
      gcc/
      	* config/s390/s390.c (s390_secondary_reload): Fix check for
                load/store relative.
      
      From-SVN: r223368
      Andreas Krebbel committed
    • recog: Increase max number of alternatives. · 376ee136
      With the vector facility support z13 mov patterns have more than 30
      alternatives.
      
      gcc/
      	* recog.h: Increase MAX_RECOG_ALTERNATIVES.
      	Change type of alternative_mask to uint64_t.
      
      From-SVN: r223367
      Andreas Krebbel committed
    • re PR rtl-optimization/66187 (wrong code at -O1, -O2 and -O3 on x86_64-linux-gnu) · a60c51fe
      	PR tree-optimization/66187
      	* match.pd ((bit_and (plus/minus (convert @0) (convert @1)) mask)):
      	Pass TYPE_SIGN to tree_int_cst_min_precision.  If
      	!TYPE_OVERFLOW_WRAPS, ensure @4 is non-negative.
      
      	* gcc.c-torture/execute/pr66187.c: New test.
      	* gcc.dg/pr66187-1.c: New test.
      	* gcc.dg/pr66187-2.c: New test.
      
      From-SVN: r223366
      Jakub Jelinek committed
    • Replace line_map union with C++ class hierarchy · 0e50b624
      gcc/ChangeLog:
      	* diagnostic.c (diagnostic_report_current_module): Strengthen
      	local "new_map" from const line_map * to
      	const line_map_ordinary *.
      	* genmatch.c (error_cb): Likewise for local "map".
      	(output_line_directive): Likewise for local "map".
      	* input.c (expand_location_1): Likewise for local "map".
      	Pass NULL rather than &map to
      	linemap_unwind_to_first_non_reserved_loc, since the value is never
      	read from there, and the value written back not read from here.
      	(is_location_from_builtin_token): Strengthen local "map" from
      	const line_map * to const line_map_ordinary *.
      	(dump_location_info): Strengthen locals "map" from
      	line_map *, one to const line_map_ordinary *, the other
      	to const line_map_macro *.
      	* tree-diagnostic.c (loc_map_pair): Strengthen field "map" from
      	const line_map * to const line_map_macro *.
      	(maybe_unwind_expanded_macro_loc): Add a call to
      	linemap_check_macro when writing to the "map" field of the
      	loc_map_pair.
      	Introduce local const line_map_ordinary * "ord_map", using it in
      	place of "map" in the part of the function where we know we have
      	an ordinary map.  Strengthen local "m" from const line_map * to
      	const line_map_ordinary *.
      
      gcc/ada/ChangeLog:
      	* gcc-interface/trans.c (Sloc_to_locus1): Strenghthen local "map"
      	from line_map * to line_map_ordinary *.
      
      gcc/c-family/ChangeLog:
      	* c-common.h (fe_file_change): Strengthen param from
      	const line_map * to const line_map_ordinary *.
      	(pp_file_change): Likewise.
      	* c-lex.c (fe_file_change): Likewise.
      	(cb_define): Use linemap_check_ordinary when invoking
      	SOURCE_LINE.
      	(cb_undef): Likewise.
      	* c-opts.c (c_finish_options): Use linemap_check_ordinary when
      	invoking cb_file_change.
      	(c_finish_options): Likewise.
      	(push_command_line_include): Likewise.
      	(cb_file_change): Strengthen param "new_map" from
      	const line_map * to const line_map_ordinary *.
      	* c-ppoutput.c (cb_define): Likewise for local "map".
      	(pp_file_change): Likewise for param "map" and local "from".
      
      gcc/fortran/ChangeLog:
      	* cpp.c (maybe_print_line): Strengthen local "map" from
      	const line_map * to const line_map_ordinary *.
      	(cb_file_change): Likewise for param "map" and local "from".
      	(cb_line_change): Likewise for local "map".
      
      libcpp/ChangeLog:
      	* directives.c (do_line): Strengthen local "map" from
      	const line_map * to const line_map_ordinary *.
      	(do_linemarker): Likewise.
      	(_cpp_do_file_change): Assert that we're not dealing with
      	a macro map.  Introduce local "ord_map" via a call to
      	linemap_check_ordinary, guarded within the check for
      	non-NULL.  Use it for typesafety.
      	* files.c (cpp_make_system_header): Strengthen local "map" from
      	const line_map * to const line_map_ordinary *.
      	* include/cpplib.h (struct cpp_callbacks): Likewise for second
      	parameter of "file_change" callback.
      	* include/line-map.h (struct line_map): Convert from a struct
      	containing a union to a base class.
      	(struct line_map_ordinary): Convert to a subclass of line_map.
      	(struct line_map_macro): Likewise.
      	(linemap_check_ordinary): Strengthen return type from line_map *
      	to line_map_ordinary *, and add a const-variant.
      	(linemap_check_macro): New pair of functions.
      	(ORDINARY_MAP_STARTING_LINE_NUMBER): Strengthen param from
      	const line_map * to const line_map_ordinary *, eliminating call
      	to linemap_check_ordinary.  Likewise for the non-const variant.
      	(ORDINARY_MAP_INCLUDER_FILE_INDEX): Likewise.
      	(ORDINARY_MAP_IN_SYSTEM_HEADER_P): Likewise.
      	(ORDINARY_MAP_NUMBER_OF_COLUMN_BITS): Likewise.
      	(ORDINARY_MAP_FILE_NAME): Likewise.
      	(MACRO_MAP_MACRO): Strengthen param from const line_map * to
      	const line_map_macro *.  Likewise for the non-const variant.
      	(MACRO_MAP_NUM_MACRO_TOKENS): Likewise.
      	(MACRO_MAP_LOCATIONS): Likewise.
      	(MACRO_MAP_EXPANSION_POINT_LOCATION): Likewise.
      	(struct maps_info): Replace with...
      	(struct maps_info_ordinary):...this and...
      	(struct maps_info_macro): ...this.
      	(struct line_maps): Convert fields "info_ordinary" and
      	"info_macro" to the above new structs.
      	(LINEMAPS_MAP_INFO): Delete both functions.
      	(LINEMAPS_MAPS): Likewise.
      	(LINEMAPS_ALLOCATED): Rewrite both variants to avoid using
      	LINEMAPS_MAP_INFO.
      	(LINEMAPS_USED): Likewise.
      	(LINEMAPS_CACHE): Likewise.
      	(LINEMAPS_MAP_AT): Likewise.
      	(LINEMAPS_ORDINARY_MAPS): Strengthen return type from line_map *
      	to line_map_ordinary *.
      	(LINEMAPS_ORDINARY_MAP_AT): Likewise.
      	(LINEMAPS_LAST_ORDINARY_MAP): Likewise.
      	(LINEMAPS_LAST_ALLOCATED_ORDINARY_MAP): Likewise.
      	(LINEMAPS_MACRO_MAPS): Strengthen return type from line_map * to
      	line_map_macro *.
      	(LINEMAPS_MACRO_MAP_AT): Likewise.
      	(LINEMAPS_LAST_MACRO_MAP): Likewise.
      	(LINEMAPS_LAST_ALLOCATED_MACRO_MAP): Likewise.
      	(linemap_map_get_macro_name): Strengthen param from
      	const line_map * to const line_map_macro *.
      	(SOURCE_LINE): Strengthen first param from const line_map * to
      	const line_map_ordinary *, removing call to
      	linemap_check_ordinary.
      	(SOURCE_COLUMN): Likewise.
      	(LAST_SOURCE_LINE_LOCATION): Likewise.
      	(LAST_SOURCE_LINE): Strengthen first param from const line_map *
      	to const line_map_ordinary *.
      	(LAST_SOURCE_COLUMN): Likewise.
      	(INCLUDED_FROM): Strengthen return type from line_map * to
      	line_map_ordinary *., and second param from const line_map *
      	to const line_map_ordinary *, removing call to
      	linemap_check_ordinary.
      	(MAIN_FILE_P): Strengthen param from const line_map * to
      	const line_map_ordinary *, removing call to
      	linemap_check_ordinary.
      	(linemap_position_for_line_and_column): Strengthen param from
      	const line_map * to const line_map_ordinary *.
      	(LINEMAP_FILE): Strengthen param from const line_map * to
      	const line_map_ordinary *, removing call to
      	linemap_check_ordinary.
      	(LINEMAP_LINE): Likewise.
      	(LINEMAP_SYSP): Likewise.
      	(linemap_resolve_location): Strengthen final param from
      	const line_map ** to const line_map_ordinary **.
      	* internal.h (CPP_INCREMENT_LINE): Likewise for local "map".
      	(linemap_enter_macro): Strengthen return type from
      	const line_map * to const line_map_macro *.
      	(linemap_add_macro_token): Likewise for first param.
      	* line-map.c (linemap_check_files_exited): Strengthen local "map"
      	from const line_map * to const line_map_ordinary *.
      	(new_linemap): Introduce local "map_size" and use it when
      	calculating how large the buffer should be.  Rewrite based
      	on change of info_macro and info_ordinary into distinct types.
      	(linemap_add): Strengthen locals "map" and "from" from line_map *
      	to line_map_ordinary *.
      	(linemap_enter_macro): Strengthen return type from
      	const line_map * to const line_map_macro *, and local "map" from
      	line_map * to line_map_macro *.
      	(linemap_add_macro_token): Strengthen param "map" from
      	const line_map * to const line_map_macro *.
      	(linemap_line_start): Strengthen local "map" from line_map * to
      	line_map_ordinary *.
      	(linemap_position_for_column): Likewise.
      	(linemap_position_for_line_and_column): Strengthen first param
      	from const line_map * to const line_map_ordinary *.
      	(linemap_position_for_loc_and_offset): Strengthen local "map" from
      	const line_map * to const line_map_ordinary *.
      	(linemap_ordinary_map_lookup): Likewise for return type and locals
      	"cached" and "result".
      	(linemap_macro_map_lookup): Strengthen return type and locals
      	"cached" and "result" from const line_map * to
      	const line_map_macro *.
      	(linemap_macro_map_loc_to_exp_point): Likewise for param "map".
      	(linemap_macro_map_loc_to_def_point): Likewise.
      	(linemap_macro_map_loc_unwind_toward_spelling): Likewise.
      	(linemap_get_expansion_line): Strengthen local "map" from
      	const line_map * to const line_map_ordinary *.
      	(linemap_get_expansion_filename): Likewise.
      	(linemap_map_get_macro_name): Strengthen param from
      	const line_map * to const line_map_macro *.
      	(linemap_location_in_system_header_p): Add call to
      	linemap_check_ordinary in region guarded by
      	!linemap_macro_expansion_map_p.  Introduce local "macro_map" via
      	linemap_check_macro in other region, using it in place of "map"
      	for typesafety.
      	(first_map_in_common_1): Add calls to linemap_check_macro.
      	(trace_include): Strengthen param "map" from const line_map * to
      	const line_map_ordinary *.
      	(linemap_macro_loc_to_spelling_point): Strengthen final param from
      	const line_map ** to const line_map_ordinary **.  Replace a
      	C-style cast with a const_cast, and add calls to
      	linemap_check_macro and linemap_check_ordinary.
      	(linemap_macro_loc_to_def_point): Likewise.
      	(linemap_macro_loc_to_exp_point): Likewise.
      	(linemap_resolve_location): Strengthen final param from
      	const line_map ** to const line_map_ordinary **.
      	(linemap_unwind_toward_expansion): Introduce local "macro_map" via
      	a checked cast and use it in place of *map.
      	(linemap_unwind_to_first_non_reserved_loc): Strengthen local
      	"map1" from const line_map * to const line_map_ordinary *.
      	(linemap_expand_location): Introduce local "ord_map" via a checked
      	cast and use it in place of map.
      	(linemap_dump): Make local "map" const.  Strengthen local
      	"includer_map" from line_map * to const line_map_ordinary *.
      	Introduce locals "ord_map" and "macro_map" via checked casts and
      	use them in place of "map" for typesafety.
      	(linemap_dump_location): Strengthen local "map" from
      	const line_map * to const line_map_ordinary *.
      	(linemap_get_file_highest_location): Update for elimination of
      	union.
      	(linemap_get_statistics): Strengthen local "cur_map" from
      	line_map * to const line_map_macro *.  Update uses of sizeof to
      	use the appropriate line_map subclasses.
      	* macro.c (_cpp_warn_if_unused_macro): Add call to
      	linemap_check_ordinary.
      	(builtin_macro): Strengthen local "map" from const line_map * to
      	const line_map_macro *.
      	(enter_macro_context): Likewise.
      	(replace_args): Likewise.
      	(tokens_buff_put_token_to): Likewise for param "map".
      	(tokens_buff_add_token): Likewise.
      
      From-SVN: r223365
      David Malcolm committed
    • Add cpu_defines.h for ARM. · 49c65434
      2015-05-17  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
      
      	* configure.host: Define cpu_defines_dir for ARM.
      	* config/cpu/arm/cpu_defines.h: New file.
      
      From-SVN: r223361
      Ramana Radhakrishnan committed
    • re PR rtl-optimization/66156 ([msp430] wrong code generated with -O2 -mlarge… · bdafd679
      re PR rtl-optimization/66156 ([msp430] wrong code generated with -O2 -mlarge (zero extension HI -> SI))
      
      	PR target/66156
      	* config/msp430/msp430.md (zero_extendhisi2): Add support for
      	separate source and destination registers.
      
      From-SVN: r223354
      Nick Clifton committed
    • Fix gcc.dg/vect/bb-slp-35.c on SPARC · 057c74c7
      	* gcc.dg/vect/bb-slp-35.c: Adjust.
      
      From-SVN: r223353
      Rainer Orth committed
    • plugin-nvptx.c (nvptx_get_num_devices): Return zero on cuInit failure. · c8319826
      	* plugin/plugin-nvptx.c (nvptx_get_num_devices): Return zero
      	on cuInit failure.
      
      From-SVN: r223352
      Julian Brown committed
    • re PR tree-optimization/66165 (vect_transform_slp_perm_load: vec out of range ?) · 9626d143
      2015-05-19  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/66165
      	* tree-vect-slp.c (vect_supported_load_permutation_p): Add guard
      	for no load permutation.
      
      	* gcc.dg/torture/pr66165.c: New testcase.
      
      	PR tree-optimization/66185
      	* tree-vect-slp.c (vect_build_slp_tree): Properly roll back
      	when building the SLP node from scalars.
      
      	* gcc.dg/torture/pr66185.c: New testcase.
      
      From-SVN: r223349
      Richard Biener committed
    • insn-notes.def (UPDATE_SJLJ_CONTEXT): New note. · d33606c3
      	* insn-notes.def (UPDATE_SJLJ_CONTEXT): New note.
      	* builtins.c (expand_builtin_update_setjmp_buf): Make global.
      	(expand_stack_restore): Call record_new_stack_level.
      	(expand_stack_save): Do not call do_pending_stack_adjust.
      	* builtins.h (expand_builtin_update_setjmp_buf): Declare.
      	* calls.c (expand_call): Call record_new_stack_level for alloca.
      	* except.c (sjlj_mark_call_sites): Expand builtin_update_setjmp_buf
      	wherever a NOTE_INSN_UPDATE_SJLJ_CONTEXT note is present.
      	(update_sjlj_context): New global function.
      	* except.h (update_sjlj_context): Declare.
      	* explow.c (record_new_stack_level): New global function.
      	(allocate_dynamic_stack_space): Call record_new_stack_level.
      	* explow.h (record_new_stack_level): Declare.
      	* final.c (final_scan_insn): Deal with NOTE_INSN_UPDATE_SJLJ_CONTEXT.
      	* cfgrtl.c (duplicate_insn_chain): Likewise.
      
      Co-Authored-By: Tristan Gingold <gingold@adacore.com>
      
      From-SVN: r223348
      Eric Botcazou committed
    • [calls.c] Remove #ifdef checks on STACK_GROWS_DOWNWARD · 76e048a8
      	* calls.c: Always define STACK_GROWS_DOWNWARD as 0 or 1.
      	(mem_overlaps_already_clobbered_arg_p): Rewrite ifdef
      	STACK_GROWS_DOWNWARD as normal if.
      	(expand_call): Likewise.
      
      From-SVN: r223347
      Kyrylo Tkachov committed
    • re PR target/54236 ([SH] Improve addc and subc insn utilization) · d0ae0f51
      gcc/
      	PR target/54236
      	* config/sh/sh.md (*round_int_even): New insn_and_split and
      	accompanying new unnamed split.
      
      gcc/testsuite/
      	PR target/54236
      	* gcc.target/sh/pr54236-2.c: Adjust expected insn counts.
      
      From-SVN: r223346
      Oleg Endo committed