When assigning a variable to multiple variables I get this result (as expected):
;./test.c:31: dest1 = dest2 = src;
ld a, (_src)
ld (#_dest2), a
ld (#_dest1), a
But when assigning a literal value instead I get this result:
;./test.c:31: dest1 = dest2 = 5;
ld hl, #_dest2
ld (hl), #0x05
ld hl, #_dest1
ld (hl), #0x05
SDCC should use a similar approach as in the first example (load A with literal, store at address) (assuming register usage is no problem). That would save 7 t-states and 2 bytes for every additional assignment.
And it would save also a register, as it would use onl A instead of HL