diff --git a/flang/lib/Lower/OpenMP/ClauseProcessor.cpp b/flang/lib/Lower/OpenMP/ClauseProcessor.cpp index 6baa22a44eafb..ace21c1be551d 100644 --- a/flang/lib/Lower/OpenMP/ClauseProcessor.cpp +++ b/flang/lib/Lower/OpenMP/ClauseProcessor.cpp @@ -744,6 +744,7 @@ createCopyFunc(mlir::Location loc, lower::AbstractConverter &converter, mlir::func::FuncOp funcOp = modBuilder.create(loc, copyFuncName, funcType); funcOp.setVisibility(mlir::SymbolTable::Visibility::Private); + fir::factory::setInternalLinkage(funcOp); builder.createBlock(&funcOp.getRegion(), funcOp.getRegion().end(), argsTy, {loc, loc}); builder.setInsertionPointToStart(&funcOp.getRegion().back()); diff --git a/flang/lib/Optimizer/OpenMP/LowerWorkshare.cpp b/flang/lib/Optimizer/OpenMP/LowerWorkshare.cpp index 6e130a96eb8dd..27a57f73d4e97 100644 --- a/flang/lib/Optimizer/OpenMP/LowerWorkshare.cpp +++ b/flang/lib/Optimizer/OpenMP/LowerWorkshare.cpp @@ -153,6 +153,7 @@ static mlir::func::FuncOp createCopyFunc(mlir::Location loc, mlir::Type varType, if (auto decl = module.lookupSymbol(copyFuncName)) return decl; + // create function mlir::OpBuilder::InsertionGuard guard(builder); mlir::OpBuilder modBuilder(module.getBodyRegion()); @@ -161,6 +162,7 @@ static mlir::func::FuncOp createCopyFunc(mlir::Location loc, mlir::Type varType, mlir::func::FuncOp funcOp = modBuilder.create(loc, copyFuncName, funcType); funcOp.setVisibility(mlir::SymbolTable::Visibility::Private); + fir::factory::setInternalLinkage(funcOp); builder.createBlock(&funcOp.getRegion(), funcOp.getRegion().end(), argsTy, {loc, loc}); builder.setInsertionPointToStart(&funcOp.getRegion().back()); diff --git a/flang/test/Integration/OpenMP/copyprivate.f90 b/flang/test/Integration/OpenMP/copyprivate.f90 index 47e932a4d70d7..d38fd20020f34 100644 --- a/flang/test/Integration/OpenMP/copyprivate.f90 +++ b/flang/test/Integration/OpenMP/copyprivate.f90 @@ -8,24 +8,24 @@ !RUN: %flang_fc1 -emit-llvm -fopenmp %s -o - | FileCheck %s -!CHECK-DAG: define void @_copy_box_Uxi32(ptr nocapture %{{.*}}, ptr nocapture %{{.*}}) -!CHECK-DAG: define void @_copy_10xi32(ptr nocapture %{{.*}}, ptr nocapture %{{.*}}) -!CHECK-DAG: define void @_copy_i64(ptr nocapture %{{.*}}, ptr nocapture %{{.*}}) -!CHECK-DAG: define void @_copy_box_Uxi64(ptr nocapture %{{.*}}, ptr nocapture %{{.*}}) -!CHECK-DAG: define void @_copy_f32(ptr nocapture %{{.*}}, ptr nocapture %{{.*}}) -!CHECK-DAG: define void @_copy_2x3xf32(ptr nocapture %{{.*}}, ptr nocapture %{{.*}}) -!CHECK-DAG: define void @_copy_z32(ptr nocapture %{{.*}}, ptr nocapture %{{.*}}) -!CHECK-DAG: define void @_copy_10xz32(ptr nocapture %{{.*}}, ptr nocapture %{{.*}}) -!CHECK-DAG: define void @_copy_l32(ptr nocapture %{{.*}}, ptr nocapture %{{.*}}) -!CHECK-DAG: define void @_copy_5xl32(ptr nocapture %{{.*}}, ptr nocapture %{{.*}}) -!CHECK-DAG: define void @_copy_c8x8(ptr nocapture %{{.*}}, ptr nocapture %{{.*}}) -!CHECK-DAG: define void @_copy_10xc8x8(ptr nocapture %{{.*}}, ptr nocapture %{{.*}}) -!CHECK-DAG: define void @_copy_c16x5(ptr nocapture %{{.*}}, ptr nocapture %{{.*}}) -!CHECK-DAG: define void @_copy_rec__QFtest_typesTdt(ptr nocapture %{{.*}}, ptr nocapture %{{.*}}) -!CHECK-DAG: define void @_copy_box_heap_Uxi32(ptr nocapture %{{.*}}, ptr nocapture %{{.*}}) -!CHECK-DAG: define void @_copy_box_ptr_Uxc8x9(ptr nocapture %{{.*}}, ptr nocapture %{{.*}}) +!CHECK-DAG: define internal void @_copy_box_Uxi32(ptr nocapture %{{.*}}, ptr nocapture %{{.*}}) +!CHECK-DAG: define internal void @_copy_10xi32(ptr nocapture %{{.*}}, ptr nocapture %{{.*}}) +!CHECK-DAG: define internal void @_copy_i64(ptr nocapture %{{.*}}, ptr nocapture %{{.*}}) +!CHECK-DAG: define internal void @_copy_box_Uxi64(ptr nocapture %{{.*}}, ptr nocapture %{{.*}}) +!CHECK-DAG: define internal void @_copy_f32(ptr nocapture %{{.*}}, ptr nocapture %{{.*}}) +!CHECK-DAG: define internal void @_copy_2x3xf32(ptr nocapture %{{.*}}, ptr nocapture %{{.*}}) +!CHECK-DAG: define internal void @_copy_z32(ptr nocapture %{{.*}}, ptr nocapture %{{.*}}) +!CHECK-DAG: define internal void @_copy_10xz32(ptr nocapture %{{.*}}, ptr nocapture %{{.*}}) +!CHECK-DAG: define internal void @_copy_l32(ptr nocapture %{{.*}}, ptr nocapture %{{.*}}) +!CHECK-DAG: define internal void @_copy_5xl32(ptr nocapture %{{.*}}, ptr nocapture %{{.*}}) +!CHECK-DAG: define internal void @_copy_c8x8(ptr nocapture %{{.*}}, ptr nocapture %{{.*}}) +!CHECK-DAG: define internal void @_copy_10xc8x8(ptr nocapture %{{.*}}, ptr nocapture %{{.*}}) +!CHECK-DAG: define internal void @_copy_c16x5(ptr nocapture %{{.*}}, ptr nocapture %{{.*}}) +!CHECK-DAG: define internal void @_copy_rec__QFtest_typesTdt(ptr nocapture %{{.*}}, ptr nocapture %{{.*}}) +!CHECK-DAG: define internal void @_copy_box_heap_Uxi32(ptr nocapture %{{.*}}, ptr nocapture %{{.*}}) +!CHECK-DAG: define internal void @_copy_box_ptr_Uxc8x9(ptr nocapture %{{.*}}, ptr nocapture %{{.*}}) -!CHECK-LABEL: define void @_copy_i32( +!CHECK-LABEL: define internal void @_copy_i32( !CHECK-SAME: ptr nocapture %[[DST:.*]], ptr nocapture %[[SRC:.*]]){{.*}} { !CHECK-NEXT: %[[SRC_VAL:.*]] = load i32, ptr %[[SRC]] !CHECK-NEXT: store i32 %[[SRC_VAL]], ptr %[[DST]] diff --git a/flang/test/Lower/OpenMP/copyprivate.f90 b/flang/test/Lower/OpenMP/copyprivate.f90 index 3f72343be666a..761e6190ed6ef 100644 --- a/flang/test/Lower/OpenMP/copyprivate.f90 +++ b/flang/test/Lower/OpenMP/copyprivate.f90 @@ -31,7 +31,7 @@ !CHECK-DAG: func private @_copy_box_ptr_Uxc8x9(%{{.*}}: !fir.ref>>>>, %{{.*}}: !fir.ref>>>>) !CHECK-LABEL: func private @_copy_i32( -!CHECK-SAME: %[[ARG0:.*]]: !fir.ref, %[[ARG1:.*]]: !fir.ref) { +!CHECK-SAME: %[[ARG0:.*]]: !fir.ref, %[[ARG1:.*]]: !fir.ref) attributes {llvm.linkage = #llvm.linkage} { !CHECK-NEXT: %[[DST:.*]]:2 = hlfir.declare %[[ARG0]] {uniq_name = "_copy_i32_dst"} : (!fir.ref) -> (!fir.ref, !fir.ref) !CHECK-NEXT: %[[SRC:.*]]:2 = hlfir.declare %[[ARG1]] {uniq_name = "_copy_i32_src"} : (!fir.ref) -> (!fir.ref, !fir.ref) !CHECK-NEXT: %[[SRC_VAL:.*]] = fir.load %[[SRC]]#0 : !fir.ref diff --git a/flang/test/Lower/OpenMP/copyprivate2.f90 b/flang/test/Lower/OpenMP/copyprivate2.f90 index 848ebe39e45f4..3412ba2c63c4d 100644 --- a/flang/test/Lower/OpenMP/copyprivate2.f90 +++ b/flang/test/Lower/OpenMP/copyprivate2.f90 @@ -3,7 +3,8 @@ !CHECK-LABEL: func private @_copy_box_ptr_i32( !CHECK-SAME: %[[ARG0:.*]]: !fir.ref>>, -!CHECK-SAME: %[[ARG1:.*]]: !fir.ref>>) { +!CHECK-SAME: %[[ARG1:.*]]: !fir.ref>>) +!CHECK-SAME: attributes {llvm.linkage = #llvm.linkage} { !CHECK-NEXT: %[[DST:.*]]:2 = hlfir.declare %[[ARG0]] {fortran_attrs = #fir.var_attrs, !CHECK-SAME: uniq_name = "_copy_box_ptr_i32_dst"} : (!fir.ref>>) -> !CHECK-SAME: (!fir.ref>>, !fir.ref>>) @@ -17,7 +18,8 @@ !CHECK-LABEL: func private @_copy_box_heap_Uxi32( !CHECK-SAME: %[[ARG0:.*]]: !fir.ref>>>, -!CHECK-SAME: %[[ARG1:.*]]: !fir.ref>>>) { +!CHECK-SAME: %[[ARG1:.*]]: !fir.ref>>>) +!CHECK-SAME: attributes {llvm.linkage = #llvm.linkage} { !CHECK-NEXT: %[[DST:.*]]:2 = hlfir.declare %[[ARG0]] {fortran_attrs = #fir.var_attrs, !CHECK-SAME: uniq_name = "_copy_box_heap_Uxi32_dst"} : (!fir.ref>>>) -> !CHECK-SAME: (!fir.ref>>>, !fir.ref>>>) diff --git a/flang/test/Transforms/OpenMP/lower-workshare-alloca.mlir b/flang/test/Transforms/OpenMP/lower-workshare-alloca.mlir index 12b0558d06ed5..82daa142042a3 100644 --- a/flang/test/Transforms/OpenMP/lower-workshare-alloca.mlir +++ b/flang/test/Transforms/OpenMP/lower-workshare-alloca.mlir @@ -22,7 +22,8 @@ func.func @wsfunc() { // CHECK-LABEL: func.func private @_workshare_copy_i32( // CHECK-SAME: %[[VAL_0:.*]]: !fir.ref, -// CHECK-SAME: %[[VAL_1:.*]]: !fir.ref) { +// CHECK-SAME: %[[VAL_1:.*]]: !fir.ref) +// CHECK-SAME: attributes {llvm.linkage = #llvm.linkage} { // CHECK: %[[VAL_2:.*]] = fir.load %[[VAL_1]] : !fir.ref // CHECK: fir.store %[[VAL_2]] to %[[VAL_0]] : !fir.ref // CHECK: return