<div dir="ltr">We're getting this assertion in the blame range 239540 - 239539 inclusive, so I'm pretty sure it's this change:<div>SelectionDAG.cpp:756: void VerifySDNode(llvm::SDNode*): Assertion `N->getNumOperands() == N->getValueType(0).getVectorNumElements() && "Wrong number of operands!"' failed.<br></div><div><br></div><div>This is while building freetype as part of chromium:</div><div><a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__build.chromium.org_p_chromium.fyi_builders_ClangToTLinux_builds_1809_steps_compile_logs_stdio&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=hDqvsZVl0aZXSFF_FX3q9YBwaW-yo4Gf9eI-F_jbk_4&s=GdvW8rJcyRxypctibGV10ihuVbk9MXFsMm3EnyCxvoE&e=">http://build.chromium.org/p/chromium.fyi/builders/ClangToTLinux/builds/1809/steps/compile/logs/stdio</a><br></div><div><br></div><div>Do you think you can spot the problem, or do you want me to try to reduce a test case?</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jun 11, 2015 at 9:03 AM, Matt Arsenault <span dir="ltr"><<a href="mailto:Matthew.Arsenault@amd.com" target="_blank">Matthew.Arsenault@amd.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: arsenm<br>
Date: Thu Jun 11 11:03:52 2015<br>
New Revision: 239539<br>
<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject-3Frev-3D239539-26view-3Drev&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=hDqvsZVl0aZXSFF_FX3q9YBwaW-yo4Gf9eI-F_jbk_4&s=E3ewhgq2gCitd4Pmi-cJ95DiyqppJiQ-KZt3FZit12E&e=" target="_blank">http://llvm.org/viewvc/llvm-project?rev=239539&view=rev</a><br>
Log:<br>
Fix merges of non-zero vector stores<br>
<br>
Now actually stores the non-zero constant instead of 0.<br>
I somehow forgot to include this part of r238108.<br>
<br>
The test change was just an independent instruction order swap,<br>
so just add another check line to satisfy CHECK-NEXT.<br>
<br>
Modified:<br>
    llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp<br>
    llvm/trunk/test/CodeGen/R600/merge-stores.ll<br>
    llvm/trunk/test/CodeGen/X86/2012-11-28-merge-store-alias.ll<br>
<br>
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_lib_CodeGen_SelectionDAG_DAGCombiner.cpp-3Frev-3D239539-26r1-3D239538-26r2-3D239539-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=hDqvsZVl0aZXSFF_FX3q9YBwaW-yo4Gf9eI-F_jbk_4&s=thO1pNNeDMmjVyxgU23FPueh_-jiS4cg693QDBpzTFs&e=" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp?rev=239539&r1=239538&r2=239539&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Thu Jun 11 11:03:52 2015<br>
@@ -387,6 +387,13 @@ namespace {<br>
       unsigned SequenceNum;<br>
     };<br>
<br>
+    /// This is a helper function for MergeStoresOfConstantsOrVecElts. Returns a<br>
+    /// constant build_vector of the stored constant values in Stores.<br>
+    SDValue getMergedConstantVectorStore(SelectionDAG &DAG,<br>
+                                         SDLoc SL,<br>
+                                         ArrayRef<MemOpLink> Stores,<br>
+                                         EVT Ty) const;<br>
+<br>
     /// This is a helper function for MergeConsecutiveStores. When the source<br>
     /// elements of the consecutive stores are all constants or all extracted<br>
     /// vector elements, try to merge them into one larger store.<br>
@@ -10576,6 +10583,17 @@ struct BaseIndexOffset {<br>
 };<br>
 } // namespace<br>
