1 ; This checks that RSForEachExpand generates getelementptr 2 ; instructions into the driver info structure as expected - namely, 3 ; that they index into the right positions of the structure and that 4 ; the instructions that are generated are in the loop header. 5 6 ; RUN: opt -load libbcc.so -kernelexp -S < %s | FileCheck %s 7 8 ; ModuleID = 'test_getelementptr.bc' 9 target datalayout = "e-m:e-i64:64-i128:128-n32:64-S128" 10 target triple = "aarch64-none-linux-gnueabi" 11 12 ; Declarations expected by the expansion pass. 13 declare void @_Z14rsGetElementAt13rs_allocationj() 14 declare void @_Z14rsGetElementAt13rs_allocationjj() 15 declare void @_Z14rsGetElementAt13rs_allocationjjj() 16 declare void @_Z14rsSetElementAt13rs_allocationPvj() 17 declare void @_Z14rsSetElementAt13rs_allocationPvjj() 18 declare void @_Z14rsSetElementAt13rs_allocationPvjjj() 19 declare void @_Z25rsGetElementAtYuv_uchar_Y13rs_allocationjj() 20 declare void @_Z25rsGetElementAtYuv_uchar_U13rs_allocationjj() 21 declare void @_Z25rsGetElementAtYuv_uchar_V13rs_allocationjj() 22 23 ; Old-style kernel 24 define void @root(i32* nocapture %ain, i32* nocapture %out, i32 %x, i32 %y, i32 %z) { 25 ret void 26 ; CHECK: define void @root.expand(%RsExpandKernelDriverInfoPfx* %p, i32 %x1, i32 %x2, i32 %outstep) 27 ; CHECK: Begin: 28 ; CHECK: %instep_addr.gep = getelementptr inbounds %RsExpandKernelDriverInfoPfx, %RsExpandKernelDriverInfoPfx* %p, i32 0, i32 1, i32 0 29 ; CHECK: load i32, i32* %instep_addr.gep 30 ; CHECK: %input_buf.gep = getelementptr inbounds %RsExpandKernelDriverInfoPfx, %RsExpandKernelDriverInfoPfx* %p, i32 0, i32 0, i32 0 31 ; CHECK: load i8*, i8** %input_buf.gep 32 ; CHECK: %out_buf.gep = getelementptr inbounds %RsExpandKernelDriverInfoPfx, %RsExpandKernelDriverInfoPfx* %p, i32 0, i32 3, i32 0 33 ; CHECK: load i8*, i8** %out_buf.gep 34 ; CHECK: %Y.gep = getelementptr inbounds %RsExpandKernelDriverInfoPfx, %RsExpandKernelDriverInfoPfx* %p, i32 0, i32 7, i32 1 35 ; CHECK: load i32, i32* %Y.gep 36 ; CHECK: %Z.gep = getelementptr inbounds %RsExpandKernelDriverInfoPfx, %RsExpandKernelDriverInfoPfx* %p, i32 0, i32 7, i32 2 37 ; CHECK: load i32, i32* %Z.gep 38 ; CHECK: Loop: 39 } 40 41 ; New style kernel with multiple inputs 42 define i32 @foo(i32 %in0, i32 %in1, i32 %x, i32 %y, i32 %z) { 43 ret i32 0 44 ; CHECK: define void @foo.expand(%RsExpandKernelDriverInfoPfx* %p, i32 %x1, i32 %x2, i32 %arg_outstep) 45 ; CHECK: Begin: 46 ; CHECK: %out_buf.gep = getelementptr inbounds %RsExpandKernelDriverInfoPfx, %RsExpandKernelDriverInfoPfx* %p, i32 0, i32 3, i32 0 47 ; CHECK: load i8*, i8** %out_buf.gep 48 ; CHECK: %Y.gep = getelementptr inbounds %RsExpandKernelDriverInfoPfx, %RsExpandKernelDriverInfoPfx* %p, i32 0, i32 7, i32 1 49 ; CHECK: load i32, i32* %Y.gep 50 ; CHECK: %Z.gep = getelementptr inbounds %RsExpandKernelDriverInfoPfx, %RsExpandKernelDriverInfoPfx* %p, i32 0, i32 7, i32 2 51 ; CHECK: load i32, i32* %Z.gep 52 ; CHECK: %input_buf.gep = getelementptr inbounds %RsExpandKernelDriverInfoPfx, %RsExpandKernelDriverInfoPfx* %p, i32 0, i32 0, i32 0 53 ; CHECK: load i8*, i8** %input_buf.gep 54 ; CHECK: %input_buf.gep1 = getelementptr inbounds %RsExpandKernelDriverInfoPfx, %RsExpandKernelDriverInfoPfx* %p, i32 0, i32 0, i32 1 55 ; CHECK: load i8*, i8** %input_buf.gep1 56 ; CHECK: Loop: 57 } 58 59 !llvm.ident = !{!0} 60 !\23pragma = !{!1, !2} 61 !\23rs_export_foreach_name = !{!3, !4} 62 !\23rs_export_foreach = !{!5, !6} 63 64 !0 = !{!"clang version 3.6 "} 65 !1 = !{!"version", !"1"} 66 !2 = !{!"java_package_name", !"foo"} 67 !3 = !{!"root"} 68 !4 = !{!"foo"} 69 !5 = !{!"91"} 70 !6 = !{!"123"} 71