annotate gcc/testsuite/gcc.dg/vect/fast-math-bb-slp-call-3.c @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 #include "tree-vect.h"
kono
parents:
diff changeset
2
kono
parents:
diff changeset
3 extern double sqrt (double);
kono
parents:
diff changeset
4 extern double fabs (double);
kono
parents:
diff changeset
5 extern double ceil (double);
kono
parents:
diff changeset
6 extern double floor (double);
kono
parents:
diff changeset
7
kono
parents:
diff changeset
8 extern void abort (void);
kono
parents:
diff changeset
9
kono
parents:
diff changeset
10 #define MIN(a, b) (((a) < (b)) ? (a) : (b))
kono
parents:
diff changeset
11 #define MAX(a, b) (((a) > (b)) ? (a) : (b))
kono
parents:
diff changeset
12
kono
parents:
diff changeset
13 typedef struct {
kono
parents:
diff changeset
14 int initialHeight, initialWidth;
kono
parents:
diff changeset
15 int rotatedHeight, rotatedWidth;
kono
parents:
diff changeset
16 int autoCropHeight, autoCropWidth;
kono
parents:
diff changeset
17 } ufraw_data;
kono
parents:
diff changeset
18
kono
parents:
diff changeset
19 void __attribute__((noinline,noclone))
kono
parents:
diff changeset
20 ufraw_test(ufraw_data *uf)
kono
parents:
diff changeset
21 {
kono
parents:
diff changeset
22 int iWidth = uf->initialWidth;
kono
parents:
diff changeset
23 int iHeight = uf->initialHeight;
kono
parents:
diff changeset
24 double aspectRatio = ((double)iWidth) / iHeight;
kono
parents:
diff changeset
25 double midX = iWidth / 2.0 - 0.5;
kono
parents:
diff changeset
26 double midY = iHeight / 2.0 - 0.5;
kono
parents:
diff changeset
27 double maxX = 0, maxY = 0;
kono
parents:
diff changeset
28 double minX = 999999, minY = 999999;
kono
parents:
diff changeset
29 double lastX = 0, lastY = 0, area = 0;
kono
parents:
diff changeset
30 double scale;
kono
parents:
diff changeset
31 int i;
kono
parents:
diff changeset
32 for (i = 0; i < iWidth + iHeight - 1; i++)
kono
parents:
diff changeset
33 {
kono
parents:
diff changeset
34 int x, y;
kono
parents:
diff changeset
35 if (i < iWidth) { // Trace the left border of the image
kono
parents:
diff changeset
36 x = i;
kono
parents:
diff changeset
37 y = 0;
kono
parents:
diff changeset
38 } else { // Trace the bottom border of the image
kono
parents:
diff changeset
39 x = iWidth - 1;
kono
parents:
diff changeset
40 y = i - iWidth + 1;
kono
parents:
diff changeset
41 }
kono
parents:
diff changeset
42 double srcX = x - midX;
kono
parents:
diff changeset
43 double srcY = y - midY;
kono
parents:
diff changeset
44 // A digital planimeter:
kono
parents:
diff changeset
45 area += srcY * lastX - srcX * lastY;
kono
parents:
diff changeset
46 lastX = srcX;
kono
parents:
diff changeset
47 lastY = srcY;
kono
parents:
diff changeset
48 maxX = MAX(maxX, fabs(srcX));
kono
parents:
diff changeset
49 maxY = MAX(maxY, fabs(srcY));
kono
parents:
diff changeset
50 if (fabs(srcX / srcY) > aspectRatio)
kono
parents:
diff changeset
51 minX = MIN(minX, fabs(srcX));
kono
parents:
diff changeset
52 else
kono
parents:
diff changeset
53 minY = MIN(minY, fabs(srcY));
kono
parents:
diff changeset
54 }
kono
parents:
diff changeset
55 scale = sqrt((iWidth - 1) * (iHeight - 1) / area);
kono
parents:
diff changeset
56 uf->rotatedWidth = MIN(ceil(2 * maxX + 1.0) * scale, 2 * iWidth);
kono
parents:
diff changeset
57 uf->rotatedHeight = MIN(ceil(2 * maxY + 1.0) * scale, 2 * iHeight);
kono
parents:
diff changeset
58 uf->autoCropWidth = MIN(floor(2 * minX) * scale, 2 * iWidth);
kono
parents:
diff changeset
59 uf->autoCropHeight = MIN(floor(2 * minY) * scale, 2 * iHeight);
kono
parents:
diff changeset
60 if (uf->autoCropWidth != 3)
kono
parents:
diff changeset
61 abort ();
kono
parents:
diff changeset
62 }
kono
parents:
diff changeset
63
kono
parents:
diff changeset
64 int main()
kono
parents:
diff changeset
65 {
kono
parents:
diff changeset
66 ufraw_data uf_data;
kono
parents:
diff changeset
67 ufraw_data *uf = &uf_data;
kono
parents:
diff changeset
68 check_vect ();
kono
parents:
diff changeset
69 uf->initialWidth = 4;
kono
parents:
diff changeset
70 uf->initialHeight = 5;
kono
parents:
diff changeset
71 ufraw_test(uf);
kono
parents:
diff changeset
72 return 0;
kono
parents:
diff changeset
73 }
kono
parents:
diff changeset
74