Genau, if constexpr
zwingt den Compiler zur Optimierung der Verzweigung (und den Programmierer dazu den Ausdruck auch konstant zu machen). Ansonsten hat der Compiler, wie du sagst, je nach -Ox die Freiheit Pfade drin zu lassen oder wegzuoptimieren.
Bei den NUM_LEDS == 1
wird das bei uns jedes Mal den gleichen Code erzeugen (da das am Ende nur ein Vergleich 12 == 1
ist).