42 lines · plain
1; RUN: opt -S -aa-pipeline=basic-aa,objc-arc-aa -passes=gvn < %s | FileCheck %s2 3@x = common global ptr null, align 84 5declare ptr @llvm.objc.retain(ptr)6declare i32 @llvm.objc.sync.enter(ptr)7declare i32 @llvm.objc.sync.exit(ptr)8 9; GVN should be able to eliminate this redundant load, with ARC-specific10; alias analysis.11 12; CHECK: define ptr @test0(i32 %n)13; CHECK-NEXT: entry:14; CHECK-NEXT: %s = load ptr, ptr @x15; CHECK-NOT: load16; CHECK: ret ptr %s17; CHECK-NEXT: }18define ptr @test0(i32 %n) nounwind {19entry:20 %s = load ptr, ptr @x21 %0 = tail call ptr @llvm.objc.retain(ptr %s) nounwind22 %t = load ptr, ptr @x23 ret ptr %t24}25 26; GVN should not be able to eliminate this redundant load, with ARC-specific27; alias analysis.28 29; CHECK-LABEL: define ptr @test1(30; CHECK: load31; CHECK: load32; CHECK: ret ptr %t33; CHECK: }34define ptr @test1(i32 %n) nounwind {35entry:36 %s = load ptr, ptr @x37 %0 = call i32 @llvm.objc.sync.enter(ptr %s)38 %t = load ptr, ptr @x39 %1 = call i32 @llvm.objc.sync.exit(ptr %s)40 ret ptr %t41}42