https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113014
--- Comment #1 from JuzheZhong <juzhe.zhong at rivai dot ai> ---
Richard S has a late combine PASS which is going to be merged in GCC-14.
Since we generate this following RTL int split1:
(insn 48 24 49 5 (set (reg:SI 149)
(const_int 0 [0])) -1
(nil))
(insn 49 48 50 5 (set (reg:RVVM1SI 148)
(if_then_else:RVVM1SI (unspec:RVVMF32BI [
(const_vector:RVVMF32BI [
(const_int 1 [0x1])
repeat [
(const_int 0 [0])
]
])
(const_int 1 [0x1])
(const_int 2 [0x2]) repeated x2
(const_int 0 [0])
(reg:SI 66 vl)
(reg:SI 67 vtype)
] UNSPEC_VPREDICATE)
(vec_duplicate:RVVM1SI (reg:SI 149))
(unspec:RVVM1SI [
(reg:SI 0 zero)
] UNSPEC_VUNDEF))) -1
(nil))
I suspect late-combine PASS can combine it into:
(insn 49 48 50 5 (set (reg:RVVM1SI 148)
(if_then_else:RVVM1SI (unspec:RVVMF32BI [
(const_vector:RVVMF32BI [
(const_int 1 [0x1])
repeat [
(const_int 0 [0])
]
])
(const_int 1 [0x1])
(const_int 2 [0x2]) repeated x2
(const_int 0 [0])
(reg:SI 66 vl)
(reg:SI 67 vtype)
] UNSPEC_VPREDICATE)
(CONST_VECTOR: 0)
(unspec:RVVM1SI [
(reg:SI 0 zero)
] UNSPEC_VUNDEF))) -1
(nil))
that is: combine
(set(reg0) (0)) and (vec_duplicate:reg0)
into:
(CONST_VECTOR:0)
after split1 by late-combine PASS.
I am not sure.
Hi,Robin. Could you confirm it for me ?