<div dir="ltr">prefer dyn_cast over isa+cast (to avoid the redundant checking)</div><br><div class="gmail_quote"><div dir="ltr">On Thu, Dec 28, 2017 at 1:36 AM Simon Pilgrim 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">Author: rksimon<br>
Date: Thu Dec 28 01:35:35 2017<br>
New Revision: 321515<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=321515&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=321515&view=rev</a><br>
Log:<br>
[InstCombine] Check for isa<Instruction> before using cast<><br>
<br>
Protects against casts from constexpr etc.<br>
<br>
Reduced from oss-fuzz #4788 test case<br>
<br>
Modified:<br>
    llvm/trunk/lib/Transforms/InstCombine/InstCombineCalls.cpp<br>
    llvm/trunk/test/Transforms/InstCombine/X86/X86FsubCmpCombine.ll<br>
<br>
Modified: llvm/trunk/lib/Transforms/InstCombine/InstCombineCalls.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstCombineCalls.cpp?rev=321515&r1=321514&r2=321515&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstCombineCalls.cpp?rev=321515&r1=321514&r2=321515&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Transforms/InstCombine/InstCombineCalls.cpp (original)<br>
+++ llvm/trunk/lib/Transforms/InstCombine/InstCombineCalls.cpp Thu Dec 28 01:35:35 2017<br>
@@ -2376,7 +2376,7 @@ Instruction *InstCombiner::visitCallInst<br>
     // The compare intrinsic uses the above assumptions and therefore<br>
     // doesn't require additional flags.<br>
     if ((match(Arg0, m_OneUse(m_FSub(m_Value(A), m_Value(B)))) &&<br>
-         match(Arg1, m_Zero()) &&<br>
+         match(Arg1, m_Zero()) && isa<Instruction>(Arg0) &&<br>
          cast<Instruction>(Arg0)->getFastMathFlags().noInfs())) {<br>
       if (Arg0IsZero)<br>
         std::swap(A, B);<br>
<br>
Modified: llvm/trunk/test/Transforms/InstCombine/X86/X86FsubCmpCombine.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/X86/X86FsubCmpCombine.ll?rev=321515&r1=321514&r2=321515&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/X86/X86FsubCmpCombine.ll?rev=321515&r1=321514&r2=321515&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/Transforms/InstCombine/X86/X86FsubCmpCombine.ll (original)<br>
+++ llvm/trunk/test/Transforms/InstCombine/X86/X86FsubCmpCombine.ll Thu Dec 28 01:35:35 2017<br>
@@ -122,6 +122,19 @@ entry:<br>
 }<br>
<br>
<br>
+define i8 @sub_compare_folding_swapPD256_undef(<4 x double> %a, <4 x double> %b) {<br>
+; CHECK-LABEL: @sub_compare_folding_swapPD256_undef(<br>
+; CHECK-NEXT:  entry:<br>
+; CHECK-NEXT:    [[TMP:%.*]] = tail call i8 @llvm.x86.avx512.mask.cmp.pd.256(<4 x double> fsub (<4 x double> undef, <4 x double> undef), <4 x double> zeroinitializer, i32 5, i8 -1)<br>
+; CHECK-NEXT:    ret i8 [[TMP]]<br>
+;<br>
+entry:<br>
+  %sub.i1 = fsub ninf <4 x double> undef, undef<br>
+  %tmp = tail call i8 @llvm.x86.avx512.mask.cmp.pd.256(<4 x double> %sub.i1, <4 x double> zeroinitializer, i32 5, i8 -1)<br>
+  ret i8 %tmp<br>
+}<br>
+<br>
+<br>
 define i8 @sub_compare_folding_swapPD512(<8 x double> %a, <8 x double> %b){<br>
 ; CHECK-LABEL: @sub_compare_folding_swapPD512(<br>
 ; CHECK-NEXT:  entry:<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>