<div dir="ltr">So you want to make int 64 bit? Or you want int to stay 32 bit, long to be 64 bit but sign extend int 32 bit to 64?</div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jan 11, 2017 at 12:09 PM, Davis, Alan via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I am trying to prototype a back end for a new processor. It has a 64-bit datapath, so all registers are 64 bits and load instructions always extend to 64 bits. But the type 'int' is 32 bits, and arithmetic instructions have variants that operate on only the lower 32 bits of each register.<br>
<br>
So for a basic 'a = b + c' example, we get<br>
  %0 = load i32, i32* @b, align 4, !tbaa !1<br>
  %1 = load i32, i32* @c, align 4, !tbaa !1<br>
  %add = add nsw i32 %1, %0<br>
  store i32 %add, i32* @a, align 4, !tbaa !1<br>
<br>
And we'd want to generate<br>
 ldw %r0,@b     ; load b (32 bits) from memory with sign extension to 64 bits<br>
 ldw %r1,@c      ; load c (32 bits) from memory with sign extension to 64 bits<br>
 addw %r2,%r0,%r1   ; add lower 32 bits of r0 and r1<br>
 stw @a,%r2   ; store lower 32 bits of r2 to a<br>
<br>
If I define the ldw instruction faithfully according to the HW, that is, extending to 64 bits, it won't match the load i32. Does that mean I will need to define both 32 and 64 bit versions (via a multiclass perhaps)? Or would I just define the true (64-bit) version and use a Pattern to map 32-bit loads to the true instruction? Or is there something that would be done in lowering? I tried this lowering action:<br>
   setOperationAction(ISD::LOAD, MVT::i32, Promote);<br>
but got an assertion failure: "Can only promote loads to same size type"<br>
<br>
Please forgive the elementary level of the question; we are just getting started and finding ISel a bit of a tough nut to crack.<br>
<br>
-Alan  Davis<br>
<br>
______________________________<wbr>_________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" target="_blank" rel="noreferrer">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-dev</a><br>
</blockquote></div><br></div>