1 /* { dg-do run } */ 2 /* { dg-options "-O2 -fsplit-paths -fdump-tree-split-paths-details --param max-jump-thread-duplication-stmts=20" } */ 3 4 #include <stdio.h> 5 #include <stdlib.h> 6 #include <ctype.h> 7 8 #define RGBMAX 255 9 10 unsigned char test()11test() 12 { 13 int i, Pels; 14 int sum = 0; 15 unsigned char xr, xg, xb; 16 unsigned char xc, xm, xy, xk = 0; 17 unsigned char *ReadPtr, *EritePtr; 18 19 ReadPtr = ( unsigned char *) malloc (sizeof (unsigned char) * 100); 20 EritePtr = ( unsigned char *) malloc (sizeof (unsigned char) * 100); 21 22 for (i = 0; i < 100;i++) 23 { 24 ReadPtr[i] = 100 - i; 25 } 26 27 for (i = 0; i < 24; i++) 28 { 29 xr = *ReadPtr++; 30 xg = *ReadPtr++; 31 xb = *ReadPtr++; 32 33 xc = (unsigned char) (RGBMAX - xr); 34 xm = (unsigned char) (RGBMAX - xg); 35 xy = (unsigned char) (RGBMAX - xb); 36 37 if (xc < xm) 38 { 39 xk = (unsigned char) (xc < xy ? xc : xy); 40 } 41 else 42 { 43 xk = (unsigned char) (xm < xy ? xm : xy); 44 } 45 46 xc = (unsigned char) (xc - xk); 47 xm = (unsigned char) (xm - xk); 48 xy = (unsigned char) (xy - xk); 49 50 *EritePtr++ = xc; 51 *EritePtr++ = xm; 52 *EritePtr++ = xy; 53 *EritePtr++ = xk; 54 sum += *(--EritePtr); 55 56 } 57 return sum; 58 } 59 60 int main()61main() 62 { 63 if (test() != 196) 64 abort(); 65 66 return 0; 67 } 68 69 /* { dg-final { scan-tree-dump "Duplicating join block" "split-paths" } } */ 70