Oleg Tsibulnyak via llvm-dev
2017-Mar-20 09:18 UTC
[llvm-dev] replacing sequence of IR instruction to intrinsic/builtin call
Hi,please guide me in solving the next task.I want to replace sequence of IR instruction to call of my own procedure,specifically this sequence (it is adding 2 vectors, each consists from 8 elements): %31 = getelementptr inbounds i32, i32* %0, i64 %29 %32 = bitcast i32* %31 to <8 x i32>* %33 = load <8 x i32>, <8 x i32>* %32, align 4, !tbaa !1, !alias.scope !5 %34 = getelementptr inbounds i32, i32* %1, i64 %29 %35 = bitcast i32* %34 to <8 x i32>* %36 = load <8 x i32>, <8 x i32>* %35, align 4, !tbaa !1, !alias.scope !8 %37 = add nsw <8 x i32> %36, %33 %38 = getelementptr inbounds i32, i32* %2, i64 %29 %39 = bitcast i32* %38 to <8 x i32>* store <8 x i32> %37, <8 x i32>* %39, align 4, !tbaa !1, !alias.scope !10, !noalias !12 to C procdure likeexec_vect8add(add1stPtr, add2ndPtr, resPtr) I tried to do this via tablegen (I tried to replace to intrinsic), but cannot compile LLVM.I added to the instruction definition file Cpu0InstrInfo.td next lines:def : Pat<(store (v8i32 (add (v8i32 (load addr:$adr1)), (v8i32 (load addr:$adr2)) ) ), addr:$adrdst ), (int_cpu0_GEadd addr:$adr1, addr:$adr2, addr:$adrdst)>; Error during compilation:Included from /home/tsib/LLVM/test/src/lib/Target/Cpu0/Cpu0.td:15: /home/tsib/LLVM/test/src/lib/Target/Cpu0/Cpu0InstrInfo.td:1125:1: error: In anonymous_537: Cannot use 'int_cpu0_GEadd' in an output pattern! def : Pat<(store (v8i32 (add (v8i32 (load addr:$adr1)), (v8i32 (load addr:$adr2)) Thanks,Oleg -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170320/fb8d4fcf/attachment.html>