@@ -830,6 +830,38 @@ GlobalValue *OpenMPIRBuilder::createGlobalFlag(unsigned Value, StringRef Name) {
830
830
return GV;
831
831
}
832
832
833
+ void OpenMPIRBuilder::emitUsed (StringRef Name, ArrayRef<WeakTrackingVH> List) {
834
+ if (List.empty ())
835
+ return ;
836
+
837
+ // Convert List to what ConstantArray needs.
838
+ SmallVector<Constant *, 8 > UsedArray;
839
+ UsedArray.resize (List.size ());
840
+ for (unsigned I = 0 , E = List.size (); I != E; ++I)
841
+ UsedArray[I] = ConstantExpr::getPointerBitCastOrAddrSpaceCast (
842
+ cast<Constant>(&*List[I]), Builder.getPtrTy ());
843
+
844
+ if (UsedArray.empty ())
845
+ return ;
846
+ ArrayType *ATy = ArrayType::get (Builder.getPtrTy (), UsedArray.size ());
847
+
848
+ auto *GV = new GlobalVariable (M, ATy, false , GlobalValue::AppendingLinkage,
849
+ ConstantArray::get (ATy, UsedArray), Name);
850
+
851
+ GV->setSection (" llvm.metadata" );
852
+ }
853
+
854
+ GlobalVariable *
855
+ OpenMPIRBuilder::emitKernelExecutionMode (StringRef KernelName,
856
+ OMPTgtExecModeFlags Mode) {
857
+ auto *Int8Ty = Builder.getInt8Ty ();
858
+ auto *GVMode = new GlobalVariable (
859
+ M, Int8Ty, /* isConstant=*/ true , GlobalValue::WeakAnyLinkage,
860
+ ConstantInt::get (Int8Ty, Mode), Twine (KernelName, " _exec_mode" ));
861
+ GVMode->setVisibility (GlobalVariable::ProtectedVisibility);
862
+ return GVMode;
863
+ }
864
+
833
865
Constant *OpenMPIRBuilder::getOrCreateIdent (Constant *SrcLocStr,
834
866
uint32_t SrcLocStrSize,
835
867
IdentFlag LocFlags,
@@ -2246,28 +2278,6 @@ static OpenMPIRBuilder::InsertPointTy getInsertPointAfterInstr(Instruction *I) {
2246
2278
return OpenMPIRBuilder::InsertPointTy (I->getParent (), IT);
2247
2279
}
2248
2280
2249
- void OpenMPIRBuilder::emitUsed (StringRef Name,
2250
- std::vector<WeakTrackingVH> &List) {
2251
- if (List.empty ())
2252
- return ;
2253
-
2254
- // Convert List to what ConstantArray needs.
2255
- SmallVector<Constant *, 8 > UsedArray;
2256
- UsedArray.resize (List.size ());
2257
- for (unsigned I = 0 , E = List.size (); I != E; ++I)
2258
- UsedArray[I] = ConstantExpr::getPointerBitCastOrAddrSpaceCast (
2259
- cast<Constant>(&*List[I]), Builder.getPtrTy ());
2260
-
2261
- if (UsedArray.empty ())
2262
- return ;
2263
- ArrayType *ATy = ArrayType::get (Builder.getPtrTy (), UsedArray.size ());
2264
-
2265
- auto *GV = new GlobalVariable (M, ATy, false , GlobalValue::AppendingLinkage,
2266
- ConstantArray::get (ATy, UsedArray), Name);
2267
-
2268
- GV->setSection (" llvm.metadata" );
2269
- }
2270
-
2271
2281
Value *OpenMPIRBuilder::getGPUThreadID () {
2272
2282
return Builder.CreateCall (
2273
2283
getOrCreateRuntimeFunction (M,
@@ -6731,41 +6741,6 @@ FunctionCallee OpenMPIRBuilder::createDispatchDeinitFunction() {
6731
6741
return getOrCreateRuntimeFunction (M, omp::OMPRTL___kmpc_dispatch_deinit);
6732
6742
}
6733
6743
6734
- static void emitUsed (StringRef Name, std::vector<llvm::WeakTrackingVH> &List,
6735
- Module &M) {
6736
- if (List.empty ())
6737
- return ;
6738
-
6739
- Type *PtrTy = PointerType::get (M.getContext (), /* AddressSpace=*/ 0 );
6740
-
6741
- // Convert List to what ConstantArray needs.
6742
- SmallVector<Constant *, 8 > UsedArray;
6743
- UsedArray.reserve (List.size ());
6744
- for (auto Item : List)
6745
- UsedArray.push_back (ConstantExpr::getPointerBitCastOrAddrSpaceCast (
6746
- cast<Constant>(&*Item), PtrTy));
6747
-
6748
- ArrayType *ArrTy = ArrayType::get (PtrTy, UsedArray.size ());
6749
- auto *GV =
6750
- new GlobalVariable (M, ArrTy, false , llvm::GlobalValue::AppendingLinkage,
6751
- llvm::ConstantArray::get (ArrTy, UsedArray), Name);
6752
-
6753
- GV->setSection (" llvm.metadata" );
6754
- }
6755
-
6756
- static void
6757
- emitExecutionMode (OpenMPIRBuilder &OMPBuilder, IRBuilderBase &Builder,
6758
- StringRef FunctionName, OMPTgtExecModeFlags Mode,
6759
- std::vector<llvm::WeakTrackingVH> &LLVMCompilerUsed) {
6760
- auto *Int8Ty = Type::getInt8Ty (Builder.getContext ());
6761
- auto *GVMode = new llvm::GlobalVariable (
6762
- OMPBuilder.M , Int8Ty, /* isConstant=*/ true ,
6763
- llvm::GlobalValue::WeakAnyLinkage, llvm::ConstantInt::get (Int8Ty, Mode),
6764
- Twine (FunctionName, " _exec_mode" ));
6765
- GVMode->setVisibility (llvm::GlobalVariable::ProtectedVisibility);
6766
- LLVMCompilerUsed.emplace_back (GVMode);
6767
- }
6768
-
6769
6744
static Expected<Function *> createOutlinedFunction (
6770
6745
OpenMPIRBuilder &OMPBuilder, IRBuilderBase &Builder, bool IsSPMD,
6771
6746
const OpenMPIRBuilder::TargetKernelDefaultAttrs &DefaultAttrs,
@@ -6798,12 +6773,9 @@ static Expected<Function *> createOutlinedFunction(
6798
6773
Function::Create (FuncType, GlobalValue::InternalLinkage, FuncName, M);
6799
6774
6800
6775
if (OMPBuilder.Config .isTargetDevice ()) {
6801
- std::vector<llvm::WeakTrackingVH> LLVMCompilerUsed;
6802
- emitExecutionMode (OMPBuilder, Builder, FuncName,
6803
- IsSPMD ? OMP_TGT_EXEC_MODE_SPMD
6804
- : OMP_TGT_EXEC_MODE_GENERIC,
6805
- LLVMCompilerUsed);
6806
- emitUsed (" llvm.compiler.used" , LLVMCompilerUsed, OMPBuilder.M );
6776
+ Value *ExecMode = OMPBuilder.emitKernelExecutionMode (
6777
+ FuncName, IsSPMD ? OMP_TGT_EXEC_MODE_SPMD : OMP_TGT_EXEC_MODE_GENERIC);
6778
+ OMPBuilder.emitUsed (" llvm.compiler.used" , {ExecMode});
6807
6779
}
6808
6780
6809
6781
// Save insert point.
@@ -7460,8 +7432,8 @@ emitTargetCall(OpenMPIRBuilder &OMPBuilder, IRBuilderBase &Builder,
7460
7432
? InitMaxThreadsClause (RuntimeAttrs.MaxThreads )
7461
7433
: nullptr ;
7462
7434
7463
- for (auto [TeamsVal, TargetVal] : llvm:: zip_equal (
7464
- RuntimeAttrs. TeamsThreadLimit , RuntimeAttrs.TargetThreadLimit )) {
7435
+ for (auto [TeamsVal, TargetVal] : zip_equal (RuntimeAttrs. TeamsThreadLimit ,
7436
+ RuntimeAttrs.TargetThreadLimit )) {
7465
7437
Value *TeamsThreadLimitClause = InitMaxThreadsClause (TeamsVal);
7466
7438
Value *NumThreads = InitMaxThreadsClause (TargetVal);
7467
7439
@@ -7521,8 +7493,6 @@ OpenMPIRBuilder::InsertPointOrErrorTy OpenMPIRBuilder::createTarget(
7521
7493
OpenMPIRBuilder::TargetBodyGenCallbackTy CBFunc,
7522
7494
OpenMPIRBuilder::TargetGenArgAccessorsCallbackTy ArgAccessorFuncCB,
7523
7495
SmallVector<DependData> Dependencies, bool HasNowait) {
7524
- assert ((!RuntimeAttrs.LoopTripCount || IsSPMD) &&
7525
- " trip count not expected if IsSPMD=false" );
7526
7496
7527
7497
if (!updateToLocation (Loc))
7528
7498
return InsertPointTy ();
0 commit comments