[llvm-dev] Back end with special loop instructions

Alex Susu via llvm-dev llvm-dev at lists.llvm.org
Mon May 30 15:09:37 PDT 2016


   Hello.
     I'm writing a back end for my research SIMD processor that has an assembly language 
that is blocked structured, with one-level loops. An example program with my assembly 
language:
       REPEAT_X_TIMES(Param2)
         R0 = LS[offset_A];
       END_REPEAT;

     The LLVM code somewhat equivalent to the above ASM program is:
       vector.body:
         %index = phi i64 [ %index.unr, %vector.body.preheader.split.split ], [ 
%index.next.3, %vector.body ]
         %20 = getelementptr inbounds i32, i32* %A, i64 %index
         %21 = bitcast i32* %20 to <16 x i32>*
         %wide.load = load <16 x i32>, <16 x i32>* %21, align 4
         br i1 %48, label %middle.block.unr-lcssa, label %vector.body, !llvm.loop !3

     How do you suggest to attack this problem?
     I guess I need to provide custom matching code in the Select() function of the back 
end prior to the SelectCode() invocation in order to translate the label vector.body in 
LLVM/Machine Instr(DAG) before selection to a REPEAT_X_TIMES(...) instruction - are you 
aware if anybody else has done such a thing? Also, the br LLVM instruction will be 
translated to an END_REPEAT.

   Thank you,
     Alex


More information about the llvm-dev mailing list