It depends on code around it. But as you say, compiler may decide to not put values on stack, but directly read them from struct when you are using StickX/Y local variables. Compiler is allowed to do so. It could also decide to keep these values in register and not put on stack. Having local variable in C does not mean they *always* reserve space on stack. Values are put on stack only in case compiler runs out of registers when doing other calculations.
Here's an example:
https://godbolt.org/z/2bkpvJ
As you can see in disassembly, the compiler directly uses values from memory in calculation - first one to initialize return value (sum, stored in eax register). And second one in += calculation.
Here's different example:
https://godbolt.org/z/GM0Ib7
There compiler stored x and y values in registers (eax and edx)
Here's third example:
https://godbolt.org/z/9hx4ob
Here compiler run out of registers, so it put x and y values on stack (x$1$[rsp] and y$1$[rsp] locations)