diff options
author | NimishMishra <42909663+NimishMishra@users.noreply.github.com> | 2025-04-09 15:31:44 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-04-09 03:01:44 -0700 |
commit | 53fa92dcad49466412a139eef223710bf5891213 (patch) | |
tree | 38bf917921bbdac8f876c24aff0bfaaad29ad084 /llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp | |
parent | 712c21336fa891f5b32254dd51b024178d61befb (diff) | |
download | llvm-53fa92dcad49466412a139eef223710bf5891213.zip llvm-53fa92dcad49466412a139eef223710bf5891213.tar.gz llvm-53fa92dcad49466412a139eef223710bf5891213.tar.bz2 |
[mlir][llvm][OpenMP] Hoist __atomic_load alloca (#132888)
Current implementation of `__atomic_compare_exchange` uses an alloca for
`__atomic_load`, leading to issues like
https://github.com/llvm/llvm-project/issues/120724. This PR hoists this
alloca to `AllocaIP`.
Fixes: https://github.com/llvm/llvm-project/issues/120724
Diffstat (limited to 'llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp')
-rw-r--r-- | llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp b/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp index 2d3d318..5dd0180 100644 --- a/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp +++ b/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp @@ -3781,6 +3781,9 @@ TEST_F(OpenMPIRBuilderTest, OMPAtomicReadFlt) { IRBuilder<> Builder(BB); OpenMPIRBuilder::LocationDescription Loc({Builder.saveIP(), DL}); + BasicBlock *EntryBB = BB; + OpenMPIRBuilder::InsertPointTy AllocaIP(EntryBB, + EntryBB->getFirstInsertionPt()); Type *Float32 = Type::getFloatTy(M->getContext()); AllocaInst *XVal = Builder.CreateAlloca(Float32); @@ -3791,7 +3794,7 @@ TEST_F(OpenMPIRBuilderTest, OMPAtomicReadFlt) { OpenMPIRBuilder::AtomicOpValue X = {XVal, Float32, false, false}; OpenMPIRBuilder::AtomicOpValue V = {VVal, Float32, false, false}; - Builder.restoreIP(OMPBuilder.createAtomicRead(Loc, X, V, AO)); + Builder.restoreIP(OMPBuilder.createAtomicRead(Loc, X, V, AO, AllocaIP)); IntegerType *IntCastTy = IntegerType::get(M->getContext(), Float32->getScalarSizeInBits()); @@ -3821,6 +3824,9 @@ TEST_F(OpenMPIRBuilderTest, OMPAtomicReadInt) { IRBuilder<> Builder(BB); OpenMPIRBuilder::LocationDescription Loc({Builder.saveIP(), DL}); + BasicBlock *EntryBB = BB; + OpenMPIRBuilder::InsertPointTy AllocaIP(EntryBB, + EntryBB->getFirstInsertionPt()); IntegerType *Int32 = Type::getInt32Ty(M->getContext()); AllocaInst *XVal = Builder.CreateAlloca(Int32); @@ -3831,9 +3837,8 @@ TEST_F(OpenMPIRBuilderTest, OMPAtomicReadInt) { OpenMPIRBuilder::AtomicOpValue X = {XVal, Int32, false, false}; OpenMPIRBuilder::AtomicOpValue V = {VVal, Int32, false, false}; - BasicBlock *EntryBB = BB; + Builder.restoreIP(OMPBuilder.createAtomicRead(Loc, X, V, AO, AllocaIP)); - Builder.restoreIP(OMPBuilder.createAtomicRead(Loc, X, V, AO)); LoadInst *AtomicLoad = nullptr; StoreInst *StoreofAtomic = nullptr; |