https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103750
--- Comment #1 from Hongtao.liu <crazylht at gmail dot com> --- kmovw here is zero_extend, and at gimple level it's not redundant in loop. _31 = MEM[(const __m256i_u * {ref-all})n_5]; _30 = MEM[(const __m256i_u * {ref-all})n_5 + 32B]; _28 = VIEW_CONVERT_EXPR<__v16hi>(_31); _29 = __builtin_ia32_ucmpw256_mask (_28, _20, 0, 65535); _26 = VIEW_CONVERT_EXPR<__v16hi>(_30); _27 = __builtin_ia32_ucmpw256_mask (_26, _20, 0, 65535); _2 = (int) _27; _3 = (int) _29; _15 = __builtin_ia32_kortestzhi (_3, _2); _25 = (unsigned char) _15; if (_25 != 0) but at rtl level, _28/_29 propagate into kortest and be partial redundant but failed to sink or be eliminated. (insn 29 27 30 3 (set (reg:SI 83 [ _2 ]) (zero_extend:SI (reg:HI 111))) "test.c":24:32 147 {*zero_extendhisi2} (nil)) (insn 30 29 31 3 (set (reg:SI 116 [ _29 ]) (zero_extend:SI (reg:HI 106))) "test.c":24:32 147 {*zero_extendhisi2} (nil)) (insn 58 56 60 8 (parallel [ (set (reg:HI 120) (unspec:HI [ (subreg:HI (reg:SI 83 [ _2 ]) 0) ] UNSPEC_TZCNT)) (clobber (reg:CC 17 flags)) (insn 52 51 55 7 (parallel [ (set (reg/v:SI 88 [ idx ]) (ctz:SI (reg:SI 116 [ _29 ]))) (clobber (reg:CC 17 flags))