Dear all,

If I consider this code

typedef struct sTestUnsignedChar {
    uint64_t a:1;
}STestUnsignedChar;

uint64_t getU (STestUnsignedChar a)
{
    return a.a;
}


I get this in the DCE pass :
(insn 6 3 7 2 bitfield2.c:8 (set (subreg:DI (reg:QI 75) 0)
        (zero_extract:DI (reg/v:DI 73 [ a ])
            (const_int 1 [0x1])
            (const_int 0 [0x0]))) 63 {extzvdi} (expr_list:REG_DEAD
(reg/v:DI 73 [ a ])
        (nil)))

(insn 7 6 12 2 bitfield2.c:8 (set (reg:DI 74)
        (zero_extend:DI (reg:QI 75))) 51 {zero_extendqidi2}
(expr_list:REG_DEAD (reg:QI 75)
        (nil)))


(on the x86 port, I get a and instead of the zero_extract)

However, on the combine pass both stay, whereas in the x86 port, the
zero_extend is removed. Where is this decided exactly ?
I've checked the costs of the instructions, I have the same thing as
the x86 port.

Thanks for all your help,
Jean Christophe Beyler

Reply via email to