1. 02 Dec, 2016 13 commits
    • Fix runtime error: left shift of negative value (PR · a4f28954
      	PR ipa/78555
      	* sreal.c (sreal::to_int): Make absolute value before shifting.
      	(sreal::operator/): Likewise.
      	(sreal_verify_negative_division): New test.
      	(void sreal_c_tests): Call the new test.
      	* sreal.h (sreal::normalize_up): Use new SREAL_ABS and
      	SREAL_SIGN macros.
      	(sreal::normalize_down): Likewise.
      
      From-SVN: r243163
      Martin Liska committed
    • Do not simplify "(and (reg) (const bit)" to if_then_else. · 32ff7e39
      combine_simplify_rtx() tries to replace rtx expressions with just two
      possible values with an experession that uses if_then_else:
      
        (if_then_else (condition) (value1) (value2))
      
      If the original expression is e.g.
      
        (and (reg) (const_int 2))
      
      where the constant is the mask for a single bit, the replacement results
      in a more complex expression than before:
      
        (if_then_else (ne (zero_extract (reg) (1) (31))) (2) (0))
      
      Similar replacements are done for
      
        (signextend (and ...))
        (zeroextend (and ...))
      
      Suppress the replacement this special case in if_then_else_cond().
      
      gcc/ChangeLog:
      
      2016-12-02  Dominik Vogt  <vogt@linux.vnet.ibm.com>
      
      	* combine.c (combine_simplify_rtx):  Suppress replacement of
      	"(and (reg) (const_int bit))" with "if_then_else".
      
      From-SVN: r243162
      Dominik Vogt committed
    • S/390: Fix litpool-r3-1.c. · bba13c0c
      gcc/testsuite/ChangeLog:
      
      2016-12-02  Dominik Vogt  <vogt@linux.vnet.ibm.com>
      
      	* gcc.target/s390/litpool-r3-1.c: Fix label number test.
      
      From-SVN: r243161
      Dominik Vogt committed
    • PR target/77822: S390: Validate argument range of {zero,sign}_extract. · 0f6f72e8
      With some undefined code, combine generates patterns where the arguments to
      *_extract are out of range, e.b. a negative bit position.  If the s390 backend
      accepts these, they lead to not just undefined behaviour but invalid assembly
      instructions (argument out of the allowed range).  So this patch makes sure
      that the rtl expressions with out of range arguments are rejected.
      
      gcc/ChangeLog:
      
      2016-12-02  Dominik Vogt  <vogt@linux.vnet.ibm.com>
      
      	PR target/77822
      	* config/s390/s390.md ("extzv")
      	("*extzv<mode><clobbercc_or_nocc>")
      	("*extzvdi<clobbercc_or_nocc>_lshiftrt")
      	("*<risbg_n>_ior_and_sr_ze")
      	("*extract1bitdi<clobbercc_or_nocc>")
      	("*insv<mode><clobbercc_or_nocc>", "*insv_rnsbg_noshift")
      	("*insv_rnsbg_srl", "*insv<mode>_mem_reg")
      	("*insvdi_mem_reghigh", "*insvdi_reg_imm"): Use EXTRACT_ARGS_IN_RANGE
      	to validate the arguments of zero_extract and sign_extract.
      
      gcc/testsuite/ChangeLog:
      
      2016-12-02  Dominik Vogt  <vogt@linux.vnet.ibm.com>
      
      	PR target/77822
      	* gcc.target/s390/s390.exp: Support .C tests.
      	* gcc.target/s390/pr77822-2.c: New test.
      	* gcc.target/s390/pr77822-1.C: New test.
      
      From-SVN: r243160
      Dominik Vogt committed
    • PR target/77822: Add helper macro EXTRACT_ARGS_IN_RANGE to system.h. · 8f61415f
      The macro can be used to validate the arguments of zero_extract and
      sign_extract to fix this problem:
      https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77822
      
      gcc/ChangeLog:
      
      2016-12-02  Dominik Vogt  <vogt@linux.vnet.ibm.com>
      
      	PR target/77822
      	* rtl.h (EXTRACT_ARGS_IN_RANGE): New.
      
      From-SVN: r243159
      Dominik Vogt committed
    • S/390: Define vectorization_cost hook · 7f5fc633
      Define the vectorization_cost hook.  The only change right now
      compared to the default implementation is the reduced costs for
      unaligned loads/stores.  This is supposed to prevent unnecessary loop
      peeling performed to reach better alignments.
      
      Further tuning of this hook is required.
      
      -Andreas-
      
      gcc/ChangeLog:
      
      2016-12-02  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
      
      	* gcc/config/s390/s390.c (s390_builtin_vectorization_cost): New
      	function.
      	(TARGET_VECTORIZE_BUILTIN_VECTORIZATION_COST): Define target
      	macro.
      
      gcc/testsuite/ChangeLog:
      
      2016-12-02  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
      
      	* gcc.target/s390/vector/vec-nopeel-1.c: New test.
      
      From-SVN: r243158
      Andreas Krebbel committed
    • S/390: Add vector pack/unpack patterns. · 9ad49cdb
      gcc/ChangeLog:
      
      2016-12-02  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
      
      	* config/s390/vector.md (vec_halfhalf): New mode iterator.
      	("vec_pack_trunc_<mode>", "vec_pack_ssat_<mode>")
      	("vec_pack_usat_<mode>", "vec_unpacks_hi_v16qi")
      	("vec_unpacks_low_v16qi", "vec_unpacku_hi_v16qi")
      	("vec_unpacku_low_v16qi", "vec_unpacks_hi_v8hi")
      	("vec_unpacks_lo_v8hi", "vec_unpacku_hi_v8hi")
      	("vec_unpacku_lo_v8hi", "vec_unpacks_hi_v4si")
      	("vec_unpacks_lo_v4si", "vec_unpacku_hi_v4si")
      	("vec_unpacku_lo_v4si"): New pattern definitions.
      	* config/s390/vx-builtins.md: Move VI_HW_HSD mode iterator to
      	vector.md.
      
      From-SVN: r243157
      Andreas Krebbel committed
    • Add testcase missing in last commit. · f00bc26c
      gcc/testsuite/ChangeLog:
      
      2016-12-02  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
      
      	* gcc.target/s390/zvector/vec-cmp-2.c: New test.
      
      From-SVN: r243156
      Andreas Krebbel committed
    • S/390: Merge compare of compare results · eca98038
      With this patch EQ and NE compares on CC mode reader patterns are
      folded.  This allows using the result of the vec_all_* and vec_any_*
      builtins directly in a conditional jump instruction as in the attached
      testcase.
      
      gcc/ChangeLog:
      
      2016-12-02  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
      
      	* config/s390/s390-protos.h (s390_reverse_condition): New
      	prototype.
      	* config/s390/s390.c (s390_canonicalize_comparison): Fold compares
      	of CC mode values.
      	(s390_reverse_condition): New function.
      	* config/s390/s390.h (REVERSE_CC_MODE, REVERSE_CONDITION): Define
      	target macros.
      
      gcc/testsuite/ChangeLog:
      
      2016-12-02  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
      
      	* gcc.target/s390/zvector/vec-cmp-2.c: New test.
      
      From-SVN: r243155
      Andreas Krebbel committed
    • S/390: Fix vector all/any cc modes. · a6a2b532
      This fixes a problem with the vector compares producing CC mode
      results.
      
      The instructions produce condition code modes which can be either
      interpreted to check an ALL elements or an ANY element result.  As the
      modes where used before they could not be inverted by the middle-end
      by inverting the comparison code (e.g. eq to ne).  The result usually
      was just wrong.
      
      In fact inverting a comparison code on an CCVALL mode would require to
      also change the mode to CCVANY but this cannot be done easily in the
      middle-end.  With this patch the meaning of an ALL cc mode only refers
      to the not-inverted comparison code (e.g. eq, gt, ge).  With that
      change inverting the comparison code matches a not operation on the
      condition code mask again.
      
      Bootstrapped and regression tested on s390 and s390x.
      
      Bye,
      
      -Andreas-
      
      gcc/testsuite/ChangeLog:
      
      2016-12-02  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
      
      	* gcc.target/s390/vector/vec-scalar-cmp-1.c: Fix and harden the
      	pattern checks.
      	* gcc.target/s390/zvector/vec-cmp-1.c: New test.
      
      gcc/ChangeLog:
      
      2016-12-02  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
      
      	* config/s390/s390-modes.def (CCVEQANY, CCVH, CCVHANY, CCVHU)
      	(CCVHUANY): Remove modes.
      	(CCVIH, CCVIHU, CCVIALL, CCVIANY, CCVFALL, CCVFANY): Add modes and
      	documentation.
      	* config/s390/s390.c (s390_match_ccmode_set): Rename cc modes.
      	(s390_expand_vec_compare_scalar): Pick one of the cc consumer
      	modes.
      	(s390_branch_condition_mask): Adjust to use the new cc consumer
      	modes.  The new modes allow for proper reversal in the middle-end.
      	(s390_expand_vec_compare_cc): Determine the proper cc producer and
      	consumer modes for a comparison.
      	* config/s390/s390.md: Rename CCVH to CCVIH and CCVHU to CCVIHU
      	throughout the file.
      	* config/s390/vx-builtins.md: Likewise.
      
      From-SVN: r243154
      Andreas Krebbel committed
    • Add support for ASan odr_indicator. · 84b0769e
      config/
      
              * bootstrap-asan.mk: Replace LSAN_OPTIONS=detect_leaks=0 with
              ASAN_OPTIONS=detect_leaks=0:use_odr_indicator=1.
      
      gcc/
      
              * asan.c (asan_global_struct): Refactor.
              (create_odr_indicator): New function.
              (asan_needs_odr_indicator_p): Likewise.
              (is_odr_indicator): Likewise.
              (asan_add_global): Introduce odr_indicator_ptr. Pass it into global's
              constructor.
              (asan_protect_global): Do not protect odr indicators.
      
      gcc/c-family/
      
      	* c-attribs.c (asan odr indicator): New attribute.
      	(handle_asan_odr_indicator_attribute): New function.
      
      gcc/testsuite/
      
              * c-c++-common/asan/no-redundant-odr-indicators-1.c: New test.
      
      From-SVN: r243153
      Maxim Ostapenko committed
    • * tree-ssa-threadedge.c · b06496b1
      	(record_temporary_equivalences_from_stmts_at_dest): Avoid temporary
      	propagation of operands if there are no operands.
      
      From-SVN: r243152
      Jeff Law committed
    • Daily bump. · f3adbf9e
      From-SVN: r243150
      GCC Administrator committed
  2. 01 Dec, 2016 27 commits