1; GVN failed to do constant expression folding and expanded 2; them unfolded in many places, producing exponentially large const 3; expressions. As a result, the compilation never fisished. 4; This test checks that we are folding constant expression 5; PR 28418 6; RUN: opt -gvn -S < %s | FileCheck %s 7 8%2 = type { i32, i32, i32, i32, i32 } 9define i32 @_Z16vector3util_mainv(i32 %x, i32 %y) { 10 %tmp1 = alloca %2, align 4 11 %tmp114 = getelementptr inbounds %2, %2* %tmp1, i64 0, i32 1 12 %tmp115 = bitcast i32* %tmp114 to <4 x i32>* 13 store <4 x i32> <i32 234567891, i32 345678912, i32 456789123, i32 0>, <4 x i32>* %tmp115, align 4 14 %tmp1683 = getelementptr inbounds %2, %2* %tmp1, i64 0, i32 1 15 %tmp1688 = load i32, i32* %tmp1683, align 4 16 %tmp1693 = shl i32 %tmp1688, 5 17 %tmp1694 = xor i32 %tmp1693, %tmp1688 18 %tmp1695 = lshr i32 %tmp1694, 7 19 %tmp1696 = xor i32 %tmp1695, %tmp1694 20 %tmp1697 = shl i32 %tmp1696, 22 21 %tmp1698 = xor i32 %tmp1697, %tmp1696 22 %tmp1707 = shl i32 %tmp1698, 5 23 %tmp1708 = xor i32 %tmp1707, %tmp1698 24 %tmp1709 = lshr i32 %tmp1708, 7 25 %tmp1710 = xor i32 %tmp1709, %tmp1708 26 %tmp1711 = shl i32 %tmp1710, 22 27 %tmp1712 = xor i32 %tmp1711, %tmp1710 28 %tmp1721 = shl i32 %tmp1712, 5 29 %tmp1722 = xor i32 %tmp1721, %tmp1712 30 %tmp1723 = lshr i32 %tmp1722, 7 31 %tmp1724 = xor i32 %tmp1723, %tmp1722 32 %tmp1725 = shl i32 %tmp1724, 22 33 %tmp1726 = xor i32 %tmp1725, %tmp1724 34 %tmp1735 = shl i32 %tmp1726, 5 35 %tmp1736 = xor i32 %tmp1735, %tmp1726 36 %tmp1737 = lshr i32 %tmp1736, 7 37 %tmp1738 = xor i32 %tmp1737, %tmp1736 38 %tmp1739 = shl i32 %tmp1738, 22 39 %tmp1740 = xor i32 %tmp1739, %tmp1738 40 store i32 %tmp1740, i32* %tmp1683, align 4 41; CHECK: store i32 310393545, i32* %tmp114, align 4 42 %tmp1756 = getelementptr inbounds %2, %2* %tmp1, i64 0, i32 1 43 %tmp1761 = load i32, i32* %tmp1756, align 4 44 %tmp1766 = shl i32 %tmp1761, 5 45 %tmp1767 = xor i32 %tmp1766, %tmp1761 46 %tmp1768 = lshr i32 %tmp1767, 7 47 %tmp1769 = xor i32 %tmp1768, %tmp1767 48 %tmp1770 = shl i32 %tmp1769, 22 49 %tmp1771 = xor i32 %tmp1770, %tmp1769 50 %tmp1780 = shl i32 %tmp1771, 5 51 %tmp1781 = xor i32 %tmp1780, %tmp1771 52 %tmp1782 = lshr i32 %tmp1781, 7 53 %tmp1783 = xor i32 %tmp1782, %tmp1781 54 %tmp1784 = shl i32 %tmp1783, 22 55 %tmp1785 = xor i32 %tmp1784, %tmp1783 56 %tmp1794 = shl i32 %tmp1785, 5 57 %tmp1795 = xor i32 %tmp1794, %tmp1785 58 %tmp1796 = lshr i32 %tmp1795, 7 59 %tmp1797 = xor i32 %tmp1796, %tmp1795 60 %tmp1798 = shl i32 %tmp1797, 22 61 %tmp1799 = xor i32 %tmp1798, %tmp1797 62 %tmp1808 = shl i32 %tmp1799, 5 63 %tmp1809 = xor i32 %tmp1808, %tmp1799 64 %tmp1810 = lshr i32 %tmp1809, 7 65 %tmp1811 = xor i32 %tmp1810, %tmp1809 66 %tmp1812 = shl i32 %tmp1811, 22 67 %tmp1813 = xor i32 %tmp1812, %tmp1811 68 store i32 %tmp1813, i32* %tmp1756, align 4 69; CHECK: store i32 -383584258, i32* %tmp114, align 4 70 %tmp2645 = getelementptr inbounds %2, %2* %tmp1, i64 0, i32 1 71 %tmp2650 = load i32, i32* %tmp2645, align 4 72 %tmp2655 = shl i32 %tmp2650, 5 73 %tmp2656 = xor i32 %tmp2655, %tmp2650 74 %tmp2657 = lshr i32 %tmp2656, 7 75 %tmp2658 = xor i32 %tmp2657, %tmp2656 76 %tmp2659 = shl i32 %tmp2658, 22 77 %tmp2660 = xor i32 %tmp2659, %tmp2658 78 %tmp2669 = shl i32 %tmp2660, 5 79 %tmp2670 = xor i32 %tmp2669, %tmp2660 80 %tmp2671 = lshr i32 %tmp2670, 7 81 %tmp2672 = xor i32 %tmp2671, %tmp2670 82 %tmp2673 = shl i32 %tmp2672, 22 83 %tmp2674 = xor i32 %tmp2673, %tmp2672 84 %tmp2683 = shl i32 %tmp2674, 5 85 %tmp2684 = xor i32 %tmp2683, %tmp2674 86 %tmp2685 = lshr i32 %tmp2684, 7 87 %tmp2686 = xor i32 %tmp2685, %tmp2684 88 %tmp2687 = shl i32 %tmp2686, 22 89 %tmp2688 = xor i32 %tmp2687, %tmp2686 90 %tmp2697 = shl i32 %tmp2688, 5 91 %tmp2698 = xor i32 %tmp2697, %tmp2688 92 %tmp2699 = lshr i32 %tmp2698, 7 93 %tmp2700 = xor i32 %tmp2699, %tmp2698 94 %tmp2701 = shl i32 %tmp2700, 22 95 %tmp2702 = xor i32 %tmp2701, %tmp2700 96 store i32 %tmp2702, i32* %tmp2645, align 4 97; CHECK: store i32 -57163022, i32* %tmp114, align 4 98 ret i32 0 99} 100