https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67443

--- Comment #1 from wmi at google dot com ---
Seems the patch makes some problem exposed. 

For the testcase 1.cxx below:

typedef struct A {
  unsigned i : 8;
  unsigned j : 24;
} A;

void foo(A *a) {
  a->i = 3;
  a->j = 5;
}

The rtl generated by s390x-ibm-linux-g++ seems wrong.

~/workarea/gcc-r227524/build/install/bin/s390x-ibm-linux-g++ -O2 -S 1.cxx
-fdump-rtl-expand-details-blocks

(note 4 1 2 2 [bb 2] NOTE_INSN_BASIC_BLOCK)
(insn 2 4 3 2 (set (reg/v/f:DI 60 [ a ])
        (reg:DI 2 %r2 [ a ])) 4.cxx:6 -1
     (nil))
(note 3 2 6 2 NOTE_INSN_FUNCTION_BEG)
(insn 6 3 8 2 (set (mem/j:QI (reg/v/f:DI 60 [ a ]) [1 a_2(D)->i+0 S1 A32])
        (const_int 3 [0x3])) 4.cxx:7 -1
     (nil))
(insn 8 6 9 2 (set (reg:SI 62)
        (mem/j:SI (reg/v/f:DI 60 [ a ]) [1 a_2(D)->j+-1 S4 A32])) 4.cxx:8 -1
     (nil))
(insn 9 8 10 2 (parallel [
            (set (reg:SI 63)
                (and:SI (reg:SI 62)
                    (const_int -16777216 [0xffffffffff000000])))
            (clobber (reg:CC 33 %cc))
        ]) 4.cxx:8 -1
     (nil))
(insn 10 9 11 2 (parallel [
            (set (reg:SI 64)
                (ior:SI (reg:SI 63)
                    (const_int 5 [0x5])))
            (clobber (reg:CC 33 %cc))
        ]) 4.cxx:8 -1
     (nil))
(insn 11 10 0 2 (set (mem/j:SI (reg/v/f:DI 60 [ a ]) [1 a_2(D)->j+-1 S4 A32])
        (reg:SI 64)) 4.cxx:8 -1
     (nil))
;;  succ:       EXIT [100.0%]  (FALLTHRU)

Reply via email to