On 6/5/25 6:25 AM, Jiawei wrote:


Thanks for your suggestions, I found that the ior is successful generated in combine pass without using the zbs extension, and in other architecture it also work fine.
Yea, it's probably an artifact of how we need to represent the single bit clear. It's represented as an AND of a ROTATE.

So we need simplify-rtx to handle this:

(set (reg:DI 154)
    (xor:DI (and:DI (rotate:DI (const_int -2 [0xfffffffffffffffe])
                (subreg:QI (reg:DI 156 [ b ]) 0))
            (reg:DI 149 [ *a_10(D) ]))
        (ashift:DI (const_int 1 [0x1])
            (subreg:QI (reg:DI 156 [ b ]) 0))))

Note how the and-rotate and the ashift of (const_int 1) both use the same rotate/shift count (reg:DI 156). That's the key. The and-rotate clears a bit and thus the xor must be setting the bit and that whole mess can simplify to ior based bit insertion.

jeff

Reply via email to