<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Fri, Sep 16, 2016 at 10:54 AM Wei Mi via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Chandler,<br class="gmail_msg">
<br class="gmail_msg">
I found the patch still missed something here. I saw sometimes the<br class="gmail_msg">
float merged to int-fp pair was in a different basic block then<br class="gmail_msg">
dagcombiner cannot see it. Even if we relax<br class="gmail_msg">
TLI.isMultiStoresCheaperThanBitsMerge on x86 and do split for int-int<br class="gmail_msg">
pair, the float to int bitcast in another bb cannot be merged with the<br class="gmail_msg">
splitted store and it is not optimal.<br class="gmail_msg">
<br class="gmail_msg">
bb1:<br class="gmail_msg">
  %6 = bitcast float %5 to i32<br class="gmail_msg">
   ...<br class="gmail_msg">
bb2:<br class="gmail_msg">
   ...<br class="gmail_msg">
  %retval.sroa.2.0.insert.ext.i75.i = zext i32 %6 to i64<br class="gmail_msg">
  %retval.sroa.2.0.insert.shift.i76.i = shl nuw i64<br class="gmail_msg">
%retval.sroa.2.0.insert.ext.i75.i, 32<br class="gmail_msg">
  %tmp13 = trunc i64 %25 to i32<br class="gmail_msg">
  %retval.sroa.0.0.insert.ext.i77.i = zext i32 %tmp13 to i64<br class="gmail_msg">
  %retval.sroa.0.0.insert.insert.i78.i = or i64<br class="gmail_msg">
%retval.sroa.2.0.insert.shift.i76.i, %retval.sroa.0.0.insert.ext.i77.i<br class="gmail_msg">
  store i64 %retval.sroa.0.0.insert.insert.i78.i, i64* %ref.tmp7.i, align 8<br class="gmail_msg">
<br class="gmail_msg">
I can try to sink %6 to its single use in codegenprep, but I am not<br class="gmail_msg">
sure how strictly the pattern I should specify there.  If I try to<br class="gmail_msg">
find the exact pattern there, why not just do the whole thing in<br class="gmail_msg">
codegenprep? If I don't, we may unnecessarily do some sinking for<br class="gmail_msg">
bitcast float to i32 and I am not sure its impact. I don't know how to<br class="gmail_msg">
choose so I want to hear your thought about it.<br class="gmail_msg"></blockquote><div><br></div><div>I agree that sinking seems really nasty.</div><div><br></div><div>This is what GlobalISel is going to hopefully fix.</div><div><br></div><div>If this is still causing measurable performance problems and the code to do splitting in CodeGenPrep is reasonably simple, I agree with splitting in CodeGenPrep.</div><div><br></div><div>(We should probably sadly still have the DAG combine so that we can catch cases that show up after DAG combining runs...)</div><div><br></div><div>-Chandler</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br class="gmail_msg">
Thanks,<br class="gmail_msg">
Wei.<br class="gmail_msg">
<br class="gmail_msg">
On Fri, Sep 2, 2016 at 10:25 AM, Wei Mi <<a href="mailto:wmi@google.com" class="gmail_msg" target="_blank">wmi@google.com</a>> wrote:<br class="gmail_msg">
> This revision was automatically updated to reflect the committed changes.<br class="gmail_msg">
> Closed by commit rL280505: Split the store of a wide value merged from an int-fp pair into multiple stores. (authored by wmi).<br class="gmail_msg">
><br class="gmail_msg">
> Changed prior to commit:<br class="gmail_msg">
>   <a href="https://reviews.llvm.org/D22840?vs=69494&id=70186#toc" rel="noreferrer" class="gmail_msg" target="_blank">https://reviews.llvm.org/D22840?vs=69494&id=70186#toc</a><br class="gmail_msg">
><br class="gmail_msg">
> Repository:<br class="gmail_msg">
>   rL LLVM<br class="gmail_msg">
><br class="gmail_msg">
> <a href="https://reviews.llvm.org/D22840" rel="noreferrer" class="gmail_msg" target="_blank">https://reviews.llvm.org/D22840</a><br class="gmail_msg">
><br class="gmail_msg">
> Files:<br class="gmail_msg">
>   llvm/trunk/include/llvm/Target/TargetLowering.h<br class="gmail_msg">
>   llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp<br class="gmail_msg">
>   llvm/trunk/lib/Target/X86/X86ISelLowering.h<br class="gmail_msg">
>   llvm/trunk/test/Transforms/InstCombine/split-store.ll<br class="gmail_msg">
><br class="gmail_msg">
_______________________________________________<br class="gmail_msg">
llvm-commits mailing list<br class="gmail_msg">
<a href="mailto:llvm-commits@lists.llvm.org" class="gmail_msg" target="_blank">llvm-commits@lists.llvm.org</a><br class="gmail_msg">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" class="gmail_msg" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br class="gmail_msg">
</blockquote></div></div>