On Wed, Jul 31, 2024, at 10:09, David Laight wrote: > From: Linus Torvalds >> Sent: 31 July 2024 00:04 >> >> On Tue, 30 Jul 2024 at 15:44, Linus Torvalds >> <torvalds@xxxxxxxxxxxxxxxxxxx> wrote: >> > >> > Does this work for you? >> >> It seems to at least build cleanly here, but I'm not claiming it's all >> that great. >> >> The nested __cmp() is still rather less than optimal from an expansion >> standpoint, but at least it expands only those unique temporaries. > > That is the main gain, IIRC Arnd did suggest splitting it but that is > a relatively small gain. Right, I suggested a split version earlier, but that was without the __careful_op3, something like #define min3(x, y, z) ({ __auto_type __xy = min(x, y); min(__xy, z); }) I think Linus' approach with __careful_op3() is better here because it handles more corner cases with constant arguments, otherwise the two approaches are equivalent in how they expand the arguments. Doing both __careful_op3() and another temporary won't add any advantages that I can see either. Arnd