[clang] 5731b66 - Revert "[OpenMP] Fix unused variable"

Kadir Cetinkaya via cfe-commits cfe-commits at lists.llvm.org
Mon Feb 10 07:35:30 PST 2020


Author: Kadir Cetinkaya
Date: 2020-02-10T16:34:59+01:00
New Revision: 5731b6672ded5615f5489c892d7cdc9f4cf1836a

URL: https://github.com/llvm/llvm-project/commit/5731b6672ded5615f5489c892d7cdc9f4cf1836a
DIFF: https://github.com/llvm/llvm-project/commit/5731b6672ded5615f5489c892d7cdc9f4cf1836a.diff

LOG: Revert "[OpenMP] Fix unused variable"

This breaks under asan, see http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fast/builds/38597/steps/check-clang%20asan/logs/stdio

This reverts commit bb5045429545f47a76980864322a637c31594c7f.

Revert "[FIX] Ordering problem accidentally introduced with D72304"

This reverts commit 08c0a06d8f375e48d4acebac886bfdf19a2276ed.

Revert "[OpenMP][OMPIRBuilder] Add Directives (master and critical) to OMPBuilder."

This reverts commit e8a436c5ea26f69378e4c1cf3ddb5b647b201e0f.

Added: 
    

Modified: 
    clang/lib/CodeGen/CGStmtOpenMP.cpp
    clang/test/OpenMP/critical_codegen.cpp
    clang/test/OpenMP/master_codegen.cpp
    llvm/include/llvm/Frontend/OpenMP/OMPConstants.h
    llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
    llvm/include/llvm/Frontend/OpenMP/OMPKinds.def
    llvm/lib/Frontend/OpenMP/OMPConstants.cpp
    llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
    llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/CodeGen/CGStmtOpenMP.cpp b/clang/lib/CodeGen/CGStmtOpenMP.cpp
