<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">Why does LLVM struggle to optimize the following stack direction check?<div><br></div><div><div>#include <stdint.h></div><div><br></div><div>inline int stack_direction() {</div><div>    int x = 0;</div><div>    int y = 0;</div><div><br></div><div>    return uintptr_t(&x) < uintptr_t(&y);</div><div>}</div><div><br></div><div>int main(int argc, const char * argv[]) {</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>return stack_direction();</div><div>}</div></div><div><br></div><div>It generates the following assembly:</div><div><br></div><div><div>main: # @main</div><div>  lea rcx, [rsp - 8]</div><div>  lea rdx, [rsp - 4]</div><div>  xor eax, eax</div><div>  cmp rdx, rcx</div><div>  setb al</div><div>  ret</div></div><div><br></div><div>It seems to me it should be possible, because clearly LLVM knows the layout of x and y at compile time.</div><div><br></div><div>Shared code: <a href="https://t.co/8wdz6ftAm7?amp=1">https://godbolt.org/z/ZQKESy</a></div><div><br></div><div>Thanks</div><div>Samuel</div></div></div></div></div>