Atomic compound expressions try to use atomicrmw if possible, but this path doesn't set the Result variable, leaving it to crash in later code if anything ever tries to use the result of the expression. This fixes that issue by recalculating the new value based on the old one atomically loaded.
0ec6a4882ee..10e0d64337d master -> master
Separately, does this do floating-point add / sub properly? We added them too C++20.
It looks like that already works because it doesn't/can't use LLVM's atomicrmw path.