Another bogus range from .invert so don't use it.

From _1 < _2 we conclude [-INF, +INF - 1] and invert it as [+INF, +INF] -
oops.  Compute the other edge range explicitely.
diff --git a/gcc/testsuite/gcc.dg/torture/20220518-2.c b/gcc/testsuite/gcc.dg/torture/20220518-2.c
new file mode 100644
index 0000000..af70d7f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/20220518-2.c
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-funswitch-loops" } */
+
+int Get_Spline_Val_sp_0, Get_Spline_Val_k;
+double Get_Spline_Val_p, Get_Spline_Val_se_0_0_0;
+double *Get_Spline_Val_v;
+void Get_Spline_Val() {
+  int i;
+  for (;;)
+    if (i > Get_Spline_Val_sp_0)
+      Get_Spline_Val_k = Get_Spline_Val_se_0_0_0;
+    else if (Get_Spline_Val_sp_0 == 1)
+      Get_Spline_Val_v[Get_Spline_Val_k] = Get_Spline_Val_p;
+}
diff --git a/gcc/tree-ssa-loop-unswitch.cc b/gcc/tree-ssa-loop-unswitch.cc
index 2710c11..d2898bd 100644
--- a/gcc/tree-ssa-loop-unswitch.cc
+++ b/gcc/tree-ssa-loop-unswitch.cc
@@ -143,22 +143,15 @@
 	  rhs_range.set (rhs);
 	if (!range_op->op1_range (true_range, TREE_TYPE (lhs),
 				  int_range<2> (boolean_true_node,
-						boolean_true_node), rhs_range))
+						boolean_true_node), rhs_range)
+	    || !range_op->op1_range (false_range, TREE_TYPE (lhs),
+				     int_range<2> (boolean_false_node,
+						   boolean_false_node),
+				     rhs_range))
 	  {
 	    true_range.set_varying (TREE_TYPE (lhs));
 	    false_range.set_varying (TREE_TYPE (lhs));
 	  }
-	else
-	  {
-	    false_range = true_range;
-	    if (!false_range.varying_p ()
-		&& !false_range.undefined_p ())
-	      false_range.invert ();
-	    else
-	      /* ???  Inversion of undefined is varying, of varying
-		 is undefined but ranger asserts.  */
-	      false_range.set_varying (TREE_TYPE (lhs));
-	  }
       }
     num = predicates->length ();
     predicates->safe_push (this);