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()11 test()
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()61 main()
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