index b1fc6bb62adb..cd5bbbbf7c05 100644
--- a/clang/lib/CodeGen/CGStmtOpenMP.cpp
+++ b/clang/lib/CodeGen/CGStmtOpenMP.cpp
@@ -3143,147 +3143,11 @@ static void emitMaster(CodeGenFunction &CGF, const OMPExecutableDirective &S) {
 }
 
 void CodeGenFunction::EmitOMPMasterDirective(const OMPMasterDirective &S) {
-  if (llvm::OpenMPIRBuilder *OMPBuilder = CGM.getOpenMPIRBuilder()) {
-    using InsertPointTy = llvm::OpenMPIRBuilder::InsertPointTy;
-
-    const CapturedStmt *CS = S.getInnermostCapturedStmt();
-    const Stmt *MasterRegionBodyStmt = CS->getCapturedStmt();
-
-    // TODO: Replace with a generic helper function for finalization
-    auto FiniCB = [this](InsertPointTy IP) {
-      CGBuilderTy::InsertPointGuard IPG(Builder);
-      assert(IP.getBlock()->end() != IP.getPoint() &&
-             "OpenMP IR Builder should cause terminated block!");
-
-      llvm::BasicBlock *IPBB = IP.getBlock();
-      llvm::BasicBlock *DestBB = IPBB->getUniqueSuccessor();
-      assert(DestBB && "Finalization block should have one successor!");
-
-      // erase and replace with cleanup branch.
-      IPBB->getTerminator()->eraseFromParent();
-      Builder.SetInsertPoint(IPBB);
-      CodeGenFunction::JumpDest Dest = getJumpDestInCurrentScope(DestBB);
-      EmitBranchThroughCleanup(Dest);
-    };
-
-    // TODO: Replace with a generic helper function for emitting body
-    auto BodyGenCB = [MasterRegionBodyStmt, this](InsertPointTy AllocaIP,
-                                                  InsertPointTy CodeGenIP,
-                                                  llvm::BasicBlock &FiniBB) {
-      // Alloca insertion block should be in the entry block of the containing
-      // function So it expects an empty AllocaIP in which case will reuse the
-      // old alloca insertion point, or a new AllocaIP in the same block as the
-      // old one
-      assert((!AllocaIP.isSet() ||
-              AllocaInsertPt->getParent() == AllocaIP.getBlock()) &&
-             "Insertion point should be in the entry block of containing "
-             "function!");
-      auto OldAllocaIP = AllocaInsertPt;
-      if (AllocaIP.isSet())
-        AllocaInsertPt = &*AllocaIP.getPoint();
-      auto OldReturnBlock = ReturnBlock;
-      ReturnBlock = getJumpDestInCurrentScope(&FiniBB);
-
-      llvm::BasicBlock *CodeGenIPBB = CodeGenIP.getBlock();
-      if (llvm::Instruction *CodeGenIPBBTI = CodeGenIPBB->getTerminator())
-        CodeGenIPBBTI->eraseFromParent();
-
-      Builder.SetInsertPoint(CodeGenIPBB);
-
-      EmitStmt(MasterRegionBodyStmt);
-
-      if (Builder.saveIP().isSet())
-        Builder.CreateBr(&FiniBB);
-
-      AllocaInsertPt = OldAllocaIP;
-      ReturnBlock = OldReturnBlock;
-    };
-    CGCapturedStmtInfo CGSI(*CS, CR_OpenMP);
-    CodeGenFunction::CGCapturedStmtRAII CapInfoRAII(*this, &CGSI);
-    Builder.restoreIP(OMPBuilder->CreateMaster(Builder, BodyGenCB, FiniCB));
-
-    return;
-  }
   OMPLexicalScope Scope(*this, S, OMPD_unknown);
   emitMaster(*this, S);
 }
 
 void CodeGenFunction::EmitOMPCriticalDirective(const OMPCriticalDirective &S) {
-  if (llvm::OpenMPIRBuilder *OMPBuilder = CGM.getOpenMPIRBuilder()) {
-    using InsertPointTy = llvm::OpenMPIRBuilder::InsertPointTy;
-
-    const CapturedStmt *CS = S.getInnermostCapturedStmt();
-    const Stmt *CriticalRegionBodyStmt = CS->getCapturedStmt();
-    const Expr *Hint = nullptr;
-    if (const auto *HintClause = S.getSingleClause<OMPHintClause>())
-      Hint = HintClause->getHint();
-
-    // TODO: This is slightly 
diff erent from what's currently being done in
-    // clang. Fix the Int32Ty to IntPtrTy (pointer width size) when everything
-    // about typing is final.
-    llvm::Value *HintInst = nullptr;
-    if (Hint)
-      HintInst =
-          Builder.CreateIntCast(EmitScalarExpr(Hint), CGM.Int32Ty, false);
-
-    // TODO: Replace with a generic helper function for finalization
-    auto FiniCB = [this](InsertPointTy IP) {
-      CGBuilderTy::InsertPointGuard IPG(Builder);
-      assert(IP.getBlock()->end() != IP.getPoint() &&
-             "OpenMP IR Builder should cause terminated block!");
-      llvm::BasicBlock *IPBB = IP.getBlock();
-      llvm::BasicBlock *DestBB = IPBB->getUniqueSuccessor();
-      assert(DestBB && "Finalization block should have one successor!");
-
-      // erase and replace with cleanup branch.
-      IPBB->getTerminator()->eraseFromParent();
-      Builder.SetInsertPoint(IPBB);
-      CodeGenFunction::JumpDest Dest = getJumpDestInCurrentScope(DestBB);
-      EmitBranchThroughCleanup(Dest);
-    };
-
-    // TODO: Replace with a generic helper function for emitting body
-    auto BodyGenCB = [CriticalRegionBodyStmt, this](InsertPointTy AllocaIP,
-                                                    InsertPointTy CodeGenIP,
-                                                    llvm::BasicBlock &FiniBB) {
-      // Alloca insertion block should be in the entry block of the containing
-      // function So it expects an empty AllocaIP in which case will reuse the
-      // old alloca insertion point, or a new AllocaIP in the same block as the
-      // old one
-      assert((!AllocaIP.isSet() ||
-              AllocaInsertPt->getParent() == AllocaIP.getBlock()) &&
-             "Insertion point should be in the entry block of containing "
-             "function!");
-      auto OldAllocaIP = AllocaInsertPt;
-      if (AllocaIP.isSet())
-        AllocaInsertPt = &*AllocaIP.getPoint();
-      auto OldReturnBlock = ReturnBlock;
-      ReturnBlock = getJumpDestInCurrentScope(&FiniBB);
-
-      llvm::BasicBlock *CodeGenIPBB = CodeGenIP.getBlock();
-      if (llvm::Instruction *CodeGenIPBBTI = CodeGenIPBB->getTerminator())
-        CodeGenIPBBTI->eraseFromParent();
-
-      Builder.SetInsertPoint(CodeGenIPBB);
-
-      EmitStmt(CriticalRegionBodyStmt);
-
-      if (Builder.saveIP().isSet())
-        Builder.CreateBr(&FiniBB);
-
-      AllocaInsertPt = OldAllocaIP;
-      ReturnBlock = OldReturnBlock;
-    };
-
-    CGCapturedStmtInfo CGSI(*CS, CR_OpenMP);
-    CodeGenFunction::CGCapturedStmtRAII CapInfoRAII(*this, &CGSI);
-    Builder.restoreIP(OMPBuilder->CreateCritical(
-        Builder, BodyGenCB, FiniCB, S.getDirectiveName().getAsString(),
-        HintInst));
-
-    return;
-  }
-
   auto &&CodeGen = [&S](CodeGenFunction &CGF, PrePostActionTy &Action) {
     Action.Enter(CGF);
     CGF.EmitStmt(S.getInnermostCapturedStmt()->getCapturedStmt());

diff  --git a/clang/test/OpenMP/critical_codegen.cpp b/clang/test/OpenMP/critical_codegen.cpp
index f49c9cc9c21a..ba540059dc89 100644
--- a/clang/test/OpenMP/critical_codegen.cpp
+++ b/clang/test/OpenMP/critical_codegen.cpp
@@ -1,10 +1,7 @@
-// RUN: %clang_cc1 -verify -fopenmp -x c++ -emit-llvm %s -fexceptions -fcxx-exceptions -o - | FileCheck %s --check-prefixes=ALL,NORMAL
+// RUN: %clang_cc1 -verify -fopenmp -x c++ -emit-llvm %s -fexceptions -fcxx-exceptions -o - | FileCheck %s
 // RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -emit-pch -o %t %s
-// RUN: %clang_cc1 -fopenmp -x c++ -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefixes=ALL,NORMAL
+// RUN: %clang_cc1 -fopenmp -x c++ -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s
 // RUN: %clang_cc1 -verify -triple x86_64-apple-darwin10 -fopenmp -fexceptions -fcxx-exceptions -debug-info-kind=line-tables-only -x c++ -emit-llvm %s -o - | FileCheck %s --check-prefix=TERM_DEBUG
-// RUN: %clang_cc1 -verify -fopenmp -fopenmp-enable-irbuilder -x c++ -emit-llvm %s -fexceptions -fcxx-exceptions -o - | FileCheck %s --check-prefixes=ALL,IRBUILDER
-// RUN: %clang_cc1 -fopenmp -fopenmp-enable-irbuilder -x c++ -std=c++11 -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -emit-pch -o %t %s
-// RUN: %clang_cc1 -fopenmp -fopenmp-enable-irbuilder -x c++ -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefixes=ALL,IRBUILDER
 
 // RUN: %clang_cc1 -verify -fopenmp-simd -x c++ -emit-llvm %s -fexceptions -fcxx-exceptions -o - | FileCheck --check-prefix SIMD-ONLY0 %s
 // RUN: %clang_cc1 -fopenmp-simd -x c++ -std=c++11 -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -emit-pch -o %t %s
@@ -15,79 +12,74 @@
 #ifndef HEADER
 #define HEADER
 
-// ALL:       [[IDENT_T_TY:%.+]] = type { i32, i32, i32, i32, i8* }
-// ALL:       [[UNNAMED_LOCK:@.+]] = common global [8 x i32] zeroinitializer
-// ALL:       [[THE_NAME_LOCK:@.+]] = common global [8 x i32] zeroinitializer
-// ALL:       [[THE_NAME_LOCK1:@.+]] = common global [8 x i32] zeroinitializer
+// CHECK:       [[IDENT_T_TY:%.+]] = type { i32, i32, i32, i32, i8* }
+// CHECK:       [[UNNAMED_LOCK:@.+]] = common global [8 x i32] zeroinitializer
+// CHECK:       [[THE_NAME_LOCK:@.+]] = common global [8 x i32] zeroinitializer
+// CHECK:       [[THE_NAME_LOCK1:@.+]] = common global [8 x i32] zeroinitializer
 
-// ALL:       define {{.*}}void [[FOO:@.+]]()
+// CHECK:       define {{.*}}void [[FOO:@.+]]()
 
 void foo() {}
 
-// ALL-LABEL: @main
+// CHECK-LABEL: @main
 // TERM_DEBUG-LABEL: @main
 int main() {
-  // ALL:       [[A_ADDR:%.+]] = alloca i8
+// CHECK:       [[A_ADDR:%.+]] = alloca i8
   char a;
 
-// ALL:       			[[GTID:%.+]] = call {{.*}}i32 @__kmpc_global_thread_num([[IDENT_T_TY]]* [[DEFAULT_LOC:@.+]])
-// ALL:       			call {{.*}}void @__kmpc_critical([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]], [8 x i32]* [[UNNAMED_LOCK]])
-// ALL-NEXT:  			store i8 2, i8* [[A_ADDR]]
-// ALL-NEXT:  			call {{.*}}void @__kmpc_end_critical([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]], [8 x i32]* [[UNNAMED_LOCK]])
+// CHECK:       [[GTID:%.+]] = call {{.*}}i32 @__kmpc_global_thread_num([[IDENT_T_TY]]* [[DEFAULT_LOC:@.+]])
+// CHECK:       call {{.*}}void @__kmpc_critical([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]], [8 x i32]* [[UNNAMED_LOCK]])
+// CHECK-NEXT:  store i8 2, i8* [[A_ADDR]]
+// CHECK-NEXT:  call {{.*}}void @__kmpc_end_critical([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]], [8 x i32]* [[UNNAMED_LOCK]])
 #pragma omp critical
   a = 2;
-// IRBUILDER:       [[GTID:%.+]] = call {{.*}}i32 @__kmpc_global_thread_num([[IDENT_T_TY]]* [[DEFAULT_LOC:@.+]])
-// ALL:       			call {{.*}}void @__kmpc_critical([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]], [8 x i32]* [[THE_NAME_LOCK]])
-// IRBUILDER-NEXT:	call {{.*}}void [[FOO]]()
-// NORMAL-NEXT:  		invoke {{.*}}void [[FOO]]()
-// ALL:      				call {{.*}}void @__kmpc_end_critical([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]], [8 x i32]* [[THE_NAME_LOCK]])
+// CHECK:       call {{.*}}void @__kmpc_critical([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]], [8 x i32]* [[THE_NAME_LOCK]])
+// CHECK-NEXT:  invoke {{.*}}void [[FOO]]()
+// CHECK:       call {{.*}}void @__kmpc_end_critical([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]], [8 x i32]* [[THE_NAME_LOCK]])
 #pragma omp critical(the_name)
   foo();
-// IRBUILDER:   		[[GTID:%.+]] = call {{.*}}i32 @__kmpc_global_thread_num([[IDENT_T_TY]]* [[DEFAULT_LOC:@.+]])
-// ALL: 	      		call {{.*}}void @__kmpc_critical_with_hint([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]], [8 x i32]* [[THE_NAME_LOCK1]], i{{64|32}} 23)
-// IRBUILDER-NEXT:	call {{.*}}void [[FOO]]()
-// NORMAL-NEXT:		  invoke {{.*}}void [[FOO]]()
-// ALL:		       		call {{.*}}void @__kmpc_end_critical([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]], [8 x i32]* [[THE_NAME_LOCK1]])
+// CHECK:       call {{.*}}void @__kmpc_critical_with_hint([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]], [8 x i32]* [[THE_NAME_LOCK1]], i{{64|32}} 23)
+// CHECK-NEXT:  invoke {{.*}}void [[FOO]]()
+// CHECK:       call {{.*}}void @__kmpc_end_critical([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]], [8 x i32]* [[THE_NAME_LOCK1]])
 #pragma omp critical(the_name1) hint(23)
   foo();
-  // IRBUILDER:   		[[GTID:%.+]] = call {{.*}}i32 @__kmpc_global_thread_num([[IDENT_T_TY]]* [[DEFAULT_LOC:@.+]])
-  // ALL:       call {{.*}}void @__kmpc_critical([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]], [8 x i32]* [[THE_NAME_LOCK]])
-  // ALL:       br label
-  // ALL-NOT:   call {{.*}}void @__kmpc_end_critical(
-  // ALL:       br label
-  // ALL-NOT:   call {{.*}}void @__kmpc_end_critical(
-  // NORMAL:       br label
+// CHECK:       call {{.*}}void @__kmpc_critical([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]], [8 x i32]* [[THE_NAME_LOCK]])
+// CHECK:       br label
+// CHECK-NOT:   call {{.*}}void @__kmpc_end_critical(
+// CHECK:       br label
+// CHECK-NOT:   call {{.*}}void @__kmpc_end_critical(
+// CHECK:       br label
   if (a)
 #pragma omp critical(the_name)
     while (1)
       ;
-  // ALL:  call {{.*}}void [[FOO]]()
+// CHECK:  call {{.*}}void [[FOO]]()
   foo();
-  // ALL-NOT:   call void @__kmpc_critical
-  // ALL-NOT:   call void @__kmpc_end_critical
+// CHECK-NOT:   call void @__kmpc_critical
+// CHECK-NOT:   call void @__kmpc_end_critical
   return a;
 }
 
 struct S {
   int a;
 };
-// ALL-LABEL: critical_ref
+// CHECK-LABEL: critical_ref
 void critical_ref(S &s) {
-  // ALL: [[S_ADDR:%.+]] = alloca %struct.S*,
-  // ALL: [[S_REF:%.+]] = load %struct.S*, %struct.S** [[S_ADDR]],
-  // ALL: [[S_A_REF:%.+]] = getelementptr inbounds %struct.S, %struct.S* [[S_REF]], i32 0, i32 0
+  // CHECK: [[S_ADDR:%.+]] = alloca %struct.S*,
+  // CHECK: [[S_REF:%.+]] = load %struct.S*, %struct.S** [[S_ADDR]],
+  // CHECK: [[S_A_REF:%.+]] = getelementptr inbounds %struct.S, %struct.S* [[S_REF]], i32 0, i32 0
   ++s.a;
-  // NORMAL: [[S_REF:%.+]] = load %struct.S*, %struct.S** [[S_ADDR]],
-  // NORMAL: store %struct.S* [[S_REF]], %struct.S** [[S_ADDR:%.+]],
-  // ALL: call void @__kmpc_critical(
+  // CHECK: [[S_REF:%.+]] = load %struct.S*, %struct.S** [[S_ADDR]],
+  // CHECK: store %struct.S* [[S_REF]], %struct.S** [[S_ADDR:%.+]],
+  // CHECK: call void @__kmpc_critical(
 #pragma omp critical
-  // ALL: [[S_REF:%.+]] = load %struct.S*, %struct.S** [[S_ADDR]],
-  // ALL: [[S_A_REF:%.+]] = getelementptr inbounds %struct.S, %struct.S* [[S_REF]], i32 0, i32 0
+  // CHECK: [[S_REF:%.+]] = load %struct.S*, %struct.S** [[S_ADDR]],
+  // CHECK: [[S_A_REF:%.+]] = getelementptr inbounds %struct.S, %struct.S* [[S_REF]], i32 0, i32 0
   ++s.a;
-  // ALL: call void @__kmpc_end_critical(
+  // CHECK: call void @__kmpc_end_critical(
 }
 
-// ALL-LABEL:      parallel_critical
+// CHECK-LABEL:      parallel_critical
 // TERM_DEBUG-LABEL: parallel_critical
 void parallel_critical() {
 #pragma omp parallel

diff  --git a/clang/test/OpenMP/master_codegen.cpp b/clang/test/OpenMP/master_codegen.cpp
index 9a33f2f53b0d..d5b8036e8e82 100644
--- a/clang/test/OpenMP/master_codegen.cpp
+++ b/clang/test/OpenMP/master_codegen.cpp
@@ -1,10 +1,7 @@
-// RUN: %clang_cc1 -verify -fopenmp -x c++ -emit-llvm %s -fexceptions -fcxx-exceptions -o - | FileCheck %s --check-prefixes=ALL,NORMAL
+// RUN: %clang_cc1 -verify -fopenmp -x c++ -emit-llvm %s -fexceptions -fcxx-exceptions -o - | FileCheck %s
 // RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -emit-pch -o %t %s
-// RUN: %clang_cc1 -fopenmp -x c++ -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefixes=ALL,NORMAL
+// RUN: %clang_cc1 -fopenmp -x c++ -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s
 // RUN: %clang_cc1 -verify -triple x86_64-apple-darwin10 -fopenmp -fexceptions -fcxx-exceptions -debug-info-kind=line-tables-only -x c++ -emit-llvm %s -o - | FileCheck %s --check-prefix=TERM_DEBUG
-// RUN: %clang_cc1 -verify -fopenmp -fopenmp-enable-irbuilder -x c++ -emit-llvm %s -fexceptions -fcxx-exceptions -o - | FileCheck %s --check-prefixes=ALL,IRBUILDER
-// RUN: %clang_cc1 -fopenmp -fopenmp-enable-irbuilder -x c++ -std=c++11 -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -emit-pch -o %t %s
-// RUN: %clang_cc1 -fopenmp -fopenmp-enable-irbuilder -x c++ -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefixes=ALL,IRBUILDER
 
 // RUN: %clang_cc1 -verify -fopenmp-simd -x c++ -emit-llvm %s -fexceptions -fcxx-exceptions -o - | FileCheck --check-prefix SIMD-ONLY0 %s
 // RUN: %clang_cc1 -fopenmp-simd -x c++ -std=c++11 -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -emit-pch -o %t %s
@@ -15,47 +12,45 @@
 #ifndef HEADER
 #define HEADER
 
-// ALL:       [[IDENT_T_TY:%.+]] = type { i32, i32, i32, i32, i8* }
+// CHECK:       [[IDENT_T_TY:%.+]] = type { i32, i32, i32, i32, i8* }
 
-// ALL:       define {{.*}}void [[FOO:@.+]]()
+// CHECK:       define {{.*}}void [[FOO:@.+]]()
 
 void foo() {}
 
-// ALL-LABEL: @main
+// CHECK-LABEL: @main
 // TERM_DEBUG-LABEL: @main
 int main() {
-  // ALL:      			[[A_ADDR:%.+]] = alloca i8
+  // CHECK:       [[A_ADDR:%.+]] = alloca i8
   char a;
 
-// ALL:       			[[GTID:%.+]] = call {{.*}}i32 @__kmpc_global_thread_num([[IDENT_T_TY]]* [[DEFAULT_LOC:@.+]])
-// ALL:       			[[RES:%.+]] = call {{.*}}i32 @__kmpc_master([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]])
-// ALL-NEXT:  			[[IS_MASTER:%.+]] = icmp ne i32 [[RES]], 0
-// ALL-NEXT:  			br i1 [[IS_MASTER]], label {{%?}}[[THEN:.+]], label {{%?}}[[EXIT:.+]]
-// ALL:       			[[THEN]]
-// ALL-NEXT:  			store i8 2, i8* [[A_ADDR]]
-// ALL-NEXT:  			call {{.*}}void @__kmpc_end_master([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]])
-// ALL-NEXT:  			br label {{%?}}[[EXIT]]
-// ALL:       			[[EXIT]]
+// CHECK:       [[GTID:%.+]] = call {{.*}}i32 @__kmpc_global_thread_num([[IDENT_T_TY]]* [[DEFAULT_LOC:@.+]])
+// CHECK:       [[RES:%.+]] = call {{.*}}i32 @__kmpc_master([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]])
+// CHECK-NEXT:  [[IS_MASTER:%.+]] = icmp ne i32 [[RES]], 0
+// CHECK-NEXT:  br i1 [[IS_MASTER]], label {{%?}}[[THEN:.+]], label {{%?}}[[EXIT:.+]]
+// CHECK:       [[THEN]]
+// CHECK-NEXT:  store i8 2, i8* [[A_ADDR]]
+// CHECK-NEXT:  call {{.*}}void @__kmpc_end_master([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]])
+// CHECK-NEXT:  br label {{%?}}[[EXIT]]
+// CHECK:       [[EXIT]]
 #pragma omp master
   a = 2;
-// IRBUILDER: 			[[GTID:%.+]] = call {{.*}}i32 @__kmpc_global_thread_num([[IDENT_T_TY]]* [[DEFAULT_LOC:@.+]])
-// ALL:       			[[RES:%.+]] = call {{.*}}i32 @__kmpc_master([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]])
-// ALL-NEXT:  			[[IS_MASTER:%.+]] = icmp ne i32 [[RES]], 0
-// ALL-NEXT:  			br i1 [[IS_MASTER]], label {{%?}}[[THEN:.+]], label {{%?}}[[EXIT:.+]]
-// ALL:       			[[THEN]]
-// IRBUILDER-NEXT:  call {{.*}}void [[FOO]]()
-// NORMAL-NEXT:  		invoke {{.*}}void [[FOO]]()
-// ALL:       			call {{.*}}void @__kmpc_end_master([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]])
-// ALL-NEXT:  			br label {{%?}}[[EXIT]]
-// ALL:       			[[EXIT]]
+// CHECK:       [[RES:%.+]] = call {{.*}}i32 @__kmpc_master([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]])
+// CHECK-NEXT:  [[IS_MASTER:%.+]] = icmp ne i32 [[RES]], 0
+// CHECK-NEXT:  br i1 [[IS_MASTER]], label {{%?}}[[THEN:.+]], label {{%?}}[[EXIT:.+]]
+// CHECK:       [[THEN]]
+// CHECK-NEXT:  invoke {{.*}}void [[FOO]]()
+// CHECK:       call {{.*}}void @__kmpc_end_master([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]])
+// CHECK-NEXT:  br label {{%?}}[[EXIT]]
+// CHECK:       [[EXIT]]
 #pragma omp master
   foo();
-  // ALL-NOT:   call i32 @__kmpc_master
-  // ALL-NOT:   call void @__kmpc_end_master
+// CHECK-NOT:   call i32 @__kmpc_master
+// CHECK-NOT:   call void @__kmpc_end_master
   return a;
 }
 
-// ALL-LABEL:      parallel_master
+// CHECK-LABEL:      parallel_master
 // TERM_DEBUG-LABEL: parallel_master
 void parallel_master() {
 #pragma omp parallel

diff  --git a/llvm/include/llvm/Frontend/OpenMP/OMPConstants.h b/llvm/include/llvm/Frontend/OpenMP/OMPConstants.h
index b4fe18aa2822..2f9a5ee71e67 100644
--- a/llvm/include/llvm/Frontend/OpenMP/OMPConstants.h
+++ b/llvm/include/llvm/Frontend/OpenMP/OMPConstants.h
@@ -20,7 +20,6 @@
 namespace llvm {
 class Type;
 class Module;
-class ArrayType;
 class StructType;
 class PointerType;
 class FunctionType;
@@ -86,9 +85,6 @@ StringRef getOpenMPDirectiveName(Directive D);
 namespace types {
 
 #define OMP_TYPE(VarName, InitValue) extern Type *VarName;
-#define OMP_ARRAY_TYPE(VarName, ElemTy, ArraySize)                             \
-  extern ArrayType *VarName##Ty;                                               \
-  extern PointerType *VarName##PtrTy;
 #define OMP_FUNCTION_TYPE(VarName, IsVarArg, ReturnType, ...)                  \
   extern FunctionType *VarName;                                                \
   extern PointerType *VarName##Ptr;

diff  --git a/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h b/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
index cb7aa88ebf16..07ec82df14c1 100644
--- a/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
+++ b/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
@@ -17,7 +17,6 @@
 #include "llvm/IR/DebugLoc.h"
 #include "llvm/IR/IRBuilder.h"
 #include "llvm/Frontend/OpenMP/OMPConstants.h"
-#include "llvm/Support/Allocator.h"
 
 namespace llvm {
 
@@ -255,119 +254,6 @@ class OpenMPIRBuilder {
 
   /// Map to remember existing ident_t*.
   DenseMap<std::pair<Constant *, uint64_t>, GlobalVariable *> IdentMap;
-
-  /// An ordered map of auto-generated variables to their unique names.
-  /// It stores variables with the following names: 1) ".gomp_critical_user_" +
-  /// <critical_section_name> + ".var" for "omp critical" directives; 2)
-  /// <mangled_name_for_global_var> + ".cache." for cache for threadprivate
-  /// variables.
-  StringMap<AssertingVH<Constant>, BumpPtrAllocator> InternalVars;
-
-public:
-  /// Generator for '#omp master'
-  ///
-  /// \param Loc The insert and source location description.
-  /// \param BodyGenCB Callback that will generate the region code.
-  /// \param FiniCB Callback to finalize variable copies.
-  ///
-  /// \returns The insertion position *after* the master.
-  InsertPointTy CreateMaster(const LocationDescription &Loc,
-                             BodyGenCallbackTy BodyGenCB,
-                             FinalizeCallbackTy FiniCB);
-
-  /// Generator for '#omp master'
-  ///
-  /// \param Loc The insert and source location description.
-  /// \param BodyGenCB Callback that will generate the region body code.
-  /// \param FiniCB Callback to finalize variable copies.
-  /// \param CriticalName name of the lock used by the critical directive
-  /// \param HintInst Hint Instruction for hint clause associated with critical
-  ///
-  /// \returns The insertion position *after* the master.
-  InsertPointTy CreateCritical(const LocationDescription &Loc,
-                               BodyGenCallbackTy BodyGenCB,
-                               FinalizeCallbackTy FiniCB,
-                               StringRef CriticalName, Value *HintInst);
-
-private:
-  /// Common interface for generating entry calls for OMP Directives.
-  /// if the directive has a region/body, It will set the insertion
-  /// point to the body
-  ///
-  /// \param OMPD Directive to generate entry blocks for
-  /// \param EntryCall Call to the entry OMP Runtime Function
-  /// \param ExitBB block where the region ends.
-  /// \param Conditional indicate if the entry call result will be used
-  ///        to evaluate a conditional of whether a thread will execute
-  ///        body code or not.
-  ///
-  /// \return The insertion position in exit block
-  InsertPointTy emitCommonDirectiveEntry(omp::Directive OMPD, Value *EntryCall,
-                                         BasicBlock *ExitBB,
-                                         bool Conditional = false);
-
-  /// Common interface to finalize the region
-  ///
-  /// \param OMPD Directive to generate exiting code for
-  /// \param FinIP Insertion point for emitting Finalization code and exit call
-  /// \param ExitCall Call to the ending OMP Runtime Function
-  /// \param HasFinalize indicate if the directive will require finalization
-  /// 		 	 and has a finalization callback in the stack that
-  /// 			 should be called.
-  ///
-  /// \return The insertion position in exit block
-  InsertPointTy emitCommonDirectiveExit(omp::Directive OMPD,
-                                        InsertPointTy FinIP,
-                                        Instruction *ExitCall,
-                                        bool HasFinalize = true);
-
-  /// Common Interface to generate OMP inlined regions
-  ///
-  /// \param OMPD Directive to generate inlined region for
-  /// \param EntryCall Call to the entry OMP Runtime Function
-  /// \param ExitCall Call to the ending OMP Runtime Function
-  /// \param BodyGenCB Body code generation callback.
-  /// \param FiniCB Finalization Callback. Will be called when finalizing region
-  /// \param Conditional indicate if the entry call result will be used
-  ///        to evaluate a conditional of whether a thread will execute
-  ///        body code or not.
-  /// \param HasFinalize indicate if the directive will require finalization
-  /// 		 	 and has a finalization callback in the stack that should
-  /// 			 be called.
-  ///
-  /// \return The insertion point after the region
-
-  InsertPointTy
-  EmitOMPInlinedRegion(omp::Directive OMPD, Instruction *EntryCall,
-                       Instruction *ExitCall, BodyGenCallbackTy BodyGenCB,
-                       FinalizeCallbackTy FiniCB, bool Conditional = false,
-                       bool HasFinalize = true);
-
-  /// Get the platform-specific name separator.
-  /// \param Parts 
diff erent parts of the final name that needs separation
-  /// \param FirstSeparator First separator used between the initial two
-  /// 			 parts of the name.
-  /// \param Separator separator used between all of the rest consecutinve
-  /// 			 parts of the name
-  static std::string getNameWithSeparators(ArrayRef<StringRef> Parts,
-                                           StringRef FirstSeparator,
-                                           StringRef Separator);
-
-  /// Gets (if variable with the given name already exist) or creates
-  /// internal global variable with the specified Name. The created variable has
-  /// linkage CommonLinkage by default and is initialized by null value.
-  /// \param Ty Type of the global variable. If it is exist already the type
-  /// must be the same.
-  /// \param Name Name of the variable.
-  Constant *getOrCreateOMPInternalVariable(Type *Ty, const Twine &Name,
-                                           unsigned AddressSpace = 0);
-
-  /// Returns corresponding lock object for the specified critical region
-  /// name. If the lock object does not exist it is created, otherwise the
-  /// reference to the existing copy is returned.
-  /// \param CriticalName Name of the critical region.
-  ///
-  Value *getOMPCriticalRegionLock(StringRef CriticalName);
 };
 
 } // end namespace llvm

diff  --git a/llvm/include/llvm/Frontend/OpenMP/OMPKinds.def b/llvm/include/llvm/Frontend/OpenMP/OMPKinds.def
index 96b99d1caa19..3525c427b8bc 100644
--- a/llvm/include/llvm/Frontend/OpenMP/OMPKinds.def
+++ b/llvm/include/llvm/Frontend/OpenMP/OMPKinds.def
@@ -122,24 +122,6 @@ __OMP_TYPE(Int32Ptr)
 
 ///}
 
-/// array types
-///
-///{
-
-#ifndef OMP_ARRAY_TYPE
-#define OMP_ARRAY_TYPE(VarName, ElemTy, ArraySize)
-#endif
-
-#define __OMP_ARRAY_TYPE(VarName, ElemTy, ArraySize) 						  \
-  OMP_ARRAY_TYPE(VarName, ElemTy, ArraySize)
-
-__OMP_ARRAY_TYPE(KmpCriticalName, Int32, 8)
-
-#undef __OMP_ARRAY_TYPE
-#undef OMP_ARRAY_TYPE
-
-///}
-
 /// Struct and function types
 ///
 ///{
@@ -192,11 +174,6 @@ __OMP_RTL(__kmpc_push_num_threads, false, Void, IdentPtr, Int32,
 __OMP_RTL(__kmpc_push_proc_bind, false, Void, IdentPtr, Int32, /* Int */ Int32)
 __OMP_RTL(__kmpc_serialized_parallel, false, Void, IdentPtr, Int32)
 __OMP_RTL(__kmpc_end_serialized_parallel, false, Void, IdentPtr, Int32)
-__OMP_RTL(__kmpc_master, false, Int32, IdentPtr, Int32)
-__OMP_RTL(__kmpc_end_master, false, Void, IdentPtr, Int32)
-__OMP_RTL(__kmpc_critical, false, Void, IdentPtr, Int32, KmpCriticalNamePtrTy)
-__OMP_RTL(__kmpc_critical_with_hint, false, Void, IdentPtr, Int32, KmpCriticalNamePtrTy, Int32)
-__OMP_RTL(__kmpc_end_critical, false, Void, IdentPtr, Int32, KmpCriticalNamePtrTy)
 
 __OMP_RTL(omp_get_thread_num, false, Int32, )
 __OMP_RTL(omp_get_num_threads, false, Int32, )
@@ -229,6 +206,7 @@ __OMP_RTL(omp_set_schedule, false, Void, Int32, Int32)
 __OMP_RTL(omp_set_max_active_levels, false, Void, Int32)
 
 __OMP_RTL(__last, false, Void, )
+
 #undef __OMP_RTL
 #undef OMP_RTL
 

diff  --git a/llvm/lib/Frontend/OpenMP/OMPConstants.cpp b/llvm/lib/Frontend/OpenMP/OMPConstants.cpp
index 6ee44958d1c7..ec0733903e99 100644
--- a/llvm/lib/Frontend/OpenMP/OMPConstants.cpp
+++ b/llvm/lib/Frontend/OpenMP/OMPConstants.cpp
@@ -36,16 +36,14 @@ StringRef llvm::omp::getOpenMPDirectiveName(Directive Kind) {
   llvm_unreachable("Invalid OpenMP directive kind");
 }
 
-/// Declarations for LLVM-IR types (simple, array, function and structure) are
+/// Declarations for LLVM-IR types (simple, function and structure) are
 /// generated below. Their names are defined and used in OpenMPKinds.def. Here
 /// we provide the declarations, the initializeTypes function will provide the
 /// values.
 ///
 ///{
+
 #define OMP_TYPE(VarName, InitValue) Type *llvm::omp::types::VarName = nullptr;
-#define OMP_ARRAY_TYPE(VarName, ElemTy, ArraySize)                             \
-  ArrayType *llvm::omp::types::VarName##Ty = nullptr;                          \
-  PointerType *llvm::omp::types::VarName##PtrTy = nullptr;
 #define OMP_FUNCTION_TYPE(VarName, IsVarArg, ReturnType, ...)                  \
   FunctionType *llvm::omp::types::VarName = nullptr;                           \
   PointerType *llvm::omp::types::VarName##Ptr = nullptr;
@@ -65,9 +63,6 @@ void llvm::omp::types::initializeTypes(Module &M) {
   // the llvm::PointerTypes of them for easy access later.
   StructType *T;
 #define OMP_TYPE(VarName, InitValue) VarName = InitValue;
-#define OMP_ARRAY_TYPE(VarName, ElemTy, ArraySize)                             \
-  VarName##Ty = ArrayType::get(ElemTy, ArraySize);                             \
-  VarName##PtrTy = PointerType::getUnqual(VarName##Ty);
 #define OMP_FUNCTION_TYPE(VarName, IsVarArg, ReturnType, ...)                  \
   VarName = FunctionType::get(ReturnType, {__VA_ARGS__}, IsVarArg);            \
   VarName##Ptr = PointerType::getUnqual(VarName);

diff  --git a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
index 4284eb306ee9..d45d1d02447a 100644
--- a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
+++ b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
@@ -18,8 +18,8 @@
 #include "llvm/ADT/StringSwitch.h"
 #include "llvm/IR/CFG.h"
 #include "llvm/IR/DebugInfo.h"
-#include "llvm/IR/IRBuilder.h"
 #include "llvm/IR/MDBuilder.h"
+#include "llvm/IR/IRBuilder.h"
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/Error.h"
 #include "llvm/Transforms/Utils/BasicBlockUtils.h"
@@ -558,9 +558,9 @@ IRBuilder<>::InsertPoint OpenMPIRBuilder::CreateParallel(
       //    callback callee.
       F->addMetadata(
           llvm::LLVMContext::MD_callback,
-          *llvm::MDNode::get(
-              Ctx, {MDB.createCallbackEncoding(2, {-1, -1},
-                                               /* VarArgsArePassed */ true)}));
+          *llvm::MDNode::get(Ctx, {MDB.createCallbackEncoding(
+                                      2, {-1, -1},
+                                      /* VarArgsArePassed */ true)}));
     }
   }
 
@@ -631,7 +631,8 @@ IRBuilder<>::InsertPoint OpenMPIRBuilder::CreateParallel(
   return AfterIP;
 }
 
-void OpenMPIRBuilder::emitFlush(const LocationDescription &Loc) {
+void OpenMPIRBuilder::emitFlush(const LocationDescription &Loc)
+{
   // Build call void __kmpc_flush(ident_t *loc)
   Constant *SrcLocStr = getOrCreateSrcLocStr(Loc);
   Value *Args[] = {getOrCreateIdent(SrcLocStr)};
@@ -639,245 +640,9 @@ void OpenMPIRBuilder::emitFlush(const LocationDescription &Loc) {
   Builder.CreateCall(getOrCreateRuntimeFunction(OMPRTL___kmpc_flush), Args);
 }
 
-void OpenMPIRBuilder::CreateFlush(const LocationDescription &Loc) {
+void OpenMPIRBuilder::CreateFlush(const LocationDescription &Loc)
+{
   if (!updateToLocation(Loc))
-    return;
+   return;
   emitFlush(Loc);
 }
-
-OpenMPIRBuilder::InsertPointTy
-OpenMPIRBuilder::CreateMaster(const LocationDescription &Loc,
-                              BodyGenCallbackTy BodyGenCB,
-                              FinalizeCallbackTy FiniCB) {
-
-  if (!updateToLocation(Loc))
-    return Loc.IP;
-
-  Directive OMPD = Directive::OMPD_master;
-  Constant *SrcLocStr = getOrCreateSrcLocStr(Loc);
-  Value *Ident = getOrCreateIdent(SrcLocStr);
-  Value *ThreadId = getOrCreateThreadID(Ident);
-  Value *Args[] = {Ident, ThreadId};
-
-  Function *EntryRTLFn = getOrCreateRuntimeFunction(OMPRTL___kmpc_master);
-  Instruction *EntryCall = Builder.CreateCall(EntryRTLFn, Args);
-
-  Function *ExitRTLFn = getOrCreateRuntimeFunction(OMPRTL___kmpc_end_master);
-  Instruction *ExitCall = Builder.CreateCall(ExitRTLFn, Args);
-
-  return EmitOMPInlinedRegion(OMPD, EntryCall, ExitCall, BodyGenCB, FiniCB,
-                              /*Conditional*/ true, /*hasFinalize*/ true);
-}
-
-OpenMPIRBuilder::InsertPointTy OpenMPIRBuilder::CreateCritical(
-    const LocationDescription &Loc, BodyGenCallbackTy BodyGenCB,
-    FinalizeCallbackTy FiniCB, StringRef CriticalName, Value *HintInst) {
-
-  if (!updateToLocation(Loc))
-    return Loc.IP;
-
-  Directive OMPD = Directive::OMPD_critical;
-  Constant *SrcLocStr = getOrCreateSrcLocStr(Loc);
-  Value *Ident = getOrCreateIdent(SrcLocStr);
-  Value *ThreadId = getOrCreateThreadID(Ident);
-  Value *LockVar = getOMPCriticalRegionLock(CriticalName);
-  Value *Args[] = {Ident, ThreadId, LockVar};
-
-  SmallVector<llvm::Value *, 4> EnterArgs(std::begin(Args), std::end(Args));
-  Function *RTFn = nullptr;
-  if (HintInst) {
-    // Add Hint to entry Args and create call
-    EnterArgs.push_back(HintInst);
-    RTFn = getOrCreateRuntimeFunction(OMPRTL___kmpc_critical_with_hint);
-  } else {
-    RTFn = getOrCreateRuntimeFunction(OMPRTL___kmpc_critical);
-  }
-  Instruction *EntryCall = Builder.CreateCall(RTFn, EnterArgs);
-
-  Function *ExitRTLFn = getOrCreateRuntimeFunction(OMPRTL___kmpc_end_critical);
-  Instruction *ExitCall = Builder.CreateCall(ExitRTLFn, Args);
-
-  return EmitOMPInlinedRegion(OMPD, EntryCall, ExitCall, BodyGenCB, FiniCB,
-                              /*Conditional*/ false, /*hasFinalize*/ true);
-}
-
-OpenMPIRBuilder::InsertPointTy OpenMPIRBuilder::EmitOMPInlinedRegion(
-    Directive OMPD, Instruction *EntryCall, Instruction *ExitCall,
-    BodyGenCallbackTy BodyGenCB, FinalizeCallbackTy FiniCB, bool Conditional,
-    bool HasFinalize) {
-
-  if (HasFinalize)
-    FinalizationStack.push_back({FiniCB, OMPD, /*IsCancellable*/ false});
-
-  // Create inlined region's entry and body blocks, in preparation
-  // for conditional creation
-  BasicBlock *EntryBB = Builder.GetInsertBlock();
-  Instruction *SplitPos = EntryBB->getTerminator();
-  if (!isa_and_nonnull<BranchInst>(SplitPos))
-    SplitPos = new UnreachableInst(Builder.getContext(), EntryBB);
-  BasicBlock *ExitBB = EntryBB->splitBasicBlock(SplitPos, "omp_region.end");
-  BasicBlock *FiniBB =
-      EntryBB->splitBasicBlock(EntryBB->getTerminator(), "omp_region.finalize");
-
-  Builder.SetInsertPoint(EntryBB->getTerminator());
-  emitCommonDirectiveEntry(OMPD, EntryCall, ExitBB, Conditional);
-
-  // generate body
-  BodyGenCB(/* AllocaIP */ InsertPointTy(),
-            /* CodeGenIP */ Builder.saveIP(), *FiniBB);
-
-  // If we didn't emit a branch to FiniBB during body generation, it means
-  // FiniBB is unreachable (e.g. while(1);). stop generating all the
-  // unreachable blocks, and remove anything we are not going to use.
-  auto SkipEmittingRegion = FiniBB->hasNPredecessors(0);
-  if (SkipEmittingRegion) {
-    FiniBB->eraseFromParent();
-    ExitCall->eraseFromParent();
-    // Discard finalization if we have it.
-    if (HasFinalize) {
-      assert(!FinalizationStack.empty() &&
-             "Unexpected finalization stack state!");
-      FinalizationStack.pop_back();
-    }
-  } else {
-    // emit exit call and do any needed finalization.
-    auto FinIP = InsertPointTy(FiniBB, FiniBB->getFirstInsertionPt());
-    assert(FiniBB->getTerminator()->getNumSuccessors() == 1 &&
-           FiniBB->getTerminator()->getSuccessor(0) == ExitBB &&
-           "Unexpected control flow graph state!!");
-    emitCommonDirectiveExit(OMPD, FinIP, ExitCall, HasFinalize);
-    assert(FiniBB->getUniquePredecessor()->getUniqueSuccessor() == FiniBB &&
-           "Unexpected Control Flow State!");
-    MergeBlockIntoPredecessor(FiniBB);
-  }
-
-  // If we are skipping the region of a non conditional, remove the exit
-  // block, and clear the builder's insertion point.
-  assert(SplitPos->getParent() == ExitBB &&
-         "Unexpected Insertion point location!");
-  if (!Conditional && SkipEmittingRegion) {
-    ExitBB->eraseFromParent();
-    Builder.ClearInsertionPoint();
-  } else {
-    auto merged = MergeBlockIntoPredecessor(ExitBB);
-    BasicBlock *ExitPredBB = SplitPos->getParent();
-    auto InsertBB = merged ? ExitPredBB : ExitBB;
-    if (!isa_and_nonnull<BranchInst>(SplitPos))
-      SplitPos->eraseFromParent();
-    Builder.SetInsertPoint(InsertBB);
-  }
-
-  return Builder.saveIP();
-}
-
-OpenMPIRBuilder::InsertPointTy OpenMPIRBuilder::emitCommonDirectiveEntry(
-    Directive OMPD, Value *EntryCall, BasicBlock *ExitBB, bool Conditional) {
-
-  // if nothing to do, Return current insertion point.
-  if (!Conditional)
-    return Builder.saveIP();
-
-  BasicBlock *EntryBB = Builder.GetInsertBlock();
-  Value *CallBool = Builder.CreateIsNotNull(EntryCall);
-  auto *ThenBB = BasicBlock::Create(M.getContext(), "omp_region.body");
-  auto *UI = new UnreachableInst(Builder.getContext(), ThenBB);
-
-  // Emit thenBB and set the Builder's insertion point there for
-  // body generation next. Place the block after the current block.
-  Function *CurFn = EntryBB->getParent();
-  CurFn->getBasicBlockList().insertAfter(EntryBB->getIterator(), ThenBB);
-
-  // Move Entry branch to end of ThenBB, and replace with conditional
-  // branch (If-stmt)
-  Instruction *EntryBBTI = EntryBB->getTerminator();
-  Builder.CreateCondBr(CallBool, ThenBB, ExitBB);
-  EntryBBTI->removeFromParent();
-  Builder.SetInsertPoint(UI);
-  Builder.Insert(EntryBBTI);
-  UI->eraseFromParent();
-  Builder.SetInsertPoint(ThenBB->getTerminator());
-
-  // return an insertion point to ExitBB.
-  return IRBuilder<>::InsertPoint(ExitBB, ExitBB->getFirstInsertionPt());
-}
-
-OpenMPIRBuilder::InsertPointTy OpenMPIRBuilder::emitCommonDirectiveExit(
-    omp::Directive OMPD, InsertPointTy FinIP, Instruction *ExitCall,
-    bool HasFinalize) {
-
-  IRBuilder<>::InsertPointGuard IPG(Builder);
-  Builder.restoreIP(FinIP);
-
-  // If there is finalization to do, emit it before the exit call
-  if (HasFinalize) {
-    assert(!FinalizationStack.empty() &&
-           "Unexpected finalization stack state!");
-
-    FinalizationInfo Fi = FinalizationStack.pop_back_val();
-    assert(Fi.DK == OMPD && "Unexpected Directive for Finalization call!");
-
-    Fi.FiniCB(FinIP);
-
-    BasicBlock *FiniBB = FinIP.getBlock();
-    Instruction *FiniBBTI = FiniBB->getTerminator();
-
-    // set Builder IP for call creation
-    Builder.SetInsertPoint(FiniBBTI);
-  }
-
-  // place the Exitcall as last instruction before Finalization block terminator
-  ExitCall->removeFromParent();
-  Builder.Insert(ExitCall);
-
-  return IRBuilder<>::InsertPoint(ExitCall->getParent(),
-                                  ExitCall->getIterator());
-}
-
-std::string OpenMPIRBuilder::getNameWithSeparators(ArrayRef<StringRef> Parts,
-                                                   StringRef FirstSeparator,
-                                                   StringRef Separator) {
-  SmallString<128> Buffer;
-  llvm::raw_svector_ostream OS(Buffer);
-  StringRef Sep = FirstSeparator;
-  for (StringRef Part : Parts) {
-    OS << Sep << Part;
-    Sep = Separator;
-  }
-  return OS.str().str();
-}
-
-Constant *OpenMPIRBuilder::getOrCreateOMPInternalVariable(
-    llvm::Type *Ty, const llvm::Twine &Name, unsigned AddressSpace) {
-  // TODO: Replace the twine arg with stringref to get rid of the conversion
-  // logic. However This is taken from current implementation in clang as is.
-  // Since this method is used in many places exclusively for OMP internal use
-  // we will keep it as is for temporarily until we move all users to the
-  // builder and then, if possible, fix it everywhere in one go.
-  SmallString<256> Buffer;
-  llvm::raw_svector_ostream Out(Buffer);
-  Out << Name;
-  StringRef RuntimeName = Out.str();
-  auto &Elem = *InternalVars.try_emplace(RuntimeName, nullptr).first;
-  if (Elem.second) {
-    assert(Elem.second->getType()->getPointerElementType() == Ty &&
-           "OMP internal variable has 
diff erent type than requested");
-  } else {
-    // TODO: investigate the appropriate linkage type used for the global
-    // variable for possibly changing that to internal or private, or maybe
-    // create 
diff erent versions of the function for 
diff erent OMP internal
-    // variables.
-    Elem.second = new llvm::GlobalVariable(
-        M, Ty, /*IsConstant*/ false, llvm::GlobalValue::CommonLinkage,
-        llvm::Constant::getNullValue(Ty), Elem.first(),
-        /*InsertBefore=*/nullptr, llvm::GlobalValue::NotThreadLocal,
-        AddressSpace);
-  }
-
-  return Elem.second;
-}
-
-Value *OpenMPIRBuilder::getOMPCriticalRegionLock(StringRef CriticalName) {
-  std::string Prefix = Twine("gomp_critical_user_", CriticalName).str();
-  std::string Name = getNameWithSeparators({Prefix, "var"}, ".", ".");
-  return getOrCreateOMPInternalVariable(KmpCriticalNameTy, Name);
-}

diff  --git a/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp b/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
index 814e84f7cd79..c6a51f6b1af2 100644
--- a/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
+++ b/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
@@ -613,161 +613,4 @@ TEST_F(OpenMPIRBuilderTest, ParallelCancelBarrier) {
   }
 }
 
-TEST_F(OpenMPIRBuilderTest, MasterDirective) {
-  using InsertPointTy = OpenMPIRBuilder::InsertPointTy;
-  OpenMPIRBuilder OMPBuilder(*M);
-  OMPBuilder.initialize();
-  F->setName("func");
-  IRBuilder<> Builder(BB);
-
-  OpenMPIRBuilder::LocationDescription Loc({Builder.saveIP(), DL});
-
-  AllocaInst *PrivAI = nullptr;
-
-  BasicBlock *EntryBB = nullptr;
-  BasicBlock *ExitBB = nullptr;
-  BasicBlock *ThenBB = nullptr;
-
-  auto BodyGenCB = [&](InsertPointTy AllocaIP, InsertPointTy CodeGenIP,
-                       BasicBlock &FiniBB) {
-    if (AllocaIP.isSet())
-      Builder.restoreIP(AllocaIP);
-    else
-      Builder.SetInsertPoint(&*(F->getEntryBlock().getFirstInsertionPt()));
-    PrivAI = Builder.CreateAlloca(F->arg_begin()->getType());
-    Builder.CreateStore(F->arg_begin(), PrivAI);
-
-    llvm::BasicBlock *CodeGenIPBB = CodeGenIP.getBlock();
-    llvm::Instruction *CodeGenIPInst = &*CodeGenIP.getPoint();
-    EXPECT_EQ(CodeGenIPBB->getTerminator(), CodeGenIPInst);
-
-    Builder.restoreIP(CodeGenIP);
-
-    // collect some info for checks later
-    ExitBB = FiniBB.getUniqueSuccessor();
-    ThenBB = Builder.GetInsertBlock();
-    EntryBB = ThenBB->getUniquePredecessor();
-
-    // simple instructions for body
-    Value *PrivLoad = Builder.CreateLoad(PrivAI, "local.use");
-    Builder.CreateICmpNE(F->arg_begin(), PrivLoad);
-  };
-
-  auto FiniCB = [&](InsertPointTy IP) {
-    BasicBlock *IPBB = IP.getBlock();
-    EXPECT_NE(IPBB->end(), IP.getPoint());
-  };
-
-  Builder.restoreIP(OMPBuilder.CreateMaster(Builder, BodyGenCB, FiniCB));
-  Value *EntryBBTI = EntryBB->getTerminator();
-  EXPECT_NE(EntryBBTI, nullptr);
-  EXPECT_TRUE(isa<BranchInst>(EntryBBTI));
-  BranchInst *EntryBr = cast<BranchInst>(EntryBB->getTerminator());
-  EXPECT_TRUE(EntryBr->isConditional());
-  EXPECT_EQ(EntryBr->getSuccessor(0), ThenBB);
-  EXPECT_EQ(ThenBB->getUniqueSuccessor(), ExitBB);
-  EXPECT_EQ(EntryBr->getSuccessor(1), ExitBB);
-
-  CmpInst *CondInst = cast<CmpInst>(EntryBr->getCondition());
-  EXPECT_TRUE(isa<CallInst>(CondInst->getOperand(0)));
-
-  CallInst *MasterEntryCI = cast<CallInst>(CondInst->getOperand(0));
-  EXPECT_EQ(MasterEntryCI->getNumArgOperands(), 2U);
-  EXPECT_EQ(MasterEntryCI->getCalledFunction()->getName(), "__kmpc_master");
-  EXPECT_TRUE(isa<GlobalVariable>(MasterEntryCI->getArgOperand(0)));
-
-  CallInst *MasterEndCI = nullptr;
-  for (auto &FI : *ThenBB) {
-    Instruction *cur = &FI;
-    if (isa<CallInst>(cur)) {
-      MasterEndCI = cast<CallInst>(cur);
-      if (MasterEndCI->getCalledFunction()->getName() == "__kmpc_end_master")
-        break;
-      MasterEndCI = nullptr;
-    }
-  }
-  EXPECT_NE(MasterEndCI, nullptr);
-  EXPECT_EQ(MasterEndCI->getNumArgOperands(), 2U);
-  EXPECT_TRUE(isa<GlobalVariable>(MasterEndCI->getArgOperand(0)));
-  EXPECT_EQ(MasterEndCI->getArgOperand(1), MasterEntryCI->getArgOperand(1));
-}
-
-TEST_F(OpenMPIRBuilderTest, CriticalDirective) {
-  using InsertPointTy = OpenMPIRBuilder::InsertPointTy;
-  OpenMPIRBuilder OMPBuilder(*M);
-  OMPBuilder.initialize();
-  F->setName("func");
-  IRBuilder<> Builder(BB);
-
-  OpenMPIRBuilder::LocationDescription Loc({Builder.saveIP(), DL});
-
-  AllocaInst *PrivAI = Builder.CreateAlloca(F->arg_begin()->getType());
-
-  BasicBlock *EntryBB = nullptr;
-
-  auto BodyGenCB = [&](InsertPointTy AllocaIP, InsertPointTy CodeGenIP,
-                       BasicBlock &FiniBB) {
-    // collect some info for checks later
-    EntryBB = FiniBB.getUniquePredecessor();
-
-    // actual start for bodyCB
-    llvm::BasicBlock *CodeGenIPBB = CodeGenIP.getBlock();
-    llvm::Instruction *CodeGenIPInst = &*CodeGenIP.getPoint();
-    EXPECT_EQ(CodeGenIPBB->getTerminator(), CodeGenIPInst);
-    EXPECT_EQ(EntryBB, CodeGenIPBB);
-
-    // body begin
-    Builder.restoreIP(CodeGenIP);
-    Builder.CreateStore(F->arg_begin(), PrivAI);
-    Value *PrivLoad = Builder.CreateLoad(PrivAI, "local.use");
-    Builder.CreateICmpNE(F->arg_begin(), PrivLoad);
-  };
-
-  auto FiniCB = [&](InsertPointTy IP) {
-    BasicBlock *IPBB = IP.getBlock();
-    EXPECT_NE(IPBB->end(), IP.getPoint());
-  };
-
-  Builder.restoreIP(OMPBuilder.CreateCritical(Builder, BodyGenCB, FiniCB,
-                                              "testCRT", nullptr));
-
-  Value *EntryBBTI = EntryBB->getTerminator();
-  EXPECT_EQ(EntryBBTI, nullptr);
-
-  CallInst *CriticalEntryCI = nullptr;
-  for (auto &EI : *EntryBB) {
-    Instruction *cur = &EI;
-    if (isa<CallInst>(cur)) {
-      CriticalEntryCI = cast<CallInst>(cur);
-      if (CriticalEntryCI->getCalledFunction()->getName() == "__kmpc_critical")
-        break;
-      CriticalEntryCI = nullptr;
-    }
-  }
-  EXPECT_NE(CriticalEntryCI, nullptr);
-  EXPECT_EQ(CriticalEntryCI->getNumArgOperands(), 3U);
-  EXPECT_EQ(CriticalEntryCI->getCalledFunction()->getName(), "__kmpc_critical");
-  EXPECT_TRUE(isa<GlobalVariable>(CriticalEntryCI->getArgOperand(0)));
-
-  CallInst *CriticalEndCI = nullptr;
-  for (auto &FI : *EntryBB) {
-    Instruction *cur = &FI;
-    if (isa<CallInst>(cur)) {
-      CriticalEndCI = cast<CallInst>(cur);
-      if (CriticalEndCI->getCalledFunction()->getName() ==
-          "__kmpc_end_critical")
-        break;
-      CriticalEndCI = nullptr;
-    }
-  }
-  EXPECT_NE(CriticalEndCI, nullptr);
-  EXPECT_EQ(CriticalEndCI->getNumArgOperands(), 3U);
-  EXPECT_TRUE(isa<GlobalVariable>(CriticalEndCI->getArgOperand(0)));
-  EXPECT_EQ(CriticalEndCI->getArgOperand(1), CriticalEntryCI->getArgOperand(1));
-  PointerType *CriticalNamePtrTy =
-      PointerType::getUnqual(ArrayType::get(Type::getInt32Ty(Ctx), 8));
-  EXPECT_EQ(CriticalEndCI->getArgOperand(2), CriticalEntryCI->getArgOperand(2));
-  EXPECT_EQ(CriticalEndCI->getArgOperand(2)->getType(), CriticalNamePtrTy);
-}
-
 } // namespace


        


More information about the cfe-commits mailing list