https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102182
--- Comment #3 from Hongtao.liu <crazylht at gmail dot com> --- during pass_expand we got (debug_insn 24 23 0 (debug_marker) "test1.c":10:3 -1 (nil)) ;; fv2.1_3 ={v} fv2; (insn 25 24 0 (set (reg:HF 84 [ fv2.1_3 ]) (mem/v/c:HF (symbol_ref:SI ("fv2.1") [flags 0x2] <var_decl 0x7f1f0ae4c000 fv2>) [2 fv2+0 S2 A16])) "test1.c":10:9 -1 (nil)) ;; _4 = (unsigned int) fv2.1_3; (insn 31 25 32 (parallel [ (set (reg:DI 94) (fix:DI (reg:SF 93))) (clobber (reg:CC 17 flags)) ]) "test1.c":10:9 -1 (nil)) But __extendhfsf2 is ommited under -Os, For -O2 expand does the right thing ;; fv2.1_3 ={v} fv2; (insn 17 16 0 (set (reg:HF 84 [ fv2.1_3 ]) (mem/v/c:HF (symbol_ref:SI ("fv2.1") [flags 0x2] <var_decl 0x7f166dab4360 fv2>) [2 fv2+0 S2 A16])) "test1.c":10:9 -1 (nil)) ;; _4 = (unsigned int) fv2.1_3; (insn 18 17 19 (set (mem:HF (reg/f:SI 79 virtual-outgoing-args) [0 S2 A32]) (reg:HF 84 [ fv2.1_3 ])) "test1.c":10:9 -1 (nil)) (call_insn/u 19 18 20 (set (reg:SF 8 st) (call (mem:QI (symbol_ref:SI ("__extendhfsf2") [flags 0x41] <function_decl 0x7f166dac5000 __extendhfsf2>) [0 S1 A8]) (const_int 16 [0x10]))) "test1.c":10:9 -1 (expr_list:REG_CALL_DECL (symbol_ref:SI ("__extendhfsf2") [flags 0x41] <function_decl 0x7f166dac5000 __extendhfsf2>) (expr_list:REG_EH_REGION (const_int -2147483648 [0xffffffff80000000]) (nil))) (expr_list (use (mem:HF (reg/f:SI 79 virtual-outgoing-args) [0 S2 A8])) (nil))) (insn 20 19 21 (set (reg:SF 93) (reg:SF 8 st)) "test1.c":10:9 -1 (expr_list:REG_EQUAL (float_extend:SF (reg:HF 84 [ fv2.1_3 ])) (nil))) (insn 21 20 22 (set (reg:V4SF 95) (vec_duplicate:V4SF (mem/u/c:SF (symbol_ref/u:SI ("*.LC3") [flags 0x2]) [0 S4 A32]))) "test1.c":10:9 7413 {vec_dupv4sf} (nil)) (insn 22 21 23 (set (reg:V4SF 94) (reg:V4SF 95)) "test1.c":10:9 -1 (expr_list:REG_EQUAL (const_vector:V4SF [ (const_double:SF 2.147483648e+9 [0x0.8p+32]) repeated x4 ]) (nil))) (insn 23 22 0 (parallel [ (set (reg:SI 85 [ _4 ]) (unsigned_fix:SI (reg:SF 93))) (use (reg:V4SF 94)) (clobber (scratch:V4SF)) (clobber (scratch:V4SF)) ]) "test1.c":10:9 -1 (expr_list:REG_EQUAL (unsigned_fix:SI (reg:SF 93)) (nil)))