diff options
author | Jan Sjodin <jan_sjodin@yahoo.com> | 2023-07-18 14:09:54 -0400 |
---|---|---|
committer | Jan Sjodin <jan_sjodin@yahoo.com> | 2023-07-25 13:01:40 -0400 |
commit | caa35a1ad9afc45079830966258ae24ca8f5ec0a (patch) | |
tree | 0379f304cad91f5eaaed223e36c8c856f44732b7 /llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp | |
parent | 1fde372b320015f22e24b67c41c7028974a4a223 (diff) | |
download | llvm-caa35a1ad9afc45079830966258ae24ca8f5ec0a.zip llvm-caa35a1ad9afc45079830966258ae24ca8f5ec0a.tar.gz llvm-caa35a1ad9afc45079830966258ae24ca8f5ec0a.tar.bz2 |
[OpenMP][OpenMPIRBuilder] Make outlined function parameters i64 or ptr
This patch ensures that all outlined functions parameters are i64 or ptr when
compiling for a target device, which is what the OpenMP runtime expects. The
values are then cast to the correct type inside the kernel.
Reviewed By: jdoerfert
Differential Revision: https://reviews.llvm.org/D155628
Diffstat (limited to 'llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp')
-rw-r--r-- | llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp b/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp index 82ab4c9..5679d26 100644 --- a/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp +++ b/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp @@ -5122,16 +5122,18 @@ TEST_F(OpenMPIRBuilderTest, TargetRegionDevice) { IRBuilder<> Builder(BB); OpenMPIRBuilder::LocationDescription Loc({Builder.saveIP(), DL}); + LoadInst *Value = nullptr; StoreInst *TargetStore = nullptr; llvm::SmallVector<llvm::Value *, 2> CapturedArgs = { - Constant::getIntegerValue(Type::getInt32Ty(Ctx), APInt(32, 0)), + Constant::getNullValue(Type::getInt32PtrTy(Ctx)), Constant::getNullValue(Type::getInt32PtrTy(Ctx))}; auto BodyGenCB = [&](OpenMPIRBuilder::InsertPointTy AllocaIP, OpenMPIRBuilder::InsertPointTy CodeGenIP) -> OpenMPIRBuilder::InsertPointTy { Builder.restoreIP(CodeGenIP); - TargetStore = Builder.CreateStore(CapturedArgs[0], CapturedArgs[1]); + Value = Builder.CreateLoad(Type::getInt32Ty(Ctx), CapturedArgs[0]); + TargetStore = Builder.CreateStore(Value, CapturedArgs[1]); return Builder.saveIP(); }; @@ -5155,7 +5157,7 @@ TEST_F(OpenMPIRBuilderTest, TargetRegionDevice) { EXPECT_TRUE(OutlinedFn->hasWeakODRLinkage()); EXPECT_EQ(OutlinedFn->arg_size(), 2U); EXPECT_EQ(OutlinedFn->getName(), "__omp_offloading_1_2_parent_l3"); - EXPECT_TRUE(OutlinedFn->getArg(0)->getType()->isIntegerTy(32)); + EXPECT_TRUE(OutlinedFn->getArg(0)->getType()->isPointerTy()); EXPECT_TRUE(OutlinedFn->getArg(1)->getType()->isPointerTy()); // Check entry block @@ -5180,8 +5182,22 @@ TEST_F(OpenMPIRBuilderTest, TargetRegionDevice) { // Check user code block auto *UserCodeBlock = EntryBlockBranch->getSuccessor(0); EXPECT_EQ(UserCodeBlock->getName(), "user_code.entry"); - EXPECT_EQ(UserCodeBlock->getFirstNonPHI(), TargetStore); - + auto *Alloca1 = UserCodeBlock->getFirstNonPHI(); + EXPECT_TRUE(isa<AllocaInst>(Alloca1)); + auto *Store1 = Alloca1->getNextNode(); + EXPECT_TRUE(isa<StoreInst>(Store1)); + auto *Load1 = Store1->getNextNode(); + EXPECT_TRUE(isa<LoadInst>(Load1)); + auto *Alloca2 = Load1->getNextNode(); + EXPECT_TRUE(isa<AllocaInst>(Alloca2)); + auto *Store2 = Alloca2->getNextNode(); + EXPECT_TRUE(isa<StoreInst>(Store2)); + auto *Load2 = Store2->getNextNode(); + EXPECT_TRUE(isa<LoadInst>(Load2)); + + auto *Value1 = Load2->getNextNode(); + EXPECT_EQ(Value1, Value); + EXPECT_EQ(Value1->getNextNode(), TargetStore); auto *Deinit = TargetStore->getNextNode(); EXPECT_NE(Deinit, nullptr); |