I've got a testcase to add for this patch. Sorry about the delay, I took some time off to deal with a medical problem.
This was tested with and without the extract_bit_field patch. The testcase fails without the patch and works with the patch. Jim
gcc/testsuite/ PR middle-end/79794 * gcc.target/aarch64/pr79794.c: New. Index: gcc/testsuite/gcc.target/aarch64/pr79794.c =================================================================== --- gcc/testsuite/gcc.target/aarch64/pr79794.c (nonexistent) +++ gcc/testsuite/gcc.target/aarch64/pr79794.c (working copy) @@ -0,0 +1,25 @@ +/* PR middle-end/79794 */ +/* { dg-do compile } */ +/* { dg-options "-O3" } */ +/* { dg-final { scan-assembler-not "umov" } } */ + +struct node_struct +{ + float _Complex gap; + unsigned long long state; +}; + +struct reg_struct +{ + int size; + struct node_struct *node; +}; + +void +func(int target, struct reg_struct *reg) +{ + int i; + + for(i=0; i<reg->size; i++) + reg->node[i].state ^= ((unsigned long long) 1 << target); +}