brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.5 KiB · 2183809 Raw
135 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --check-attributes --check-globals2; RUN: opt -passes=attributor -S %s | FileCheck %s3 4@var1 = internal global [1 x i32] undef5@var2 = internal global i32 06 7;.8; CHECK: @var1 = internal global [1 x i32] undef9; CHECK: @var2 = internal global i32 010;.11define ptr addrspace(1) @foo(ptr addrspace(4) %arg) {12; CHECK: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none)13; CHECK-LABEL: define {{[^@]+}}@foo14; CHECK-SAME: (ptr addrspace(4) nofree readnone [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {15; CHECK-NEXT:  entry:16; CHECK-NEXT:    [[TMP0:%.*]] = addrspacecast ptr addrspace(4) [[ARG]] to ptr addrspace(1)17; CHECK-NEXT:    ret ptr addrspace(1) [[TMP0]]18;19entry:20  %0 = addrspacecast ptr addrspace(4) %arg to ptr addrspace(1)21  ret ptr addrspace(1) %022}23 24define ptr @func1() {25; CHECK: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none)26; CHECK-LABEL: define {{[^@]+}}@func127; CHECK-SAME: () #[[ATTR0]] {28; CHECK-NEXT:    ret ptr @var129;30  %ptr = call ptr @func1a(ptr @var1)31  ret ptr %ptr32}33 34define internal ptr @func1a(ptr %arg) {35  ret ptr %arg36}37 38define internal void @func2a(ptr %0) {39; CHECK: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(write)40; CHECK-LABEL: define {{[^@]+}}@func2a41; CHECK-SAME: (ptr nofree nonnull writeonly align 4 captures(none) dereferenceable(4) [[TMP0:%.*]]) #[[ATTR1:[0-9]+]] {42; CHECK-NEXT:    ret void43;44  store i32 0, ptr %045  ret void46}47 48define i32 @func2() {49; CHECK: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(write)50; CHECK-LABEL: define {{[^@]+}}@func251; CHECK-SAME: () #[[ATTR1]] {52; CHECK-NEXT:    [[TMP1:%.*]] = tail call i32 (ptr, ...) @func2a(ptr nofree nonnull writeonly align 4 captures(none) dereferenceable(4) undef) #[[ATTR3:[0-9]+]]53; CHECK-NEXT:    ret i32 054;55  %1 = tail call i32 (ptr, ...) @func2a(ptr @var2)56  %2 = load i32, ptr @var257  ret i32 %258}59 60define i32 @func3(i1 %false) {61; CHECK: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(write)62; CHECK-LABEL: define {{[^@]+}}@func363; CHECK-SAME: (i1 [[FALSE:%.*]]) #[[ATTR1]] {64; CHECK-NEXT:    [[TMP1:%.*]] = tail call i32 (ptr, ...) @func2a(ptr nofree nonnull writeonly align 4 captures(none) dereferenceable(4) undef) #[[ATTR3]]65; CHECK-NEXT:    br i1 [[FALSE]], label [[USE_BB:%.*]], label [[RET_BB:%.*]]66; CHECK:       use_bb:67; CHECK-NEXT:    ret i32 [[TMP1]]68; CHECK:       ret_bb:69; CHECK-NEXT:    ret i32 070;71  %1 = tail call i32 (ptr, ...) @func2a(ptr @var2)72  br i1 %false, label %use_bb, label %ret_bb73use_bb:74  ret i32 %175ret_bb:76  %2 = load i32, ptr @var277  ret i32 %278}79 80define void @func4() {81; CHECK-LABEL: define {{[^@]+}}@func4() {82; CHECK-NEXT:    call void @func5()83; CHECK-NEXT:    ret void84;85  call void @func5(i32 0)86  ret void87}88 89define internal void @func5(i32 %0) {90; CHECK: Function Attrs: memory(readwrite, argmem: none)91; CHECK-LABEL: define {{[^@]+}}@func592; CHECK-SAME: () #[[ATTR2:[0-9]+]] {93; CHECK-NEXT:    br label [[BLOCK:%.*]]94; CHECK:       block:95; CHECK-NEXT:    call void @func6(ptr blockaddress(@func5, [[BLOCK]]))96; CHECK-NEXT:    ret void97;98  %tmp = alloca ptr99  br label %block100 101block:102  store ptr blockaddress(@func5, %block), ptr %tmp103  %addr = load ptr, ptr %tmp104  call void @func6(ptr %addr)105  ret void106}107 108define i16 @foo3() {109; CHECK: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none)110; CHECK-LABEL: define {{[^@]+}}@foo3111; CHECK-SAME: () #[[ATTR0]] {112; CHECK-NEXT:    [[CALL:%.*]] = call i16 @bar3() #[[ATTR4:[0-9]+]]113; CHECK-NEXT:    ret i16 [[CALL]]114;115  %call = call i16 @bar3()116  ret i16 %call117}118define internal i16 @bar3(ptr %p1, i16 %p2) {119; CHECK: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none)120; CHECK-LABEL: define {{[^@]+}}@bar3121; CHECK-SAME: (ptr nofree readnone captures(none) [[P1:%.*]], i16 returned [[P2:%.*]]) #[[ATTR0]] {122; CHECK-NEXT:    ret i16 [[P2]]123;124  ret i16 %p2125}126 127declare void @func6(ptr)128;.129; CHECK: attributes #[[ATTR0]] = { mustprogress nofree norecurse nosync nounwind willreturn memory(none) }130; CHECK: attributes #[[ATTR1]] = { mustprogress nofree norecurse nosync nounwind willreturn memory(write) }131; CHECK: attributes #[[ATTR2]] = { memory(readwrite, argmem: none) }132; CHECK: attributes #[[ATTR3]] = { nofree nosync nounwind willreturn memory(write) }133; CHECK: attributes #[[ATTR4]] = { nofree nosync nounwind willreturn memory(none) }134;.135