<div dir="ltr">Actually i am working on vector accelerator which will perform those instructions which are non temporal.<div><br></div><div>for instance if i have this loop</div><div><br></div><div>for(i=0;i<2048;i++)</div><div>a[i]=b[i]+c[i];</div><div><br></div><div>currently it emits following IR;</div><div><br></div><div><br></div><div><div>  %0 = getelementptr inbounds [2048 x i32], [2048 x i32]* @b, i64 0, i64 %index<br></div><div>  %1 = bitcast i32* %0 to <16 x i32>*</div><div>  %wide.load = load <16 x i32>, <16 x i32>* %1, align 16, !tbaa !1</div><div>  %8 = getelementptr inbounds [2048 x i32], [2048 x i32]* @c, i64 0, i64 %index</div><div>  %9 = bitcast i32* %8 to <16 x i32>*</div><div>  %wide.load14 = load <16 x i32>, <16 x i32>* %9, align 16, !tbaa !1</div><div>  %16 = add nsw <16 x i32> %wide.load14, %wide.load</div><div>  %20 = getelementptr inbounds [2048 x i32], [2048 x i32]* @a, i64 0, i64 %index</div><div>  %21 = bitcast i32* %20 to <16 x i32>*</div><div>  store <16 x i32> %16, <16 x i32>* %21, align 16, !tbaa !1</div></div><div><br></div><div><br></div><div>However, i want it to emit following IR </div><div><br></div><div><div>  %0 = getelementptr inbounds [2048 x i32], [2048 x i32]* @b, i64 0, i64 %index<br></div><div>  %1 = bitcast i32* %0 to <16 x i32>*</div><div>  %wide.load = load <16 x i32>, <16 x i32>* %1, align 16, !tbaa !1, !nontemporal !1</div><div>  %8 = getelementptr inbounds [2048 x i32], [2048 x i32]* @c, i64 0, i64 %index</div><div>  %9 = bitcast i32* %8 to <16 x i32>*</div><div>  %wide.load14 = load <16 x i32>, <16 x i32>* %9, align 16, !tbaa !1, !nontemporal !1</div><div>  %16 = add nsw <16 x i32> %wide.load14, %wide.load, !nontemporal !1</div><div>  %20 = getelementptr inbounds [2048 x i32], [2048 x i32]* @a, i64 0, i64 %index</div><div>  %21 = bitcast i32* %20 to <16 x i32>*</div><div>  store <16 x i32> %16, <16 x i32>* %21, align 16, !tbaa !1, !nontemporal !1</div></div><div><br></div><div>so that i can offload load, add, store to accelerator hardware. is it possible here? do i need a separate pass to detect whether the loop has non temporal data or polly will help here? what do you say?</div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Jan 20, 2018 at 11:02 PM, Simon Pilgrim <span dir="ltr"><<a href="mailto:llvm-dev@redking.me.uk" target="_blank">llvm-dev@redking.me.uk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On 20/01/2018 17:44, hameeza ahmed via llvm-dev wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hello,<br>
<br>
My work deals with non-temporal loads and stores i found non-temporal meta data in llvm documentation but its not shown in IR.<br>
<br>
How to get non-temporal meta data?<br>
</blockquote></div></div>
llvm\test\CodeGen\X86\nontempo<wbr>ral-loads.ll shows how to create nt vector loads in IR - is that what you're after?<span class="HOEnZb"><font color="#888888"><br>
<br>
Simon.<br>
</font></span></blockquote></div><br></div>