<br>
+SDValue DAGCombiner::getMergedConstantVectorStore(SelectionDAG &DAG,<br>
+                                                  SDLoc SL,<br>
+                                                  ArrayRef<MemOpLink> Stores,<br>
+                                                  EVT Ty) const {<br>
+  SmallVector<SDValue, 8> BuildVector;<br>
+<br>
+  for (const MemOpLink &Store : Stores)<br>
+    BuildVector.push_back(cast<StoreSDNode>(Store.MemNode)->getValue());<br>
+  return DAG.getNode(ISD::BUILD_VECTOR, SL, Ty, BuildVector);<br>
+}<br>
+<br>
 bool DAGCombiner::MergeStoresOfConstantsOrVecElts(<br>
                   SmallVectorImpl<MemOpLink> &StoreNodes, EVT MemVT,<br>
                   unsigned NumElem, bool IsConstantSrc, bool UseVector) {<br>
@@ -10606,12 +10624,7 @@ bool DAGCombiner::MergeStoresOfConstants<br>
     EVT Ty = EVT::getVectorVT(*DAG.getContext(), MemVT, NumElem);<br>
     assert(TLI.isTypeLegal(Ty) && "Illegal vector store");<br>
     if (IsConstantSrc) {<br>
-      // A vector store with a constant source implies that the constant is<br>
-      // zero; we only handle merging stores of constant zeros because the zero<br>
-      // can be materialized without a load.<br>
-      // It may be beneficial to loosen this restriction to allow non-zero<br>
-      // store merging.<br>
-      StoredVal = DAG.getConstant(0, DL, Ty);<br>
+      StoredVal = getMergedConstantVectorStore(DAG, DL, StoreNodes, Ty);<br>
     } else {<br>
       SmallVector<SDValue, 8> Ops;<br>
       for (unsigned i = 0; i < NumElem ; ++i) {<br>
<br>
Modified: llvm/trunk/test/CodeGen/R600/merge-stores.ll<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_test_CodeGen_R600_merge-2Dstores.ll-3Frev-3D239539-26r1-3D239538-26r2-3D239539-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=hDqvsZVl0aZXSFF_FX3q9YBwaW-yo4Gf9eI-F_jbk_4&s=mg6oFnnkyCij6op6RWDVntjpeZTF2GIXWsMkyMtlo4E&e=" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/R600/merge-stores.ll?rev=239539&r1=239538&r2=239539&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/CodeGen/R600/merge-stores.ll (original)<br>
+++ llvm/trunk/test/CodeGen/R600/merge-stores.ll Thu Jun 11 11:03:52 2015<br>
@@ -89,7 +89,11 @@ define void @merge_global_store_2_consta<br>
 }<br>
<br>
 ; GCN-LABEL: {{^}}merge_global_store_2_constants_f32_i32:<br>
-; GCN: buffer_store_dwordx2<br>
+; SI-DAG: s_mov_b32 [[SLO:s[0-9]+]], 4.0<br>
+; SI-DAG: s_movk_i32 [[SHI:s[0-9]+]], 0x7b{{$}}<br>
+; SI-DAG: v_mov_b32_e32 v[[VLO:[0-9]+]], [[SLO]]<br>
+; SI-DAG: v_mov_b32_e32 v[[VHI:[0-9]+]], [[SHI]]<br>
+; GCN: buffer_store_dwordx2 v{{\[}}[[VLO]]:[[VHI]]{{\]}}<br>
 define void @merge_global_store_2_constants_f32_i32(float addrspace(1)* %out) #0 {<br>
   %out.gep.1 = getelementptr float, float addrspace(1)* %out, i32 1<br>
   %out.gep.1.bc = bitcast float addrspace(1)* %out.gep.1 to i32 addrspace(1)*<br>
@@ -99,7 +103,11 @@ define void @merge_global_store_2_consta<br>
 }<br>
<br>
 ; GCN-LABEL: {{^}}merge_global_store_4_constants_i32:<br>
-; GCN: buffer_store_dwordx4<br>
+; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0x14d{{$}}<br>
+; GCN-DAG: v_mov_b32_e32 v{{[0-9]+}}, 0x1c8{{$}}<br>
+; GCN-DAG: v_mov_b32_e32 v{{[0-9]+}}, 0x7b{{$}}<br>
+; GCN-DAG: v_mov_b32_e32 v[[LO:[0-9]+]], 0x4d2{{$}}<br>
+; GCN: buffer_store_dwordx4 v{{\[}}[[LO]]:[[HI]]{{\]}}<br>
 define void @merge_global_store_4_constants_i32(i32 addrspace(1)* %out) #0 {<br>
   %out.gep.1 = getelementptr i32, i32 addrspace(1)* %out, i32 1<br>
   %out.gep.2 = getelementptr i32, i32 addrspace(1)* %out, i32 2<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/2012-11-28-merge-store-alias.ll<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_test_CodeGen_X86_2012-2D11-2D28-2Dmerge-2Dstore-2Dalias.ll-3Frev-3D239539-26r1-3D239538-26r2-3D239539-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=hDqvsZVl0aZXSFF_FX3q9YBwaW-yo4Gf9eI-F_jbk_4&s=C17Vcb6j3xcCy9zvTgW8MGIvo7fIAfOpo3Y3Ccnnrbk&e=" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2012-11-28-merge-store-alias.ll?rev=239539&r1=239538&r2=239539&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/2012-11-28-merge-store-alias.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/2012-11-28-merge-store-alias.ll Thu Jun 11 11:03:52 2015<br>
@@ -3,6 +3,7 @@<br>
 ; CHECK: merge_stores_can<br>
 ; CHECK: callq foo<br>
 ; CHECK: xorps %xmm0, %xmm0<br>
+; CHECK-NEXT: movl 36(%rsp), %ebp<br>
 ; CHECK-NEXT: movups  %xmm0<br>
 ; CHECK: callq foo<br>
 ; CHECK: ret<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>