diff --git a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp index 6d9511abbdfb38..476686d65f9b47 100644 --- a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp +++ b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp @@ -3481,26 +3481,16 @@ OpenMPIRBuilder::InsertPointTy OpenMPIRBuilder::createAtomicCompare( assert(X.Var->getType()->isPointerTy() && "OMP atomic expects a pointer to target memory"); - assert((X.ElemTy->isFloatingPointTy() || X.ElemTy->isIntegerTy() || - X.ElemTy->isPointerTy()) && - "OMP atomic compare expected a scalar type"); + assert((X.ElemTy->isIntegerTy() || X.ElemTy->isPointerTy()) && + "OMP atomic compare expected a integer scalar type"); if (Op == OMPAtomicCompareOp::EQ) { - unsigned Addrspace = cast(X.Var->getType())->getAddressSpace(); - IntegerType *IntCastTy = - IntegerType::get(M.getContext(), X.ElemTy->getScalarSizeInBits()); - Value *XAddr = - X.ElemTy->isIntegerTy() - ? X.Var - : Builder.CreateBitCast(X.Var, IntCastTy->getPointerTo(Addrspace)); AtomicOrdering Failure = AtomicCmpXchgInst::getStrongestFailureOrdering(AO); // We don't need the result for now. - (void)Builder.CreateAtomicCmpXchg(XAddr, E, D, MaybeAlign(), AO, Failure); + (void)Builder.CreateAtomicCmpXchg(X.Var, E, D, MaybeAlign(), AO, Failure); } else { assert((Op == OMPAtomicCompareOp::MAX || Op == OMPAtomicCompareOp::MIN) && "Op should be either max or min at this point"); - assert(X.ElemTy->isIntegerTy() && - "max and min operators only support integer type"); // Reverse the ordop as the OpenMP forms are different from LLVM forms. // Let's take max as example.