[PATCH] D58242: Teach instcombine about remaining idemptotent atomicrmw types

Quentin Colombet via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Feb 14 10:29:12 PST 2019

qcolombet added inline comments.

Comment at: lib/Transforms/InstCombine/InstCombineAtomicRMW.cpp:53
+Instruction *InstCombiner::visitAtomicRMWInst(AtomicRMWInst &RMWI) {
+  if (!isIdempotentRMW(RMWI))
+    return nullptr;
spatel wrote:
> qcolombet wrote:
> > IIRC to be pedantic idempotent is when something doesn't change when multiplied by itself, hence this name could be misleading (though I could remember wrong :P).
> Idempotent is (copied from Instruction.h):
>   ///   Idempotent operators satisfy:  x op x === x
>   ///
>   /// In LLVM, the And and Or operators are idempotent.
> We have similar logic/switch for binop instructions. See:
> ConstantExpr::getBinOpIdentity()
> (not sure if there's a way to share code between this and that)
Thanks for the reference Sanjay.
Technically, this does not match what we are doing here: `x op cst === x` where cst may be different than x,  but I guess this is a wildly spread language abuse that people just get it.



More information about the llvm-commits mailing list