@@ -3295,7 +3295,7 @@ bb_ok_for_noce_convert_multiple_sets (ba
if (count > limit)
return false;
- return count > 0;
+ return count > 1;
}
/* Given a simple IF-THEN-JOIN or IF-THEN-ELSE-JOIN block, attempt to convert
@@ -0,0 +1,70 @@
+// PR rtl-optimization/69570
+// { dg-do run }
+// { dg-options "-O2" }
+// { dg-additional-options "-fpic" { target fpic } }
+// { dg-additional-options "-march=i686" { target ia32 } }
+
+template <typename T> inline const T &
+min (const T &a, const T &b)
+{
+ if (b < a)
+ return b;
+ return a;
+}
+
+template <typename T> inline const T &
+max (const T &a, const T &b)
+{
+ if (a < b)
+ return b;
+ return a;
+}
+
+static inline void
+foo (unsigned x, unsigned y, unsigned z, double &h, double &s, double &l)
+{
+ double r = x / 255.0;
+ double g = y / 255.0;
+ double b = z / 255.0;
+ double m = max (r, max (g, b));
+ double n = min (r, min (g, b));
+ double d = m - n;
+ double e = m + n;
+ h = 0.0, s = 0.0, l = e / 2.0;
+ if (d > 0.0)
+ {
+ s = l > 0.5 ? d / (2.0 - e) : d / e;
+ if (m == r && m != g)
+ h = (g - b) / d + (g < b ? 6.0 : 0.0);
+ if (m == g && m != b)
+ h = (b - r) / d + 2.0;
+ if (m == b && m != r)
+ h = (r - g) / d + 4.0;
+ h /= 6.0;
+ }
+}
+
+__attribute__ ((noinline, noclone))
+void bar (unsigned x[3], double y[3])
+{
+ double h, s, l;
+ foo (x[0], x[1], x[2], h, s, l);
+ y[0] = h;
+ y[1] = s;
+ y[2] = l;
+}
+
+int
+main ()
+{
+ unsigned x[3] = { 0, 128, 0 };
+ double y[3];
+
+ bar (x, y);
+ if (__builtin_fabs (y[0] - 0.33333) > 0.001
+ || __builtin_fabs (y[1] - 1) > 0.001
+ || __builtin_fabs (y[2] - 0.25098) > 0.001)
+ __builtin_abort ();
+
+ return 0;
+}