@@ -2703,4 +2703,110 @@ TEST_F(OpenMPIRBuilderTest, CreateOffloadMapnames) {
2703
2703
EXPECT_EQ (Initializer->getType ()->getArrayNumElements (), Names.size ());
2704
2704
}
2705
2705
2706
+ TEST_F (OpenMPIRBuilderTest, CreateMapperAllocas) {
2707
+ OpenMPIRBuilder OMPBuilder (*M);
2708
+ OMPBuilder.initialize ();
2709
+ F->setName (" func" );
2710
+ IRBuilder<> Builder (BB);
2711
+
2712
+ OpenMPIRBuilder::LocationDescription Loc ({Builder.saveIP (), DL});
2713
+
2714
+ unsigned TotalNbOperand = 2 ;
2715
+
2716
+ OpenMPIRBuilder::MapperAllocas MapperAllocas;
2717
+ IRBuilder<>::InsertPoint AllocaIP (&F->getEntryBlock (),
2718
+ F->getEntryBlock ().getFirstInsertionPt ());
2719
+ OMPBuilder.createMapperAllocas (Loc, AllocaIP, TotalNbOperand, MapperAllocas);
2720
+ EXPECT_NE (MapperAllocas.ArgsBase , nullptr );
2721
+ EXPECT_NE (MapperAllocas.Args , nullptr );
2722
+ EXPECT_NE (MapperAllocas.ArgSizes , nullptr );
2723
+ EXPECT_TRUE (MapperAllocas.ArgsBase ->getAllocatedType ()->isArrayTy ());
2724
+ ArrayType *ArrType =
2725
+ dyn_cast<ArrayType>(MapperAllocas.ArgsBase ->getAllocatedType ());
2726
+ EXPECT_EQ (ArrType->getNumElements (), TotalNbOperand);
2727
+ EXPECT_TRUE (MapperAllocas.ArgsBase ->getAllocatedType ()
2728
+ ->getArrayElementType ()
2729
+ ->isPointerTy ());
2730
+ EXPECT_TRUE (MapperAllocas.ArgsBase ->getAllocatedType ()
2731
+ ->getArrayElementType ()
2732
+ ->getPointerElementType ()
2733
+ ->isIntegerTy (8 ));
2734
+
2735
+ EXPECT_TRUE (MapperAllocas.Args ->getAllocatedType ()->isArrayTy ());
2736
+ ArrType = dyn_cast<ArrayType>(MapperAllocas.Args ->getAllocatedType ());
2737
+ EXPECT_EQ (ArrType->getNumElements (), TotalNbOperand);
2738
+ EXPECT_TRUE (MapperAllocas.Args ->getAllocatedType ()
2739
+ ->getArrayElementType ()
2740
+ ->isPointerTy ());
2741
+ EXPECT_TRUE (MapperAllocas.Args ->getAllocatedType ()
2742
+ ->getArrayElementType ()
2743
+ ->getPointerElementType ()
2744
+ ->isIntegerTy (8 ));
2745
+
2746
+ EXPECT_TRUE (MapperAllocas.ArgSizes ->getAllocatedType ()->isArrayTy ());
2747
+ ArrType = dyn_cast<ArrayType>(MapperAllocas.ArgSizes ->getAllocatedType ());
2748
+ EXPECT_EQ (ArrType->getNumElements (), TotalNbOperand);
2749
+ EXPECT_TRUE (MapperAllocas.ArgSizes ->getAllocatedType ()
2750
+ ->getArrayElementType ()
2751
+ ->isIntegerTy (64 ));
2752
+ }
2753
+
2754
+ TEST_F (OpenMPIRBuilderTest, EmitMapperCall) {
2755
+ OpenMPIRBuilder OMPBuilder (*M);
2756
+ OMPBuilder.initialize ();
2757
+ F->setName (" func" );
2758
+ IRBuilder<> Builder (BB);
2759
+ LLVMContext &Ctx = M->getContext ();
2760
+
2761
+ OpenMPIRBuilder::LocationDescription Loc ({Builder.saveIP (), DL});
2762
+
2763
+ unsigned TotalNbOperand = 2 ;
2764
+
2765
+ OpenMPIRBuilder::MapperAllocas MapperAllocas;
2766
+ IRBuilder<>::InsertPoint AllocaIP (&F->getEntryBlock (),
2767
+ F->getEntryBlock ().getFirstInsertionPt ());
2768
+ OMPBuilder.createMapperAllocas (Loc, AllocaIP, TotalNbOperand, MapperAllocas);
2769
+
2770
+ auto *BeginMapperFunc = OMPBuilder.getOrCreateRuntimeFunctionPtr (
2771
+ omp::OMPRTL___tgt_target_data_begin_mapper);
2772
+
2773
+ SmallVector<uint64_t > Flags = {0 , 2 };
2774
+
2775
+ Constant *SrcLocCst = OMPBuilder.getOrCreateSrcLocStr (" " , " file1" , 2 , 5 );
2776
+ Value *SrcLocInfo = OMPBuilder.getOrCreateIdent (SrcLocCst);
2777
+
2778
+ Constant *Cst1 = OMPBuilder.getOrCreateSrcLocStr (" array1" , " file1" , 2 , 5 );
2779
+ Constant *Cst2 = OMPBuilder.getOrCreateSrcLocStr (" array2" , " file1" , 3 , 5 );
2780
+ SmallVector<llvm::Constant *> Names = {Cst1, Cst2};
2781
+
2782
+ GlobalVariable *Maptypes =
2783
+ OMPBuilder.createOffloadMaptypes (Flags, " .offload_maptypes" );
2784
+ Value *MaptypesArg = Builder.CreateConstInBoundsGEP2_32 (
2785
+ ArrayType::get (Type::getInt64Ty (Ctx), TotalNbOperand), Maptypes,
2786
+ /* Idx0=*/ 0 , /* Idx1=*/ 0 );
2787
+
2788
+ GlobalVariable *Mapnames =
2789
+ OMPBuilder.createOffloadMapnames (Names, " .offload_mapnames" );
2790
+ Value *MapnamesArg = Builder.CreateConstInBoundsGEP2_32 (
2791
+ ArrayType::get (Type::getInt8PtrTy (Ctx), TotalNbOperand), Mapnames,
2792
+ /* Idx0=*/ 0 , /* Idx1=*/ 0 );
2793
+
2794
+ OMPBuilder.emitMapperCall (Builder.saveIP (), BeginMapperFunc, SrcLocInfo,
2795
+ MaptypesArg, MapnamesArg, MapperAllocas, -1 ,
2796
+ TotalNbOperand);
2797
+
2798
+ CallInst *MapperCall = dyn_cast<CallInst>(&BB->back ());
2799
+ EXPECT_NE (MapperCall, nullptr );
2800
+ EXPECT_EQ (MapperCall->getNumArgOperands (), 9U );
2801
+ EXPECT_EQ (MapperCall->getCalledFunction ()->getName (),
2802
+ " __tgt_target_data_begin_mapper" );
2803
+ EXPECT_EQ (MapperCall->getOperand (0 ), SrcLocInfo);
2804
+ EXPECT_TRUE (MapperCall->getOperand (1 )->getType ()->isIntegerTy (64 ));
2805
+ EXPECT_TRUE (MapperCall->getOperand (2 )->getType ()->isIntegerTy (32 ));
2806
+
2807
+ EXPECT_EQ (MapperCall->getOperand (6 ), MaptypesArg);
2808
+ EXPECT_EQ (MapperCall->getOperand (7 ), MapnamesArg);
2809
+ EXPECT_TRUE (MapperCall->getOperand (8 )->getType ()->isPointerTy ());
2810
+ }
2811
+
2706
2812
} // namespace
0 commit comments