Hi, Got it, Thanks :)
Jojo 在 2020年9月27日 +0800 AM3:22,Segher Boessenkool <seg...@kernel.crashing.org>,写道: > Hi! > > On Wed, Sep 23, 2020 at 10:50:52AM +0800, Jojo R wrote: > > insn seqs: > > > > s1: > > > > __builtin_set_float_convert_mode(0); > > r1 = __builtin_load(a1, a2); > > r2 = __builtin_float_convert(r1); > > __builtin_store(a3, r2); > > __builtin_set_float_convert_mode(0); > > > > s2: > > __builtin_set_float_convert_mode(1); > > r1 = __builtin_load(a1, a2); > > r2 = __builtin_float_convert(r1); > > __builtin_store(a3, r2); > > __builtin_set_float_convert_mode(0); > > > > > > the diference of s1 and s2 only is "__builtin_set_float_convert_mode" > > > > from beginning, the s1 mode is set 0, but s2 mode is set 1. > > > > From optimization 'fwprop', the s2 insn seqs is deleted > > > > as dead code with compiler option ‘-O3', is it gcc bug ? > > > > > > builtin patten of __builtin_set_float_convert_mode: > > > > (define_insn "target_fcvtmode" > > [(set (reg:SI FCVTMODE_REGNUM) > > (unspec_volatile:SI [(match_operand:SI 0 "operand" "rK")] > > UNSPECV_FCVTMODE))] > > "" > > "fcvtmode\t%1" > > ) > > > > > > builtin patten of __builtin_set_float_convert_mode: > > > > (define_insn "target_fcvt" > > [(set (match_operand:SI 0 "register_operand" "=r") > > (unspec:SI [(match_operand:SF 1 "register_operand" "f")] > > UNSPEC_FCVT)) > > (use (reg:SI FCVTMODE_REGNUM))] > > "" > > "fcvt\t%0,%1" > > ) > > That "use" is mostly useless; what you should do afaics is make that > FCVTMODE_REGNUM an input of the unspec (and it can just be an unspec, > unspec_volatile isn't needed). > > > As far as i know, __builtin_set_float_convert_mode depend on > > 'FCVTMODE_REGNUM' which is from > > __builtin_set_float_convert_mode, it's not dead code. > > The output (operands[0]) does not depend on the convert mode setting, so > the second one can be replaced by the first (in CSE or fwprop perhaps), > and as end result you get what you observed. Look at what all RTL > passes did to your code (-dap is easiest) to see what happened. > > HtH, > > > Segher