Skip to content
Snippets Groups Projects
  1. Jun 17, 2017
  2. Jun 16, 2017
    • Carl Love's avatar
      rs6000-c.c (altivec_overloaded_builtins): Add definitions for vec_float,... · be1418c7
      Carl Love authored
      rs6000-c.c (altivec_overloaded_builtins): Add definitions for vec_float, vec_float2, vec_floato, vec_floate built-ins.
      
      gcc/ChangeLog:
      
      2017-06-16  Carl Love  <cel@us.ibm.com>
      
      	* config/rs6000/rs6000-c.c (altivec_overloaded_builtins): Add
      	definitions for vec_float, vec_float2, vec_floato,
      	vec_floate built-ins.
      	* config/rs6000/vsx.md (define_c_enum "unspec"): Add RTL code
      	for instructions vsx_xvcvsxws vsx_xvcvuxwsp, float2, floato and
      	floate.
      	* config/rs6000/rs6000-builtin.def (FLOAT2_V2DI, FLOATE_V2DF,
      	FLOATE_2DI, FLOATO_V2DF, FLOATEE_V2DI, XVCVSXWSP_V4SF,
      	UNS_FLOATO_V2DI, UNS_FLOATE_V2DI): Add definitions.
      	* config/altivec.md (define_insn "p8_vmrgew_<mode>",
      	define_mode_attr VF_sxddp): Add V4SF type to p8_vmrgew.
      	* config/rs6000/altivec.h (vec_float, vec_float2, vec_floate,
      	vec_floato): Add builtin defines.
      	* doc/extend.texi (vec_float, vec_float2, vec_floate, vec_floato):
      	Update the built-in documentation file for the new built-in
      	functions.
      
      gcc/testsuite/ChangeLog:
      
      2017-06-16  Carl Love  <cel@us.ibm.com>
      
      	* gcc.target/powerpc/builtins-3-runnable.c (test_result_sp,
      	main): Add runnable tests and test checker for vec_float,
      	vec_float2, vec_floate and vec_floato builtins.
      
      From-SVN: r249311
      be1418c7
    • Richard Earnshaw's avatar
      [arm] Fix various tests · e3e266bf
      Richard Earnshaw authored
      The neon-thumb2-move.c test was overriding the options that had been
      detected as being necessary to enable Neon.  The result was that the
      combination of the test's options and those auto-detected were not
      compatible with neon leading to a test failure.  The correct fix here
      is to stick with the options that dg-add-options arm_neon has worked
      out.
      
      The thumb2-slow-flash-data tests were relying (incorrectly) on a
      particular FPU being enabled by default.  These tests are fixed by
      adding +fp to the architecture selected.
      
      	* gcc.target/arm/neon-thumb2-move.c (dg-options): Don't override
      	the architecture options added by dg-add-options arm_neon.
      	* gcc.target/arm/thumb2-slow-flash-data-2.c (dg-opitions): Add +fp
      	to the architecture.
      	* gcc.target/arm/thumb3-slow-flash-data-3.c (dg-opitions): Likewise.
      	* gcc.target/arm/thumb4-slow-flash-data-3.c (dg-opitions): Likewise.
      	* gcc.target/arm/thumb5-slow-flash-data-3.c (dg-opitions): Likewise.
      
      From-SVN: r249310
      e3e266bf
    • Richard Earnshaw's avatar
      [arm] Mark -marm and -mthumb as being inverse options · 718a3eab
      Richard Earnshaw authored
      -marm and -mthumb are opposites: one cancels out the other.  This patch
      marks them as such so that the driver will eliminate all but the last
      option on the command line.  This aids multilib selection which otherwise
      can get confused if both are present.
      
      	* config/arm/arm.opt (marm): Mark as the negative of of -mthumb.
      	(mthumb): Mark as the negative of -marm.
      
      From-SVN: r249309
      718a3eab
    • Richard Earnshaw's avatar
      [arm][doc] Document changes to -mcpu, -mtune and -mfpu. · f54133ea
      Richard Earnshaw authored
      This patch adds the remainder of the main documentation changes.  It
      adds the changes for -mcpu, -mtune and -mfpu.  I've chosen to document
      the extension options under -mcpu rather than under -mtune because,
      while they are permitted with -mtune, they do not affect the behaviour
      of the tuning done by the compiler.
      
      I've also inverted the sense of the table (making the primary index
      the extension name and then listing the CPU names to which it applies.
      This is because the extensions are much more orthoganal in meaning
      here and having a primary entry via the CPU name would lead to
      enormous duplication.
      
      Finally, it adds the relevant changes to -mfpu.  I haven't stated yet
      that any setting of -mfpu other than 'auto' is deprecated, but that is
      certainly the long-term goal of this patch series.
      
      	* doc/invoke.texi (ARM Options, -mcpu): Document supported
      	extension options.
      	(ARM Options, -mtune): Document that this accepts the same
      	extension options as -mcpu.
      	(ARM Options, -mfpu): Document addition of -mfpu=auto.
      
      From-SVN: r249308
      f54133ea
    • Richard Earnshaw's avatar
      [arm][doc] Document new -march= syntax. · 6d2f99aa
      Richard Earnshaw authored
      This adds documentation for the new extension options to -march= on ARM.
      I tried a number of different ways of formatting the information, but this
      seems the best, given what can be achieved in texinfo format.
      
      	* doc/invoke.texi (ARM Options, -march=): Document new syntax and
      	permitted extensions.
      
      From-SVN: r249307
      6d2f99aa
    • Richard Earnshaw's avatar
      [arm] Add a few missing architecture extension options. · ffc12690
      Richard Earnshaw authored
      Reviewing the list of options for the purposes of writing the
      documentation revealed that a small number of options were missing.
      Mostly these are aliases for existing options, but in a couple of
      cases we lacked the ability to disable certain other options.
      
      	* config/arm/arm-cpus.in (armv7): Add extension +nofp.
      	(armv7-r): Add aliases vfpv3xd and vfpv3-d16.
      	(armv8-m.main): Add option +nodsp.
      	* config/arm/arm-cpu-cdata.h: Regenerated.
      
      From-SVN: r249306
      ffc12690
    • Richard Earnshaw's avatar
      [arm] Rework multilib support · be5c4e06
      Richard Earnshaw authored
      It looks like the fuchsia port relied on inheriting the multilib rules from
      the bare-metal port (the t-arm-elf makefile fragment), but that has now been
      rewritten on the assuption that the base architecture is ARMv4t; fuchsia
      has a base architecture of ARMv7-a.
      
      To account for this, I've cloned the original t-arm-elf rules into a
      new makefile fragment t-fuchsia and arranged for that to be used when
      targetting this system.
      
      	* config/arm/t-fuchsia: New file.
      	* config.gcc (arm*-*-fuchsia*): Use it.
      
      From-SVN: r249305
      be5c4e06
    • Richard Earnshaw's avatar
      [arm] Rework multlib builds for symbianelf · e61a3cdd
      Richard Earnshaw authored
      Symbianelf used to build multilib for armv5t with softfp, but that
      architecture doesn't really support floating point instructions.  This
      patch reworks the multilib configuration to use armv5te as the base
      when building for floating point.
      
      I'm not sure just how useful the symbian port is these days, so this
      has only been very lightly tested (checks that libgcc builds for all
      multilib variants).  Perhaps we should consider deprecating this
      config?
      
      	* config/arm/t-symbian: Rewrite for new option infrastructure.
      
      From-SVN: r249304
      e61a3cdd
    • Richard Earnshaw's avatar
      [arm] reset all multilib variables · 99d6bcf7
      Richard Earnshaw authored
      NB.  This configuration does not build in GCC-7 and doesn't build now either.
      
      This patch resets a couple of multlib variables which previously were
      not cleared.
      
      It almost certainly needs further work to make it use the new option
      framework correctly, but since the library configurations are already
      clearly wrong, it's not clear what the changes need to be.  In
      particular it tries to build a hard-float library for ARM7TDMI in both
      ARM and thumb modes, but ARMv4t does not support any floating-point
      instructions; furthermore, GCC has never supported a hard-float thumb1
      library.
      
      	* config/arm/t-phoenix (MULTILIB_REUSE): Clear variable.
      	(MULTILIB_REQUIRED): Likewise.
      
      From-SVN: r249303
      99d6bcf7
    • Richard Earnshaw's avatar
      [arm] Ensure all multilib variables are reset · e1674337
      Richard Earnshaw authored
      No real change, but for consistency reset all multilib related variables.
      
      	* config/arm/t-linux-eabi (MULTILIB_EXCEPTIONS): Set to empty.
      	(MULTILIB_RESUE): Likewise.
      	(MULTILIB_MATCHES): Likewise.
      	(MULTLIB_REQUIRED): Likewise.
      
      From-SVN: r249302
      e1674337
    • Richard Earnshaw's avatar
      [arm] Update t-rtems for new option framework · d59ee314
      Richard Earnshaw authored
      [This patch has only been fairly lightly tested (I've built a compiler
      with all the relevant multilibs and smoke-tested a few combinations to
      check that the tools still produce a sensible object file).]
      
      This patch updates the RTEMS build to use the new option framework.
      It tries as far as possible to keep the existing supported options,
      but there are two necessary changes and one cleanup.  I've also
      restructed the file slightly to make it slightly easier (IMO) to
      understand.
      
      Necessary changes:
      
      1: ARMv4t does not support a hard-float ABI, the earliest supported
      architecture with floating-point support is ARMv5te, so I've rebased
      the original fpu/hard libraries to that revision of the architecture.
      
      2: Similarly, the earliest version of the -m profile to support
      hardware floating-point is armv7e-m (not armv7-m), so the base
      architecture for m-profile with FP has been correspondingly updated.
      
      Clean-up:
      
      1: For greater consistency I've changed the
      -mcpu=cortex-m7/-mfpu=fpv5-d16/-mhard-float to
      -march=armv7e-m+fp.dp/-mhard-float.  The built-in -mcpu rewrite rules
      take care of mapping the existing option sets onto the architecture
      string to ensure compatibility.
      
      Since the existing rule set does not contain any MULTILIB_REUSE rules,
      I have not added any here this time around, but it would be worth the
      maintainers of this file considering whether adding some rules would
      make their toolchain more friendly to users.
      
      Finally, I've added lines to reset all the multilib variables at the
      head of the file.  I found during testing that some definitions from
      t-arm-elf were leaking through and causing unexpected behviour.
      
      	* config/arm/t-rtems: Rewrite for new option framework.
      
      From-SVN: r249301
      d59ee314
    • Richard Earnshaw's avatar
      [arm] Rewrite t-rmprofile multilib specification · 42093880
      Richard Earnshaw authored
      This is the R- & M-profile equivalent of the previous A-profile
      multilib rewrite.  Additionally this patch adds some top-level rules
      to help find suitable multilibs for general cases when certain
      libraries are not built, or when building for legacy cores.
      
      gcc:
      
      	* config/arm/t-aprofile (v7_a_nosimd_variants, v7_a_simd_variants)
      	(v7ve_nosimd_variatns, v7ve_vfpv3_simd_variants)
      	(v7ve_vfpv4_simd_variants, v8_a_nosimd_variants, v8_a_simd_variants)
      	(v8_1_a_simd_variants, v8_2_a_simd_variants): Move to ...
      	* config/arm/t-multilib: ... here.
      	(MULTILIB_OPTIONS): Add armv7 and armv7+fp architectures.
      	(MULTILIB_MATCHES): Use armv7 libraries for armv7-r.  Also use for
      	armv7-a and armv8*-a when A-profile libraries have not been built.
      	* config/arm/t-rmprofile: Rewrite.
      
      gcc/testsuite:
      	* gcc.target/arm/multilib.exp (rmprofile): New tests when rm-profile
      	multilibs have been built.
      
      From-SVN: r249300
      42093880
    • Richard Earnshaw's avatar
      [arm] Use -march=armv7-a+fp when testing hard-float · c5742a17
      Richard Earnshaw authored
      Some tests explicitly test with -march=armv7-a and -mfloat-abi=hard.
      However, with the new -mfpu=auto code, this architectural specifiction
      lacks any floating-point capabilities.  To rectify this, change the
      architecture to armv7-a+fp.
      
      gcc/testsuite:
      
      	* gcc.dg/pr59418.c: On ARM, change architecture to armv7-a+fp.
      	* gcc.target/arm/pr51915.c: Likewise.
      	* gcc.target/arm/pr52006.c: Likewise.
      	* gcc.target/arm/pr53187.c: Likewise.
      
      From-SVN: r249299
      c5742a17
    • Richard Earnshaw's avatar
      [arm] Allow explicit periods to be escaped in · fa0b638f
      Richard Earnshaw authored
      The MULTILIB_REUSE mapping rules are built up using periods to
      represent the placement of '=' signs in the command line syntax.  This
      presents a problem if the option contains an explicit period because
      that is translated unconditionally.  The result is that it is not
      currently possible to write a reuse rule that would match the
      ARMv8-M mainline architecture:
      
      	-march=armv8-m.main
      
      To fix this, this patch allows an explicit period to be escaped by writing
      \. and by then preserving the period into the generated multilib header.
      
      	* genmultilib (multilib_reuse): Allow an explicit period to be escaped
      	with a backslash.  Remove the backslash after substituting unescaped
      	periods.
      	* doc/fragments.texi (MULTILIB_REUSE): Document it.
      
      From-SVN: r249298
      fa0b638f
    • Richard Earnshaw's avatar
      [arm] Explicitly set .fpu in cmse_nonsecure_call.S · f0cd49c5
      Richard Earnshaw authored
      This file is missing a .fpu directive and was relying on the compiler
      driver passing through a -mfpu= command line option.  When the FPU is
      auto, that will not be passed through correctly, so set something
      suitable within the file itself.
      
      libgcc:
      	 * config/arm/cmse_nonsecure_call.S: Explicitly set the FPU.
      
      From-SVN: r249297
      f0cd49c5
    • Richard Earnshaw's avatar
      [arm] Rewrite t-aprofile using new selector methodology · 93aa40fe
      Richard Earnshaw authored
      Now that the default FPU is 'auto' we can finally rewrite (and
      simplify) the rules for mapping compiler options to multilibs.  We
      no-longer need to know the specific CPU, since the driver will
      construct a suitable -march flag for us; this greatly simplifies the
      overall logic.  This patch rewrites the library list for A-profile
      cores.  We use various Make extention rules to simplify the logic even
      further.
      
      A couple of minor tweaks to the configure script and to the main
      driver ensures that we always know the setting of -mfloat-abi and
      -marm/-mthumb.  Again, this helps simplify the logic further.  The
      change to arm_target_thumb_only relies on the fact that this routine
      is only called if neither -marm nor -mthumb has been previously
      selected or specified by the user.
      
      A new testsuite module is added to check the libraries generated.  The
      new tests are only run if the compiler is configured with the relevant
      multilibs enabled.
      
      gcc:
      	* config.gcc: (arm*-*-*): When building a-profile libraries, force
      	the driver to pass through the default setting of -mfloat-abi.
      	* common/config/arm/arm-common.c (arm_target_thumb_only): Return -marm
      	rather than NULL.
      	* config/arm/t-multilib (MULTILIB_REUSE): Initialize to empty.
      	(all_feat_combs): New rule.
      	(MULTILIB_OPTIONS): Use explicit ARM and Thumb directories.  Rework
      	default libraries.
      	* config/arm/t-aprofile: Rewrite.
      
      gcc/testsuite:
      	* gcc.target/arm/multilibs.exp: New file.
      
      From-SVN: r249296
      93aa40fe
    • Richard Earnshaw's avatar
      [arm] Make 'auto' the default FPU selection option. · 11389610
      Richard Earnshaw authored
      Finally, we can make 'auto' the default choice for the FPU option.  It's
      still possible to override this during configure, but we will eventually
      deprecate that, moving to the new cpu/architecture selection mechanism.
      
      	* config/arm/arm.h (FPUTYPE_AUTO): Define.
      	* config/arm/arm.c (arm_option_override): Use FPUTYPE_AUTO if the
      	fpu is not specified by the user/command-line.
      	* config/arm/bpabi.h (FPUTYPE_DEFAULT): Delete.
      	* config/arm/netbsd-elf.h (FPUTYPE_DEFAULT): Delete.
      	* config/arm/linux-elf.h (FPUTYPE_DEFAULT): Delete.
      	* config/arm/vxworks.h (FPUTYPE_DEFAULT): Delete.
      	* common/config/arm/arm-common.c (arm_canon_arch_option): Use
      	FPUTYPE_AUTO insted of FPUTYPE_DEFAULT.
      
      From-SVN: r249295
      11389610
    • Richard Earnshaw's avatar
      [genmultilib] Update basic multilib configuration · aaf8008c
      Richard Earnshaw authored
      The standard arm-eabi configuration comes with a basic set of multilibs that
      are suitable mostly for simple testing of the compiler in various
      configurations.  We try to keep the number of libraries build small so
      that build times do not become too onerous.
      
      Using the new auto-fp selection code we can now cover all supported
      architectures except for those with single-precision only FP units with
      just 4 multilibs.  This is done with the rewrite of t-arm-elf.  Now that we
      canonicalize -mcpu into suitable -march definitions we don't need to match
      CPU names to architectures any more; the driver will do this for us.
      
      I also noticed whilst writing this patch that the existing MULTILIB_DEFAULTS
      setting in the compiler was causing more problems than it was worth; and
      furthermore was simply wrong if the compiler is ever configured with
      --with-mode, --with-float or --with-endian.  The remaining options also
      pertained to pre-eabi builds and aren't interesting today either.  It
      seemed best to just delete the definition entirely.
      
      	* config/arm/elf.h (MULTILIB_DEFAULTS): Delete.
      	* config/arm/t-arm-elf: Rewritten.
      
      From-SVN: r249294
      aaf8008c
    • Richard Earnshaw's avatar
      [arm] Make -mfloat-abi=softfp work when there are no · 2e17e319
      Richard Earnshaw authored
      Before this patch series it wasn't really possible to not have an FPU;
      it was always there, even if the hardware didn't really support it.
      Now that we have -mfpu=auto, the concept of not having an FPU becomes
      real.  Consequently, when the -mfloat-abi switch is set to softfp
      doing the Right Thing is much more important.  In this case we have a
      soft-float ABI, but can use FP instructions if they are available.
      To support this we have to separate out TARGET_HARD_FLOAT into two
      use cases: one where the instructions exist and one when they don't.
      We preserve the original meaning of TARGET_HARD_FLOAT (but add an extra
      check) of meaning that we are generating HW FP instructions, and add a
      new macro for the special case when use of FP instructions is permitted,
      but might not be available at this time (the distinction is important
      because they might be enabled by an attribute during the compilation).
      TARGET_SOFT_FLOAT continues to be the exact inverse of TARGET_HARD_FLOAT,
      but we now define it as such.
      
      	* config/arm/arm.h (TARGET_HARD_FLOAT): Also check that we
      	have some floating-point instructions.
      	(TARGET_SOFT_FLOAT): Define as inverse of TARGET_HARD_FLOAT.
      	(TARGET_MAYBE_HARD_FLOAT): New macro.
      	* config/arm/arm-builtins.c (arm_init_builtins): Use
      	TARGET_MAYBE_HARD_FLOAT.
      	* config/arm/arm.c (arm_option_override): Use TARGET_HARD_FLOAT_ABI.
      
      From-SVN: r249293
      2e17e319
    • Richard Earnshaw's avatar
      [arm] Generate a canonical form for -march · 0b97b8f8
      Richard Earnshaw authored
      This patch uses the driver and some spec rewrite rules to generate a
      canonicalized form of the -march= option.  We want to do this for
      several reasons, all relating to making multi-lib selection sane.
      
      1) It can remove redundant extension options to produce a minimal
      list.
      
      2) The general syntax of the option permits a plethora of features,
      these are permitted in any order.  Canonicalization ensures that there
      is a single ordering of the options that are needed.
      
      3) It can use additional options to remove extensions that aren't
      relevant, such as removing all features that relate to the FPU when
      use of that is disabled.
      
      Once we have this information in a sensible form the multilib rules
      can be vastly simplified making for much more understandable Makefile
      fragments.
      
      	* common/config/arm/arm-common.c: Define INCLUDE_LIST.
      	(configargs.h): Include it.
      	(arm_print_hint_for_fpu_option): New function.
      	(arm_parse_fpu_option): New function.
      	(candidate_extension): New class.
      	(arm_canon_for_multilib): New function.
      	* config/arm/arm.h (CANON_ARCH_SPEC_FUNCTION): New macro.
      	(EXTRA_SPEC_FUNCTIONS): Add CANON_ARCH_SPEC_FUNCTION.
      	(ARCH_CANONICAL_SPECS): New macro.
      	(DRIVER_SELF_SPECS): Add ARCH_CANONICAL_SPECS.
      
      From-SVN: r249292
      0b97b8f8
    • Richard Earnshaw's avatar
      [arm] Force a CPU default in the config args defaults · a4af8a10
      Richard Earnshaw authored
      Currently if the user does not specify a default CPU or architecture
      the compiler provieds no default values in the spec defaults.  We can
      try to work from TARGET_CPU_DEFAULT but pulling that into the driver
      is a bit crufty and doesn't really work well with the general
      spec-processing model.  A better way is to ensure that with_cpu is
      always set appropirately during configure.  To avoid problems with the
      multilib fragment processing we defer this until after we have
      processed any required fragments before selecting the default.
      
      	* config.gcc (arm*-*-*): Ensure both target_cpu_cname and with_cpu
      	are set after handling multilib fragments.  Set target_cpu_default2
      	from with_cpu.
      
      From-SVN: r249291
      a4af8a10
    • Richard Earnshaw's avatar
      [arm] Allow new extended syntax CPU and architecture · bf35d17a
      Richard Earnshaw authored
      This patch extends support for the new extended-style architecture
      strings to configure and the target default options.  We validate any
      options passed by the user to configure against the permitted
      extensions for that CPU or architecture.
      
      	* config.gcc (arm*-*-fucshia*): Set target_cpu_cname to the real
      	cpu name.
      	(arm*-*-*): Set target_cpu_default2 to a quoted string.
      	* config/arm/parsecpu.awk (check_cpu): Validate any extension
      	options.
      	(check_arch): Likewise.
      	* config/arm/arm.c (arm_configure_build_target): Handle
      	TARGET_CPU_DEFAULT being a string constant.  Scan any feature
      	options in the default.
      
      From-SVN: r249290
      bf35d17a
    • Richard Earnshaw's avatar
      [arm] Allow CPU and architecture extensions to be · 357e1023
      Richard Earnshaw authored
      A follow up patch to this one will start to canonicalize options to
      simplify generating multilib fragments.  This patch is enabling work
      for that.  If we have extension options that duplicate other options
      (done principally for back-wards compatibility purposes) we need to
      ensure that just one of them will be used consistently when generating
      a canonical form of the user-specified options.  We do this by
      explicitly noting when an option is defined as an alias of another.
      
      Another aspect of canonicalization is to enforce a strict order in
      which the options are inspected, we do this by ensuring that no later
      option examined can be a subset of an earlier option (add and remove
      options are treated separtely).
      
      It's practically impossible to check all this in parsecpu.awk since
      that premits use of C macros in the ISA features list, so instead we
      enforce the ordering with a selftest function in the compiler, which
      is only run when self tests are enabled (it's not something that will
      change every day, so this should be sufficient).
      
      	* config/arm/arm-protos.h (cpu_arch_extension): Add field to record
      	when an option is an alias of another.
      	* config/arm/parsecpu.awk (optalias): New parser token.
      	(gen_comm_data): Mark non-alias options as such.  Emit entries
      	for extension aliases.
      	* config/arm/arm-cpus.in (armv5e): Make vfpv2 an alias.
      	(armv5te, armv5tej, armv6, armv6j, armv6k, armv6z): Likewise.
      	(armv6kz, armv6zk, armv6t2): Likewise.
      	(armv7): Make vfpv3-d16 an alias.
      	(armv7-a): Make vfpv3-d16, neon and neon-vfpv3 aliases.  Sort in
      	canonical order.
      	(armv7ve): Make vfpv4-d16, neon-vfpv3 and neon-vfpv4 aliases.
      	Sort in canonical order.
      	(armv8-a): Sort in canonical order.
      	(armv8.1-a, armv8.2-a):  Likewise.
      	(generic-armv7-a): Make neon and neon-vfpv3 aliases.  Sort in
      	canonical order.
      	(cortex-a9): Sort in canonical order.
      	* config/arm/arm.c (selftests.h): Include it.
      	(arm_test_cpu_arch_data): New function.
      	(arm_run_self_tests): New function.
      	(TARGET_RUN_TARGET_SELFTESTS): Redefine.
      	(targetm): Move declaration to the end of the file.
      	* arm-cpu-cdata.h: Regenerated.
      
      From-SVN: r249289
      357e1023
    • Richard Earnshaw's avatar
      [arm] Use standard option parsing code for detecting · e53993ef
      Richard Earnshaw authored
      Now that the standard CPU and architecture option parsing code is
      available in the driver we can use the main CPU and architecture data
      tables for driving the automatic enabling of Thumb code.
      
      Doing this requires that the driver script tell the parser whether or
      not the target string is a CPU name or an architecture, but beyond
      that it is just standard use of the new capabilities.
      
      We do, however, now get some error checking if the target isn't
      recognized, when previously we just ignored unknown targets and hoped
      that a later pass would pick up on this.
      
      	* config/arm/arm.h (TARGET_MODE_SPECS): Add additional parameter to
      	call to target_mode_check describing the type of option passed.
      	* common/config/arm/arm-common.c (arm_arch_core_flag): Delete.
      	(arm_target_thumb_only): Use arm_parse_arch_option_name or
      	arm_parse_cpu_option_name to match parameters against list of
      	available targets.
      	* config/arm/parsecpu.awk (gen_comm_data): Don't generate
      	arm_arch_core_flags data structure.
      	* config/arm/arm-cpu_cdata.h: Regenerated.
      
      From-SVN: r249288
      e53993ef
    • Richard Earnshaw's avatar
      [arm] Move cpu and architecture option name parsing · 435d1272
      Richard Earnshaw authored
      This patch has no functional change.  The code used for parsing -mcpu,
      -mtune and -march options is simply moved from arm.c arm-common.c.
      The list of FPU options is also moved.  Subsequent patches will make
      use of this within the driver.
      
      Some small adjustments are needed as a consequence of moving the
      definitions of the data objects to another object file, in that we
      no-longer have direct access to the size of the object.
      
      	* common/config/arm/arm-common.c (arm_initialize_isa): Moved here from
      	config/arm/arm.c.
      	(arm_print_hint_for_cpu_option): Likewise.
      	(arm_print_hint_for_arch_option): Likewise.
      	(arm_parse_cpu_option_name): Likewise.
      	(arm_parse_arch_option_name): Likewise.
      	* config/arm/arm.c (arm_identify_fpu_from_isa): Use the computed number
      	of entries in the all_fpus list.
      	* config/arm/arm-protos.h (all_architectures, all_cores): Declare.
      	(arm_parse_cpu_option_name): Declare.
      	(arm_parse_arch_option_name): Declare.
      	(arm_parse_option_features): Declare.
      	(arm_intialize_isa): Declare.
      	* config/arm/parsecpu.awk (gen_data): Move CPU and architecture
      	data tables to ...
      	(gen_comm_data): ... here.  Make definitions non-static.
      	* config/arm/arm-cpu-data.h: Regenerated.
      	* config/arm/arm-cpu-cdata.h: Regenerated.
      
      From-SVN: r249287
      435d1272
    • Richard Earnshaw's avatar
      [arm] Split CPU, architecture and tuning data tables. · 050809ed
      Richard Earnshaw authored
      The driver really needs to handle some canonicalization of the new
      -mcpu and -march options in order to make multilib selection
      tractable.  This will require moving much of the logic to parse the
      new options into the common code file.  However, the tuning data
      definitely does not want to be there as it is very specific to the
      compiler passes.  To facilitate this we need to split up the generated
      configuration data into architectural and tuning related tables.
      
      This patch starts that process, but does not yet move any code out of
      the compiler backend.  Since I'm reworking all that code I took the
      opportunity to also separate out the CPU data tables from the
      architecture data tables.  Although they are related, there is a lot
      of redundancy in the CPU options that is best handled by simply
      indirecting to the architecture entry.
      
      	* config/arm/arm-protos.h (arm_build_target): Remove arch_core.
      	(cpu_arch_extension): New structure.
      	(cpu_arch_option, arch_option, cpu_option): New structures.
      	* config/arm/parsecpu.awk (gen_headers): Build an enumeration of
      	architecture types.
      	(gen_data): Generate new format data tables.
      	* config/arm/arm.c (cpu_tune): New structure.
      	(cpu_option, processors): Delete.
      	(arm_print_hint_for_core_or_arch): Delete.  Replace with ...
      	(arm_print_hint_for_cpu_option): ... this and ...
      	(arm_print_hint_for_arch_option): ... this.
      	(arm_parse_arch_cpu_name): Delete.  Replace with ...
      	(arm_parse_cpu_option_name): ... this and ...
      	(arm_parse_arch_option_name): ... this.
      	(arm_unrecognized_feature): Change type of target parameter to
      	cpu_arch_option.
      	(arm_parse_arch_cpu_features): Delete.  Replace with ...
      	(arm_parse_option_features): ... this.
      	(arm_configure_build_target): Rework to use new configuration data
      	tables.
      	(arm_print_tune_info): Rework for new configuration data tables.
      	* config/arm/arm-cpu-data.h: Regenerated.
      	* config/arm/arm-cpu.h: Regenerated.
      
      From-SVN: r249286
      050809ed
    • Richard Earnshaw's avatar
      [build] Make sbitmap code available to the driver · 9ef88abe
      Richard Earnshaw authored
      The ARM option parsing code uses sbitmap data structures to manage
      features and upcoming patches will shortly need to use these bitmaps
      within the driver.  This patch moves sbitmap.o from OBJS to
      OBJS-libcommon to facilitate this.
      
      The patch has no impact on targets that don't need this functionality,
      since the object is part of an archive and will only be extracted if
      needed.
      
      	* Makefile.in (OBJS): Move sbitmap.o from here ...
      	(OBJS-libcommon): ... to here.
      
      From-SVN: r249285
      9ef88abe
    • Richard Earnshaw's avatar
      [arm] Add default FPUs for CPUs. · e87afe54
      Richard Earnshaw authored
      This patch adds the default CPUs for each cpu and provides options for
      changing the FPU variant when appropriate.
      
      It turns out to be easier to describe removal options using general
      mask operations that disable a concept rather than specific bits.
      Sometimes the helper definitions for enabling a feature are not excat
      duals when it comes to disabling them - for example, +simd forcibly
      turns on double-precision capabilities in the FPU, but disabling just
      simd (+nosimd) should not forcibly disable that.
      
      	* config/arm/arm-isa.h (ISA_ALL_FPU_INTERNAL): Renamed from ISA_ALL_FPU.
      	(ISA_ALL_CRYPTO): New macro.
      	(ISA_ALL_SIMD): New macro
      	(ISA_ALL_FP): New macro.
      	* config/arm/arm.c (fpu_bitlist): Update initializer.
      	* config/arm/arm-cpus.in: Use new ISA_ALL macros to disable crypto,
      	simd or fp.
      	(arm9e): Add fpu.  Add option for nofp
      	(arm946e-s, arm966e-s, arm968e-s, arm10e, arm1020e, arm1022e): Likewise.
      	(arm926ej-s, arm1026ej-s): Likewise.
      	(generic-armv7-a): Add fpu.  Add options for simd, vfpv3, vfpv3-d16,
      	vfpv3-fp16, vfpv3-d16-fp16, vfpv4, vfpv4-d16, neon, neon-vfp3,
      	neon-fp16, neon-vfpv4, nofp and nosimd.
      	(cortex-a5, cortex-a7): Add fpu.  Add options for nosimd and nofp.
      	(cortex-a8): Add fpu.  Add option for nofp.
      	(cortex-a9): Add fpu.  Add options for nosimd and nofp.
      	(cortex-a12, cortex-a15, cortex-a17): Add fpu.  Add option for nofp.
      	(cortex-r4f): Add fpu.
      	(cortex-r5): Add fpu.  Add options for nofp.dp and nofp.
      	(cortex-r7): Use idiv option from architecture.  Add fpu.  Add option
      	for nofp.
      	(cortex-r8): Likewise.
      	(cortex-m4): Add fpu.  Add option for nofp.
      	(cortex-a15.cortex-a7): Add fpu.  Add option for nofp.
      	(cortex-a17.cortex-a7): Likewise.
      	(cortex-a32): Add fpu.  Add options for crypto and nofp.
      	(cortex-a35, cortex-a53): Likewise.
      	(cortex-a57): Add fpu.  Add option for crypto.
      	(cortex-a72, cortex-a73): Likewise.
      	(exynos-m1): Likewise.
      	(cortex-a57.cortex-a53, cortex-a72.cortex-a53): Likewise.
      	(cortex-a73.cortex-a35, cortex-a73.cortex-a53): Likewise.
      	(cortex-m33): Add fpu.  Add option for nofp.
      	* config/arm/arm-cpu-cdata.h: Regenerated
      	* config/arm/arm-cpu-data.h: Regenerated.
      
      From-SVN: r249284
      e87afe54
    • Richard Earnshaw's avatar
      [arm] Add architectural options · 76d7d533
      Richard Earnshaw authored
      This patch adds the currently supported architecture options to the
      individual architectures.  For floating point and SIMD we only permit
      variants that the relevant versions of the architecture permit.  We also
      add short-hand versions (+fp, +simd, etc) that allows the user to
      describe using floating point without having to know the precise version
      of the floating point sub-architecture that that architecture requires.
      
      In a small number of cases we need to provide more precise versions of the
      floating point architecture.  In those cases we permit traditional -mfpu
      style names in the architecture description.
      
      	* arm-cpus.in (armv5e): Add options fp, vfpv2 and nofp.
      	(armv5te, armv5tej): Likewise.
      	(armv6, armv6j, armv6k, armv6z, armv6kz, armv6zk, armv6t2): Likewise.
      	(armv7): Add options fp and vfpv3-d16.
      	(armv7-a): Add options fp, simd, vfpv3, vfpv3-d16, vfpv3-d16-fp16,
      	vfpv3-fp16, vfpv4, vfpv4-d16, neon, neon-vfpv3, neon-fp16, neon-vfpv4,
      	nofp and nosimd.
      	(armv7ve): Likewise.
      	(armv7-r): Add options fp, fp.sp, idiv, nofp and noidiv.
      	(armv7e-m): Add options fp, fpv5, fp.dp and nofp.
      	(armv8-a): Add nocrypto option.
      	(armv8.1-a, armv8.2-a): Likewise.
      	(armv8-m.main): add options fp, fp.dp and nofp.
      
      From-SVN: r249283
      76d7d533
    • Richard Earnshaw's avatar
      [arm] Allow +opt on arbitrary cpu and architecture · 250e088b
      Richard Earnshaw authored
      This is the main patch to provide the infrastructure for adding
      feature extensions to CPU and architecture specifications.  It does not,
      however, add all the extensions that we intend to support (just a small
      number to permit some basic testing).  Now, instead of having specific
      entries in the architecture table for variants such as armv8-a+crc, the
      crc extension is specified as an optional component of the armv8-a
      architecture entry.  Similar control can be added to CPU option names.
      In both cases the list of permitted options is controlled by the main
      architecture or CPU name to prevent arbitrary cross-products of options.
      
      	* config/arm/arm-cpus.in (armv8-a): Add options crc, simd crypto and
      	nofp.
      	(armv8-a+crc): Delete.
      	(armv8.1-a): Add options simd, crypto and nofp.
      	(armv8.2-a): Add options fp16, simd, crypto and nofp.
      	(armv8.2-a+fp16): Delete.
      	(armv8-m.main): Add option dsp.
      	(armv8-m.main+dsp): Delete.
      	(cortex-a8): Add fpu.  Add nofp option.
      	(cortex-a9): Add fpu.  Add nofp and nosimd options.
      	* config/arm/parsecpu.awk (gen_data): Generate option tables and
      	link to main cpu and architecture data structures.
      	(gen_comm_data): Only put isa attributes from the main architecture
      	in common tables.
      	(option): New statement for architecture and CPU entries.
      	* arm.c (struct cpu_option): New structure.
      	(struct processors): Add entry for options.
      	(arm_unrecognized_feature): New function.
      	(arm_parse_arch_cpu_name): Ignore any characters after the first
      	'+' character.
      	(arm_parse_arch_cpu_feature): New function.
      	(arm_configure_build_target): Separate out any CPU and architecture
      	features and parse separately.  Don't error out if -mfpu=auto is
      	used with only an architecture string.
      	(arm_print_asm_arch_directives): New function.
      	(arm_file_start): Call it.
      	* config/arm/arm-cpu-cdata.h: Regenerated.
      	* config/arm/arm-cpu-data.h: Likewise.
      	* config/arm/arm-tables.opt: Likewise.
      
      From-SVN: r249282
      250e088b
    • Richard Earnshaw's avatar
      [arm] Don't pass -mfpu=auto through to the assembler. · 53c5aa99
      Richard Earnshaw authored
      The assembler doesn't understand -mfpu=auto.  The easiest way to handle this
      is to surpress this value from being passed through, while still passing
      through legacy values.
      
      	* config/arm/elf.h (ASM_SPEC): Only pass -mfpu through to the
      	assembler when it is not -mfpu=auto.
      
      From-SVN: r249281
      53c5aa99
    • Richard Earnshaw's avatar
      [arm] Rewrite -march and -mcpu options for passing to · 86794453
      Richard Earnshaw authored
      The assembler does not understand all the '+' options accepted by the
      compiler.  The best solution to this is to simply strip the extensions
      and just pass the raw architecture or cpu name through to the
      assembler.  We will use .arch and .arch_extension directives anyway to
      turn on or off individual features.  We already do something similar
      for big.little combinations and this just extends this principle a bit
      further.  This patch also fixes a possible bug by ensuring that the
      limited string copy is correctly NUL-terminated.
      
      While messing with this code I've also taken the opportunity to clean up
      the duplicate definitions of EXTRA_SPEC_FUNCTIONS by moving it outside of
      the ifdef wrapper.
      
      	* config/arm/arm.h (BIG_LITTLE_SPEC): Delete macro.
      	(ASM_REWRITE_SPEC_FUNCTIONS): New macro.
      	(BIG_LITTLE_CPU_SPEC_FUNCTIONS): Delete macro.
      	(ASM_CPU_SPEC): Rewrite.
      	(MCPU_MTUNE_NATIVE_FUNCTIONS): New macro.
      	(EXTRA_SPEC_FUNCTIONS): Move outside of ifdef.  Use
      	MCPU_MTUNE_NATIVE_FUNCTIONS and ASM_REWRITE_SPEC_FUNCTIONS.  Remove
      	reference to BIG_LITTLE_CPU_SPEC_FUNCTIONS.
      	* common/config/arm/arm-common.c (arm_rewrite_selected_cpu): Ensure
      	copied string is NUL-terminated.  Also strip any characters prefixed
      	by '+'.
      	(arm_rewrite_selected_arch): New function.
      	(arm_rewrite_march): New function.
      
      From-SVN: r249280
      86794453
    • Richard Earnshaw's avatar
      [arm] Use strings for -march, -mcpu and -mtune options · 80448ef6
      Richard Earnshaw authored
      In order to support more complex specifications for cpus and architectures
      we need to move away from using enumerations to represent the set of
      permitted options.  This basic change just moves the option parsing
      infrastructure over to that, but changes nothing more beyond generating
      a hint when the specified option does not match a known target (previously
      the help option was able to print out all the permitted values, but we
      can no-longer do that.
      
      	* config/arm/arm.opt (x_arm_arch_string): New TargetSave option.
      	(x_arm_cpu_string, x_arm_tune_string): Likewise.
      	(march, mcpu, mtune): Convert to string-based options.
      	* config/arm/arm.c (arm_print_hint_for_core_or_arch): New function.
      	(arm_parse_arch_cpu_name): New function.
      	(arm_configure_build_target): Use arm_parse_arch_cpu_name to
      	identify selected architecture or CPU.
      	(arm_option_save): New function.
      	(TARGET_OPTION_SAVE): Redefine.
      	(arm_option_restore): Restore string options.
      	(arm_option_print): Print string options.
      
      From-SVN: r249279
      80448ef6
    • Martin Sebor's avatar
      PR tree-optimization/80934 - bzero should be assumed not to escape pointer argument · b3d8d88e
      Martin Sebor authored
      PR tree-optimization/80934 - bzero should be assumed not to escape pointer argument
      PR tree-optimization/80933 - redundant bzero/bcopy calls not eliminated
      
      gcc/ChangeLog:
      
      	PR tree-optimization/80933
      	PR tree-optimization/80934
      	* builtins.c (fold_builtin_3): Do not handle bcmp here.
      	* gimple-fold.c (gimple_fold_builtin_bcmp): New function.
      	(gimple_fold_builtin_bcopy, gimple_fold_builtin_bzero): Likewise.
      	(gimple_fold_builtin): Call them.
      
      gcc/testsuite/ChangeLog:
      
      	PR tree-optimization/80933
      	PR tree-optimization/80934
      	* gcc.dg/fold-bcopy.c: New test.
      	* gcc.dg/tree-ssa/ssa-dse-30.c: Likewise..
      	* gcc.dg/tree-ssa/alias-36.c: Likewise.
      	* gcc/testsuite/gcc.dg/pr79214.c: Adjust.
      	* gcc.dg/tree-prof/val-prof-7.c: Likewise.
      	* gcc.dg/Wsizeof-pointer-memaccess1.c: Likewise.
      	* gcc.dg/builtins-nonnull.c: Likewise.
      
      From-SVN: r249278
      b3d8d88e
    • Jan Hubicka's avatar
      gimple-ssa-isolate-paths.c (isolate_path): Set edge leading to path as unlikely; update profile. · aa11163b
      Jan Hubicka authored
      	* gimple-ssa-isolate-paths.c (isolate_path): Set edge leading to path
      	as unlikely; update profile.
      
      From-SVN: r249277
      aa11163b
Loading