aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorUros Bizjak <uros@gcc.gnu.org>2017-07-04 22:52:32 +0200
committerUros Bizjak <uros@gcc.gnu.org>2017-07-04 22:52:32 +0200
commit45bb7d590759d210669bcf33487143e266f2112b (patch)
tree983a94bcdbbc0cffaf210bdc722b4963586bdf82 /gcc
parent1fcfac88dec24a5ae005a82b1aa85e0e4291a81e (diff)
downloadgcc-45bb7d590759d210669bcf33487143e266f2112b.zip
gcc-45bb7d590759d210669bcf33487143e266f2112b.tar.gz
gcc-45bb7d590759d210669bcf33487143e266f2112b.tar.bz2
re PR target/81300 (-fpeephole2 breaks __builtin_ia32_sbb_u64, _subborrow_u64 on AMD64)
2017-07-04 Uros Bizjak <ubizjak@gmail.com> PR target/81300 * config/i386/i386.md (setcc + movzbl/and to xor + setcc peepholes): Require dead FLAGS_REG at the beginning of a peephole. testsuite/ChangeLog: PR target/81300 * gcc.target/i386/pr81300.c: New test. From-SVN: r249977
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog99
-rw-r--r--gcc/config/i386/i386.md12
-rw-r--r--gcc/testsuite/ChangeLog10
-rw-r--r--gcc/testsuite/gcc.target/i386/pr81300.c30
4 files changed, 98 insertions, 53 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e09edc9..1f0b0b4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
2017-07-04 Uros Bizjak <ubizjak@gmail.com>
+ PR target/81300
+ * config/i386/i386.md (setcc + movzbl/and to xor + setcc peepholes):
+ Require dead FLAGS_REG at the beginning of a peephole.
+
+2017-07-04 Uros Bizjak <ubizjak@gmail.com>
+
PR target/81294
* config/i386/adxintrin.h (_subborrow_u32): Swap _X and _Y
arguments in the call to __builtin_ia32_sbb_u32.
@@ -258,7 +264,7 @@
2017-07-02 Jan Hubicka <hubicka@ucw.cz>
* tree-cfgcleanup.c (want_merge_blocks_p): New function.
- (cleanup_tree_cfg_bb): Use it.
+ (cleanup_tree_cfg_bb): Use it.
* profile-count.h (profile_count::of_for_merging, profile_count::merge):
New functions.
* tree-cfg.c (gimple_merge_blocks): Use profile_count::merge.
@@ -350,8 +356,8 @@
2017-07-02 Jan Hubicka <hubicka@ucw.cz>
* dumpfile.c: Include profile-count.h
- * tree-cfg.c (gimple_duplicate_sese_tail): Drop UNUSED attributes; update
- profile.
+ * tree-cfg.c (gimple_duplicate_sese_tail): Drop UNUSED attributes;
+ update profile.
(insert_cond_bb): Update profile.
* tree-cfg.h (insert_cond_bb): Update prototype.
* tree-chkp-opt.c (chkp_optimize_string_function_calls): Update.
@@ -481,7 +487,7 @@
2017-07-01 Andi Kleen <ak@linux.intel.com>
- * print-tree.c (print_node): Print all attributes.
+ * print-tree.c (print_node): Print all attributes.
2017-07-01 Jan Hubicka <hubicka@ucw.cz>
@@ -678,7 +684,7 @@
* config/i386/i386.c (ix86_macro_fusion_pair_p): Push the check for
CC usage from generic code to here.
* sched-deps.c (sched_macro_fuse_insns): Move the condition for
- CC usage into the target macros.
+ CC usage into the target macros.
2017-06-29 Maya Rashish <coypu@sdf.org>
@@ -693,16 +699,16 @@
2017-06-29 Aaron Sawdey <acsawdey@linux.vnet.ibm.com>
- * config/rs6000/rs6000.c (toc_relative_expr_p): Make tocrel_base
- and tocrel_offset be pointer args rather than implicitly using
- static versions.
- (legitimate_constant_pool_address_p, rs6000_emit_move,
- const_load_sequence_p, adjust_vperm): Add local tocrel_base and
- tocrel_offset and use in toc_relative_expr_p call.
- (print_operand, print_operand_address): Use static tocrel_base_oac
- and tocrel_offset_oac.
- (rs6000_output_addr_const_extra): Use static tocrel_base_oac and
- tocrel_offset_oac.
+ * config/rs6000/rs6000.c (toc_relative_expr_p): Make tocrel_base
+ and tocrel_offset be pointer args rather than implicitly using
+ static versions.
+ (legitimate_constant_pool_address_p, rs6000_emit_move,
+ const_load_sequence_p, adjust_vperm): Add local tocrel_base and
+ tocrel_offset and use in toc_relative_expr_p call.
+ (print_operand, print_operand_address): Use static tocrel_base_oac
+ and tocrel_offset_oac.
+ (rs6000_output_addr_const_extra): Use static tocrel_base_oac and
+ tocrel_offset_oac.
2017-06-29 Maya Rashish <coypu@sdf.org>
@@ -1038,12 +1044,12 @@
2017-06-29 Yury Gribov <tetra2005@gmail.com>
PR bootstrap/80565
- * ipa-cp.c (allocate_and_init_ipcp_value): Add initialization
+ * ipa-cp.c (allocate_and_init_ipcp_value): Add initialization
code.
- * ipa-inline.h
+ * ipa-inline.h
(edge_growth_cache_entry::edge_growth_cache_entry): New
function.
- (reset_edge_growth_cache): Update to use constructor.
+ (reset_edge_growth_cache): Update to use constructor.
2017-06-28 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
@@ -1238,7 +1244,7 @@
(ASM_OUTPUT_ALIGNED_BSS): Add #undef before #define.
2017-06-27 Jerome Lambourg <lambourg@adacore.com>
- Olivier Hainque <hainque@adacore.com>
+ Olivier Hainque <hainque@adacore.com>
* config/i386/vxworks.h (DBX_REGISTER_NUMBER): Pick distinct
map for 64bits.
@@ -1283,7 +1289,7 @@
* tree.c (builtin_structptr_types): Add four entries.
2017-06-27 Jerome Lambourg <lambourg@adacore.com>
- Olivier Hainque <hainque@adacore.com>
+ Olivier Hainque <hainque@adacore.com>
* config/vxworks.h (VXWORKS_LIB_SPEC): Incorporate ...
(TLS_SYM): New local macro, forcing reference to __tls__ on
@@ -1329,7 +1335,7 @@
condition.
2017-06-26 Jerome Lambourg <lambourg@adacore.com>
- Olivier Hainque <hainque@adacore.com>
+ Olivier Hainque <hainque@adacore.com>
* config.gcc (*-*-vxworks*): Add TARGET_VXWORKS7=1 to tm_defines
for all vxworks7 targets.
@@ -1694,7 +1700,7 @@
attribute type list for neon_multiply.
* config/arm/types.md (crypto_pmull): Add.
* config/arm/xgene1.md (xgene1_neon_pmull): Add crypto_pmull to
- attribute type list.
+ attribute type list.
2017-06-20 Andreas Tobler <andreast@gcc.gnu.org>
@@ -1950,9 +1956,9 @@
2017-06-16 Richard Earnshaw <rearnsha@arm.com>
* config/arm/t-linux-eabi (MULTILIB_EXCEPTIONS): Set to empty.
- (MULTILIB_RESUE): Likewise.
- (MULTILIB_MATCHES): Likewise.
- (MULTLIB_REQUIRED): Likewise.
+ (MULTILIB_RESUE): Likewise.
+ (MULTILIB_MATCHES): Likewise.
+ (MULTLIB_REQUIRED): Likewise.
2017-06-16 Richard Earnshaw <rearnsha@arm.com>
@@ -2325,28 +2331,28 @@
2017-06-16 Maxim Kuvyrkov <maxim.kuvyrkov@linaro.org>
- * config/aarch64/aarch64.c (qdf24xx_prefetch_tune): Update
- prefetch settings, and enable prefetching by default at -O3.
+ * config/aarch64/aarch64.c (qdf24xx_prefetch_tune): Update
+ prefetch settings, and enable prefetching by default at -O3.
2017-06-16 Maxim Kuvyrkov <maxim.kuvyrkov@linaro.org>
- * config/aarch64/aarch64.c (aarch64_override_options_internal):
- Set flag_prefetch_loop_arrays according to tuning data.
+ * config/aarch64/aarch64.c (aarch64_override_options_internal):
+ Set flag_prefetch_loop_arrays according to tuning data.
2017-06-16 Maxim Kuvyrkov <maxim.kuvyrkov@linaro.org>
- * config/aarch64/aarch64-protos.h (struct cpu_prefetch_tune):
- New tune structure.
- (struct tune_params): Use cpu_prefetch_tune instead of cache_line_size.
- [Unrelated to main purpose of the patch] Place the pointer field last
- to enable type checking errors when tune structure are wrongly merged.
- * config/aarch64/aarch64.c (generic_prefetch_tune,)
- (exynosm1_prefetch_tune, qdf24xx_prefetch_tune,)
- (thunderx2t99_prefetch_tune): New tune constants.
- (tune_params *_tunings): Update all tunings (no functional change).
- (aarch64_override_options_internal): Set PARAM_SIMULTANEOUS_PREFETCHES,
- PARAM_L1_CACHE_SIZE, PARAM_L1_CACHE_LINE_SIZE, and PARAM_L2_CACHE_SIZE
- from tunings structures.
+ * config/aarch64/aarch64-protos.h (struct cpu_prefetch_tune):
+ New tune structure.
+ (struct tune_params): Use cpu_prefetch_tune instead of cache_line_size.
+ [Unrelated to main purpose of the patch] Place the pointer field last
+ to enable type checking errors when tune structure are wrongly merged.
+ * config/aarch64/aarch64.c (generic_prefetch_tune,)
+ (exynosm1_prefetch_tune, qdf24xx_prefetch_tune,)
+ (thunderx2t99_prefetch_tune): New tune constants.
+ (tune_params *_tunings): Update all tunings (no functional change).
+ (aarch64_override_options_internal): Set PARAM_SIMULTANEOUS_PREFETCHES,
+ PARAM_L1_CACHE_SIZE, PARAM_L1_CACHE_LINE_SIZE, and PARAM_L2_CACHE_SIZE
+ from tunings structures.
2017-06-16 Jakub Jelinek <jakub@redhat.com>
@@ -2478,7 +2484,7 @@
PR target/71663
* config/aarch64/aarch64.c (aarch64_expand_vector_init):
- Improve vector initialization code gen for only variable case.
+ Improve vector initialization code gen for only variable case.
2017-06-14 Eric Botcazou <ebotcazou@adacore.com>
@@ -3322,7 +3328,7 @@
PR sanitizer/80932
* fold-const.c (extract_muldiv_1) <case MINUS_EXPR>: Add
- TYPE_OVERFLOW_WRAPS check.
+ TYPE_OVERFLOW_WRAPS check.
2017-06-07 Bin Cheng <bin.cheng@arm.com>
@@ -3365,12 +3371,13 @@
2017-06-07 Tamar Christina <tamar.christina@arm.com>
- * config/aarch64/aarch64.c (aarch64_rtx_costs): Make sdiv more expensive than udiv.
- Remove floating point cases from mod.
+ * config/aarch64/aarch64.c (aarch64_rtx_costs): Make sdiv more
+ expensive than udiv. Remove floating point cases from mod.
2017-06-07 Tamar Christina <tamar.christina@arm.com>
- * config/arm/aarch-cost-tables.h (cortexa53_extra_cost): Increase idiv cost.
+ * config/arm/aarch-cost-tables.h (cortexa53_extra_cost):
+ Increase idiv cost.
2017-06-07 Tamar Christina <tamar.christina@arm.com>
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 40a20d0..da0f7c2 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -11754,7 +11754,8 @@
(zero_extend (match_dup 1)))]
"(peep2_reg_dead_p (3, operands[1])
|| operands_match_p (operands[1], operands[3]))
- && ! reg_overlap_mentioned_p (operands[3], operands[0])"
+ && ! reg_overlap_mentioned_p (operands[3], operands[0])
+ && peep2_regno_dead_p (0, FLAGS_REG)"
[(set (match_dup 4) (match_dup 0))
(set (strict_low_part (match_dup 5))
(match_dup 2))]
@@ -11775,7 +11776,8 @@
"(peep2_reg_dead_p (3, operands[1])
|| operands_match_p (operands[1], operands[3]))
&& ! reg_overlap_mentioned_p (operands[3], operands[0])
- && ! reg_set_p (operands[3], operands[4])"
+ && ! reg_set_p (operands[3], operands[4])
+ && peep2_regno_dead_p (0, FLAGS_REG)"
[(parallel [(set (match_dup 5) (match_dup 0))
(match_dup 4)])
(set (strict_low_part (match_dup 6))
@@ -11797,7 +11799,8 @@
(and:SI (match_dup 3) (const_int 255)))
(clobber (reg:CC FLAGS_REG))])]
"REGNO (operands[1]) == REGNO (operands[3])
- && ! reg_overlap_mentioned_p (operands[3], operands[0])"
+ && ! reg_overlap_mentioned_p (operands[3], operands[0])
+ && peep2_regno_dead_p (0, FLAGS_REG)"
[(set (match_dup 4) (match_dup 0))
(set (strict_low_part (match_dup 5))
(match_dup 2))]
@@ -11819,7 +11822,8 @@
"(peep2_reg_dead_p (3, operands[1])
|| operands_match_p (operands[1], operands[3]))
&& ! reg_overlap_mentioned_p (operands[3], operands[0])
- && ! reg_set_p (operands[3], operands[4])"
+ && ! reg_set_p (operands[3], operands[4])
+ && peep2_regno_dead_p (0, FLAGS_REG)"
[(parallel [(set (match_dup 5) (match_dup 0))
(match_dup 4)])
(set (strict_low_part (match_dup 6))
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 18ec214..32af5a6 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2017-07-04 Uros Bizjak <ubizjak@gmail.com>
+ PR target/81300
+ * gcc.target/i386/pr81300.c: New test.
+
+2017-07-04 Uros Bizjak <ubizjak@gmail.com>
+
PR target/81294
* gcc.target/i386/adx-addcarryx32-2.c (adx_test): Swap
x and y arguments in the call to _subborrow_u32.
@@ -505,7 +510,7 @@
2017-06-24 Thomas Koenig <tkoenig@gcc.gnu.org>
- PR fortran/52473
+ PR fortran/52473
* gfortran.dg/cshift_2.f90: New test.
2017-06-23 Jim Wilson <jim.wilson@linaro.org>
@@ -536,8 +541,7 @@
2017-06-23 James Cowgill <James.Cowgill@imgtec.com>
- * go.test/go-test.exp (go-set-goarch): Update MIPS architecture
- names.
+ * go.test/go-test.exp (go-set-goarch): Update MIPS architecture names.
2017-06-22 Matt Turner <mattst88@gmail.com>
diff --git a/gcc/testsuite/gcc.target/i386/pr81300.c b/gcc/testsuite/gcc.target/i386/pr81300.c
new file mode 100644
index 0000000..11eb55f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr81300.c
@@ -0,0 +1,30 @@
+/* PR target/81300 */
+/* { dg-do run { target { ! ia32 } } } */
+/* { dg-options "-O2" } */
+
+int
+__attribute__((noinline, noclone))
+foo (void)
+{
+ unsigned long long _discard = 0, zero = 0, maxull = 0;
+ unsigned char zero1 = __builtin_ia32_addcarryx_u64 (0, 0, 0, &_discard);
+ unsigned char zero2 = __builtin_ia32_addcarryx_u64 (zero1, 0, 0, &zero);
+ __builtin_ia32_sbb_u64 (0x0, 2, -1, &_discard);
+ unsigned char one = __builtin_ia32_sbb_u64 (0, zero, 1, &maxull);
+ unsigned long long x = __builtin_ia32_sbb_u64 (one, zero2, 0, &_discard);
+
+ unsigned long long z1 = 0;
+ __asm__ ("mov{q}\t{%1, %0|%0, %1}" : "+r" (z1) : "r" (x));
+ unsigned long long z2 = 3;
+ __asm__ ("mov{q}\t{%1, %0|%0, %1}" : "+r" (z2) : "r" (x));
+
+ return 1 - (z1 | z2);
+}
+
+int main ()
+{
+ if (foo ())
+ __builtin_abort ();
+
+ return 0;
+}