[PATCH] D86021: [IR] Make nosync, nofree and willreturn default for intrinsics.

2020-10-20 Thread Stefan Stipanovic via Phabricator via cfe-commits
sstefan1 closed this revision.
sstefan1 added a comment.

Commited in rGfbfb1c790982 
.

Forgot to add the revision link.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D86021/new/

https://reviews.llvm.org/D86021

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D86021: [IR] Make nosync, nofree and willreturn default for intrinsics.

2020-10-02 Thread Stefan Stipanovic via Phabricator via cfe-commits
sstefan1 added a comment.

@nikic do you have a preference on any of the suggested names?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D86021/new/

https://reviews.llvm.org/D86021

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D88430: [OpenMP] Replace OpenMP RTL Functions With OMPIRBuilder and OMPKinds.def

2020-09-28 Thread Stefan Stipanovic via Phabricator via cfe-commits
sstefan1 added inline comments.



Comment at: clang/lib/CodeGen/CGOpenMPRuntimeGPU.h:38
+  /// An OpenMP-IR-Builder instance.
+  llvm::OpenMPIRBuilder OMPBuilder;
+

jhuber6 wrote:
> sstefan1 wrote:
> > There's already an instance of `OpenMPIRBuilder` in `CGOpenMPRuntime`.
> > 
> > Maybe just make it protected?
> When it's generating `__kmpc_shuffle_intxx`  around line 2480 it gets an 
> instance of `CGOpenMPRuntimeGPU` indirectly which meant I had to make it 
> public so it could use it. I could probably rewrite all the functions to be 
> inside the class but I'm not sure if that'll break anything. So I just made 
> it public for now.
I think that shouldn't be a problem. There is `getOMPBuilder()` in 
`CGOpenMPRuntime`.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D88430/new/

https://reviews.llvm.org/D88430

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D88430: [OpenMP] Replace OpenMP RTL Functions With OMPIRBuilder and OMPKinds.def

2020-09-28 Thread Stefan Stipanovic via Phabricator via cfe-commits
sstefan1 added inline comments.



Comment at: clang/lib/CodeGen/CGOpenMPRuntimeGPU.h:38
+  /// An OpenMP-IR-Builder instance.
+  llvm::OpenMPIRBuilder OMPBuilder;
+

There's already an instance of `OpenMPIRBuilder` in `CGOpenMPRuntime`.

Maybe just make it protected?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D88430/new/

