[PATCH] D26991: Hoist redundant load
Aditya Kumar via cfe-commits
cfe-commits at lists.llvm.org
Tue Nov 22 13:38:33 PST 2016
hiraditya created this revision.
hiraditya added reviewers: EricWF, mclow.lists.
hiraditya added a subscriber: cfe-commits.
Worked with Sebastian Pop
https://reviews.llvm.org/D26991
Files:
libcxx/include/algorithm
Index: libcxx/include/algorithm
===================================================================
--- libcxx/include/algorithm
+++ libcxx/include/algorithm
@@ -1494,42 +1494,46 @@
if (__len1 < __len2)
return make_pair(__last1, __last1);
const _RandomAccessIterator1 __s = __last1 - (__len2 - 1); // Start of pattern match can't go beyond here
+
+ // Load the first element from __first2 outside the loop because it is loop invariant
+ typename iterator_traits<_RandomAccessIterator1>::value_type __firstElement2 = *__first2;
+
while (true)
{
#if !_LIBCPP_UNROLL_LOOPS
while (true)
{
if (__first1 == __s)
return make_pair(__last1, __last1);
- if (__pred(*__first1, *__first2))
+ if (__pred(*__first1, __firstElement2))
break;
++__first1;
}
#else // !_LIBCPP_UNROLL_LOOPS
for (_D1 __loop_unroll = (__s - __first1) / 4; __loop_unroll > 0; --__loop_unroll)
{
- if (__pred(*__first1, *__first2))
+ if (__pred(*__first1, __firstElement2))
goto __phase2;
- if (__pred(*++__first1, *__first2))
+ if (__pred(*++__first1, __firstElement2))
goto __phase2;
- if (__pred(*++__first1, *__first2))
+ if (__pred(*++__first1, __firstElement2))
goto __phase2;
- if (__pred(*++__first1, *__first2))
+ if (__pred(*++__first1, __firstElement2))
goto __phase2;
++__first1;
}
switch (__s - __first1)
{
case 3:
- if (__pred(*__first1, *__first2))
+ if (__pred(*__first1, __firstElement2))
break;
++__first1;
case 2:
- if (__pred(*__first1, *__first2))
+ if (__pred(*__first1, __firstElement2))
break;
++__first1;
case 1:
- if (__pred(*__first1, *__first2))
+ if (__pred(*__first1, __firstElement2))
break;
case 0:
return make_pair(__last1, __last1);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D26991.78935.patch
Type: text/x-patch
Size: 2182 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20161122/743d04a4/attachment.bin>
More information about the cfe-commits
mailing list