[LLVMdev] Spills and values present in both registers & stack

Taral taralx at gmail.com
Tue Jul 26 11:35:16 PDT 2011

One piece of code I'm writing has a lot of intermediates, and I'm
trying to optimize down the number of memory accesses. Here's a
snippet from the start of the function, where I think there is some
low-hanging fruit:

# BB#0:
	pushq	%rbp
	pushq	%r15
	pushq	%r14
	pushq	%r13
	pushq	%r12
	pushq	%rbx
	movq	%rdx, %rcx
	movq	%rdi, -16(%rsp)         # 8-byte Spill
	movq	(%rsi), %rdi
	movq	8(%rsi), %r8
	movq	8(%rcx), %rax
	movq	%rax, -24(%rsp)         # 8-byte Spill
	movq	16(%rcx), %rax
	movq	%rax, -8(%rsp)          # 8-byte Spill
	movq	%rdi, %rax
	mulq	-24(%rsp)               # 8-byte Folded Reload

You'll note that rbx,r12,r13,r14,r15,rbp are all dead after the
pushes. But the spill code still insists on using rax to load the
spilled values, forcing them to be reloaded later. Is the register
allocator (pbqp, I think) capable of having values in registers and on
the stack at the same time?

Taral <taralx at gmail.com>
"Please let me know if there's any further trouble I can give you."
    -- Unknown

More information about the llvm-dev mailing list