From a4c772e26dabdf8e2bf2d26d0d7f8e60d97f3f4e Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Tue, 3 Dec 2019 09:23:06 +0100 Subject: [PATCH] re PR target/92744 (error: insn does not satisfy its constraints since r278439) PR target/92744 * config/i386/i386.md (peephole2 for *swap): Use general_reg_operand predicates instead of register_operand. * g++.dg/dfp/pr92744.C: New test. From-SVN: r278924 --- gcc/ChangeLog | 7 +++++++ gcc/config/i386/i386.md | 6 +++--- gcc/testsuite/ChangeLog | 3 +++ gcc/testsuite/g++.dg/dfp/pr92744.C | 20 ++++++++++++++++++++ 4 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/g++.dg/dfp/pr92744.C diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e06244c..a89c435 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2019-12-03 Uroš Bizjak + Jakub Jelinek + + PR target/92744 + * config/i386/i386.md (peephole2 for *swap): Use + general_reg_operand predicates instead of register_operand. + 2019-12-03 Richard Biener PR tree-optimization/92645 diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 7ff5872..2d43992 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -2788,10 +2788,10 @@ (set_attr "bdver1_decode" "double")]) (define_peephole2 - [(set (match_operand:SWI 0 "register_operand") - (match_operand:SWI 1 "register_operand")) + [(set (match_operand:SWI 0 "general_reg_operand") + (match_operand:SWI 1 "general_reg_operand")) (set (match_dup 1) - (match_operand:SWI 2 "register_operand")) + (match_operand:SWI 2 "general_reg_operand")) (set (match_dup 2) (match_dup 0))] "peep2_reg_dead_p (3, operands[0]) && optimize_insn_for_size_p ()" diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9b0d0a3..2d8c350 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2019-12-03 Jakub Jelinek + PR target/92744 + * g++.dg/dfp/pr92744.C: New test. + PR c++/92732 * g++.dg/cpp2a/bitfield3.C: Don't expect narrowing conversion warnings. diff --git a/gcc/testsuite/g++.dg/dfp/pr92744.C b/gcc/testsuite/g++.dg/dfp/pr92744.C new file mode 100644 index 0000000..5026e8d --- /dev/null +++ b/gcc/testsuite/g++.dg/dfp/pr92744.C @@ -0,0 +1,20 @@ +// PR target/92744 +// { dg-do compile } +// { dg-options "-Os -fno-tree-ccp" } + +typedef float T __attribute__((mode(SD))); +struct A { T a; }; +void foo (); + +bool +operator!= (A x, A y) +{ + return x.a != y.a; +} + +void +bar (A x, A y) +{ + if (x != y) + foo (); +} -- 2.7.4