1d90d45fcSFlorian Hahn; RUN: opt -passes=function-attrs -stats -disable-output %s 2>&1 | FileCheck %s 2d90d45fcSFlorian Hahn 3d90d45fcSFlorian Hahn; REQUIRES: asserts 4d90d45fcSFlorian Hahn 5d90d45fcSFlorian Hahn@g = global i32 20 6d90d45fcSFlorian Hahn 7e74390ccSNikita Popovdefine i32 @test_only_read_arg(ptr %ptr) { 8d90d45fcSFlorian Hahnentry: 9e74390ccSNikita Popov %l = load i32, ptr %ptr 10d90d45fcSFlorian Hahn ret i32 %l 11d90d45fcSFlorian Hahn} 12d90d45fcSFlorian Hahn 13d90d45fcSFlorian Hahndefine void @test_write_global() { 14d90d45fcSFlorian Hahnentry: 15e74390ccSNikita Popov store i32 0, ptr @g 16d90d45fcSFlorian Hahn ret void 17d90d45fcSFlorian Hahn} 18d90d45fcSFlorian Hahn 19*304f1d59SNikita Popov; CHECK: 2 function-attrs - Number of functions with improved memory attribute 20e5822dedSFlorian Hahn; CHECK-NEXT: 1 function-attrs - Number of arguments marked nocapture 21d90d45fcSFlorian Hahn; CHECK-NEXT: 1 function-attrs - Number of functions marked as nofree 22d90d45fcSFlorian Hahn; CHECK-NEXT: 2 function-attrs - Number of functions marked as norecurse 23d90d45fcSFlorian Hahn; CHECK-NEXT: 2 function-attrs - Number of functions marked as nosync 24d90d45fcSFlorian Hahn; CHECK-NEXT: 2 function-attrs - Number of functions marked as nounwind 25d90d45fcSFlorian Hahn; CHECK-NEXT: 1 function-attrs - Number of arguments marked readonly 26d90d45fcSFlorian Hahn; CHECK-NEXT: 2 function-attrs - Number of functions marked as willreturn 27