https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85048
--- Comment #8 from Hongtao.liu <crazylht at gmail dot com> --- (In reply to Hongtao.liu from comment #7) > Yes, Looks like the pattern name is misdefined. > it shoud be fixuns_trunc, but we have ufix_trunc. No, we have the right name but generate extra instructions for uns. 8012(define_expand "fixuns_trunc<mode><sseintvecmodelower>2" 8013 [(match_operand:<sseintvecmode> 0 "register_operand") 8014 (match_operand:VF1 1 "register_operand")] 8015 "TARGET_SSE2" 8016{ 8017 if (<MODE>mode == V16SFmode) 8018 emit_insn (gen_ufix_truncv16sfv16si2 (operands[0], 8019 operands[1])); 8020 else 8021 { 8022 rtx tmp[3]; 8023 tmp[0] = ix86_expand_adjust_ufix_to_sfix_si (operands[1], &tmp[2]); 8024 tmp[1] = gen_reg_rtx (<sseintvecmode>mode); 8025 emit_insn (gen_fix_trunc<mode><sseintvecmodelower>2 (tmp[1], tmp[0])); 8026 emit_insn (gen_xor<sseintvecmodelower>3 (operands[0], tmp[1], tmp[2])); 8027 } 8028 DONE;