[llvm-dev] Liveness of AL, AH and AX in x86 backend
Krzysztof Parzyszek via llvm-dev
llvm-dev at lists.llvm.org
Tue May 24 11:01:56 PDT 2016
Enabling subreg liveness tracking didn't do anything. By altering the
allocation order I managed to get the backend to use CL/CH for the
struct, but the stores were still separate (even though storing CX would
be correct)...
Here's another question that falls into the same category:
The function X86InstrInfo::loadRegFromStackSlot does not append any
implicit uses/defs. How does it know that it won't need them? If AX
was spilled in the middle of a live range of EAX, wouldn't restoring of
AX need to implicitly define EAX?
We deal with such cases a lot in the Hexagon backend and it continues to
be a major pain. I'm trying to understand if there are better options
for us.
-Krzysztof
On 5/24/2016 12:40 PM, Quentin Colombet wrote:
> Hi Krzysztof,
>
>> On May 24, 2016, at 8:03 AM, Krzysztof Parzyszek via llvm-dev <llvm-dev at lists.llvm.org> wrote:
>>
>> I'm trying to see how the x86 backend deals with the relationship between AL, AH and AX, but I can't get it to generate any code that would expose an interesting scenario.
>>
>> For example, I wrote this piece:
>>
>> typedef struct {
>> char x, y;
>> } struct_t;
>>
>> struct_t z;
>>
>> struct_t foo(char *p) {
>> struct_t s;
>> s.x = *p++;
>> s.y = *p;
>> z = s;
>> s.x++;
>> return s;
>> }
>>
>> But the output at -O2 is
>>
>> foo: # @foo
>> .cfi_startproc
>> # BB#0: # %entry
>> movb (%rdi), %al
>> movzbl 1(%rdi), %ecx
>> movb %al, z(%rip)
>> movb %cl, z+1(%rip)
>> incb %al
>> shll $8, %ecx
>> movzbl %al, %eax
>> orl %ecx, %eax
>> retq
>>
>>
>> I was hoping it would do something along the lines of
>>
>> movb (%rdi), %al
>> movb 1(%rdi), %ah
>> movh %ax, z(%rip)
>> incb %al
>> retq
>>
>>
>> Why is the x86 backend not getting this code?
>
> Try enabling the sub-register liveness feature. I am guessing we think we cannot use the same register for the low and high part.
> Though, I would need to see the machine instrs to be sure.
>
>> Does it know that AH:AL = AX?
>
> Yes it does.
>
> Cheers,
> -Quentin
>>
>> -Krzysztof
>>
>>
>>
>> --
>> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
hosted by The Linux Foundation
More information about the llvm-dev
mailing list