<div dir="ltr"><div dir="ltr"><div>Hello everyone,</div><div><br></div><div>We are working on extending RISC-V LLVM backend which will help us to achieve the goal of improving programmability in the second generation design of our open source RISC-V manycore processor (<a href="http://bjump.org/manycore">bjump.org/manycore</a>).</div><div><br></div><div>We started with supporting 64 bit pointers in RISCV 32 bit backend using address spaces and register pairs. We aim to support 64 bit pointers in address space 1 using a pair of i32 registers. The 64 bit address will be stored in two i32 registers and we will add custom load/store instructions to concat the data from the two registers for getting the 64 bit address at the hardware level.</div><div><br></div><div>We started with updating the data layout string to "e-m:e-p:32:32-p1:64:64-i64:64-n32-S128" and we are stuck in the legalization phase.</div><div><br></div><div>Example for node "i64 = TargetGlobalAddress<[3 x i64] addrspace(1)* @foo> 0", it does not automatically expand the i64 result into two i32. We tried to convert i64 into v2i32 so that it can pass the legalizer but that does not seem to work well. Is there any simpler way to handle this? </div><div><br></div><div>We would be happy to hear your views and suggestions on this :)</div><div><br></div><div>Many thanks,</div><div>Reshabh Sharma</div></div></div>