diff options
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/CodeGen/CGBuiltin.cpp | 18 | 
1 files changed, 3 insertions, 15 deletions
diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index 52e2d5bfb91..086785fdbac 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -13472,24 +13472,12 @@ CodeGenFunction::EmitNVPTXBuiltinExpr(unsigned BuiltinID, const CallExpr *E) {      // success flag.      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: {      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_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: {  | 

