BYTE* _sobelEdgeDetection_(BYTE* pixels, size_t pixels_size, int64_t width, int64_t height, _DECL_1DARRAYSIZE_PARAM_CALLBYREFERENCE){ _DECL_DEALLOC(pixels); _DECL_1DARRAY_BYTE(_3); _DECL_DEALLOC(_3); int64_t size; _DECL_1DARRAY_BYTE(newPixels); _DECL_DEALLOC(newPixels); _DECL_1DARRAY(v_sobel); _DECL_DEALLOC(v_sobel); _DECL_1DARRAY(h_sobel); _DECL_DEALLOC(h_sobel); int64_t x; int64_t y; int64_t pos; int64_t v_g; int64_t h_g; int64_t t_g; int64_t _14; BYTE _15; _DECL_1DARRAY_BYTE(_16); _DECL_DEALLOC(_16); int64_t _17; int64_t _18; int64_t _19; int64_t _20; int64_t _21; int64_t _22; int64_t _23; int64_t _24; int64_t _25; int64_t _26; int64_t _27; int64_t _28; _DECL_1DARRAY(_29); _DECL_DEALLOC(_29); int64_t _30; int64_t _31; int64_t _32; int64_t _33; int64_t _34; int64_t _35; int64_t _36; int64_t _37; int64_t _38; int64_t _39; int64_t _40; int64_t _41; _DECL_1DARRAY(_42); _DECL_DEALLOC(_42); int64_t _43; int64_t _44; int64_t _45; int64_t _46; int64_t _47; int64_t _48; int64_t _49; int64_t _50; int64_t _51; int64_t _52; BYTE _53; int64_t _54; int64_t _55; int64_t _56; int64_t _57; //mul %14 = %1, %2 : int _14=width*height; //assign %4 = %14 : int size = _14; //const %15 = 00100000b : byte _15 = 0b00100000; //arraygen %16 = [15; 4] : byte[] _NEW1DARRAY_DEALLOC(_16, _15, size, BYTE); //assign %5 = %16 : byte[] _ADD_DEALLOC(newPixels, _16, BYTE); //const %17 = 1 : int _17 = 1; //neg %18 = %17 : int _18= -_17; //const %19 = 0 : int _19 = 0; //const %20 = 1 : int _20 = 1; //const %21 = 2 : int _21 = 2; //neg %22 = %21 : int _22= -_21; //const %23 = 0 : int _23 = 0; //const %24 = 2 : int _24 = 2; //const %25 = 1 : int _25 = 1; //neg %26 = %25 : int _26= -_25; //const %27 = 0 : int _27 = 0; //const %28 = 1 : int _28 = 1; //newlist %29 = (%18, %19, %20, %22, %23, %24, %26, %27, %28) : int[] _DEALLOC(_29); _NEW_1DARRAY_int64_t(_29, 9, 0); _29[0] = _18; _29[1] = _19; _29[2] = _20; _29[3] = _22; _29[4] = _23; _29[5] = _24; _29[6] = _26; _29[7] = _27; _29[8] = _28; _29_dealloc = true; //assign %6 = %29 : int[] _ADD_DEALLOC(v_sobel, _29, int64_t); //const %30 = 1 : int _30 = 1; //const %31 = 2 : int _31 = 2; //const %32 = 1 : int _32 = 1; //const %33 = 0 : int _33 = 0; //const %34 = 0 : int _34 = 0; //const %35 = 0 : int _35 = 0; //const %36 = 1 : int _36 = 1; //neg %37 = %36 : int _37= -_36; //const %38 = 2 : int _38 = 2; //neg %39 = %38 : int _39= -_38; //const %40 = 1 : int _40 = 1; //neg %41 = %40 : int _41= -_40; //newlist %42 = (%30, %31, %32, %33, %34, %35, %37, %39, %41) : int[] _DEALLOC(_42); _NEW_1DARRAY_int64_t(_42, 9, 0); _42[0] = _30; _42[1] = _31; _42[2] = _32; _42[3] = _33; _42[4] = _34; _42[5] = _35; _42[6] = _37; _42[7] = _39; _42[8] = _41; _42_dealloc = true; //assign %7 = %42 : int[] _ADD_DEALLOC(h_sobel, _42, int64_t); //const %43 = 0 : int _43 = 0; //assign %8 = %43 : int x = _43; //loop (%5, %8, %9, %10, %11, %12, %13, %44, %45, %46, %47, %48, %49, %50, %51, %52, %53, %54, %55, %56, %57) while(true){ //ifge %8, %1 goto blklab8 : int if(x>=width){goto blklab8;} //const %44 = 0 : int _44 = 0; //assign %9 = %44 : int y = _44; //loop (%5, %9, %10, %11, %12, %13, %45, %46, %47, %48, %49, %50, %51, %52, %53, %54, %55) while(true){ //ifge %9, %2 goto blklab10 : int if(y>=height){goto blklab10;} //mul %45 = %9, %1 : int _45=y*width; //add %46 = %45, %8 : int _46=_45+x; //assign %10 = %46 : int pos = _46; //invoke (%47) = (%0, %1, %2, %8, %9, %6) SobelEdge:convolution : function(byte[],int,int,int,int,int[])->(int) { _FUNCTIONCALL_COPY_PRE(_47, v_sobel, 5, "liveness: v_sobel = true, readonly: v_sobel = true, return:v_sobel = NEVER_RETURN" , "convolution"); _FUNCTIONCALL_COPY_PRE(_47, pixels, 0, "liveness: pixels = true, readonly: pixels = true, return:pixels = NEVER_RETURN" , "convolution"); void* tmp_pixels; _COPY_1DARRAY_PARAM(pixels, tmp_pixels, BYTE); void* tmp_kernel; _COPY_1DARRAY_PARAM(v_sobel, tmp_kernel, int64_t); _47 = _convolution_(tmp_pixels, pixels_size, width, height, x, y, tmp_kernel, v_sobel_size); free(tmp_pixels); free(tmp_kernel); } //assign %11 = %47 : int v_g = _47; //invoke (%48) = (%0, %1, %2, %8, %9, %7) SobelEdge:convolution : function(byte[],int,int,int,int,int[])->(int) { _FUNCTIONCALL_COPY_PRE(_48, h_sobel, 5, "liveness: h_sobel = true, readonly: h_sobel = true, return:h_sobel = NEVER_RETURN" , "convolution"); _FUNCTIONCALL_COPY_PRE(_48, pixels, 0, "liveness: pixels = true, readonly: pixels = true, return:pixels = NEVER_RETURN" , "convolution"); void* tmp_pixels; _COPY_1DARRAY_PARAM(pixels, tmp_pixels, BYTE); void* tmp_kernel; _COPY_1DARRAY_PARAM(h_sobel, tmp_kernel, int64_t); _48 = _convolution_(tmp_pixels, pixels_size, width, height, x, y, tmp_kernel, h_sobel_size); free(tmp_pixels); free(tmp_kernel); } //assign %12 = %48 : int h_g = _48; //invoke (%49) = (%11) whiley/lang/Math:abs : function(int)->(int) { _49 = abs(v_g); } //invoke (%50) = (%12) whiley/lang/Math:abs : function(int)->(int) { _50 = abs(h_g); } //add %51 = %49, %50 : int _51=_49+_50; //assign %13 = %51 : int t_g = _51; //const %52 = 800 : int _52 = 800; //ifle %13, %52 goto blklab12 : int if(t_g<=_52){goto blklab12;} //const %53 = 01100010b : byte _53 = 0b01100010; //update %5[%10] = %53 : byte[] -> byte[] newPixels[pos] = _53; //.blklab12 blklab12:; //const %54 = 1 : int _54 = 1; //add %55 = %9, %54 : int _55=y+_54; //assign %9 = %55 : int y = _55; //.blklab11 blklab11:; } //.blklab10 blklab10:; //const %56 = 1 : int _56 = 1; //add %57 = %8, %56 : int _57=x+_56; //assign %8 = %57 : int x = _57; //.blklab9 blklab9:; } //.blklab8 blklab8:; //return %5 _DEALLOC(pixels); _DEALLOC(_3); _DEALLOC(v_sobel); _DEALLOC(h_sobel); _DEALLOC(_16); _DEALLOC(_29); _DEALLOC(_42); _UPDATE_1DARRAYSZIE_PARAM_CALLBYREFERENCE(newPixels); return newPixels; //return }
BYTE* _sobelEdgeDetection_(BYTE* pixels, size_t pixels_size, _DECL_DEALLOC_PARAM(pixels), int width, int height, _DECL_1DARRAYSIZE_PARAM_CALLBYREFERENCE){ _DECL_1DARRAY_BYTE(_3); _DECL_DEALLOC(_3); int size; _DECL_1DARRAY_BYTE(newPixels); _DECL_DEALLOC(newPixels); _DECL_1DARRAY(v_sobel); _DECL_DEALLOC(v_sobel); _DECL_1DARRAY(h_sobel); _DECL_DEALLOC(h_sobel); int x; int y; int pos; int v_g; int h_g; int t_g; int _14; BYTE _15; _DECL_1DARRAY_BYTE(_16); _DECL_DEALLOC(_16); int _17; int _18; int _19; int _20; int _21; int _22; int _23; int _24; int _25; int _26; int _27; int _28; _DECL_1DARRAY(_29); _DECL_DEALLOC(_29); int _30; int _31; int _32; int _33; int _34; int _35; int _36; int _37; int _38; int _39; int _40; int _41; _DECL_1DARRAY(_42); _DECL_DEALLOC(_42); int _43; int _44; int _45; int _46; int _47; int _48; int _49; int _50; int _51; int _52; BYTE _53; int _54; int _55; int _56; int _57; //mul %14 = %1, %2 : int _14=width*height; //assign %4 = %14 : int // isCopyEliminated = true size = _14; //const %15 = 00100000b : byte _15 = 0b00100000; //arraygen %16 = [15; 4] : byte[] _DEALLOC(_16); _NEW_1DARRAY_BYTE(_16, size, _15); _ADD_DEALLOC(_16); //assign %5 = %16 : byte[] _DEALLOC(newPixels); // isCopyEliminated = true _UPDATE_1DARRAY(newPixels, _16); _TRANSFER_DEALLOC(newPixels, _16); //const %17 = 1 : int _17 = 1; //neg %18 = %17 : int _18= -_17; //const %19 = 0 : int _19 = 0; //const %20 = 1 : int _20 = 1; //const %21 = 2 : int _21 = 2; //neg %22 = %21 : int _22= -_21; //const %23 = 0 : int _23 = 0; //const %24 = 2 : int _24 = 2; //const %25 = 1 : int _25 = 1; //neg %26 = %25 : int _26= -_25; //const %27 = 0 : int _27 = 0; //const %28 = 1 : int _28 = 1; //newlist %29 = (%18, %19, %20, %22, %23, %24, %26, %27, %28) : int[] _DEALLOC(_29); _NEW_1DARRAY_int64_t(_29, 9, 0); _29[0] = _18; _29[1] = _19; _29[2] = _20; _29[3] = _22; _29[4] = _23; _29[5] = _24; _29[6] = _26; _29[7] = _27; _29[8] = _28; _ADD_DEALLOC(_29); //assign %6 = %29 : int[] _DEALLOC(v_sobel); // isCopyEliminated = true _UPDATE_1DARRAY(v_sobel, _29); _TRANSFER_DEALLOC(v_sobel, _29); //const %30 = 1 : int _30 = 1; //const %31 = 2 : int _31 = 2; //const %32 = 1 : int _32 = 1; //const %33 = 0 : int _33 = 0; //const %34 = 0 : int _34 = 0; //const %35 = 0 : int _35 = 0; //const %36 = 1 : int _36 = 1; //neg %37 = %36 : int _37= -_36; //const %38 = 2 : int _38 = 2; //neg %39 = %38 : int _39= -_38; //const %40 = 1 : int _40 = 1; //neg %41 = %40 : int _41= -_40; //newlist %42 = (%30, %31, %32, %33, %34, %35, %37, %39, %41) : int[] _DEALLOC(_42); _NEW_1DARRAY_int64_t(_42, 9, 0); _42[0] = _30; _42[1] = _31; _42[2] = _32; _42[3] = _33; _42[4] = _34; _42[5] = _35; _42[6] = _37; _42[7] = _39; _42[8] = _41; _ADD_DEALLOC(_42); //assign %7 = %42 : int[] _DEALLOC(h_sobel); // isCopyEliminated = true _UPDATE_1DARRAY(h_sobel, _42); _TRANSFER_DEALLOC(h_sobel, _42); //const %43 = 0 : int _43 = 0; //assign %8 = %43 : int // isCopyEliminated = true x = _43; //loop (%5, %8, %9, %10, %11, %12, %13, %44, %45, %46, %47, %48, %49, %50, %51, %52, %53, %54, %55, %56, %57) while(true){ //ifge %8, %1 goto blklab8 : int if(x>=width){goto blklab8;} //const %44 = 0 : int _44 = 0; //assign %9 = %44 : int // isCopyEliminated = true y = _44; //loop (%5, %9, %10, %11, %12, %13, %45, %46, %47, %48, %49, %50, %51, %52, %53, %54, %55) while(true){ //ifge %9, %2 goto blklab10 : int if(y>=height){goto blklab10;} //mul %45 = %9, %1 : int _45=y*width; //add %46 = %45, %8 : int _46=_45+x; //assign %10 = %46 : int // isCopyEliminated = true pos = _46; //invoke (%47) = (%0, %1, %2, %8, %9, %6) SobelEdge_large:convolution : function(byte[],int,int,int,int,int[])->(int) { // isCopyEliminated of '_0' = true // isCopyEliminated of '_6' = true _47 = _convolution_(pixels, pixels_size, false, width, height, x, y, v_sobel, v_sobel_size, false); _RETAIN_DEALLOC(pixels, "false-false-true" , "convolution"); _RETAIN_DEALLOC(v_sobel, "false-false-true" , "convolution"); } //assign %11 = %47 : int // isCopyEliminated = true v_g = _47; //invoke (%48) = (%0, %1, %2, %8, %9, %7) SobelEdge_large:convolution : function(byte[],int,int,int,int,int[])->(int) { // isCopyEliminated of '_0' = true // isCopyEliminated of '_7' = true _48 = _convolution_(pixels, pixels_size, false, width, height, x, y, h_sobel, h_sobel_size, false); _RETAIN_DEALLOC(pixels, "false-false-true" , "convolution"); _RETAIN_DEALLOC(h_sobel, "false-false-true" , "convolution"); } //assign %12 = %48 : int // isCopyEliminated = true h_g = _48; //mul %49 = %11, %11 : int _49=v_g*v_g; //mul %50 = %12, %12 : int _50=h_g*h_g; //add %51 = %49, %50 : int _51=_49+_50; //assign %13 = %51 : int // isCopyEliminated = true t_g = _51; //const %52 = 640000 : int _52 = 640000; //ifle %13, %52 goto blklab12 : int if(t_g<=_52){goto blklab12;} //const %53 = 01100010b : byte _53 = 0b01100010; //update %5[%10] = %53 : byte[] -> byte[] newPixels[pos] = _53; //.blklab12 blklab12:; //const %54 = 1 : int _54 = 1; //add %55 = %9, %54 : int _55=y+_54; //assign %9 = %55 : int // isCopyEliminated = true y = _55; //.blklab11 blklab11:; } //.blklab10 blklab10:; //const %56 = 1 : int _56 = 1; //add %57 = %8, %56 : int _57=x+_56; //assign %8 = %57 : int // isCopyEliminated = true x = _57; //.blklab9 blklab9:; } //.blklab8 blklab8:; //return %5 _DEALLOC(pixels); _DEALLOC(_3); _DEALLOC(v_sobel); _DEALLOC(h_sobel); _DEALLOC(_16); _DEALLOC(_29); _DEALLOC(_42); _UPDATE_1DARRAYSZIE_PARAM_CALLBYREFERENCE(newPixels); return newPixels; //return }