59 lines · plain
1; RUN: opt -aa-pipeline=basic-aa -passes='print<memoryssa>,verify<memoryssa>' -disable-output < %s 2>&1 | FileCheck %s2;3; Test that various function attributes give us sane results.4 5@g = external global i326 7declare void @readonlyFunction() readonly8declare void @noattrsFunction()9 10define void @readonlyAttr() {11; CHECK: 1 = MemoryDef(liveOnEntry)12; CHECK-NEXT: store i32 013 store i32 0, ptr @g, align 414 15 %1 = alloca i32, align 416; CHECK: 2 = MemoryDef(1)17; CHECK-NEXT: store i32 018 store i32 0, ptr %1, align 419 20; CHECK: MemoryUse(1)21; CHECK-NEXT: call void @readonlyFunction()22 call void @readonlyFunction()23 24; CHECK: MemoryUse(1)25; CHECK-NEXT: call void @noattrsFunction() #26; Assume that #N is readonly27 call void @noattrsFunction() readonly28 29 ; Verify that noattrsFunction is otherwise a MemoryDef30; CHECK: 3 = MemoryDef(2)31; CHECK-NEXT: call void @noattrsFunction()32 call void @noattrsFunction()33 ret void34}35 36declare void @argMemOnly(ptr) argmemonly37 38define void @inaccessableOnlyAttr() {39 %1 = alloca i32, align 440; CHECK: 1 = MemoryDef(liveOnEntry)41; CHECK-NEXT: store i32 042 store i32 0, ptr %1, align 443 44; CHECK: 2 = MemoryDef(1)45; CHECK-NEXT: store i32 046 store i32 0, ptr @g, align 447 48; CHECK: MemoryUse(1)49; CHECK-NEXT: call void @argMemOnly(ptr %1) #50; Assume that #N is readonly51 call void @argMemOnly(ptr %1) readonly52 53; CHECK: 3 = MemoryDef(2)54; CHECK-NEXT: call void @argMemOnly(ptr %1)55 call void @argMemOnly(ptr %1)56 57 ret void58}59