brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.8 KiB · ed85554 Raw
51 lines · plain
1; RUN: opt -S -passes=objc-arc < %s | FileCheck %s2 3; Handle a retain+release pair entirely contained within a split loop backedge.4; rdar://112562395 6; CHECK-LABEL: define void @test0(7; CHECK: call ptr @llvm.objc.retain(ptr %call) [[NUW:#[0-9]+]]8; CHECK: call ptr @llvm.objc.retain(ptr %call) [[NUW]]9; CHECK: call ptr @llvm.objc.retain(ptr %cond) [[NUW]]10; CHECK: call void @llvm.objc.release(ptr %call) [[NUW]]11; CHECK: call void @llvm.objc.release(ptr %call) [[NUW]]12; CHECK: call void @llvm.objc.release(ptr %cond) [[NUW]]13define void @test0() personality ptr @__objc_personality_v0 {14entry:15  br label %while.body16 17while.body:                                       ; preds = %while.cond18  %call = invoke ptr @returner()19          to label %invoke.cont unwind label %lpad, !clang.arc.no_objc_arc_exceptions !020 21invoke.cont:                                      ; preds = %while.body22  %t0 = call ptr @llvm.objc.retain(ptr %call) nounwind23  %t1 = call ptr @llvm.objc.retain(ptr %call) nounwind24  %call.i1 = invoke ptr @returner()25          to label %invoke.cont1 unwind label %lpad26 27invoke.cont1:                                     ; preds = %invoke.cont28  %cond = select i1 undef, ptr null, ptr %call29  %t2 = call ptr @llvm.objc.retain(ptr %cond) nounwind30  call void @llvm.objc.release(ptr %call) nounwind31  call void @llvm.objc.release(ptr %call) nounwind32  call void @use_pointer(ptr %cond)33  call void @llvm.objc.release(ptr %cond) nounwind34  br label %while.body35 36lpad:                                             ; preds = %invoke.cont, %while.body37  %t4 = landingpad { ptr, i32 }38          catch ptr null39  ret void40}41 42declare ptr @returner()43declare i32 @__objc_personality_v0(...)44declare void @llvm.objc.release(ptr)45declare ptr @llvm.objc.retain(ptr)46declare void @use_pointer(ptr)47 48!0 = !{}49 50; CHECK: attributes [[NUW]] = { nounwind }51