https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91060
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- So the new FRE pass does things like - _746 = {_2, 1, 2, 3, 4, 5, 6, 7}; - _783 = BIT_FIELD_REF <_746, 16, 0>; - _1801 = _783 + 2; - _1800 = {_2, 1, 2, 3, 4, 5, 6, 7}; - _1788 = BIT_FIELD_REF <_1800, 16, 16>; - _1787 = _1788 + 2; - _1775 = {_2, 1, 2, 3, 4, 5, 6, 7}; - _1774 = BIT_FIELD_REF <_1775, 16, 32>; - _1762 = _1774 + 2; - _1761 = {_2, 1, 2, 3, 4, 5, 6, 7}; - _1749 = BIT_FIELD_REF <_1761, 16, 48>; - _1748 = _1749 + 2; - _1736 = {_2, 1, 2, 3, 4, 5, 6, 7}; - _1735 = BIT_FIELD_REF <_1736, 16, 64>; - _748 = _1735 + 2; - _784 = {_2, 1, 2, 3, 4, 5, 6, 7}; - _1710 = BIT_FIELD_REF <_784, 16, 80>; - _1709 = _1710 + 2; - _1697 = {_2, 1, 2, 3, 4, 5, 6, 7}; - _1696 = BIT_FIELD_REF <_1697, 16, 96>; - _1684 = _1696 + 2; - _1683 = {_2, 1, 2, 3, 4, 5, 6, 7}; - _1671 = BIT_FIELD_REF <_1683, 16, 112>; - _1670 = _1671 + 2; - _4 = {_1801, _1787, _1762, _1748, _748, _1709, _1684, _1670}; + _1801 = _2 + 2; + _4 = {_1801, 3, 4, 5, 6, 7, 8, 9}; thus it improves vector lowering generated code. Unfortunately the testcases / differences are too big and I'm not set up to do runtime testing for big-endian arm. Would it be possible to reduce the testcase to a single of the v1 = 2 + v0; check (short, 8, v0, v1, 2, +, l); v1 = 2 - v0; check (short, 8, v0, v1, 2, -, l); v1 = 2 * v0; check (short, 8, v0, v1, 2, *, l); v1 = 2 / v0; check (short, 8, v0, v1, 2, /, l); v1 = 2 % v0; check (short, 8, v0, v1, 2, %, l); ... lines?