This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Bit fields
Sorry, you are correct. That line is the :
gcc_assert (outermode != VOIDmode);
of the simplify_subreg function.
However, I've played around with it and saw that I made a mistake when
writing up this question, I simplified what I had put in my MD file,
and actually made a mistake. I apologize.
If I replace this :
(define_insn "extzv"
[(set (match_operand 0 "register_operand" "")
(zero_extract (match_operand 1 "register_operand" "")
(match_operand 2 "const_int_operand" "")
(match_operand 3 "const_int_operand" "")))]
""
"")
into :
(define_expand "extzv"
[(set (match_operand 0 "register_operand" "")
(zero_extract (match_operand 1 "register_operand" "")
(match_operand 2 "const_int_operand" "")
(match_operand 3 "const_int_operand" "")))]
""
"")
I do not get any errors. I don't know if it's handled but it seems to
no longer have issues anymore.
However, if I consider this code:
typedef struct stest {
uint64_t a:1;
uint64_t b:1;
}STest;
void
goo (STest *t, uint64_t *a, uint64_t *b)
{
*a = t->a;
}
At the expand phase, I see:
(insn 9 8 10 3 struct4.c:24 (set (subreg:DI (reg:QI 76) 0)
(zero_extract:DI (reg:DI 75)
(const_int 1 [0x1])
(const_int 0 [0x0]))) -1 (nil))
(insn 10 9 11 3 struct4.c:24 (set (reg:DI 77)
(zero_extend:DI (reg:QI 76))) -1 (nil))
Is there anything I can do to remove that zero_extend?
Thanks,
Jc