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