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