jyu2 created this revision. jyu2 added reviewers: ABataev, mikerice. jyu2 added projects: OpenMP, clang. Herald added subscribers: guansong, yaxunl. Herald added a project: All. jyu2 requested review of this revision. Herald added a reviewer: jdoerfert. Herald added a subscriber: sstefan1.
Current clang generates extra set of simd variant function attribute with extra 'v' encoding. For example: _ZGVbN2v__Z5add_1Pf vs _ZGVbN2vv__Z5add_1Pf The problem is due to declaration of ParamAttrs following: llvm::SmallVector<ParamAttrTy, 8> ParamAttrs(ParamPositions.size()); where ParamPositions.size() is grown after following assignment: Pos = ParamPositions[PVD]; the ParamPositions is define as llvm::DenseMap<const Decl *, unsigned> ParamPositions; To fix this using ParamPos(whith is number of parameters) instead. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D122338 Files: clang/lib/CodeGen/CGOpenMPRuntime.cpp clang/test/OpenMP/declare_simd_codegen.cpp Index: clang/test/OpenMP/declare_simd_codegen.cpp =================================================================== --- clang/test/OpenMP/declare_simd_codegen.cpp +++ clang/test/OpenMP/declare_simd_codegen.cpp @@ -153,6 +153,23 @@ // CHECK-DAG: "_ZGVdN4v__Z5add_1Pf" // CHECK-DAG: "_ZGVeN8v__Z5add_1Pf" +// CHECK-NOT: _ZGVbN2vv__Z5add_1Pf +// CHECK-NOT: _ZGVcN4vv__Z5add_1Pf +// CHECK-NOT: _ZGVdN4vv__Z5add_1Pf +// CHECK-NOT: _ZGVeN8vv__Z5add_1Pf +// CHECK-NOT: _ZGVbM32vv__Z5add_1Pf +// CHECK-NOT: _ZGVcM32vv__Z5add_1Pf +// CHECK-NOT: _ZGVdM32vv__Z5add_1Pf +// CHECK-NOT: _ZGVeM32vv__Z5add_1Pf +// CHECK-NOT: _ZGVbN4l32v__Z5add_1Pf +// CHECK-NOT: _ZGVcN8l32v__Z5add_1Pf +// CHECK-NOT: _ZGVdN8l32v__Z5add_1Pf +// CHECK-NOT: _ZGVeN16l32v__Z5add_1Pf +// CHECK-NOT: _ZGVbM4l32v__Z5add_1Pf +// CHECK-NOT: _ZGVcM8l32v__Z5add_1Pf +// CHECK-NOT: _ZGVdM8l32v__Z5add_1Pf +// CHECK-NOT: _ZGVeM16l32v__Z5add_1Pf + // CHECK-DAG: "_ZGVbM2va16va16vv__Z1hIiEvPT_S1_S1_S1_" // CHECK-DAG: "_ZGVbN2va16va16vv__Z1hIiEvPT_S1_S1_S1_" // CHECK-DAG: "_ZGVcM4va16va16vv__Z1hIiEvPT_S1_S1_S1_" Index: clang/lib/CodeGen/CGOpenMPRuntime.cpp =================================================================== --- clang/lib/CodeGen/CGOpenMPRuntime.cpp +++ clang/lib/CodeGen/CGOpenMPRuntime.cpp @@ -11979,7 +11979,7 @@ } while (FD) { for (const auto *Attr : FD->specific_attrs<OMPDeclareSimdDeclAttr>()) { - llvm::SmallVector<ParamAttrTy, 8> ParamAttrs(ParamPositions.size()); + llvm::SmallVector<ParamAttrTy, 8> ParamAttrs(ParamPos); // Mark uniform parameters. for (const Expr *E : Attr->uniforms()) { E = E->IgnoreParenImpCasts();
Index: clang/test/OpenMP/declare_simd_codegen.cpp =================================================================== --- clang/test/OpenMP/declare_simd_codegen.cpp +++ clang/test/OpenMP/declare_simd_codegen.cpp @@ -153,6 +153,23 @@ // CHECK-DAG: "_ZGVdN4v__Z5add_1Pf" // CHECK-DAG: "_ZGVeN8v__Z5add_1Pf" +// CHECK-NOT: _ZGVbN2vv__Z5add_1Pf +// CHECK-NOT: _ZGVcN4vv__Z5add_1Pf +// CHECK-NOT: _ZGVdN4vv__Z5add_1Pf +// CHECK-NOT: _ZGVeN8vv__Z5add_1Pf +// CHECK-NOT: _ZGVbM32vv__Z5add_1Pf +// CHECK-NOT: _ZGVcM32vv__Z5add_1Pf +// CHECK-NOT: _ZGVdM32vv__Z5add_1Pf +// CHECK-NOT: _ZGVeM32vv__Z5add_1Pf +// CHECK-NOT: _ZGVbN4l32v__Z5add_1Pf +// CHECK-NOT: _ZGVcN8l32v__Z5add_1Pf +// CHECK-NOT: _ZGVdN8l32v__Z5add_1Pf +// CHECK-NOT: _ZGVeN16l32v__Z5add_1Pf +// CHECK-NOT: _ZGVbM4l32v__Z5add_1Pf +// CHECK-NOT: _ZGVcM8l32v__Z5add_1Pf +// CHECK-NOT: _ZGVdM8l32v__Z5add_1Pf +// CHECK-NOT: _ZGVeM16l32v__Z5add_1Pf + // CHECK-DAG: "_ZGVbM2va16va16vv__Z1hIiEvPT_S1_S1_S1_" // CHECK-DAG: "_ZGVbN2va16va16vv__Z1hIiEvPT_S1_S1_S1_" // CHECK-DAG: "_ZGVcM4va16va16vv__Z1hIiEvPT_S1_S1_S1_" Index: clang/lib/CodeGen/CGOpenMPRuntime.cpp =================================================================== --- clang/lib/CodeGen/CGOpenMPRuntime.cpp +++ clang/lib/CodeGen/CGOpenMPRuntime.cpp @@ -11979,7 +11979,7 @@ } while (FD) { for (const auto *Attr : FD->specific_attrs<OMPDeclareSimdDeclAttr>()) { - llvm::SmallVector<ParamAttrTy, 8> ParamAttrs(ParamPositions.size()); + llvm::SmallVector<ParamAttrTy, 8> ParamAttrs(ParamPos); // Mark uniform parameters. for (const Expr *E : Attr->uniforms()) { E = E->IgnoreParenImpCasts();
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits