-
-
Notifications
You must be signed in to change notification settings - Fork 15k
atomic RMW intrinsics: avoid unnecessary ptr/int conversions #134617
Copy link
Copy link
Closed
Labels
A-atomicArea: Atomics, barriers, and sync primitivesArea: Atomics, barriers, and sync primitivesA-codegenArea: Code generationArea: Code generationA-intrinsicsArea: IntrinsicsArea: IntrinsicsA-strict-provenanceArea: Strict provenance for raw pointersArea: Strict provenance for raw pointersC-optimizationCategory: An issue highlighting optimization opportunities or PRs implementing suchCategory: An issue highlighting optimization opportunities or PRs implementing such
Metadata
Metadata
Assignees
Labels
A-atomicArea: Atomics, barriers, and sync primitivesArea: Atomics, barriers, and sync primitivesA-codegenArea: Code generationArea: Code generationA-intrinsicsArea: IntrinsicsArea: IntrinsicsA-strict-provenanceArea: Strict provenance for raw pointersArea: Strict provenance for raw pointersC-optimizationCategory: An issue highlighting optimization opportunities or PRs implementing suchCategory: An issue highlighting optimization opportunities or PRs implementing such
Type
Fields
Give feedbackNo fields configured for issues without a type.
Currently, the type of our atomic RMW intrinsics looks like
However, this is not quite what we want: for atomic operations on a pointer, we want
dstto be something like*mut *mut T, butsrcshould beusize. The return type should be*mut T.This would let us avoid some unnecessary casts in
AtomicPtr, and shift the burden of mapping this operation to something LLVM supports into the backend. It also makes the semantics of these operations more clear: only the provenance of the in-memory data matters;srccarries no provenance.