<div dir="ltr"><div>I'm trying to test an insert element into a vector instruction (vsetitem <vector> <value> <index>). And I've written a simple test for it. Basically I just want to see if it works. However When I run it through llc I get a following error:</div><div><br></div><div><div>LLVM ERROR: Cannot select: 0x2ac3180: v4i32 = vector_shuffle 0x2ac2f70, 0x2ac3078<0,4,u,u> [ORD=3] [ID=10]</div><div>  0x2ac2f70: v4i32 = scalar_to_vector 0x2ac38b8 [ORD=3] [ID=8]</div><div>    0x2ac38b8: i32,ch = CopyFromReg 0x2a9c8b0, 0x2ac37b0 [ORD=1] [ID=5]</div><div>      0x2ac37b0: i32 = Register %vreg4 [ID=1]</div><div>  0x2ac3078: v4i32 = scalar_to_vector 0x2ac3ac8 [ORD=3] [ID=9]</div><div>    0x2ac3ac8: i32,ch = CopyFromReg 0x2a9c8b0, 0x2ac39c0 [ORD=1] [ID=6]</div><div>      0x2ac39c0: i32 = Register %vreg5 [ID=2]</div><div>In function: foo</div></div><div><br></div><div>I'm kind of confused why it needs a shuffle instruction? Any way to test my instruction without using a shuffle?</div><div><br></div><div>Any help is appreciated. The test case is provided below.</div><div><br></div><div>; ModuleID = 'build-vector.c'</div><div>target datalayout = "E-m:e-p:32:32-i64:32-f64:32-v64:32-v128:32-a:0:32-n32"</div><div>target triple = "esencia"</div><div><br></div><div>; Function Attrs: nounwind</div><div>define void @foo(i32 %b1, i32 %b2, i32* nocapture %res) #0 {</div><div>entry:</div><div>  %0 = insertelement <4 x i32> undef, i32 %b1, i32 0</div><div>  %1 = insertelement <4 x i32> %0, i32 %b2, i32 1</div><div>  %2 = bitcast i32* %res to <4 x i32>*</div><div>  store <4 x i32> %1, <4 x i32>* %2, align 4, !tbaa !1</div><div>  ret void</div><div>}</div><div><br></div><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div>Rail Shafigulin<br></div>Software Engineer <br>Esencia Technologies<br></div></div></div></div>
</div>