|
@@ -13472,24 +13472,12 @@ CodeGenFunction::EmitNVPTXBuiltinExpr(unsigned BuiltinID, const CallExpr *E) {
|
|
// success flag.
|
|
// success flag.
|
|
return MakeAtomicCmpXchgValue(*this, E, /*ReturnBool=*/false);
|
|
return MakeAtomicCmpXchgValue(*this, E, /*ReturnBool=*/false);
|
|
|
|
|
|
- case NVPTX::BI__nvvm_atom_add_gen_f: {
|
|
|
|
- Value *Ptr = EmitScalarExpr(E->getArg(0));
|
|
|
|
- Value *Val = EmitScalarExpr(E->getArg(1));
|
|
|
|
- // atomicrmw only deals with integer arguments so we need to use
|
|
|
|
- // LLVM's nvvm_atomic_load_add_f32 intrinsic for that.
|
|
|
|
- Function *FnALAF32 =
|
|
|
|
- CGM.getIntrinsic(Intrinsic::nvvm_atomic_load_add_f32, Ptr->getType());
|
|
|
|
- return Builder.CreateCall(FnALAF32, {Ptr, Val});
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
+ case NVPTX::BI__nvvm_atom_add_gen_f:
|
|
case NVPTX::BI__nvvm_atom_add_gen_d: {
|
|
case NVPTX::BI__nvvm_atom_add_gen_d: {
|
|
Value *Ptr = EmitScalarExpr(E->getArg(0));
|
|
Value *Ptr = EmitScalarExpr(E->getArg(0));
|
|
Value *Val = EmitScalarExpr(E->getArg(1));
|
|
Value *Val = EmitScalarExpr(E->getArg(1));
|
|
- // atomicrmw only deals with integer arguments, so we need to use
|
|
|
|
- // LLVM's nvvm_atomic_load_add_f64 intrinsic.
|
|
|
|
- Function *FnALAF64 =
|
|
|
|
- CGM.getIntrinsic(Intrinsic::nvvm_atomic_load_add_f64, Ptr->getType());
|
|
|
|
- return Builder.CreateCall(FnALAF64, {Ptr, Val});
|
|
|
|
|
|
+ return Builder.CreateAtomicRMW(llvm::AtomicRMWInst::FAdd, Ptr, Val,
|
|
|
|
+ AtomicOrdering::SequentiallyConsistent);
|
|
}
|
|
}
|
|
|
|
|
|
case NVPTX::BI__nvvm_atom_inc_gen_ui: {
|
|
case NVPTX::BI__nvvm_atom_inc_gen_ui: {
|