Some weirdness with this: the way I do expressions is that every expression gets a variable slot. So I first encounter the function pointer (add_two_numbers), put that into a QBE temporary, then call it with the later arguments.
I was worried that this would cause issues, but it looks like QBE is able to optimize it down to just calling the global. Which is nice!