diff options
author | Nikita Popov <npopov@redhat.com> | 2021-12-13 16:23:15 +0100 |
---|---|---|
committer | Nikita Popov <npopov@redhat.com> | 2021-12-14 14:07:47 +0100 |
commit | d733f2c68c97f7cae9697cffd62aff0ebe79ce16 (patch) | |
tree | b7c080ffc45539c3729b8d548b8b74a9eac80ca2 /llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp | |
parent | 26f6fbe2be1dfb6e734ba34b650606cd18a2a4f7 (diff) | |
download | llvm-d733f2c68c97f7cae9697cffd62aff0ebe79ce16.zip llvm-d733f2c68c97f7cae9697cffd62aff0ebe79ce16.tar.gz llvm-d733f2c68c97f7cae9697cffd62aff0ebe79ce16.tar.bz2 |
[OpenMPIRBuilder] Support opaque pointers in reduction handling
Make the reduction handling in OpenMPIRBuilder compatible with
opaque pointers by explicitly storing the element type in ReductionInfo,
and also passing it to the atomic reduction callback, as at least
the ones in the test need the type there.
This doesn't make things fully compatible yet, there are other
uses of element types in this class. I also left one
getPointerElementType() call in mlir, because I'm not familiar
with that area.
Differential Revison: https://reviews.llvm.org/D115638
Diffstat (limited to 'llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp')
-rw-r--r-- | llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp | 48 |
1 files changed, 22 insertions, 26 deletions
diff --git a/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp b/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp index 8373d69..454dbb5 100644 --- a/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp +++ b/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp @@ -3028,10 +3028,10 @@ sumReduction(OpenMPIRBuilder::InsertPointTy IP, Value *LHS, Value *RHS, } static OpenMPIRBuilder::InsertPointTy -sumAtomicReduction(OpenMPIRBuilder::InsertPointTy IP, Value *LHS, Value *RHS) { +sumAtomicReduction(OpenMPIRBuilder::InsertPointTy IP, Type *Ty, Value *LHS, + Value *RHS) { IRBuilder<> Builder(IP.getBlock(), IP.getPoint()); - Value *Partial = Builder.CreateLoad(RHS->getType()->getPointerElementType(), - RHS, "red.partial"); + Value *Partial = Builder.CreateLoad(Ty, RHS, "red.partial"); Builder.CreateAtomicRMW(AtomicRMWInst::FAdd, LHS, Partial, None, AtomicOrdering::Monotonic); return Builder.saveIP(); @@ -3046,10 +3046,10 @@ xorReduction(OpenMPIRBuilder::InsertPointTy IP, Value *LHS, Value *RHS, } static OpenMPIRBuilder::InsertPointTy -xorAtomicReduction(OpenMPIRBuilder::InsertPointTy IP, Value *LHS, Value *RHS) { +xorAtomicReduction(OpenMPIRBuilder::InsertPointTy IP, Type *Ty, Value *LHS, + Value *RHS) { IRBuilder<> Builder(IP.getBlock(), IP.getPoint()); - Value *Partial = Builder.CreateLoad(RHS->getType()->getPointerElementType(), - RHS, "red.partial"); + Value *Partial = Builder.CreateLoad(Ty, RHS, "red.partial"); Builder.CreateAtomicRMW(AtomicRMWInst::Xor, LHS, Partial, None, AtomicOrdering::Monotonic); return Builder.saveIP(); @@ -3081,13 +3081,15 @@ TEST_F(OpenMPIRBuilderTest, CreateReductions) { // Create variables to be reduced. InsertPointTy OuterAllocaIP(&F->getEntryBlock(), F->getEntryBlock().getFirstInsertionPt()); + Type *SumType = Builder.getFloatTy(); + Type *XorType = Builder.getInt32Ty(); Value *SumReduced; Value *XorReduced; { IRBuilderBase::InsertPointGuard Guard(Builder); Builder.restoreIP(OuterAllocaIP); - SumReduced = Builder.CreateAlloca(Builder.getFloatTy()); - XorReduced = Builder.CreateAlloca(Builder.getInt32Ty()); + SumReduced = Builder.CreateAlloca(SumType); + XorReduced = Builder.CreateAlloca(XorType); } // Store initial values of reductions into global variables. @@ -3109,12 +3111,8 @@ TEST_F(OpenMPIRBuilderTest, CreateReductions) { Value *TID = OMPBuilder.getOrCreateThreadID(Ident); Value *SumLocal = Builder.CreateUIToFP(TID, Builder.getFloatTy(), "sum.local"); - Value *SumPartial = - Builder.CreateLoad(SumReduced->getType()->getPointerElementType(), - SumReduced, "sum.partial"); - Value *XorPartial = - Builder.CreateLoad(XorReduced->getType()->getPointerElementType(), - XorReduced, "xor.partial"); + Value *SumPartial = Builder.CreateLoad(SumType, SumReduced, "sum.partial"); + Value *XorPartial = Builder.CreateLoad(XorType, XorReduced, "xor.partial"); Value *Sum = Builder.CreateFAdd(SumPartial, SumLocal, "sum"); Value *Xor = Builder.CreateXor(XorPartial, TID, "xor"); Builder.CreateStore(Sum, SumReduced); @@ -3164,8 +3162,8 @@ TEST_F(OpenMPIRBuilderTest, CreateReductions) { Builder.restoreIP(AfterIP); OpenMPIRBuilder::ReductionInfo ReductionInfos[] = { - {SumReduced, SumPrivatized, sumReduction, sumAtomicReduction}, - {XorReduced, XorPrivatized, xorReduction, xorAtomicReduction}}; + {SumType, SumReduced, SumPrivatized, sumReduction, sumAtomicReduction}, + {XorType, XorReduced, XorPrivatized, xorReduction, xorAtomicReduction}}; OMPBuilder.createReductions(BodyIP, BodyAllocaIP, ReductionInfos); @@ -3319,13 +3317,15 @@ TEST_F(OpenMPIRBuilderTest, CreateTwoReductions) { // Create variables to be reduced. InsertPointTy OuterAllocaIP(&F->getEntryBlock(), F->getEntryBlock().getFirstInsertionPt()); + Type *SumType = Builder.getFloatTy(); + Type *XorType = Builder.getInt32Ty(); Value *SumReduced; Value *XorReduced; { IRBuilderBase::InsertPointGuard Guard(Builder); Builder.restoreIP(OuterAllocaIP); - SumReduced = Builder.CreateAlloca(Builder.getFloatTy()); - XorReduced = Builder.CreateAlloca(Builder.getInt32Ty()); + SumReduced = Builder.CreateAlloca(SumType); + XorReduced = Builder.CreateAlloca(XorType); } // Store initial values of reductions into global variables. @@ -3344,9 +3344,7 @@ TEST_F(OpenMPIRBuilderTest, CreateTwoReductions) { Value *TID = OMPBuilder.getOrCreateThreadID(Ident); Value *SumLocal = Builder.CreateUIToFP(TID, Builder.getFloatTy(), "sum.local"); - Value *SumPartial = - Builder.CreateLoad(SumReduced->getType()->getPointerElementType(), - SumReduced, "sum.partial"); + Value *SumPartial = Builder.CreateLoad(SumType, SumReduced, "sum.partial"); Value *Sum = Builder.CreateFAdd(SumPartial, SumLocal, "sum"); Builder.CreateStore(Sum, SumReduced); @@ -3364,9 +3362,7 @@ TEST_F(OpenMPIRBuilderTest, CreateTwoReductions) { Constant *SrcLocStr = OMPBuilder.getOrCreateSrcLocStr(Loc); Value *Ident = OMPBuilder.getOrCreateIdent(SrcLocStr); Value *TID = OMPBuilder.getOrCreateThreadID(Ident); - Value *XorPartial = - Builder.CreateLoad(XorReduced->getType()->getPointerElementType(), - XorReduced, "xor.partial"); + Value *XorPartial = Builder.CreateLoad(XorType, XorReduced, "xor.partial"); Value *Xor = Builder.CreateXor(XorPartial, TID, "xor"); Builder.CreateStore(Xor, XorReduced); @@ -3421,10 +3417,10 @@ TEST_F(OpenMPIRBuilderTest, CreateTwoReductions) { OMPBuilder.createReductions( FirstBodyIP, FirstBodyAllocaIP, - {{SumReduced, SumPrivatized, sumReduction, sumAtomicReduction}}); + {{SumType, SumReduced, SumPrivatized, sumReduction, sumAtomicReduction}}); OMPBuilder.createReductions( SecondBodyIP, SecondBodyAllocaIP, - {{XorReduced, XorPrivatized, xorReduction, xorAtomicReduction}}); + {{XorType, XorReduced, XorPrivatized, xorReduction, xorAtomicReduction}}); Builder.restoreIP(AfterIP); Builder.CreateRetVoid(); |