1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --check-attributes --check-globals 2; REQUIRES: amdgpu-registered-target 3; RUN: opt -mtriple=amdgcn-amd-amdhsa -S -passes=openmp-opt < %s | FileCheck %s 4 5define internal void @outlined0() { 6; CHECK: Function Attrs: nounwind 7; CHECK-LABEL: define {{[^@]+}}@outlined0 8; CHECK-SAME: () #[[ATTR0:[0-9]+]] { 9; CHECK-NEXT: bb: 10; CHECK-NEXT: call void @func() #[[ATTR1:[0-9]+]] 11; CHECK-NEXT: [[I:%.*]] = call i32 @__kmpc_get_hardware_num_threads_in_block() #[[ATTR0]] 12; CHECK-NEXT: ret void 13; 14bb: 15 call void @func() 16 %i = call i32 @__kmpc_get_hardware_num_threads_in_block() 17 ret void 18} 19 20define internal void @func() { 21; CHECK: Function Attrs: nosync nounwind 22; CHECK-LABEL: define {{[^@]+}}@func 23; CHECK-SAME: () #[[ATTR1]] { 24; CHECK-NEXT: bb: 25; CHECK-NEXT: [[I:%.*]] = load ptr, ptr addrspace(5) null, align 4294967296 26; CHECK-NEXT: store i64 0, ptr [[I]], align 8 27; CHECK-NEXT: ret void 28; 29bb: 30 %i = load ptr, ptr addrspacecast (ptr addrspace(5) null to ptr), align 4294967296 31 store i64 0, ptr %i, align 8 32 ret void 33} 34 35define internal void @outlined1() { 36; CHECK: Function Attrs: nosync nounwind 37; CHECK-LABEL: define {{[^@]+}}@outlined1 38; CHECK-SAME: () #[[ATTR1]] { 39; CHECK-NEXT: bb: 40; CHECK-NEXT: br label [[BB2:%.*]] 41; CHECK: common.ret: 42; CHECK-NEXT: ret void 43; CHECK: bb1: 44; CHECK-NEXT: unreachable 45; CHECK: bb2: 46; CHECK-NEXT: call void @__kmpc_free_shared(ptr null, i64 0) #[[ATTR0]] 47; CHECK-NEXT: br label [[COMMON_RET:%.*]] 48; 49bb: 50 %i = icmp sle i32 1, 0 51 br i1 %i, label %bb1, label %bb2 52 53common.ret: ; preds = %bb2, %bb1 54 ret void 55 56bb1: ; preds = %bb 57 call void @func() 58 br label %common.ret 59 60bb2: ; preds = %bb 61 call void @__kmpc_free_shared(ptr null, i64 0) 62 br label %common.ret 63} 64 65define void @user() { 66; CHECK-LABEL: define {{[^@]+}}@user() { 67; CHECK-NEXT: call void @outlined0() #[[ATTR0]] 68; CHECK-NEXT: call void @outlined1() #[[ATTR1]] 69; CHECK-NEXT: ret void 70; 71 call void @outlined0() 72 call void @outlined1() 73 ret void 74} 75 76declare i32 @__kmpc_get_hardware_num_threads_in_block() 77declare void @__kmpc_free_shared(ptr, i64) 78 79!llvm.module.flags = !{!0, !1} 80 81!0 = !{i32 7, !"openmp", i32 50} 82!1 = !{i32 7, !"openmp-device", i32 50} 83;. 84; CHECK: attributes #[[ATTR0]] = { nounwind } 85; CHECK: attributes #[[ATTR1]] = { nosync nounwind } 86;. 87; CHECK: [[META0:![0-9]+]] = !{i32 7, !"openmp", i32 50} 88; CHECK: [[META1:![0-9]+]] = !{i32 7, !"openmp-device", i32 50} 89;. 90