Commit 191df4d
committed
[CGP][CodeGenPrepare] Folding
This extends the existing fold:
```
for(i = Start; i < End; ++i)
Rem = (i nuw+- IncrLoopInvariant) u% RemAmtLoopInvariant;
```
->
```
Rem = (Start nuw+- IncrLoopInvariant) % RemAmtLoopInvariant;
for(i = Start; i < End; ++i, ++rem)
Rem = rem == RemAmtLoopInvariant ? 0 : Rem;
```
To work with a non-zero `IncrLoopInvariant`.
This is a common usage in cases such as:
```
for(i = 0; i < N; ++i)
if ((i + 1) % X) == 0)
do_something_occasionally_but_not_first_iter();
```
Alive2 w/ i4/unrolled 6x (needs to be ran locally due to timeout):
https://alive2.llvm.org/ce/z/6tgyN3
Exhaust proof over all uint8_t combinations in C++:
https://godbolt.org/z/WYa561388urem with loop invariant value plus offset1 parent ae15931 commit 191df4d
File tree
2 files changed
+87
-14
lines changed- llvm
- lib/CodeGen
- test/Transforms/CodeGenPrepare/X86
2 files changed
+87
-14
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1976 | 1976 | | |
1977 | 1977 | | |
1978 | 1978 | | |
1979 | | - | |
1980 | | - | |
1981 | | - | |
1982 | | - | |
| 1979 | + | |
| 1980 | + | |
| 1981 | + | |
| 1982 | + | |
1983 | 1983 | | |
1984 | 1984 | | |
1985 | 1985 | | |
1986 | 1986 | | |
1987 | 1987 | | |
| 1988 | + | |
| 1989 | + | |
1988 | 1990 | | |
1989 | 1991 | | |
| 1992 | + | |
| 1993 | + | |
| 1994 | + | |
| 1995 | + | |
| 1996 | + | |
| 1997 | + | |
| 1998 | + | |
| 1999 | + | |
| 2000 | + | |
| 2001 | + | |
| 2002 | + | |
| 2003 | + | |
| 2004 | + | |
| 2005 | + | |
| 2006 | + | |
| 2007 | + | |
| 2008 | + | |
| 2009 | + | |
| 2010 | + | |
| 2011 | + | |
| 2012 | + | |
| 2013 | + | |
| 2014 | + | |
| 2015 | + | |
1990 | 2016 | | |
1991 | 2017 | | |
1992 | 2018 | | |
| |||
2026 | 2052 | | |
2027 | 2053 | | |
2028 | 2054 | | |
| 2055 | + | |
| 2056 | + | |
2029 | 2057 | | |
2030 | 2058 | | |
2031 | 2059 | | |
| |||
2040 | 2068 | | |
2041 | 2069 | | |
2042 | 2070 | | |
2043 | | - | |
2044 | | - | |
2045 | 2071 | | |
2046 | 2072 | | |
2047 | 2073 | | |
2048 | 2074 | | |
2049 | | - | |
| 2075 | + | |
| 2076 | + | |
2050 | 2077 | | |
2051 | | - | |
| 2078 | + | |
| 2079 | + | |
2052 | 2080 | | |
2053 | 2081 | | |
2054 | 2082 | | |
| |||
2066 | 2094 | | |
2067 | 2095 | | |
2068 | 2096 | | |
| 2097 | + | |
| 2098 | + | |
| 2099 | + | |
| 2100 | + | |
| 2101 | + | |
| 2102 | + | |
| 2103 | + | |
| 2104 | + | |
| 2105 | + | |
| 2106 | + | |
| 2107 | + | |
| 2108 | + | |
| 2109 | + | |
| 2110 | + | |
| 2111 | + | |
| 2112 | + | |
| 2113 | + | |
| 2114 | + | |
| 2115 | + | |
| 2116 | + | |
| 2117 | + | |
| 2118 | + | |
| 2119 | + | |
| 2120 | + | |
| 2121 | + | |
| 2122 | + | |
| 2123 | + | |
| 2124 | + | |
| 2125 | + | |
| 2126 | + | |
| 2127 | + | |
| 2128 | + | |
| 2129 | + | |
| 2130 | + | |
| 2131 | + | |
| 2132 | + | |
| 2133 | + | |
2069 | 2134 | | |
2070 | 2135 | | |
2071 | 2136 | | |
| |||
2096 | 2161 | | |
2097 | 2162 | | |
2098 | 2163 | | |
| 2164 | + | |
| 2165 | + | |
2099 | 2166 | | |
2100 | 2167 | | |
2101 | 2168 | | |
| |||
Lines changed: 12 additions & 6 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
892 | 892 | | |
893 | 893 | | |
894 | 894 | | |
| 895 | + | |
895 | 896 | | |
896 | | - | |
897 | | - | |
898 | 897 | | |
| 898 | + | |
| 899 | + | |
| 900 | + | |
899 | 901 | | |
900 | 902 | | |
901 | 903 | | |
| |||
930 | 932 | | |
931 | 933 | | |
932 | 934 | | |
| 935 | + | |
933 | 936 | | |
934 | | - | |
935 | | - | |
936 | 937 | | |
| 938 | + | |
| 939 | + | |
| 940 | + | |
937 | 941 | | |
938 | 942 | | |
939 | 943 | | |
| |||
1041 | 1045 | | |
1042 | 1046 | | |
1043 | 1047 | | |
| 1048 | + | |
1044 | 1049 | | |
1045 | | - | |
1046 | | - | |
1047 | 1050 | | |
| 1051 | + | |
| 1052 | + | |
| 1053 | + | |
1048 | 1054 | | |
1049 | 1055 | | |
1050 | 1056 | | |
| |||
0 commit comments