<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    On 20/01/2018 18:16, hameeza ahmed wrote:<br>
    <blockquote type="cite"
cite="mid:CAFMPKeb79PFUhJRLt+sVYqHUf46tcvncvbMRecNT5PbhRK-eTA@mail.gmail.com">
      <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>
    </blockquote>
    From C/C++ you just need to use the
    __builtin_nontemporal_store/__builtin_nontemporal_load builtins to
    tag the stores/loads with the nontemporal flag.<br>
    <br>
    <div>for(i=0;i<2048;i++) {<br>
    </div>
    <div>  __builtin_nontemporal_store( __builtin_nontemporal_load(b+i)
      + __builtin_nontemporal_load(c + i), a + i );<br>
    </div>
    <div>}<br>
    </div>
    <br>
    There may be an attribute you can tag pointers with instead but I
    don't know off hand.<br>
    <br>
    <blockquote type="cite"
cite="mid:CAFMPKeb79PFUhJRLt+sVYqHUf46tcvncvbMRecNT5PbhRK-eTA@mail.gmail.com">
      <div class="gmail_extra">On Sat, Jan 20, 2018 at 11:02 PM, Simon
        Pilgrim <span dir="ltr"><<a
            href="mailto:llvm-dev@redking.me.uk" target="_blank"
            moz-do-not-send="true">llvm-dev@redking.me.uk</a>></span>
        wrote:<br>
        <div class="gmail_quote">
          <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>
    </blockquote>
    <br>
  </body>
</html>