https://reviews.llvm.org/D88430

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D86769: [UpdateTestChecks] include { in function signature check line

2020-08-28 Thread Stefan Stipanovic via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG7128e647063d: [UpdateTestChecks] include { in function 
signature check line (authored by sstefan1).
Herald added subscribers: cfe-commits, danielkiss.
Herald added a project: clang.

Changed prior to commit:
  https://reviews.llvm.org/D86769?vs=288547=288709#toc

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D86769/new/

https://reviews.llvm.org/D86769

Files:
  clang/test/utils/update_cc_test_checks/Inputs/mangled_names.c.funcsig.expected
  
llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/argument_name_reuse.ll.expected
  
llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/basic.ll.funcsig.expected
  
llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/check_attrs.ll.funcattrs.expected
  
llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/check_attrs.ll.plain.expected
  
llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/on_the_fly_arg_change.ll.expected
  
llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/on_the_fly_arg_change.ll.initially_disabled.expected
  
llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/various_ir_values.ll.funcsig.expected
  llvm/utils/UpdateTestChecks/common.py

Index: llvm/utils/UpdateTestChecks/common.py
===
--- llvm/utils/UpdateTestChecks/common.py
+++ llvm/utils/UpdateTestChecks/common.py
@@ -146,7 +146,7 @@
 
 OPT_FUNCTION_RE = re.compile(
 r'^(\s*;\s*Function\sAttrs:\s(?P[\w\s]+?))?\s*define\s+(?:internal\s+)?[^@]*@(?P[\w.-]+?)\s*'
-r'(?P\((\)|(.*?[\w.-]+?)\))[^{]*)\{\n(?P.*?)^\}$',
+r'(?P\((\)|(.*?[\w.-]+?)\))[^{]*\{)\n(?P.*?)^\}$',
 flags=(re.M | re.S))
 
 ANALYZE_FUNCTION_RE = re.compile(
Index: llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/various_ir_values.ll.funcsig.expected
===
--- llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/various_ir_values.ll.funcsig.expected
+++ llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/various_ir_values.ll.funcsig.expected
@@ -10,7 +10,7 @@
 ; Function Attrs: nounwind uwtable
 define dso_local void @foo(i32* %A) #0 !dbg !7 {
 ; CHECK-LABEL: define {{[^@]+}}@foo
-; CHECK-SAME: (i32* [[A:%.*]]) [[ATTR0:#.*]] [[DBG7:!dbg !.*]]
+; CHECK-SAME: (i32* [[A:%.*]]) [[ATTR0:#.*]] [[DBG7:!dbg !.*]] {
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:[[A_ADDR:%.*]] = alloca i32*, align 8
 ; CHECK-NEXT:[[I:%.*]] = alloca i32, align 4
@@ -99,7 +99,7 @@
 ; Function Attrs: nounwind uwtable
 define dso_local void @bar(i32* %A) #0 !dbg !39 {
 ; CHECK-LABEL: define {{[^@]+}}@bar
-; CHECK-SAME: (i32* [[A:%.*]]) [[ATTR0]] [[DBG39:!dbg !.*]]
+; CHECK-SAME: (i32* [[A:%.*]]) [[ATTR0]] [[DBG39:!dbg !.*]] {
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:[[A_ADDR:%.*]] = alloca i32*, align 8
 ; CHECK-NEXT:[[I:%.*]] = alloca i32, align 4
Index: llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/on_the_fly_arg_change.ll.initially_disabled.expected
===
--- llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/on_the_fly_arg_change.ll.initially_disabled.expected
+++ llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/on_the_fly_arg_change.ll.initially_disabled.expected
@@ -18,14 +18,14 @@
 ; UTC_ARGS: --enable
 
 define void @check_lines_2() {
-; CHECK-LABEL: define {{[^@]+}}@check_lines_2()
+; CHECK-LABEL: define {{[^@]+}}@check_lines_2() {
 ; CHECK-NEXT:ret void
 ;
   ret void
 }
 
 define void @scrub() {
-; CHECK-LABEL: define {{[^@]+}}@scrub()
+; CHECK-LABEL: define {{[^@]+}}@scrub() {
 ; CHECK-NEXT:call void @foo()
 ; CHECK-NEXT:ret void
 ;
@@ -35,7 +35,7 @@
 
 define i32 @signature(i32 %arg) {
 ; CHECK-LABEL: define {{[^@]+}}@signature
-; CHECK-SAME: (i32 [[ARG:%.*]])
+; CHECK-SAME: (i32 [[ARG:%.*]]) {
 ; CHECK-NEXT:ret i32 [[ARG]]
 ;
   ret i32 %arg
Index: llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/on_the_fly_arg_change.ll.expected
===
--- llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/on_the_fly_arg_change.ll.expected
+++ llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/on_the_fly_arg_change.ll.expected
@@ -4,7 +4,7 @@
 declare void @foo()
 
 define void @check_lines_1() {
-; CHECK-LABEL: define {{[^@]+}}@check_lines_1()
+; CHECK-LABEL: define {{[^@]+}}@check_lines_1() {
 ; CHECK-NEXT:ret void
 ;
   ret void
@@ -21,14 +21,14 @@
 ; UTC_ARGS: --enable
 
 define void @check_lines_2() {
-; CHECK-LABEL: define {{[^@]+}}@check_lines_2()
+; CHECK-LABEL: define {{[^@]+}}@check_lines_2() {
 ; CHECK-NEXT:ret void
 ;
   ret void
 }
 
 define void @scrub() {
-; CHECK-LABEL: define {{[^@]+}}@scrub()
+; CHECK-LABEL: define {{[^@]+}}@scrub() {
 ; 

[PATCH] D83629: [Utils] Check function attributes in update_test_checks

2020-07-19 Thread Stefan Stipanovic via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rG937bad3594e7: [Utils] Check function attributes in 
update_test_checks (authored by sstefan1).
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

Changed prior to commit:
  https://reviews.llvm.org/D83629?vs=278295=279102#toc

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D83629/new/

https://reviews.llvm.org/D83629

Files:
  clang/test/utils/update_cc_test_checks/Inputs/check-attributes.cpp
  
clang/test/utils/update_cc_test_checks/Inputs/check-attributes.cpp.funcattrs.expected
  
clang/test/utils/update_cc_test_checks/Inputs/check-attributes.cpp.plain.expected
  clang/test/utils/update_cc_test_checks/check_attrs.test
  llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/check_attrs.ll
  
llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/check_attrs.ll.funcattrs.expected
  
llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/check_attrs.ll.plain.expected
  llvm/test/tools/UpdateTestChecks/update_test_checks/check_attrs.test
  llvm/utils/UpdateTestChecks/asm.py
  llvm/utils/UpdateTestChecks/common.py
  llvm/utils/update_analyze_test_checks.py
  llvm/utils/update_cc_test_checks.py
  llvm/utils/update_test_checks.py

Index: llvm/utils/update_test_checks.py
===
--- llvm/utils/update_test_checks.py
+++ llvm/utils/update_test_checks.py
@@ -52,6 +52,8 @@
   help='Keep function signature information around for the check line')
   parser.add_argument('--scrub-attributes', action='store_true',
   help='Remove attribute annotations (#0) from the end of check line')
+  parser.add_argument('--check-attributes', action='store_true',
+  help='Check "Function Attributes" for functions')
   parser.add_argument('tests', nargs='+')
   initial_args = common.parse_commandline_args(parser)
 
@@ -111,7 +113,7 @@
   common.build_function_body_dictionary(
   common.OPT_FUNCTION_RE, common.scrub_body, [],
   raw_tool_output, prefixes, func_dict, ti.args.verbose,
-  ti.args.function_signature)
+  ti.args.function_signature, ti.args.check_attributes)
 
 is_in_function = False
 is_in_function_start = False
Index: llvm/utils/update_cc_test_checks.py
===
--- llvm/utils/update_cc_test_checks.py
+++ llvm/utils/update_cc_test_checks.py
@@ -131,6 +131,8 @@
   help='Use more regex for x86 matching to reduce diffs between various subtargets')
   parser.add_argument('--function-signature', action='store_true',
   help='Keep function signature information around for the check line')
+  parser.add_argument('--check-attributes', action='store_true',
+  help='Check "Function Attributes" for functions')
   parser.add_argument('tests', nargs='+')
   args = common.parse_commandline_args(parser)
 
@@ -189,7 +191,7 @@
   if '-emit-llvm' in clang_args:
 common.build_function_body_dictionary(
 common.OPT_FUNCTION_RE, common.scrub_body, [],
-raw_tool_output, prefixes, func_dict, args.verbose, args.function_signature)
+raw_tool_output, prefixes, func_dict, args.verbose, args.function_signature, args.check_attributes)
   else:
 print('The clang command line should include -emit-llvm as asm tests '
   'are discouraged in Clang testsuite.', file=sys.stderr)
Index: llvm/utils/update_analyze_test_checks.py
===
--- llvm/utils/update_analyze_test_checks.py
+++ llvm/utils/update_analyze_test_checks.py
@@ -122,7 +122,7 @@
   for raw_tool_output in re.split(r'Printing analysis ', raw_tool_outputs):
 common.build_function_body_dictionary(
   common.ANALYZE_FUNCTION_RE, common.scrub_body, [],
-  raw_tool_output, prefixes, func_dict, args.verbose, False)
+  raw_tool_output, prefixes, func_dict, args.verbose, False, False)
 
 is_in_function = False
 is_in_function_start = False
Index: llvm/utils/UpdateTestChecks/common.py
===
--- llvm/utils/UpdateTestChecks/common.py
+++ llvm/utils/UpdateTestChecks/common.py
@@ -142,7 +142,7 @@
 UTC_ADVERT = 'NOTE: Assertions have been autogenerated by '
 
 OPT_FUNCTION_RE = re.compile(
-r'^\s*define\s+(?:internal\s+)?[^@]*@(?P[\w.-]+?)\s*'
+r'^(\s*;\s*Function\sAttrs:\s(?P[\w\s]+?))?\s*define\s+(?:internal\s+)?[^@]*@(?P[\w.-]+?)\s*'
 r'(?P\((\)|(.*?[\w.-]+?)\))[^{]*)\{\n(?P.*?)^\}$',
 flags=(re.M | re.S))
 
@@ -218,11 +218,12 @@
 
 # Build up a dictionary of all the function bodies.
 class function_body(object):
-  def __init__(self, string, extra, args_and_sig):
+  def __init__(self, string, extra, args_and_sig, attrs):
 

[PATCH] D81031: [OpenMP] Add Additional Function Attribute Information to OMPKinds.def

2020-07-17 Thread Stefan Stipanovic via Phabricator via cfe-commits
sstefan1 added a comment.

Just in case you haven't seen already, `clang/test/OpenMP/barrier_codegen.cpp` 
needs to be updated as well.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D81031/new/

https://reviews.llvm.org/D81031



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D83176: [OpenMPIRBuilder][Fix] Move llvm::omp::types to OpenMPIRBuilder.

2020-07-08 Thread Stefan Stipanovic via Phabricator via cfe-commits
This revision was not accepted when it landed; it landed in state "Needs 
Review".
This revision was automatically updated to reflect the committed changes.
Closed by commit rG6aab27ba851f: [OpenMPIRBuilder][Fix] Move llvm::omp::types 
to OpenMPIRBuilder. (authored by sstefan1).

Changed prior to commit:
  https://reviews.llvm.org/D83176?vs=275549=275711#toc

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D83176/new/

https://reviews.llvm.org/D83176

Files:
  clang/lib/CodeGen/CGDecl.cpp
  clang/lib/CodeGen/CGExpr.cpp
  clang/lib/CodeGen/CGOpenMPRuntime.cpp
  clang/lib/CodeGen/CGOpenMPRuntime.h
  clang/lib/CodeGen/CGStmtOpenMP.cpp
  clang/lib/CodeGen/CodeGenFunction.cpp
  clang/lib/CodeGen/CodeGenModule.cpp
  clang/lib/CodeGen/CodeGenModule.h
  llvm/include/llvm/Frontend/OpenMP/OMPConstants.h
  llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
  llvm/lib/Frontend/OpenMP/OMPConstants.cpp
  llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
  llvm/lib/Transforms/IPO/OpenMPOpt.cpp
  llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp

Index: llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
===
--- llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
+++ llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
@@ -19,7 +19,6 @@
 
 using namespace llvm;
 using namespace omp;
-using namespace types;
 
 namespace {
 
@@ -50,7 +49,6 @@
   void TearDown() override {
 BB = nullptr;
 M.reset();
-uninitializeTypes();
   }
 
   LLVMContext Ctx;
Index: llvm/lib/Transforms/IPO/OpenMPOpt.cpp
===
--- llvm/lib/Transforms/IPO/OpenMPOpt.cpp
+++ llvm/lib/Transforms/IPO/OpenMPOpt.cpp
@@ -29,7 +29,6 @@
 
 using namespace llvm;
 using namespace omp;
-using namespace types;
 
 #define DEBUG_TYPE "openmp-opt"
 
@@ -263,11 +262,11 @@
   ICV.InitValue = nullptr; \
   break;   \
 case ICV_ZERO: \
-  ICV.InitValue =  \
-  ConstantInt::get(Type::getInt32Ty(Int32->getContext()), 0);  \
+  ICV.InitValue = ConstantInt::get(\
+  Type::getInt32Ty(OMPBuilder.Int32->getContext()), 0);\
   break;   \
 case ICV_FALSE:\
-  ICV.InitValue = ConstantInt::getFalse(Int1->getContext());   \
+  ICV.InitValue = ConstantInt::getFalse(OMPBuilder.Int1->getContext());\
   break;   \
 case ICV_LAST: \
   break;   \
@@ -332,16 +331,39 @@
 
 Module  = *((*ModuleSlice.begin())->getParent());
 
+// Helper macros for handling __VA_ARGS__ in OMP_RTL
+#define OMP_TYPE(VarName, ...) \
+  Type *VarName = OMPBuilder.VarName;  \
+  (void)VarName;
+
+#define OMP_ARRAY_TYPE(VarName, ...)   \
+  ArrayType *VarName##Ty = OMPBuilder.VarName##Ty; \
+  (void)VarName##Ty;   \
+  PointerType *VarName##PtrTy = OMPBuilder.VarName##PtrTy; \
+  (void)VarName##PtrTy;
+
+#define OMP_FUNCTION_TYPE(VarName, ...)\
+  FunctionType *VarName = OMPBuilder.VarName;  \
+  (void)VarName;   \
+  PointerType *VarName##Ptr = OMPBuilder.VarName##Ptr; \
+  (void)VarName##Ptr;
+
+#define OMP_STRUCT_TYPE(VarName, ...)  \
+  StructType *VarName = OMPBuilder.VarName;\
+  (void)VarName;   \
+  PointerType *VarName##Ptr = OMPBuilder.VarName##Ptr; \
+  (void)VarName##Ptr;
+
 #define OMP_RTL(_Enum, _Name, _IsVarArg, _ReturnType, ...) \
   {\
 SmallVector ArgsTypes({__VA_ARGS__});   \
 Function *F = M.getFunction(_Name);\
-if (declMatchesRTFTypes(F, _ReturnType, ArgsTypes)) {  \
+if (declMatchesRTFTypes(F, OMPBuilder._ReturnType, ArgsTypes)) {   \
   auto  = RFIs[_Enum]; \
   

[PATCH] D83176: [OpenMPIRBuilder][Fix] Move llvm::omp::types to OpenMPIRBuilder.

2020-07-08 Thread Stefan Stipanovic via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rG6aab27ba851f: [OpenMPIRBuilder][Fix] Move llvm::omp::types 
to OpenMPIRBuilder. (authored by sstefan1).

Changed prior to commit:
  https://reviews.llvm.org/D83176?vs=275549=276445#toc

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D83176/new/

https://reviews.llvm.org/D83176

Files:
  clang/lib/CodeGen/CGDecl.cpp
  clang/lib/CodeGen/CGExpr.cpp
  clang/lib/CodeGen/CGOpenMPRuntime.cpp
  clang/lib/CodeGen/CGOpenMPRuntime.h
  clang/lib/CodeGen/CGStmtOpenMP.cpp
  clang/lib/CodeGen/CodeGenFunction.cpp
  clang/lib/CodeGen/CodeGenModule.cpp
  clang/lib/CodeGen/CodeGenModule.h
  llvm/include/llvm/Frontend/OpenMP/OMPConstants.h
  llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
  llvm/lib/Frontend/OpenMP/OMPConstants.cpp
  llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
  llvm/lib/Transforms/IPO/OpenMPOpt.cpp
  llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp

Index: llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
===
--- llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
+++ llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
@@ -19,7 +19,6 @@
 
 using namespace llvm;
 using namespace omp;
-using namespace types;
 
 namespace {
 
@@ -50,7 +49,6 @@
   void TearDown() override {
 BB = nullptr;
 M.reset();
-uninitializeTypes();
   }
 
   LLVMContext Ctx;
Index: llvm/lib/Transforms/IPO/OpenMPOpt.cpp
===
--- llvm/lib/Transforms/IPO/OpenMPOpt.cpp
+++ llvm/lib/Transforms/IPO/OpenMPOpt.cpp
@@ -29,7 +29,6 @@
 
 using namespace llvm;
 using namespace omp;
-using namespace types;
 
 #define DEBUG_TYPE "openmp-opt"
 
@@ -263,11 +262,11 @@
   ICV.InitValue = nullptr; \
   break;   \
 case ICV_ZERO: \
-  ICV.InitValue =  \
-  ConstantInt::get(Type::getInt32Ty(Int32->getContext()), 0);  \
+  ICV.InitValue = ConstantInt::get(\
+  Type::getInt32Ty(OMPBuilder.Int32->getContext()), 0);\
   break;   \
 case ICV_FALSE:\
-  ICV.InitValue = ConstantInt::getFalse(Int1->getContext());   \
+  ICV.InitValue = ConstantInt::getFalse(OMPBuilder.Int1->getContext());\
   break;   \
 case ICV_LAST: \
   break;   \
@@ -332,16 +331,39 @@
 
 Module  = *((*ModuleSlice.begin())->getParent());
 
+// Helper macros for handling __VA_ARGS__ in OMP_RTL
+#define OMP_TYPE(VarName, ...) \
+  Type *VarName = OMPBuilder.VarName;  \
+  (void)VarName;
+
+#define OMP_ARRAY_TYPE(VarName, ...)   \
+  ArrayType *VarName##Ty = OMPBuilder.VarName##Ty; \
+  (void)VarName##Ty;   \
+  PointerType *VarName##PtrTy = OMPBuilder.VarName##PtrTy; \
+  (void)VarName##PtrTy;
+
+#define OMP_FUNCTION_TYPE(VarName, ...)\
+  FunctionType *VarName = OMPBuilder.VarName;  \
+  (void)VarName;   \
+  PointerType *VarName##Ptr = OMPBuilder.VarName##Ptr; \
+  (void)VarName##Ptr;
+
+#define OMP_STRUCT_TYPE(VarName, ...)  \
+  StructType *VarName = OMPBuilder.VarName;\
+  (void)VarName;   \
+  PointerType *VarName##Ptr = OMPBuilder.VarName##Ptr; \
+  (void)VarName##Ptr;
+
 #define OMP_RTL(_Enum, _Name, _IsVarArg, _ReturnType, ...) \
   {\
 SmallVector ArgsTypes({__VA_ARGS__});   \
 Function *F = M.getFunction(_Name);\
-if (declMatchesRTFTypes(F, _ReturnType, ArgsTypes)) {  \
+if (declMatchesRTFTypes(F, OMPBuilder._ReturnType, ArgsTypes)) {   \
   auto  = RFIs[_Enum]; \
   RFI.Kind = _Enum;\
   RFI.Name 

[PATCH] D83176: [OpenMPIRBuilder][Fix] Move llvm::omp::types to OpenMPIRBuilder.

2020-07-05 Thread Stefan Stipanovic via Phabricator via cfe-commits
sstefan1 updated this revision to Diff 275549.
sstefan1 added a comment.

small fix


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D83176/new/

https://reviews.llvm.org/D83176

Files:
  clang/lib/CodeGen/CGDecl.cpp
  clang/lib/CodeGen/CGExpr.cpp
  clang/lib/CodeGen/CGOpenMPRuntime.cpp
  clang/lib/CodeGen/CGOpenMPRuntime.h
  clang/lib/CodeGen/CGStmtOpenMP.cpp
  clang/lib/CodeGen/CodeGenFunction.cpp
  clang/lib/CodeGen/CodeGenModule.cpp
  clang/lib/CodeGen/CodeGenModule.h
  llvm/include/llvm/Frontend/OpenMP/OMPConstants.h
  llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
  llvm/lib/Frontend/OpenMP/OMPConstants.cpp
  llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
  llvm/lib/Transforms/IPO/OpenMPOpt.cpp
  llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp

Index: llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
===
--- llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
+++ llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
@@ -19,7 +19,6 @@
 
 using namespace llvm;
 using namespace omp;
-using namespace types;
 
 namespace {
 
@@ -50,7 +49,6 @@
   void TearDown() override {
 BB = nullptr;
 M.reset();
-uninitializeTypes();
   }
 
   LLVMContext Ctx;
Index: llvm/lib/Transforms/IPO/OpenMPOpt.cpp
===
--- llvm/lib/Transforms/IPO/OpenMPOpt.cpp
+++ llvm/lib/Transforms/IPO/OpenMPOpt.cpp
@@ -29,7 +29,6 @@
 
 using namespace llvm;
 using namespace omp;
-using namespace types;
 
 #define DEBUG_TYPE "openmp-opt"
 
@@ -224,11 +223,11 @@
   ICV.InitValue = nullptr; \
   break;   \
 case ICV_ZERO: \
-  ICV.InitValue =  \
-  ConstantInt::get(Type::getInt32Ty(Int32->getContext()), 0);  \
+  ICV.InitValue = ConstantInt::get(\
+  Type::getInt32Ty(OMPBuilder.Int32->getContext()), 0);\
   break;   \
 case ICV_FALSE:\
-  ICV.InitValue = ConstantInt::getFalse(Int1->getContext());   \
+  ICV.InitValue = ConstantInt::getFalse(OMPBuilder.Int1->getContext());\
   break;   \
 case ICV_LAST: \
   break;   \
@@ -293,11 +292,26 @@
 
 Module  = *((*ModuleSlice.begin())->getParent());
 
+// Helper macros for handling __VA_ARGS__ in OMP_RTL
+#define OMP_TYPE(VarName, ...) Type *VarName = OMPBuilder.VarName;
+
+#define OMP_ARRAY_TYPE(VarName, ...)   \
+  ArrayType *VarName##Ty = OMPBuilder.VarName##Ty; \
+  PointerType *VarName##PtrTy = OMPBuilder.VarName##PtrTy;
+
+#define OMP_FUNCTION_TYPE(VarName, ...)\
+  FunctionType *VarName = OMPBuilder.VarName;  \
+  PointerType *VarName##Ptr = OMPBuilder.VarName##Ptr;
+
+#define OMP_STRUCT_TYPE(VarName, ...)  \
+  StructType *VarName = OMPBuilder.VarName;\
+  PointerType *VarName##Ptr = OMPBuilder.VarName##Ptr;
+
 #define OMP_RTL(_Enum, _Name, _IsVarArg, _ReturnType, ...) \
   {\
 SmallVector ArgsTypes({__VA_ARGS__});   \
 Function *F = M.getFunction(_Name);\
-if (declMatchesRTFTypes(F, _ReturnType, ArgsTypes)) {  \
+if (declMatchesRTFTypes(F, OMPBuilder._ReturnType, ArgsTypes)) {   \
   auto  = RFIs[_Enum]; \
   RFI.Kind = _Enum;\
   RFI.Name = _Name;\
@@ -553,11 +567,11 @@
"Unexpected replacement value!");
 
 // TODO: Use dominance to find a good position instead.
-auto CanBeMoved = [](CallBase ) {
+auto CanBeMoved = [this](CallBase ) {
   unsigned NumArgs = CB.getNumArgOperands();
   if (NumArgs == 0)
 return true;
-  if (CB.getArgOperand(0)->getType() != IdentPtr)
+  if (CB.getArgOperand(0)->getType() != OMPInfoCache.OMPBuilder.IdentPtr)
 return false;
   for (unsigned u = 1; u < NumArgs; ++u)
 if (isa(CB.getArgOperand(u)))
@@ -592,7 +606,7 @@
 // existing and used by one of the calls, or created 

[PATCH] D83176: [OpenMPIRBuilder][Fix] Move llvm::omp::types to OpenMPIRBuilder.

2020-07-05 Thread Stefan Stipanovic via Phabricator via cfe-commits
sstefan1 marked an inline comment as done.
sstefan1 added a subscriber: hoyFB.
sstefan1 added a comment.

Since this is not a small change, I think it would be good if @hoyFB could test 
if this resolves the issue.

There is one small issue though:




Comment at: llvm/lib/Transforms/IPO/OpenMPOpt.cpp:313
   {
\
 SmallVector ArgsTypes({__VA_ARGS__});   
\
 Function *F = M.getFunction(_Name);
\

I wasn't sure how to handle `__VA_ARGS__` here, since we would need 
`OMPBuilder` in front of every type. 
That is why helper macros above exist. The problem with this is that this 
creates some unused variables in `OpenMPOpt`.

Not sure if `-Wno-unused-variable` would be a good thing to do temporarily? Is 
there another way to handle `__VA_ARGS__` here?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D83176/new/

https://reviews.llvm.org/D83176



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D83176: [OpenMPIRBuilder][Fix] Move llvm::omp::types to OpenMPIRBuilder.

2020-07-05 Thread Stefan Stipanovic via Phabricator via cfe-commits
sstefan1 created this revision.
sstefan1 added a reviewer: jdoerfert.
Herald added subscribers: llvm-commits, cfe-commits, aaron.ballman, dexonsmith, 
guansong, hiraditya, yaxunl.
Herald added projects: clang, LLVM.

D82193  exposed a problem with global type 
definitions in
`OMPConstants.h`. This causes a race when running in thinLTO mode.
Types now live inside of OpenMPIRBuilder to prevent this from happening.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D83176

Files:
  clang/lib/CodeGen/CGDecl.cpp
  clang/lib/CodeGen/CGExpr.cpp
  clang/lib/CodeGen/CGOpenMPRuntime.cpp
  clang/lib/CodeGen/CGOpenMPRuntime.h
  clang/lib/CodeGen/CGStmtOpenMP.cpp
  clang/lib/CodeGen/CodeGenFunction.cpp
  clang/lib/CodeGen/CodeGenModule.cpp
  clang/lib/CodeGen/CodeGenModule.h
  llvm/include/llvm/Frontend/OpenMP/OMPConstants.h
  llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
  llvm/lib/Frontend/OpenMP/OMPConstants.cpp
  llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
  llvm/lib/Transforms/IPO/OpenMPOpt.cpp
  llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp

Index: llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
===
--- llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
+++ llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
@@ -19,7 +19,6 @@
 
 using namespace llvm;
 using namespace omp;
-using namespace types;
 
 namespace {
 
@@ -50,7 +49,6 @@
   void TearDown() override {
 BB = nullptr;
 M.reset();
-uninitializeTypes();
   }
 
   LLVMContext Ctx;
Index: llvm/lib/Transforms/IPO/OpenMPOpt.cpp
===
--- llvm/lib/Transforms/IPO/OpenMPOpt.cpp
+++ llvm/lib/Transforms/IPO/OpenMPOpt.cpp
@@ -29,7 +29,6 @@
 
 using namespace llvm;
 using namespace omp;
-using namespace types;
 
 #define DEBUG_TYPE "openmp-opt"
 
@@ -224,11 +223,11 @@
   ICV.InitValue = nullptr; \
   break;   \
 case ICV_ZERO: \
-  ICV.InitValue =  \
-  ConstantInt::get(Type::getInt32Ty(Int32->getContext()), 0);  \
+  ICV.InitValue = ConstantInt::get(\
+  Type::getInt32Ty(OMPBuilder.Int32->getContext()), 0);\
   break;   \
 case ICV_FALSE:\
-  ICV.InitValue = ConstantInt::getFalse(Int1->getContext());   \
+  ICV.InitValue = ConstantInt::getFalse(OMPBuilder.Int1->getContext());\
   break;   \
 case ICV_LAST: \
   break;   \
@@ -293,11 +292,27 @@
 
 Module  = *((*ModuleSlice.begin())->getParent());
 
+// Helper macros for handling __VA_ARGS__ in OMP_RTL
+#define OMP_TYPE(VarName, ...) Type *VarName = OMPBuilder.VarName;
+
+#define OMP_ARRAY_TYPE(VarName, ...)   \
+  ArrayType *VarName##Ty = OMPBuilder.VarName##Ty; \
+  PointerType *VarName##PtrTy = OMPBuilder.VarName##PtrTy;
+
+#define OMP_FUNCTION_TYPE(VarName, ...)\
+  FunctionType *VarName = OMPBuilder.VarName;  \
+  PointerType *VarName##Ptr = OMPBuilder.VarName##Ptr;
+
+#define OMP_STRUCT_TYPE(VarName, ...)  \
+  StructType *VarName = OMPBuilder.VarName;\
+  PointerType *VarName##Ptr = OMPBuilder.VarName##Ptr;
+#include "llvm/Frontend/OpenMP/OMPKinds.def"
+
 #define OMP_RTL(_Enum, _Name, _IsVarArg, _ReturnType, ...) \
   {\
 SmallVector ArgsTypes({__VA_ARGS__});   \
 Function *F = M.getFunction(_Name);\
-if (declMatchesRTFTypes(F, _ReturnType, ArgsTypes)) {  \
+if (declMatchesRTFTypes(F, OMPBuilder._ReturnType, ArgsTypes)) {   \
   auto  = RFIs[_Enum]; \
   RFI.Kind = _Enum;\
   RFI.Name = _Name;\
@@ -553,11 +568,11 @@
"Unexpected replacement value!");
 
 // TODO: Use dominance to find a good position instead.
-auto CanBeMoved = [](CallBase ) {
+auto CanBeMoved = [this](CallBase ) {
   unsigned NumArgs = CB.getNumArgOperands();
   if (NumArgs == 

[PATCH] D75010: [OpenMP] Adding InaccessibleMemOnly and InaccessibleMemOrArgMemOnly for runtime calls.

2020-03-25 Thread Stefan Stipanovic via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rG72b51d6f93b5: OpenMP] Adding InaccessibleMemOnly and 
InaccessibleMemOrArgMemOnly for runtimeā€¦ (authored by sstefan1).

Changed prior to commit:
  https://reviews.llvm.org/D75010?vs=250599=252572#toc

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D75010/new/

https://reviews.llvm.org/D75010

Files:
  clang/test/OpenMP/barrier_codegen.cpp
  llvm/include/llvm/Frontend/OpenMP/OMPKinds.def
  llvm/test/Transforms/OpenMP/add_attributes.ll
  llvm/test/Transforms/OpenMP/parallel_deletion.ll

Index: llvm/test/Transforms/OpenMP/parallel_deletion.ll
===
--- llvm/test/Transforms/OpenMP/parallel_deletion.ll
+++ llvm/test/Transforms/OpenMP/parallel_deletion.ll
@@ -1,4 +1,4 @@
-; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature
 ; RUN: opt -S -attributor -openmpopt -attributor-disable=false < %s | FileCheck %s
 ; RUN: opt -S -passes='attributor,cgscc(openmpopt)' -attributor-disable=false < %s | FileCheck %s
 ;
@@ -142,7 +142,7 @@
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:[[A:%.*]] = alloca i32, align 4
 ; CHECK-NEXT:[[TMP:%.*]] = bitcast i32* [[A]] to i8*
-; CHECK-NEXT:call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull align 4 dereferenceable(4) [[TMP]])
+; CHECK-NEXT:call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull align 4 dereferenceable(4) [[TMP]]) #0
 ; CHECK-NEXT:store i32 0, i32* [[A]], align 4
 ; CHECK-NEXT:call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* nonnull align 8 dereferenceable(24) @0, i32 1, void (i32*, i32*, ...)* nonnull bitcast (void (i32*, i32*, i32*)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i32* nocapture nofree nonnull align 4 dereferenceable(4) [[A]])
 ; CHECK-NEXT:call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* nonnull align 8 dereferenceable(24) @0, i32 1, void (i32*, i32*, ...)* nonnull bitcast (void (i32*, i32*, i32*)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i32* nocapture nonnull align 4 dereferenceable(4) [[A]])
Index: llvm/test/Transforms/OpenMP/add_attributes.ll
===
--- llvm/test/Transforms/OpenMP/add_attributes.ll
+++ llvm/test/Transforms/OpenMP/add_attributes.ll
@@ -9,6 +9,7 @@
 
 %struct.omp_lock_t = type { i8* }
 %struct.omp_nest_lock_t = type { i8* }
+%struct.ident_t = type { i32, i32, i32, i32, i8* }
 
 define void @call_all(i32 %schedule, %struct.omp_lock_t* %lock, i32 %lock_hint, %struct.omp_nest_lock_t* %nest_lock, i32 %i, i8* %s, i64 %st, i8* %vp, double %d, i32 %proc_bind, i64 %allocator_handle, i8* %cp, i64 %event_handle, i32 %pause_resource) {
 entry:
@@ -460,6 +461,40 @@
 
 declare dso_local i32 @omp_get_supported_active_levels()
 
+declare void @__kmpc_barrier(%struct.ident_t*, i32)
+
+declare i32 @__kmpc_cancel(%struct.ident_t*, i32, i32)
+
+declare i32 @__kmpc_cancel_barrier(%struct.ident_t*, i32)
+
+declare void @__kmpc_flush(%struct.ident_t*)
+
+declare i32 @__kmpc_global_thread_num(%struct.ident_t*)
+
+declare void @__kmpc_fork_call(%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...)
+
+declare i32 @__kmpc_omp_taskwait(%struct.ident_t*, i32)
+
+declare i32 @__kmpc_omp_taskyield(%struct.ident_t*, i32, i32)
+
+declare void @__kmpc_push_num_threads(%struct.ident_t*, i32, i32)
+
+declare void @__kmpc_push_proc_bind(%struct.ident_t*, i32, i32)
+
+declare void @__kmpc_serialized_parallel(%struct.ident_t*, i32)
+
+declare void @__kmpc_end_serialized_parallel(%struct.ident_t*, i32)
+
+declare i32 @__kmpc_master(%struct.ident_t*, i32)
+
+declare void @__kmpc_end_master(%struct.ident_t*, i32)
+
+declare void @__kmpc_critical(%struct.ident_t*, i32, [8 x i32]*)
+
+declare void @__kmpc_critical_with_hint(%struct.ident_t*, i32, [8 x i32]*, i32)
+
+declare void @__kmpc_end_critical(%struct.ident_t*, i32, [8 x i32]*)
+
 ; CHECK: ; Function Attrs: nounwind
 ; CHECK-NEXT: declare dso_local void @omp_set_num_threads(i32)
 
@@ -685,67 +720,118 @@
 ; CHECK: ; Function Attrs: nounwind
 ; CHECK-NEXT: declare dso_local i32 @omp_get_supported_active_levels() #0
 
-; OPTIMISTIC: ; Function Attrs: nofree nosync nounwind writeonly
+; CHECK: Function Attrs: inaccessiblemem_or_argmemonly
+; CHECK-NEXT: declare void @__kmpc_barrier(%struct.ident_t*, i32)
+
+; CHECK: Function Attrs: inaccessiblemem_or_argmemonly
+; CHECK-NEXT: declare i32 @__kmpc_cancel(%struct.ident_t*, i32, i32)
+
+; CHECK: Function Attrs: inaccessiblemem_or_argmemonly
+; CHECK-NEXT: declare i32 @__kmpc_cancel_barrier(%struct.ident_t*, i32)
+
+; CHECK: Function Attrs: inaccessiblemem_or_argmemonly
+; CHECK-NEXT: declare void @__kmpc_flush(%struct.ident_t*)
+
+; CHECK: Function Attrs: nounwind
+; 

[PATCH] D75010: [OpenMP] Adding InaccessibleMemOnly and InaccessibleMemOrArgMemOnly for runtime calls.

2020-03-16 Thread Stefan Stipanovic via Phabricator via cfe-commits
sstefan1 updated this revision to Diff 250599.
sstefan1 added a comment.

more tests

couldn't get `update_test_checks.py` to update function signatures, even with 
the flag.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D75010/new/

https://reviews.llvm.org/D75010

Files:
  clang/test/OpenMP/barrier_codegen.cpp
  llvm/include/llvm/Frontend/OpenMP/OMPKinds.def
  llvm/test/Transforms/OpenMP/add_attributes.ll
  llvm/test/Transforms/OpenMP/parallel_deletion.ll

Index: llvm/test/Transforms/OpenMP/parallel_deletion.ll
===
--- llvm/test/Transforms/OpenMP/parallel_deletion.ll
+++ llvm/test/Transforms/OpenMP/parallel_deletion.ll
@@ -1,4 +1,4 @@
-; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature
 ; RUN: opt -S -attributor -openmpopt -attributor-disable=false < %s | FileCheck %s
 ; RUN: opt -S -passes='attributor,cgscc(openmpopt)' -attributor-disable=false < %s | FileCheck %s
 ;
@@ -142,7 +142,7 @@
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:[[A:%.*]] = alloca i32, align 4
 ; CHECK-NEXT:[[TMP:%.*]] = bitcast i32* [[A]] to i8*
-; CHECK-NEXT:call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull align 4 dereferenceable(4) [[TMP]])
+; CHECK-NEXT:call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull align 4 dereferenceable(4) [[TMP]]) #0
 ; CHECK-NEXT:store i32 0, i32* [[A]], align 4
 ; CHECK-NEXT:call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* nonnull align 8 dereferenceable(24) @0, i32 1, void (i32*, i32*, ...)* nonnull bitcast (void (i32*, i32*, i32*)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i32* nocapture nofree nonnull align 4 dereferenceable(4) [[A]])
 ; CHECK-NEXT:call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* nonnull align 8 dereferenceable(24) @0, i32 1, void (i32*, i32*, ...)* nonnull bitcast (void (i32*, i32*, i32*)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i32* nocapture nonnull align 4 dereferenceable(4) [[A]])
Index: llvm/test/Transforms/OpenMP/add_attributes.ll
===
--- llvm/test/Transforms/OpenMP/add_attributes.ll
+++ llvm/test/Transforms/OpenMP/add_attributes.ll
@@ -9,6 +9,7 @@
 
 %struct.omp_lock_t = type { i8* }
 %struct.omp_nest_lock_t = type { i8* }
+%struct.ident_t = type { i32, i32, i32, i32, i8* }
 
 define void @call_all(i32 %schedule, %struct.omp_lock_t* %lock, i32 %lock_hint, %struct.omp_nest_lock_t* %nest_lock, i32 %i, i8* %s, i64 %st, i8* %vp, double %d, i32 %proc_bind, i64 %allocator_handle, i8* %cp, i64 %event_handle, i32 %pause_resource) {
 entry:
@@ -460,6 +461,40 @@
 
 declare dso_local i32 @omp_get_supported_active_levels()
 
+declare void @__kmpc_barrier(%struct.ident_t*, i32)
+
+declare i32 @__kmpc_cancel(%struct.ident_t*, i32, i32)
+
+declare i32 @__kmpc_cancel_barrier(%struct.ident_t*, i32)
+
+declare void @__kmpc_flush(%struct.ident_t*)
+
+declare i32 @__kmpc_global_thread_num(%struct.ident_t*)
+
+declare void @__kmpc_fork_call(%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...)
+
+declare i32 @__kmpc_omp_taskwait(%struct.ident_t*, i32)
+
+declare i32 @__kmpc_omp_taskyield(%struct.ident_t*, i32, i32)
+
+declare void @__kmpc_push_num_threads(%struct.ident_t*, i32, i32)
+
+declare void @__kmpc_push_proc_bind(%struct.ident_t*, i32, i32)
+
+declare void @__kmpc_serialized_parallel(%struct.ident_t*, i32)
+
+declare void @__kmpc_end_serialized_parallel(%struct.ident_t*, i32)
+
+declare i32 @__kmpc_master(%struct.ident_t*, i32)
+
+declare i32 @__kmpc_end_master(%struct.ident_t*, i32)
+
+declare void @__kmpc_critical(%struct.ident_t*, i32, [8 x i32])
+
+declare void @__kmpc_critical_with_hint(%struct.ident_t*, i32, [8 x i32], i32)
+
+declare void @__kmpc_end_critical(%struct.ident_t*, i32, [8 x i32])
+
 ; CHECK: ; Function Attrs: nounwind
 ; CHECK-NEXT: declare dso_local void @omp_set_num_threads(i32)
 
@@ -685,67 +720,118 @@
 ; CHECK: ; Function Attrs: nounwind
 ; CHECK-NEXT: declare dso_local i32 @omp_get_supported_active_levels() #0
 
-; OPTIMISTIC: ; Function Attrs: nofree nosync nounwind writeonly
+; CHECK: Function Attrs: inaccessiblemem_or_argmemonly
+; CHECK-NEXT: declare void @__kmpc_barrier(%struct.ident_t*, i32)
+
+; CHECK: Function Attrs: inaccessiblemem_or_argmemonly
+; CHECK-NEXT: declare i32 @__kmpc_cancel(%struct.ident_t*, i32, i32)
+
+; CHECK: Function Attrs: inaccessiblemem_or_argmemonly
+; CHECK-NEXT: declare i32 @__kmpc_cancel_barrier(%struct.ident_t*, i32)
+
+; CHECK: Function Attrs: inaccessiblemem_or_argmemonly
+; CHECK-NEXT: declare void @__kmpc_flush(%struct.ident_t*)
+
+; CHECK: Function Attrs: nounwind
+; CHECK-NEXT: declare i32 @__kmpc_global_thread_num(%struct.ident_t*)
+
+; CHECK: Function Attrs: nounwind
+; CHECK-NEXT: 

[PATCH] D75010: [OpenMP] Adding InaccessibleMemOnly and InaccessibleMemOrArgMemOnly for runtime calls.

2020-03-11 Thread Stefan Stipanovic via Phabricator via cfe-commits
sstefan1 updated this revision to Diff 249695.
sstefan1 added a comment.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

fix clang test


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D75010/new/

https://reviews.llvm.org/D75010

Files:
  clang/test/OpenMP/barrier_codegen.cpp
  llvm/include/llvm/Frontend/OpenMP/OMPKinds.def
  llvm/test/Transforms/OpenMP/gtid.ll
  llvm/test/Transforms/OpenMP/parallel_deletion.ll

Index: llvm/test/Transforms/OpenMP/parallel_deletion.ll
===
--- llvm/test/Transforms/OpenMP/parallel_deletion.ll
+++ llvm/test/Transforms/OpenMP/parallel_deletion.ll
@@ -1,6 +1,6 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
-; RUN: opt -S -attributor -openmpopt -attributor-disable=false < %s | FileCheck %s
-; RUN: opt -S -passes='attributor,cgscc(openmpopt)' -attributor-disable=false < %s | FileCheck %s
+; RUN: opt -S -attributor -openmpopt -attributor-disable=false -openmp-ir-builder-optimistic-attributes=true < %s | FileCheck %s
+; RUN: opt -S -passes='attributor,cgscc(openmpopt)' -attributor-disable=false -openmp-ir-builder-optimistic-attributes=true < %s | FileCheck %s
 ;
 target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
 
@@ -25,7 +25,7 @@
 ;
 ; We delete all but the first of the parallel regions in this test.
 define void @delete_parallel_0() {
-; CHECK-LABEL: define {{[^@]+}}@delete_parallel_0()
+; CHECK-LABEL: @delete_parallel_0(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* nonnull align 8 dereferenceable(24) @0, i32 0, void (i32*, i32*, ...)* nonnull bitcast (void (i32*, i32*)* @.omp_outlined.willreturn to void (i32*, i32*, ...)*))
 ; CHECK-NEXT:ret void
@@ -74,7 +74,7 @@
 ;
 ; We delete only the last parallel regions in this test because the others might not return.
 define void @delete_parallel_1() {
-; CHECK-LABEL: define {{[^@]+}}@delete_parallel_1()
+; CHECK-LABEL: @delete_parallel_1(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* nonnull align 8 dereferenceable(24) @0, i32 0, void (i32*, i32*, ...)* nonnull bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*))
 ; CHECK-NEXT:call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* nonnull align 8 dereferenceable(24) @0, i32 0, void (i32*, i32*, ...)* nonnull bitcast (void (i32*, i32*)* @.omp_outlined..0 to void (i32*, i32*, ...)*))
@@ -138,13 +138,13 @@
 ; FIXME: We do not realize that `a` is dead and all accesses to it can be removed
 ;making the parallel regions readonly and deletable.
 define void @delete_parallel_2() {
-; CHECK-LABEL: define {{[^@]+}}@delete_parallel_2()
+; CHECK-LABEL: @delete_parallel_2(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:[[A:%.*]] = alloca i32, align 4
 ; CHECK-NEXT:[[TMP:%.*]] = bitcast i32* [[A]] to i8*
-; CHECK-NEXT:call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull align 4 dereferenceable(4) [[TMP]])
+; CHECK-NEXT:call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull align 4 dereferenceable(4) [[TMP]]) #0
 ; CHECK-NEXT:store i32 0, i32* [[A]], align 4
-; CHECK-NEXT:call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* nonnull align 8 dereferenceable(24) @0, i32 1, void (i32*, i32*, ...)* nonnull bitcast (void (i32*, i32*, i32*)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i32* nocapture nofree nonnull align 4 dereferenceable(4) [[A]])
+; CHECK-NEXT:call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* nonnull align 8 dereferenceable(24) @0, i32 1, void (i32*, i32*, ...)* nonnull bitcast (void (i32*, i32*, i32*)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i32* nocapture nonnull align 4 dereferenceable(4) [[A]])
 ; CHECK-NEXT:call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* nonnull align 8 dereferenceable(24) @0, i32 1, void (i32*, i32*, ...)* nonnull bitcast (void (i32*, i32*, i32*)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i32* nocapture nonnull align 4 dereferenceable(4) [[A]])
 ; CHECK-NEXT:call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* nonnull align 8 dereferenceable(24) @0, i32 1, void (i32*, i32*, ...)* nonnull bitcast (void (i32*, i32*, i32*)* @.omp_outlined..5 to void (i32*, i32*, ...)*), i32* nocapture nonnull align 4 dereferenceable(4) [[A]])
 ; CHECK-NEXT:call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* nonnull align 8 dereferenceable(24) @0, i32 1, void (i32*, i32*, ...)* nonnull bitcast (void (i32*, i32*, i32*)* @.omp_outlined..6