Lines Matching full:release
8 declare void @llvm.objc.release(ptr)
31 ; Simple retain+release pair deletion, with some intervening control
36 ; CHECK: @llvm.objc.release
53 call void @llvm.objc.release(ptr %x) nounwind
75 call void @llvm.objc.release(ptr %x) nounwind, !clang.imprecise_release !0
79 ; Like test0 but the release isn't always executed when the retain is,
82 ; TODO: Make the llvm.objc.release's argument be %0.
86 ; CHECK: @llvm.objc.release(ptr %x)
104 call void @llvm.objc.release(ptr %x) nounwind
113 ; CHECK: @llvm.objc.release
131 call void @llvm.objc.release(ptr %x) nounwind, !clang.imprecise_release !0
146 ; CHECK: tail call void @llvm.objc.release(ptr %x) [[NUW]]
166 tail call void @llvm.objc.release(ptr %x) nounwind
175 ; CHECK: tail call void @llvm.objc.release(ptr %x) [[NUW]], !clang.imprecise_release ![[RELEASE:[0-9]+]]
195 tail call void @llvm.objc.release(ptr %x) nounwind, !clang.imprecise_release !0
205 ; CHECK: @llvm.objc.release
224 call void @llvm.objc.release(ptr %x) nounwind
230 ; CHECK: @llvm.objc.release
249 call void @llvm.objc.release(ptr %x) nounwind, !clang.imprecise_release !0
253 ; Like test0 but the release is in a loop,
260 ; TODO: @llvm.objc.release
268 call void @llvm.objc.release(ptr %x) nounwind
278 ; TODO: @llvm.objc.release
286 call void @llvm.objc.release(ptr %x) nounwind, !clang.imprecise_release !0
302 ; TODO: @llvm.objc.release
314 call void @llvm.objc.release(ptr %x) nounwind
320 ; TODO: @llvm.objc.release
332 call void @llvm.objc.release(ptr %x) nounwind, !clang.imprecise_release !0
342 ; CHECK: @llvm.objc.release
350 call void @llvm.objc.release(ptr %x) nounwind
356 ; CHECK: @llvm.objc.release
364 call void @llvm.objc.release(ptr %x) nounwind, !clang.imprecise_release !0
369 ; retain+release pair deletion, where the release happens on two different
376 ; CHECK: call void @llvm.objc.release
378 ; CHECK: call void @llvm.objc.release
389 call void @llvm.objc.release(ptr %x) nounwind
395 call void @llvm.objc.release(ptr %x) nounwind
413 call void @llvm.objc.release(ptr %x) nounwind, !clang.imprecise_release !0
419 call void @llvm.objc.release(ptr %x) nounwind, !clang.imprecise_release !0
430 ; CHECK: call void @llvm.objc.release
432 ; CHECK: call void @llvm.objc.release
443 call void @llvm.objc.release(ptr %x) nounwind
449 call void @llvm.objc.release(ptr %x) nounwind, !clang.imprecise_release !0
460 ; CHECK: call void @llvm.objc.release
462 ; CHECK: call void @llvm.objc.release
473 call void @llvm.objc.release(ptr %x) nounwind, !clang.imprecise_release !0
479 call void @llvm.objc.release(ptr %x) nounwind
487 ; retain+release pair deletion, where the retain happens on two different
498 ; CHECK: call void @llvm.objc.release
517 call void @llvm.objc.release(ptr %x) nounwind
541 call void @llvm.objc.release(ptr %x) nounwind, !clang.imprecise_release !0
553 ; CHECK: call void @llvm.objc.release
572 call void @llvm.objc.release(ptr %x) nounwind
576 ; retain+release pair deletion, where the retain and release both happen on
587 ; CHECK: @llvm.objc.release
589 ; CHECK: @llvm.objc.release
612 call void @llvm.objc.release(ptr %x) nounwind
616 call void @llvm.objc.release(ptr %x) nounwind
646 call void @llvm.objc.release(ptr %x) nounwind, !clang.imprecise_release !0
650 call void @llvm.objc.release(ptr %x) nounwind, !clang.imprecise_release !0
666 ; CHECK: @llvm.objc.release
691 call void @llvm.objc.release(ptr %x) nounwind
695 call void @llvm.objc.release(ptr %x) nounwind, !clang.imprecise_release !0
710 ; CHECK: @llvm.objc.release
712 ; CHECK: @llvm.objc.release
735 call void @llvm.objc.release(ptr %x) nounwind, !clang.imprecise_release !0
739 call void @llvm.objc.release(ptr %x) nounwind
746 ; Trivial retain+release pair deletion.
754 call void @llvm.objc.release(ptr %0) nounwind
758 ; Retain+release pair, but on an unknown pointer relationship. Don't delete!
762 ; CHECK: @llvm.objc.release(ptr %s)
768 call void @llvm.objc.release(ptr %s) nounwind
772 ; Trivial retain+release pair with intervening calls - don't delete!
778 ; CHECK: @llvm.objc.release
785 call void @llvm.objc.release(ptr %0) nounwind
833 ; We can not delete this retain, release since we do not have a post-dominating
834 ; use of the release.
840 ; CHECK: @llvm.objc.release
848 call void @llvm.objc.release(ptr %x) nounwind
869 ; Delete the retain+release pair.
877 ; CHECK-NEXT: @llvm.objc.release
886 call void @llvm.objc.release(ptr %x) nounwind
888 call void @llvm.objc.release(ptr %x) nounwind
892 ; Don't delete the retain+release pair because there's an
900 ; CHECK: @llvm.objc.release
909 call void @llvm.objc.release(ptr %x) nounwind
923 ; CHECK-NEXT: @llvm.objc.release
933 call void @llvm.objc.release(ptr %x) nounwind
935 call void @llvm.objc.release(ptr %x) nounwind
939 ; Trivial retain,release pair with intervening call, and it's post-dominated by
940 ; another release. But it is not known safe in the top down direction. We can
948 ; CHECK-NEXT: @llvm.objc.release
949 ; CHECK-NEXT: @llvm.objc.release
957 call void @llvm.objc.release(ptr %x) nounwind
958 call void @llvm.objc.release(ptr %x) nounwind
963 ; by another release. Don't delete anything.
970 ; CHECK-NEXT: @llvm.objc.release
978 call void @llvm.objc.release(ptr %x) nounwind
983 ; by another release. Delete the retain and release.
989 ; CHECK-NEXT: @llvm.objc.release
996 call void @llvm.objc.release(ptr %x) nounwind
1009 call void @llvm.objc.release(ptr %x) nounwind, !clang.imprecise_release !0
1013 ; Retain+release pairs in diamonds, all dominated by a retain.
1020 ; CHECK: @llvm.objc.release
1041 call void @llvm.objc.release(ptr %x) nounwind
1045 call void @llvm.objc.release(ptr %x) nounwind
1050 call void @llvm.objc.release(ptr %x) nounwind
1060 ; CHECK-NEXT: @llvm.objc.release
1081 call void @llvm.objc.release(ptr %x) nounwind, !clang.imprecise_release !0
1085 call void @llvm.objc.release(ptr %x) nounwind
1091 call void @llvm.objc.release(ptr %x) nounwind
1100 ; CHECK: @llvm.objc.release
1121 call void @llvm.objc.release(ptr %x) nounwind, !clang.imprecise_release !0
1125 call void @llvm.objc.release(ptr %x) nounwind, !clang.imprecise_release !0
1130 call void @llvm.objc.release(ptr %x) nounwind, !clang.imprecise_release !0
1157 call void @llvm.objc.release(ptr %x) nounwind
1161 call void @llvm.objc.release(ptr %x) nounwind, !clang.imprecise_release !0
1175 call void @llvm.objc.release(ptr null)
1187 call void @llvm.objc.release(ptr undef)
1199 ; CHECK: call void @llvm.objc.release(ptr %y)
1207 call void @llvm.objc.release(ptr %y)
1256 ; CHECK: call void @llvm.objc.release(ptr %p)
1259 ; CHECK-NOT: @llvm.objc.release
1269 call void @llvm.objc.release(ptr %h), !clang.imprecise_release !0
1273 ; Do not move an llvm.objc.release that doesn't have the clang.imprecise_release tag.
1277 ; CHECK: call void @llvm.objc.release(ptr %[[P0]])
1287 call void @llvm.objc.release(ptr %h)
1295 ; CHECK: @llvm.objc.release
1301 call void @llvm.objc.release(ptr %a)
1305 ; Don't move a retain/release pair if the release can be moved
1313 ; CHECK: call void @llvm.objc.release(ptr %p)
1326 call void @llvm.objc.release(ptr %p)
1330 ; Don't move a retain/release pair if the retain can be moved
1331 ; but the release can't be moved to balance it.
1338 ; CHECK: call void @llvm.objc.release(ptr %p)
1351 call void @llvm.objc.release(ptr %p)
1355 ; Don't sink the retain,release into the loop.
1363 ; CHECK: call void @llvm.objc.release
1376 call void @llvm.objc.release(ptr %p)
1388 ; CHECK: call void @llvm.objc.release
1403 call void @llvm.objc.release(ptr %p), !clang.imprecise_release !0
1419 ; CHECK: @llvm.objc.release
1433 call void @llvm.objc.release(ptr %p)
1446 ; CHECK: call void @llvm.objc.release(ptr %p) [[NUW]], !clang.imprecise_release
1462 call void @llvm.objc.release(ptr %p), !clang.imprecise_release !0
1474 ; CHECK: call void @llvm.objc.release
1476 ; CHECK: call void @llvm.objc.release
1489 call void @llvm.objc.release(ptr %p)
1493 call void @llvm.objc.release(ptr %p)
1498 ; with an extra release.
1507 ; CHECK: call void @llvm.objc.release
1509 ; CHECK: call void @llvm.objc.release
1525 call void @llvm.objc.release(ptr %p)
1529 call void @llvm.objc.release(ptr %p)
1533 ; Basic case with a mergeable release.
1540 ; CHECK: call void @llvm.objc.release
1542 ; CHECK: call void @llvm.objc.release
1552 call void @llvm.objc.release(ptr %p)
1555 call void @llvm.objc.release(ptr %p)
1567 ; CHECK: call void @llvm.objc.release
1580 call void @llvm.objc.release(ptr %p)
1592 ; CHECK: call void @llvm.objc.release
1605 call void @llvm.objc.release(ptr %p)
1609 ; Delete retain,release if there's just a possible dec and we have imprecise
1616 ; CHECK: call void @llvm.objc.release
1628 call void @llvm.objc.release(ptr %p)
1645 call void @llvm.objc.release(ptr %p), !clang.imprecise_release !0
1650 ; Delete retain,release if there's just a use and we do not have a precise
1651 ; release.
1659 ; CHECK: call void @llvm.objc.release
1671 call void @llvm.objc.release(ptr %p)
1689 call void @llvm.objc.release(ptr %p), !clang.imprecise_release !0
1693 ; Delete a retain,release if there's no actual use and we have precise release.
1700 ; CHECK: @llvm.objc.release
1707 call void @llvm.objc.release(ptr %p)
1721 call void @llvm.objc.release(ptr %p), !clang.imprecise_release !0
1755 call void @llvm.objc.release(ptr %p), !clang.imprecise_release !0
1759 ; Delete retain,release pairs around loops.
1773 call void @llvm.objc.release(ptr %0), !clang.imprecise_release !0
1777 ; Delete retain,release pairs around loops containing uses.
1792 call void @llvm.objc.release(ptr %0), !clang.imprecise_release !0
1796 ; Delete retain,release pairs around loops containing potential decrements.
1811 call void @llvm.objc.release(ptr %0), !clang.imprecise_release !0
1815 ; Delete retain,release pairs around loops even if
1831 call void @llvm.objc.release(ptr %0), !clang.imprecise_release !0
1835 ; Do the known-incremented retain+release elimination even if the pointer
1846 ; CHECK-NEXT: call void @llvm.objc.release(ptr %p)
1856 call void @llvm.objc.release(ptr %p)
1859 call void @llvm.objc.release(ptr %p)
1863 ; Don't the known-incremented retain+release elimination if the pointer is
1874 ; CHECK-NEXT: call void @llvm.objc.release
1885 call void @llvm.objc.release(ptr %p)
1889 ; Do the known-incremented retain+release elimination if the pointer is
1900 ; CHECK-NEXT: call void @llvm.objc.release
1911 call void @llvm.objc.release(ptr %p)
1913 call void @llvm.objc.release(ptr %p)
1917 ; Do retain+release elimination for non-provenance pointers.
1925 call void @llvm.objc.release(ptr %q)
1929 ; Don't delete retain+release with an unknown-provenance
1930 ; may-alias llvm.objc.release between them.
1934 ; CHECK: call void @llvm.objc.release(ptr %q)
1936 ; CHECK: call void @llvm.objc.release(ptr %p)
1942 call void @llvm.objc.release(ptr %q)
1944 call void @llvm.objc.release(ptr %p)
2002 ; Do delete retain+release with intervening stores of the address value if we
2003 ; have imprecise release attached to llvm.objc.release.
2009 ; CHECK-NEXT: call void @llvm.objc.release
2016 call void @llvm.objc.release(ptr %p)
2027 call void @llvm.objc.release(ptr %p), !clang.imprecise_release !0
2032 ; Don't delete retain+release with intervening stores through the
2037 ; CHECK: call void @llvm.objc.release(ptr %p)
2044 call void @llvm.objc.release(ptr %p)
2050 ; CHECK: call void @llvm.objc.release(ptr %p)
2057 call void @llvm.objc.release(ptr %p), !clang.imprecise_release !0
2061 ; Don't delete retain+release with intervening use of a pointer of
2068 ; CHECK: call void @llvm.objc.release
2077 call void @llvm.objc.release(ptr %p)
2085 ; CHECK: call void @llvm.objc.release
2094 call void @llvm.objc.release(ptr %p), !clang.imprecise_release !0
2112 call void @llvm.objc.release(ptr %p)
2116 ; Convert autorelease to release if the value is unused.
2120 ; CHECK-NEXT: call void @llvm.objc.release(ptr %t) [[NUW]], !clang.imprecise_release ![[RELEASE]]
2129 ; Nested retain+release pairs. Delete them both.
2138 call void @llvm.objc.release(ptr %x) nounwind
2139 call void @llvm.objc.release(ptr %x) nounwind
2143 ; Nested retain+release pairs where the inner pair depends
2154 ; CHECK-NEXT: tail call void @llvm.objc.release(ptr %x) [[NUW]], !clang.imprecise_release ![[RELEASE]]
2169 tail call void @llvm.objc.release(ptr %2) nounwind, !clang.imprecise_release !0
2173 tail call void @llvm.objc.release(ptr %1) nounwind, !clang.imprecise_release !0
2174 tail call void @llvm.objc.release(ptr %0) nounwind, !clang.imprecise_release !0
2178 ; When there are adjacent retain+release pairs, the first one is known
2190 ; CHECK-NEXT: call void @llvm.objc.release(ptr %x) [[NUW]]
2199 call void @llvm.objc.release(ptr %x) nounwind
2203 call void @llvm.objc.release(ptr %x) nounwind
2207 ; An adjacent retain+release pair is sufficient even if it will be
2223 call void @llvm.objc.release(ptr %x) nounwind
2225 call void @llvm.objc.release(ptr %x) nounwind
2229 ; Don't delete the second retain+release pair in an adjacent set.
2236 ; CHECK-NEXT: call void @llvm.objc.release(ptr %x) [[NUW]]
2242 call void @llvm.objc.release(ptr %x) nounwind
2246 call void @llvm.objc.release(ptr %x) nounwind
2255 ; We have a precise lifetime retain/release here. We can not remove them since
2260 ; CHECK: call void @llvm.objc.release
2268 call void @llvm.objc.release(ptr %s)
2275 ; CHECK-NOT: call ptr @llvm.objc.release
2284 call void @llvm.objc.release(ptr %t)
2297 call void @llvm.objc.release(ptr %t), !clang.imprecise_release !0
2310 call void @llvm.objc.release(ptr %t)
2323 call void @llvm.objc.release(ptr %t), !clang.imprecise_release !0
2338 call void @llvm.objc.release(ptr %t)
2358 call void @llvm.objc.release(ptr %x)
2362 call void @llvm.objc.release(ptr %x)
2366 ; Like test62 but with no release in exit.
2373 ; CHECK: call void @llvm.objc.release(ptr %x)
2385 call void @llvm.objc.release(ptr %x)
2392 ; Like test62 but with no release in loop.more.
2399 ; CHECK: call void @llvm.objc.release(ptr %x)
2414 call void @llvm.objc.release(ptr %x)
2516 ; CHECK: tail call void @llvm.objc.release(ptr %call) [[NUW]]
2518 ; CHECK: tail call void @llvm.objc.release(ptr %cond) [[NUW]]
2530 tail call void @llvm.objc.release(ptr %call) nounwind
2533 tail call void @llvm.objc.release(ptr %cond) nounwind
2539 ; CHECK: tail call void @llvm.objc.release(ptr %call) [[NUW]]
2541 ; CHECK: tail call void @llvm.objc.release(ptr %cond) [[NUW]]
2553 tail call void @llvm.objc.release(ptr %call) nounwind, !clang.imprecise_release !0
2556 tail call void @llvm.objc.release(ptr %cond) nounwind
2562 ; CHECK: tail call void @llvm.objc.release(ptr %call) [[NUW]]
2564 ; CHECK: tail call void @llvm.objc.release(ptr %cond) [[NUW]]
2576 tail call void @llvm.objc.release(ptr %call) nounwind
2579 tail call void @llvm.objc.release(ptr %cond) nounwind
2585 ; CHECK: tail call void @llvm.objc.release(ptr %call) [[NUW]]
2587 ; CHECK: tail call void @llvm.objc.release(ptr %cond) [[NUW]]
2599 tail call void @llvm.objc.release(ptr %call) nounwind, !clang.imprecise_release !0
2602 tail call void @llvm.objc.release(ptr %cond) nounwind, !clang.imprecise_release !0
2614 ; FIXME: Should be able to eliminate the retain and release
2618 ; CHECK: tail call void @llvm.objc.release(ptr %self)
2645 tail call void @llvm.objc.release(ptr %self) nounwind
2656 ; FIXME: Should be able to eliminate the retain and release
2660 ; CHECK: tail call void @llvm.objc.release(ptr %self)
2665 tail call void @llvm.objc.release(ptr %self) nounwind
2673 ; A simple loop. Eliminate the retain and release inside of it!
2693 tail call void @llvm.objc.release(ptr %1) nounwind, !clang.imprecise_release !0
2699 tail call void @llvm.objc.release(ptr %x) nounwind, !clang.imprecise_release !0
2703 ; ObjCARCOpt can delete the retain,release on self.
2780 call void @llvm.objc.release(ptr null) nounwind
2782 call void @llvm.objc.release(ptr null) nounwind
2797 call void @llvm.objc.release(ptr null) nounwind
2824 call void @llvm.objc.release(ptr %call137) nounwind
2834 call void @llvm.objc.release(ptr %call6110) nounwind
2855 call void @llvm.objc.release(ptr %url.025) nounwind
2898 call void @llvm.objc.release(ptr %tmp9) nounwind, !clang.imprecise_release !0
2899 call void @llvm.objc.release(ptr %url.2) nounwind, !clang.imprecise_release !0
2900 call void @llvm.objc.release(ptr %origFilename.0) nounwind, !clang.imprecise_release !0
2901 call void @llvm.objc.release(ptr %filename.2) nounwind, !clang.imprecise_release !0
2902 call void @llvm.objc.release(ptr %self) nounwind, !clang.imprecise_release !0
2923 call void @llvm.objc.release(ptr %x), !clang.imprecise_release !0
2937 call void @llvm.objc.release(ptr %b), !clang.imprecise_release !0
2938 call void @llvm.objc.release(ptr %a), !clang.imprecise_release !0
2956 ; CHECK: ![[RELEASE]] = !{}