From: Richard Sandiford Date: Tue, 19 Nov 2019 16:31:17 +0000 (+0000) Subject: Revert r278441 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=aa5355781fd8746cb2ac8f0e456f8ac6dc4bf9c5;p=gcc.git Revert r278441 To restore powerpc bootstrap. 2019-11-19 Richard Sandiford gcc/ Revert: 2019-11-18 Richard Sandiford * cse.c (cse_insn): Delete no-op register moves too. * simplify-rtx.c (comparison_to_mask): Handle unsigned comparisons. Take a second comparison to control the value for NE. (mask_to_comparison): Handle unsigned comparisons. (simplify_logical_relational_operation): Likewise. Update call to comparison_to_mask. Handle AND if !HONOR_NANs. (simplify_binary_operation_1): Call the above for AND too. gcc/testsuite/ Revert: 2019-11-18 Richard Sandiford * gcc.target/aarch64/sve/acle/asm/ptest_pmore.c: New test. From-SVN: r278455 --- diff --git a/ChangeLog b/ChangeLog index 664c018b13c..348306f289e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2019-11-19 Richard Sandiford +gcc/ + Revert: + 2019-11-18 Richard Sandiford + + * cse.c (cse_insn): Delete no-op register moves too. + * simplify-rtx.c (comparison_to_mask): Handle unsigned comparisons. + Take a second comparison to control the value for NE. + (mask_to_comparison): Handle unsigned comparisons. + (simplify_logical_relational_operation): Likewise. Update call + to comparison_to_mask. Handle AND if !HONOR_NANs. + (simplify_binary_operation_1): Call the above for AND too. + 2019-11-15 Kelvin Nilsen * MAINTAINERS: Change my email address as maintainer. diff --git a/gcc/cse.c b/gcc/cse.c index 0ab79b91654..ab9b8b43431 100644 --- a/gcc/cse.c +++ b/gcc/cse.c @@ -4625,7 +4625,7 @@ cse_insn (rtx_insn *insn) for (i = 0; i < n_sets; i++) { bool repeat = false; - bool noop_insn = false; + bool mem_noop_insn = false; rtx src, dest; rtx src_folded; struct table_elt *elt = 0, *p; @@ -5324,17 +5324,17 @@ cse_insn (rtx_insn *insn) } /* Similarly, lots of targets don't allow no-op - (set (mem x) (mem x)) moves. Even (set (reg x) (reg x)) - might be impossible for certain registers (like CC registers). */ + (set (mem x) (mem x)) moves. */ else if (n_sets == 1 - && (MEM_P (trial) || REG_P (trial)) + && MEM_P (trial) + && MEM_P (dest) && rtx_equal_p (trial, dest) && !side_effects_p (dest) && (cfun->can_delete_dead_exceptions || insn_nothrow_p (insn))) { SET_SRC (sets[i].rtl) = trial; - noop_insn = true; + mem_noop_insn = true; break; } @@ -5562,8 +5562,8 @@ cse_insn (rtx_insn *insn) sets[i].rtl = 0; } - /* Similarly for no-op moves. */ - else if (noop_insn) + /* Similarly for no-op MEM moves. */ + else if (mem_noop_insn) { if (cfun->can_throw_non_call_exceptions && can_throw_internal (insn)) cse_cfg_altered = true; diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c index f16516ede72..b2ba9222ce3 100644 --- a/gcc/simplify-rtx.c +++ b/gcc/simplify-rtx.c @@ -2125,17 +2125,12 @@ simplify_associative_operation (enum rtx_code code, machine_mode mode, return 0; } -/* Return a mask describing the COMPARISON. Treat NE as unsigned - if OTHER_COMPARISON is. */ +/* Return a mask describing the COMPARISON. */ static int -comparison_to_mask (rtx_code comparison, rtx_code other_comparison) +comparison_to_mask (enum rtx_code comparison) { switch (comparison) { - case LTU: - return 32; - case GTU: - return 16; case LT: return 8; case GT: @@ -2145,10 +2140,6 @@ comparison_to_mask (rtx_code comparison, rtx_code other_comparison) case UNORDERED: return 1; - case LEU: - return 34; - case GEU: - return 18; case LTGT: return 12; case LE: @@ -2165,10 +2156,7 @@ comparison_to_mask (rtx_code comparison, rtx_code other_comparison) case ORDERED: return 14; case NE: - return (other_comparison == LTU - || other_comparison == LEU - || other_comparison == GTU - || other_comparison == GEU ? 48 : 13); + return 13; case UNLE: return 11; case UNGE: @@ -2185,10 +2173,6 @@ mask_to_comparison (int mask) { switch (mask) { - case 32: - return LTU; - case 16: - return GTU; case 8: return LT; case 4: @@ -2198,10 +2182,6 @@ mask_to_comparison (int mask) case 1: return UNORDERED; - case 34: - return LEU; - case 18: - return GEU; case 12: return LTGT; case 10: @@ -2217,7 +2197,6 @@ mask_to_comparison (int mask) case 14: return ORDERED; - case 48: case 13: return NE; case 11: @@ -2237,9 +2216,8 @@ rtx simplify_logical_relational_operation (enum rtx_code code, machine_mode mode, rtx op0, rtx op1) { - /* We only handle AND if we can ignore unordered cases. */ - bool honor_nans_p = HONOR_NANS (GET_MODE (op0)); - if (code != IOR && (code != AND || honor_nans_p)) + /* We only handle IOR of two relational operations. */ + if (code != IOR) return 0; if (!(COMPARISON_P (op0) && COMPARISON_P (op1))) @@ -2252,20 +2230,18 @@ simplify_logical_relational_operation (enum rtx_code code, machine_mode mode, enum rtx_code code0 = GET_CODE (op0); enum rtx_code code1 = GET_CODE (op1); - int mask0 = comparison_to_mask (code0, code1); - int mask1 = comparison_to_mask (code1, code0); - - /* Reject combinations of signed and unsigned comparisons, - with ORDERED being signed. */ - if (((mask0 & 13) && (mask1 & 48)) || ((mask1 & 13) && (mask0 & 48))) - return NULL_RTX; + /* We don't handle unsigned comparisons currently. */ + if (code0 == LTU || code0 == GTU || code0 == LEU || code0 == GEU) + return 0; + if (code1 == LTU || code1 == GTU || code1 == LEU || code1 == GEU) + return 0; - int mask = (code == IOR ? mask0 | mask1 : mask0 & mask1); + int mask0 = comparison_to_mask (code0); + int mask1 = comparison_to_mask (code1); - if (mask == 0) - return const0_rtx; + int mask = mask0 | mask1; - if (mask == 50 || mask == 15) + if (mask == 15) return const_true_rtx; code = mask_to_comparison (mask); @@ -3472,10 +3448,6 @@ simplify_binary_operation_1 (enum rtx_code code, machine_mode mode, return tem; tem = simplify_associative_operation (code, mode, op0, op1); - if (tem) - return tem; - - tem = simplify_logical_relational_operation (code, mode, op0, op1); if (tem) return tem; break; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 13ce849eff2..32d62238100 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,13 @@ +2019-11-19 Richard Sandiford +gcc/ + Revert: + 2019-11-18 Richard Sandiford + + Revert: + 2019-11-18 Richard Sandiford + + * gcc.target/aarch64/sve/acle/asm/ptest_pmore.c: New test. + 2019-11-15 Andrew Sutton PR c++/89913 diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/ptest_pmore.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/ptest_pmore.c deleted file mode 100644 index bdae9b8c5b5..00000000000 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/ptest_pmore.c +++ /dev/null @@ -1,77 +0,0 @@ -/* { dg-additional-options "-msve-vector-bits=scalable" } */ -/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */ - -#include "test_sve_acle.h" -#include - -/* -** test_bool_pmore: -** ptest p0, p1\.b -** cset [wx]0, pmore -** ret -*/ -TEST_PTEST (test_bool_pmore, bool, - x0 = svptest_any (p0, p1) & !svptest_last (p0, p1)); - -/* -** test_bool_plast: -** ptest p0, p1\.b -** cset [wx]0, plast -** ret -*/ -TEST_PTEST (test_bool_plast, bool, - x0 = !svptest_any (p0, p1) | svptest_last (p0, p1)); - -/* -** test_int_pmore: -** ptest p0, p1\.b -** cset [wx]0, pmore -** ret -*/ -TEST_PTEST (test_int_pmore, int, - x0 = svptest_any (p0, p1) & !svptest_last (p0, p1)); - -/* -** test_int_plast: -** ptest p0, p1\.b -** cset [wx]0, plast -** ret -*/ -TEST_PTEST (test_int_plast, int, - x0 = !svptest_any (p0, p1) | svptest_last (p0, p1)); - -/* -** test_int64_t_pmore: -** ptest p0, p1\.b -** cset [wx]0, pmore -** ret -*/ -TEST_PTEST (test_int64_t_pmore, int64_t, - x0 = svptest_any (p0, p1) & !svptest_last (p0, p1)); - -/* -** test_int64_t_plast: -** ptest p0, p1\.b -** cset [wx]0, plast -** ret -*/ -TEST_PTEST (test_int64_t_plast, int64_t, - x0 = !svptest_any (p0, p1) | svptest_last (p0, p1)); - -/* -** sel_pmore: -** ptest p0, p1\.b -** csel x0, (x0, x1, pmore|x1, x0, plast) -** ret -*/ -TEST_PTEST (sel_pmore, int64_t, - x0 = svptest_any (p0, p1) & !svptest_last (p0, p1) ? x0 : x1); - -/* -** sel_plast: -** ptest p0, p1\.b -** csel x0, (x0, x1, plast|x1, x0, pmore) -** ret -*/ -TEST_PTEST (sel_plast, int64_t, - x0 = !svptest_any (p0, p1) | svptest_last (p0, p1) ? x0 : x1);