parameters: (module, op, ordering)
return_statement: return fn_atomic
docstring: Define a llvm function for atomic increment/decrement to the given module
      Argument ``op`` is the operation "add"/"sub".  Argument ``ordering`` is
      the memory ordering.  The generated function returns the new value.
docstring_summary: Define a llvm function for atomic increment/decrement to the given module
      Argument ``op`` is the operation "add"/"sub".  Argument ``ordering`` is
      the memory ordering.  The generated function returns the new value.
docstring_tokens: Define a llvm function for atomic increment / decrement to the given module Argument op is the operation add / sub . Argument ordering is the memory ordering . The generated function returns the new value .
function: def _define_atomic_inc_dec(module, op, ordering):
      """Define a llvm function for atomic increment/decrement to the given module
      Argument ``op`` is the operation "add"/"sub".  Argument ``ordering`` is
      the memory ordering.  The generated function returns the new value.
      """
      ftype = ir.FunctionType(_word_type, [_word_type.as_pointer()])
      fn_atomic = ir.Function(module, ftype, name="nrt_atomic_{0}".format(op))
  
      [ptr] = fn_atomic.args
      bb = fn_atomic.append_basic_block()
      builder = ir.IRBuilder(bb)
      ONE = ir.Constant(_word_type, 1)
      if not _disable_atomicity:
          oldval = builder.atomic_rmw(op, ptr, ONE, ordering=ordering)
          # Perform the operation on the old value so that we can pretend returning
          # the "new" value.
          res = getattr(builder, op)(oldval, ONE)
          builder.ret(res)
      else:
          oldval = builder.load(ptr)
          newval = getattr(builder, op)(oldval, ONE)
          builder.store(newval, ptr)
          builder.ret(oldval)
  
      return fn_atomic
function_tokens: def _define_atomic_inc_dec ( module , op , ordering ) : ftype = ir . FunctionType ( _word_type , [ _word_type . as_pointer ( ) ] ) fn_atomic = ir . Function ( module , ftype , name = "nrt_atomic_{0}" . format ( op ) ) [ ptr ] = fn_atomic . args bb = fn_atomic . append_basic_block ( ) builder = ir . IRBuilder ( bb ) ONE = ir . Constant ( _word_type , 1 ) if not _disable_atomicity : oldval = builder . atomic_rmw ( op , ptr , ONE , ordering = ordering ) # Perform the operation on the old value so that we can pretend returning # the "new" value. res = getattr ( builder , op ) ( oldval , ONE ) builder . ret ( res ) else : oldval = builder . load ( ptr ) newval = getattr ( builder , op ) ( oldval , ONE ) builder . store ( newval , ptr ) builder . ret ( oldval ) return fn_atomic