diff mbox series

[01/44] testsuite: Add cases for conditional-move and conditional-add operations

Message ID alpine.DEB.2.20.2311171317470.5892@tpp.orcam.me.uk
State New
Headers show
Series RISC-V: Various if-conversion fixes and improvements | expand

Commit Message

Maciej W. Rozycki Nov. 19, 2023, 5:35 a.m. UTC
Add generic execution tests for expressions that are expected to expand 
to conditional-move and conditional-add operations where supported.  To 
ensure no corner case escapes all relational operators are extensively 
covered for integer comparisons and all ordered operators are covered 
for floating-point comparisons.  Unordered operators are not covered at 
this point as they'd require a different input data set.

	gcc/testsuite/
	* gcc.dg/torture/addieq.c: New test.
	* gcc.dg/torture/addifeq.c: New test.
	* gcc.dg/torture/addifge.c: New test.
	* gcc.dg/torture/addifgt.c: New test.
	* gcc.dg/torture/addifle.c: New test.
	* gcc.dg/torture/addiflt.c: New test.
	* gcc.dg/torture/addifne.c: New test.
	* gcc.dg/torture/addige.c: New test.
	* gcc.dg/torture/addigeu.c: New test.
	* gcc.dg/torture/addigt.c: New test.
	* gcc.dg/torture/addigtu.c: New test.
	* gcc.dg/torture/addile.c: New test.
	* gcc.dg/torture/addileu.c: New test.
	* gcc.dg/torture/addilt.c: New test.
	* gcc.dg/torture/addiltu.c: New test.
	* gcc.dg/torture/addine.c: New test.
	* gcc.dg/torture/addleq.c: New test.
	* gcc.dg/torture/addlfeq.c: New test.
	* gcc.dg/torture/addlfge.c: New test.
	* gcc.dg/torture/addlfgt.c: New test.
	* gcc.dg/torture/addlfle.c: New test.
	* gcc.dg/torture/addlflt.c: New test.
	* gcc.dg/torture/addlfne.c: New test.
	* gcc.dg/torture/addlge.c: New test.
	* gcc.dg/torture/addlgeu.c: New test.
	* gcc.dg/torture/addlgt.c: New test.
	* gcc.dg/torture/addlgtu.c: New test.
	* gcc.dg/torture/addlle.c: New test.
	* gcc.dg/torture/addlleu.c: New test.
	* gcc.dg/torture/addllt.c: New test.
	* gcc.dg/torture/addlltu.c: New test.
	* gcc.dg/torture/addlne.c: New test.
	* gcc.dg/torture/movieq.c: New test.
	* gcc.dg/torture/movifeq.c: New test.
	* gcc.dg/torture/movifge.c: New test.
	* gcc.dg/torture/movifgt.c: New test.
	* gcc.dg/torture/movifle.c: New test.
	* gcc.dg/torture/moviflt.c: New test.
	* gcc.dg/torture/movifne.c: New test.
	* gcc.dg/torture/movige.c: New test.
	* gcc.dg/torture/movigeu.c: New test.
	* gcc.dg/torture/movigt.c: New test.
	* gcc.dg/torture/movigtu.c: New test.
	* gcc.dg/torture/movile.c: New test.
	* gcc.dg/torture/movileu.c: New test.
	* gcc.dg/torture/movilt.c: New test.
	* gcc.dg/torture/moviltu.c: New test.
	* gcc.dg/torture/movine.c: New test.
	* gcc.dg/torture/movleq.c: New test.
	* gcc.dg/torture/movlfeq.c: New test.
	* gcc.dg/torture/movlfge.c: New test.
	* gcc.dg/torture/movlfgt.c: New test.
	* gcc.dg/torture/movlfle.c: New test.
	* gcc.dg/torture/movlflt.c: New test.
	* gcc.dg/torture/movlfne.c: New test.
	* gcc.dg/torture/movlge.c: New test.
	* gcc.dg/torture/movlgeu.c: New test.
	* gcc.dg/torture/movlgt.c: New test.
	* gcc.dg/torture/movlgtu.c: New test.
	* gcc.dg/torture/movlle.c: New test.
	* gcc.dg/torture/movlleu.c: New test.
	* gcc.dg/torture/movllt.c: New test.
	* gcc.dg/torture/movlltu.c: New test.
	* gcc.dg/torture/movlne.c: New test.
---
 gcc/testsuite/gcc.dg/torture/addieq.c  |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/addifeq.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/addifge.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/addifgt.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/addifle.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/addiflt.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/addifne.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/addige.c  |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/addigeu.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/addigt.c  |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/addigtu.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/addile.c  |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/addileu.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/addilt.c  |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/addiltu.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/addine.c  |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/addleq.c  |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/addlfeq.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/addlfge.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/addlfgt.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/addlfle.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/addlflt.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/addlfne.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/addlge.c  |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/addlgeu.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/addlgt.c  |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/addlgtu.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/addlle.c  |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/addlleu.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/addllt.c  |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/addlltu.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/addlne.c  |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/movieq.c  |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/movifeq.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/movifge.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/movifgt.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/movifle.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/moviflt.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/movifne.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/movige.c  |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/movigeu.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/movigt.c  |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/movigtu.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/movile.c  |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/movileu.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/movilt.c  |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/moviltu.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/movine.c  |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/movleq.c  |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/movlfeq.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/movlfge.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/movlfgt.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/movlfle.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/movlflt.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/movlfne.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/movlge.c  |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/movlgeu.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/movlgt.c  |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/movlgtu.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/movlle.c  |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/movlleu.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/movllt.c  |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/movlltu.c |   31 +++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/torture/movlne.c  |   31 +++++++++++++++++++++++++++++++
 64 files changed, 1984 insertions(+)

gcc-test-movcc.diff

Comments

Kito Cheng Nov. 19, 2023, 5:52 a.m. UTC | #1
ok

On Sun, Nov 19, 2023 at 1:35 PM Maciej W. Rozycki <macro@embecosm.com> wrote:
>
> Add generic execution tests for expressions that are expected to expand
> to conditional-move and conditional-add operations where supported.  To
> ensure no corner case escapes all relational operators are extensively
> covered for integer comparisons and all ordered operators are covered
> for floating-point comparisons.  Unordered operators are not covered at
> this point as they'd require a different input data set.
>
>         gcc/testsuite/
>         * gcc.dg/torture/addieq.c: New test.
>         * gcc.dg/torture/addifeq.c: New test.
>         * gcc.dg/torture/addifge.c: New test.
>         * gcc.dg/torture/addifgt.c: New test.
>         * gcc.dg/torture/addifle.c: New test.
>         * gcc.dg/torture/addiflt.c: New test.
>         * gcc.dg/torture/addifne.c: New test.
>         * gcc.dg/torture/addige.c: New test.
>         * gcc.dg/torture/addigeu.c: New test.
>         * gcc.dg/torture/addigt.c: New test.
>         * gcc.dg/torture/addigtu.c: New test.
>         * gcc.dg/torture/addile.c: New test.
>         * gcc.dg/torture/addileu.c: New test.
>         * gcc.dg/torture/addilt.c: New test.
>         * gcc.dg/torture/addiltu.c: New test.
>         * gcc.dg/torture/addine.c: New test.
>         * gcc.dg/torture/addleq.c: New test.
>         * gcc.dg/torture/addlfeq.c: New test.
>         * gcc.dg/torture/addlfge.c: New test.
>         * gcc.dg/torture/addlfgt.c: New test.
>         * gcc.dg/torture/addlfle.c: New test.
>         * gcc.dg/torture/addlflt.c: New test.
>         * gcc.dg/torture/addlfne.c: New test.
>         * gcc.dg/torture/addlge.c: New test.
>         * gcc.dg/torture/addlgeu.c: New test.
>         * gcc.dg/torture/addlgt.c: New test.
>         * gcc.dg/torture/addlgtu.c: New test.
>         * gcc.dg/torture/addlle.c: New test.
>         * gcc.dg/torture/addlleu.c: New test.
>         * gcc.dg/torture/addllt.c: New test.
>         * gcc.dg/torture/addlltu.c: New test.
>         * gcc.dg/torture/addlne.c: New test.
>         * gcc.dg/torture/movieq.c: New test.
>         * gcc.dg/torture/movifeq.c: New test.
>         * gcc.dg/torture/movifge.c: New test.
>         * gcc.dg/torture/movifgt.c: New test.
>         * gcc.dg/torture/movifle.c: New test.
>         * gcc.dg/torture/moviflt.c: New test.
>         * gcc.dg/torture/movifne.c: New test.
>         * gcc.dg/torture/movige.c: New test.
>         * gcc.dg/torture/movigeu.c: New test.
>         * gcc.dg/torture/movigt.c: New test.
>         * gcc.dg/torture/movigtu.c: New test.
>         * gcc.dg/torture/movile.c: New test.
>         * gcc.dg/torture/movileu.c: New test.
>         * gcc.dg/torture/movilt.c: New test.
>         * gcc.dg/torture/moviltu.c: New test.
>         * gcc.dg/torture/movine.c: New test.
>         * gcc.dg/torture/movleq.c: New test.
>         * gcc.dg/torture/movlfeq.c: New test.
>         * gcc.dg/torture/movlfge.c: New test.
>         * gcc.dg/torture/movlfgt.c: New test.
>         * gcc.dg/torture/movlfle.c: New test.
>         * gcc.dg/torture/movlflt.c: New test.
>         * gcc.dg/torture/movlfne.c: New test.
>         * gcc.dg/torture/movlge.c: New test.
>         * gcc.dg/torture/movlgeu.c: New test.
>         * gcc.dg/torture/movlgt.c: New test.
>         * gcc.dg/torture/movlgtu.c: New test.
>         * gcc.dg/torture/movlle.c: New test.
>         * gcc.dg/torture/movlleu.c: New test.
>         * gcc.dg/torture/movllt.c: New test.
>         * gcc.dg/torture/movlltu.c: New test.
>         * gcc.dg/torture/movlne.c: New test.
> ---
>  gcc/testsuite/gcc.dg/torture/addieq.c  |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/addifeq.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/addifge.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/addifgt.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/addifle.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/addiflt.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/addifne.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/addige.c  |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/addigeu.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/addigt.c  |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/addigtu.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/addile.c  |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/addileu.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/addilt.c  |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/addiltu.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/addine.c  |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/addleq.c  |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/addlfeq.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/addlfge.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/addlfgt.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/addlfle.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/addlflt.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/addlfne.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/addlge.c  |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/addlgeu.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/addlgt.c  |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/addlgtu.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/addlle.c  |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/addlleu.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/addllt.c  |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/addlltu.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/addlne.c  |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/movieq.c  |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/movifeq.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/movifge.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/movifgt.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/movifle.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/moviflt.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/movifne.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/movige.c  |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/movigeu.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/movigt.c  |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/movigtu.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/movile.c  |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/movileu.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/movilt.c  |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/moviltu.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/movine.c  |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/movleq.c  |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/movlfeq.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/movlfge.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/movlfgt.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/movlfle.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/movlflt.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/movlfne.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/movlge.c  |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/movlgeu.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/movlgt.c  |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/movlgtu.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/movlle.c  |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/movlleu.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/movllt.c  |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/movlltu.c |   31 +++++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.dg/torture/movlne.c  |   31 +++++++++++++++++++++++++++++++
>  64 files changed, 1984 insertions(+)
>
> gcc-test-movcc.diff
> Index: gcc/gcc/testsuite/gcc.dg/torture/addieq.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/addieq.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef int int_t;
> +
> +__attribute__ ((noinline)) int_t
> +addieq (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w == x ? y + z : y;
> +}
> +
> +int
> +main (void)
> +{
> +  if (addieq (-1, -1, 12, 23) != 35)
> +    return 1;
> +  if (addieq (-1, 3, 12, 23) != 12)
> +    return 1;
> +  if (addieq (1, 3, 12, 23) != 12)
> +    return 1;
> +  if (addieq (3, 3, 12, 23) != 35)
> +    return 1;
> +  if (addieq (5, 3, 12, 23) != 12)
> +    return 1;
> +  if (addieq (3, -1, 12, 23) != 12)
> +    return 1;
> +  if (addieq (3, 1, 12, 23) != 12)
> +    return 1;
> +  if (addieq (3, 5, 12, 23) != 12)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/addifeq.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/addifeq.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef int int_t;
> +
> +__attribute__ ((noinline)) int_t
> +addifeq (double w, double x, int_t y, int_t z)
> +{
> +  return w == x ? y + z : y;
> +}
> +
> +int
> +main (void)
> +{
> +  if (addifeq (-1.0, -1.0, 12, 23) != 35)
> +    return 1;
> +  if (addifeq (-1.0, 3.0, 12, 23) != 12)
> +    return 1;
> +  if (addifeq (1.0, 3.0, 12, 23) != 12)
> +    return 1;
> +  if (addifeq (3.0, 3.0, 12, 23) != 35)
> +    return 1;
> +  if (addifeq (5.0, 3.0, 12, 23) != 12)
> +    return 1;
> +  if (addifeq (3.0, -1.0, 12, 23) != 12)
> +    return 1;
> +  if (addifeq (3.0, 1.0, 12, 23) != 12)
> +    return 1;
> +  if (addifeq (3.0, 5.0, 12, 23) != 12)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/addifge.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/addifge.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef int int_t;
> +
> +__attribute__ ((noinline)) int_t
> +addifge (double w, double x, int_t y, int_t z)
> +{
> +  return w >= x ? y + z : y;
> +}
> +
> +int
> +main (void)
> +{
> +  if (addifge (-1.0, -1.0, 12, 23) != 35)
> +    return 1;
> +  if (addifge (-1.0, 3.0, 12, 23) != 12)
> +    return 1;
> +  if (addifge (1.0, 3.0, 12, 23) != 12)
> +    return 1;
> +  if (addifge (3.0, 3.0, 12, 23) != 35)
> +    return 1;
> +  if (addifge (5.0, 3.0, 12, 23) != 35)
> +    return 1;
> +  if (addifge (3.0, -1.0, 12, 23) != 35)
> +    return 1;
> +  if (addifge (3.0, 1.0, 12, 23) != 35)
> +    return 1;
> +  if (addifge (3.0, 5.0, 12, 23) != 12)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/addifgt.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/addifgt.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef int int_t;
> +
> +__attribute__ ((noinline)) int_t
> +addifgt (double w, double x, int_t y, int_t z)
> +{
> +  return w > x ? y + z : y;
> +}
> +
> +int
> +main (void)
> +{
> +  if (addifgt (-1.0, -1.0, 12, 23) != 12)
> +    return 1;
> +  if (addifgt (-1.0, 3.0, 12, 23) != 12)
> +    return 1;
> +  if (addifgt (1.0, 3.0, 12, 23) != 12)
> +    return 1;
> +  if (addifgt (3.0, 3.0, 12, 23) != 12)
> +    return 1;
> +  if (addifgt (5.0, 3.0, 12, 23) != 35)
> +    return 1;
> +  if (addifgt (3.0, -1.0, 12, 23) != 35)
> +    return 1;
> +  if (addifgt (3.0, 1.0, 12, 23) != 35)
> +    return 1;
> +  if (addifgt (3.0, 5.0, 12, 23) != 12)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/addifle.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/addifle.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef int int_t;
> +
> +__attribute__ ((noinline)) int_t
> +addifle (double w, double x, int_t y, int_t z)
> +{
> +  return w <= x ? y + z : y;
> +}
> +
> +int
> +main (void)
> +{
> +  if (addifle (-1.0, -1.0, 12, 23) != 35)
> +    return 1;
> +  if (addifle (-1.0, 3.0, 12, 23) != 35)
> +    return 1;
> +  if (addifle (1.0, 3.0, 12, 23) != 35)
> +    return 1;
> +  if (addifle (3.0, 3.0, 12, 23) != 35)
> +    return 1;
> +  if (addifle (5.0, 3.0, 12, 23) != 12)
> +    return 1;
> +  if (addifle (3.0, -1.0, 12, 23) != 12)
> +    return 1;
> +  if (addifle (3.0, 1.0, 12, 23) != 12)
> +    return 1;
> +  if (addifle (3.0, 5.0, 12, 23) != 35)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/addiflt.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/addiflt.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef int int_t;
> +
> +__attribute__ ((noinline)) int_t
> +addiflt (double w, double x, int_t y, int_t z)
> +{
> +  return w < x ? y + z : y;
> +}
> +
> +int
> +main (void)
> +{
> +  if (addiflt (-1.0, -1.0, 12, 23) != 12)
> +    return 1;
> +  if (addiflt (-1.0, 3.0, 12, 23) != 35)
> +    return 1;
> +  if (addiflt (1.0, 3.0, 12, 23) != 35)
> +    return 1;
> +  if (addiflt (3.0, 3.0, 12, 23) != 12)
> +    return 1;
> +  if (addiflt (5.0, 3.0, 12, 23) != 12)
> +    return 1;
> +  if (addiflt (3.0, -1.0, 12, 23) != 12)
> +    return 1;
> +  if (addiflt (3.0, 1.0, 12, 23) != 12)
> +    return 1;
> +  if (addiflt (3.0, 5.0, 12, 23) != 35)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/addifne.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/addifne.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef int int_t;
> +
> +__attribute__ ((noinline)) int_t
> +addifne (double w, double x, int_t y, int_t z)
> +{
> +  return w != x ? y + z : y;
> +}
> +
> +int
> +main (void)
> +{
> +  if (addifne (-1.0, -1.0, 12, 23) != 12)
> +    return 1;
> +  if (addifne (-1.0, 3.0, 12, 23) != 35)
> +    return 1;
> +  if (addifne (1.0, 3.0, 12, 23) != 35)
> +    return 1;
> +  if (addifne (3.0, 3.0, 12, 23) != 12)
> +    return 1;
> +  if (addifne (5.0, 3.0, 12, 23) != 35)
> +    return 1;
> +  if (addifne (3.0, -1.0, 12, 23) != 35)
> +    return 1;
> +  if (addifne (3.0, 1.0, 12, 23) != 35)
> +    return 1;
> +  if (addifne (3.0, 5.0, 12, 23) != 35)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/addige.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/addige.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef int int_t;
> +
> +__attribute__ ((noinline)) int_t
> +addige (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w >= x ? y + z : y;
> +}
> +
> +int
> +main (void)
> +{
> +  if (addige (-1, -1, 12, 23) != 35)
> +    return 1;
> +  if (addige (-1, 3, 12, 23) != 12)
> +    return 1;
> +  if (addige (1, 3, 12, 23) != 12)
> +    return 1;
> +  if (addige (3, 3, 12, 23) != 35)
> +    return 1;
> +  if (addige (5, 3, 12, 23) != 35)
> +    return 1;
> +  if (addige (3, -1, 12, 23) != 35)
> +    return 1;
> +  if (addige (3, 1, 12, 23) != 35)
> +    return 1;
> +  if (addige (3, 5, 12, 23) != 12)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/addigeu.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/addigeu.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef unsigned int int_t;
> +
> +__attribute__ ((noinline)) int_t
> +addigeu (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w >= x ? y + z : y;
> +}
> +
> +int
> +main (void)
> +{
> +  if (addigeu (-1, -1, 12, 23) != 35)
> +    return 1;
> +  if (addigeu (-1, 3, 12, 23) != 35)
> +    return 1;
> +  if (addigeu (1, 3, 12, 23) != 12)
> +    return 1;
> +  if (addigeu (3, 3, 12, 23) != 35)
> +    return 1;
> +  if (addigeu (5, 3, 12, 23) != 35)
> +    return 1;
> +  if (addigeu (3, -1, 12, 23) != 12)
> +    return 1;
> +  if (addigeu (3, 1, 12, 23) != 35)
> +    return 1;
> +  if (addigeu (3, 5, 12, 23) != 12)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/addigt.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/addigt.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef int int_t;
> +
> +__attribute__ ((noinline)) int_t
> +addigt (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w > x ? y + z : y;
> +}
> +
> +int
> +main (void)
> +{
> +  if (addigt (-1, -1, 12, 23) != 12)
> +    return 1;
> +  if (addigt (-1, 3, 12, 23) != 12)
> +    return 1;
> +  if (addigt (1, 3, 12, 23) != 12)
> +    return 1;
> +  if (addigt (3, 3, 12, 23) != 12)
> +    return 1;
> +  if (addigt (5, 3, 12, 23) != 35)
> +    return 1;
> +  if (addigt (3, -1, 12, 23) != 35)
> +    return 1;
> +  if (addigt (3, 1, 12, 23) != 35)
> +    return 1;
> +  if (addigt (3, 5, 12, 23) != 12)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/addigtu.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/addigtu.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef unsigned int int_t;
> +
> +__attribute__ ((noinline)) int_t
> +addigtu (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w > x ? y + z : y;
> +}
> +
> +int
> +main (void)
> +{
> +  if (addigtu (-1, -1, 12, 23) != 12)
> +    return 1;
> +  if (addigtu (-1, 3, 12, 23) != 35)
> +    return 1;
> +  if (addigtu (1, 3, 12, 23) != 12)
> +    return 1;
> +  if (addigtu (3, 3, 12, 23) != 12)
> +    return 1;
> +  if (addigtu (5, 3, 12, 23) != 35)
> +    return 1;
> +  if (addigtu (3, -1, 12, 23) != 12)
> +    return 1;
> +  if (addigtu (3, 1, 12, 23) != 35)
> +    return 1;
> +  if (addigtu (3, 5, 12, 23) != 12)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/addile.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/addile.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef int int_t;
> +
> +__attribute__ ((noinline)) int_t
> +addile (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w <= x ? y + z : y;
> +}
> +
> +int
> +main (void)
> +{
> +  if (addile (-1, -1, 12, 23) != 35)
> +    return 1;
> +  if (addile (-1, 3, 12, 23) != 35)
> +    return 1;
> +  if (addile (1, 3, 12, 23) != 35)
> +    return 1;
> +  if (addile (3, 3, 12, 23) != 35)
> +    return 1;
> +  if (addile (5, 3, 12, 23) != 12)
> +    return 1;
> +  if (addile (3, -1, 12, 23) != 12)
> +    return 1;
> +  if (addile (3, 1, 12, 23) != 12)
> +    return 1;
> +  if (addile (3, 5, 12, 23) != 35)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/addileu.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/addileu.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef unsigned int int_t;
> +
> +__attribute__ ((noinline)) int_t
> +addileu (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w <= x ? y + z : y;
> +}
> +
> +int
> +main (void)
> +{
> +  if (addileu (-1, -1, 12, 23) != 35)
> +    return 1;
> +  if (addileu (-1, 3, 12, 23) != 12)
> +    return 1;
> +  if (addileu (1, 3, 12, 23) != 35)
> +    return 1;
> +  if (addileu (3, 3, 12, 23) != 35)
> +    return 1;
> +  if (addileu (5, 3, 12, 23) != 12)
> +    return 1;
> +  if (addileu (3, -1, 12, 23) != 35)
> +    return 1;
> +  if (addileu (3, 1, 12, 23) != 12)
> +    return 1;
> +  if (addileu (3, 5, 12, 23) != 35)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/addilt.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/addilt.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef int int_t;
> +
> +__attribute__ ((noinline)) int_t
> +addilt (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w < x ? y + z : y;
> +}
> +
> +int
> +main (void)
> +{
> +  if (addilt (-1, -1, 12, 23) != 12)
> +    return 1;
> +  if (addilt (-1, 3, 12, 23) != 35)
> +    return 1;
> +  if (addilt (1, 3, 12, 23) != 35)
> +    return 1;
> +  if (addilt (3, 3, 12, 23) != 12)
> +    return 1;
> +  if (addilt (5, 3, 12, 23) != 12)
> +    return 1;
> +  if (addilt (3, -1, 12, 23) != 12)
> +    return 1;
> +  if (addilt (3, 1, 12, 23) != 12)
> +    return 1;
> +  if (addilt (3, 5, 12, 23) != 35)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/addiltu.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/addiltu.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef unsigned int int_t;
> +
> +__attribute__ ((noinline)) int_t
> +addiltu (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w < x ? y + z : y;
> +}
> +
> +int
> +main (void)
> +{
> +  if (addiltu (-1, -1, 12, 23) != 12)
> +    return 1;
> +  if (addiltu (-1, 3, 12, 23) != 12)
> +    return 1;
> +  if (addiltu (1, 3, 12, 23) != 35)
> +    return 1;
> +  if (addiltu (3, 3, 12, 23) != 12)
> +    return 1;
> +  if (addiltu (5, 3, 12, 23) != 12)
> +    return 1;
> +  if (addiltu (3, -1, 12, 23) != 35)
> +    return 1;
> +  if (addiltu (3, 1, 12, 23) != 12)
> +    return 1;
> +  if (addiltu (3, 5, 12, 23) != 35)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/addine.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/addine.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef int int_t;
> +
> +__attribute__ ((noinline)) int_t
> +addine (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w != x ? y + z : y;
> +}
> +
> +int
> +main (void)
> +{
> +  if (addine (-1, -1, 12, 23) != 12)
> +    return 1;
> +  if (addine (-1, 3, 12, 23) != 35)
> +    return 1;
> +  if (addine (1, 3, 12, 23) != 35)
> +    return 1;
> +  if (addine (3, 3, 12, 23) != 12)
> +    return 1;
> +  if (addine (5, 3, 12, 23) != 35)
> +    return 1;
> +  if (addine (3, -1, 12, 23) != 35)
> +    return 1;
> +  if (addine (3, 1, 12, 23) != 35)
> +    return 1;
> +  if (addine (3, 5, 12, 23) != 35)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/addleq.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/addleq.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef long int_t;
> +
> +__attribute__ ((noinline)) int_t
> +addleq (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w == x ? y + z : y;
> +}
> +
> +int
> +main (void)
> +{
> +  if (addleq (-1L, -1L, 12L, 23L) != 35L)
> +    return 1;
> +  if (addleq (-1L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (addleq (1L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (addleq (3L, 3L, 12L, 23L) != 35L)
> +    return 1;
> +  if (addleq (5L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (addleq (3L, -1L, 12L, 23L) != 12L)
> +    return 1;
> +  if (addleq (3L, 1L, 12L, 23L) != 12L)
> +    return 1;
> +  if (addleq (3L, 5L, 12L, 23L) != 12L)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/addlfeq.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/addlfeq.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef long int_t;
> +
> +__attribute__ ((noinline)) int_t
> +addlfeq (double w, double x, int_t y, int_t z)
> +{
> +  return w == x ? y + z : y;
> +}
> +
> +int
> +main (void)
> +{
> +  if (addlfeq (-1.0, -1.0, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlfeq (-1.0, 3.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlfeq (1.0, 3.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlfeq (3.0, 3.0, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlfeq (5.0, 3.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlfeq (3.0, -1.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlfeq (3.0, 1.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlfeq (3.0, 5.0, 12L, 23L) != 12L)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/addlfge.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/addlfge.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef long int_t;
> +
> +__attribute__ ((noinline)) int_t
> +addlfge (double w, double x, int_t y, int_t z)
> +{
> +  return w >= x ? y + z : y;
> +}
> +
> +int
> +main (void)
> +{
> +  if (addlfge (-1.0, -1.0, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlfge (-1.0, 3.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlfge (1.0, 3.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlfge (3.0, 3.0, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlfge (5.0, 3.0, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlfge (3.0, -1.0, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlfge (3.0, 1.0, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlfge (3.0, 5.0, 12L, 23L) != 12L)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/addlfgt.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/addlfgt.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef long int_t;
> +
> +__attribute__ ((noinline)) int_t
> +addlfgt (double w, double x, int_t y, int_t z)
> +{
> +  return w > x ? y + z : y;
> +}
> +
> +int
> +main (void)
> +{
> +  if (addlfgt (-1.0, -1.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlfgt (-1.0, 3.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlfgt (1.0, 3.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlfgt (3.0, 3.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlfgt (5.0, 3.0, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlfgt (3.0, -1.0, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlfgt (3.0, 1.0, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlfgt (3.0, 5.0, 12L, 23L) != 12L)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/addlfle.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/addlfle.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef long int_t;
> +
> +__attribute__ ((noinline)) int_t
> +addlfle (double w, double x, int_t y, int_t z)
> +{
> +  return w <= x ? y + z : y;
> +}
> +
> +int
> +main (void)
> +{
> +  if (addlfle (-1.0, -1.0, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlfle (-1.0, 3.0, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlfle (1.0, 3.0, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlfle (3.0, 3.0, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlfle (5.0, 3.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlfle (3.0, -1.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlfle (3.0, 1.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlfle (3.0, 5.0, 12L, 23L) != 35L)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/addlflt.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/addlflt.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef long int_t;
> +
> +__attribute__ ((noinline)) int_t
> +addlflt (double w, double x, int_t y, int_t z)
> +{
> +  return w < x ? y + z : y;
> +}
> +
> +int
> +main (void)
> +{
> +  if (addlflt (-1.0, -1.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlflt (-1.0, 3.0, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlflt (1.0, 3.0, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlflt (3.0, 3.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlflt (5.0, 3.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlflt (3.0, -1.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlflt (3.0, 1.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlflt (3.0, 5.0, 12L, 23L) != 35L)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/addlfne.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/addlfne.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef long int_t;
> +
> +__attribute__ ((noinline)) int_t
> +addlfne (double w, double x, int_t y, int_t z)
> +{
> +  return w != x ? y + z : y;
> +}
> +
> +int
> +main (void)
> +{
> +  if (addlfne (-1.0, -1.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlfne (-1.0, 3.0, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlfne (1.0, 3.0, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlfne (3.0, 3.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlfne (5.0, 3.0, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlfne (3.0, -1.0, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlfne (3.0, 1.0, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlfne (3.0, 5.0, 12L, 23L) != 35L)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/addlge.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/addlge.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef long int_t;
> +
> +__attribute__ ((noinline)) int_t
> +addlge (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w >= x ? y + z : y;
> +}
> +
> +int
> +main (void)
> +{
> +  if (addlge (-1L, -1L, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlge (-1L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlge (1L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlge (3L, 3L, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlge (5L, 3L, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlge (3L, -1L, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlge (3L, 1L, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlge (3L, 5L, 12L, 23L) != 12L)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/addlgeu.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/addlgeu.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef unsigned long int_t;
> +
> +__attribute__ ((noinline)) int_t
> +addlgeu (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w >= x ? y + z : y;
> +}
> +
> +int
> +main (void)
> +{
> +  if (addlgeu (-1L, -1L, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlgeu (-1L, 3L, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlgeu (1L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlgeu (3L, 3L, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlgeu (5L, 3L, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlgeu (3L, -1L, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlgeu (3L, 1L, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlgeu (3L, 5L, 12L, 23L) != 12L)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/addlgt.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/addlgt.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef long int_t;
> +
> +__attribute__ ((noinline)) int_t
> +addlgt (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w > x ? y + z : y;
> +}
> +
> +int
> +main (void)
> +{
> +  if (addlgt (-1L, -1L, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlgt (-1L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlgt (1L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlgt (3L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlgt (5L, 3L, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlgt (3L, -1L, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlgt (3L, 1L, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlgt (3L, 5L, 12L, 23L) != 12L)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/addlgtu.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/addlgtu.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef unsigned long int_t;
> +
> +__attribute__ ((noinline)) int_t
> +addlgtu (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w > x ? y + z : y;
> +}
> +
> +int
> +main (void)
> +{
> +  if (addlgtu (-1L, -1L, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlgtu (-1L, 3L, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlgtu (1L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlgtu (3L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlgtu (5L, 3L, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlgtu (3L, -1L, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlgtu (3L, 1L, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlgtu (3L, 5L, 12L, 23L) != 12L)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/addlle.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/addlle.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef long int_t;
> +
> +__attribute__ ((noinline)) int_t
> +addlle (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w <= x ? y + z : y;
> +}
> +
> +int
> +main (void)
> +{
> +  if (addlle (-1L, -1L, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlle (-1L, 3L, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlle (1L, 3L, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlle (3L, 3L, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlle (5L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlle (3L, -1L, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlle (3L, 1L, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlle (3L, 5L, 12L, 23L) != 35L)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/addlleu.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/addlleu.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef unsigned long int_t;
> +
> +__attribute__ ((noinline)) int_t
> +addlleu (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w <= x ? y + z : y;
> +}
> +
> +int
> +main (void)
> +{
> +  if (addlleu (-1L, -1L, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlleu (-1L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlleu (1L, 3L, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlleu (3L, 3L, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlleu (5L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlleu (3L, -1L, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlleu (3L, 1L, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlleu (3L, 5L, 12L, 23L) != 35L)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/addllt.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/addllt.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef long int_t;
> +
> +__attribute__ ((noinline)) int_t
> +addllt (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w < x ? y + z : y;
> +}
> +
> +int
> +main (void)
> +{
> +  if (addllt (-1L, -1L, 12L, 23L) != 12L)
> +    return 1;
> +  if (addllt (-1L, 3L, 12L, 23L) != 35L)
> +    return 1;
> +  if (addllt (1L, 3L, 12L, 23L) != 35L)
> +    return 1;
> +  if (addllt (3L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (addllt (5L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (addllt (3L, -1L, 12L, 23L) != 12L)
> +    return 1;
> +  if (addllt (3L, 1L, 12L, 23L) != 12L)
> +    return 1;
> +  if (addllt (3L, 5L, 12L, 23L) != 35L)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/addlltu.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/addlltu.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef unsigned long int_t;
> +
> +__attribute__ ((noinline)) int_t
> +addlltu (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w < x ? y + z : y;
> +}
> +
> +int
> +main (void)
> +{
> +  if (addlltu (-1L, -1L, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlltu (-1L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlltu (1L, 3L, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlltu (3L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlltu (5L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlltu (3L, -1L, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlltu (3L, 1L, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlltu (3L, 5L, 12L, 23L) != 35L)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/addlne.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/addlne.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef long int_t;
> +
> +__attribute__ ((noinline)) int_t
> +addlne (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w != x ? y + z : y;
> +}
> +
> +int
> +main (void)
> +{
> +  if (addlne (-1L, -1L, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlne (-1L, 3L, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlne (1L, 3L, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlne (3L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (addlne (5L, 3L, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlne (3L, -1L, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlne (3L, 1L, 12L, 23L) != 35L)
> +    return 1;
> +  if (addlne (3L, 5L, 12L, 23L) != 35L)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/movieq.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/movieq.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef int int_t;
> +
> +__attribute__ ((noinline)) int_t
> +movieq (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w == x ? y : z;
> +}
> +
> +int
> +main (void)
> +{
> +  if (movieq (-1, -1, 12, 23) != 12)
> +    return 1;
> +  if (movieq (-1, 3, 12, 23) != 23)
> +    return 1;
> +  if (movieq (1, 3, 12, 23) != 23)
> +    return 1;
> +  if (movieq (3, 3, 12, 23) != 12)
> +    return 1;
> +  if (movieq (5, 3, 12, 23) != 23)
> +    return 1;
> +  if (movieq (3, -1, 12, 23) != 23)
> +    return 1;
> +  if (movieq (3, 1, 12, 23) != 23)
> +    return 1;
> +  if (movieq (3, 5, 12, 23) != 23)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/movifeq.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/movifeq.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef int int_t;
> +
> +__attribute__ ((noinline)) int_t
> +movifeq (double w, double x, int_t y, int_t z)
> +{
> +  return w == x ? y : z;
> +}
> +
> +int
> +main (void)
> +{
> +  if (movifeq (-1.0, -1.0, 12, 23) != 12)
> +    return 1;
> +  if (movifeq (-1.0, 3.0, 12, 23) != 23)
> +    return 1;
> +  if (movifeq (1.0, 3.0, 12, 23) != 23)
> +    return 1;
> +  if (movifeq (3.0, 3.0, 12, 23) != 12)
> +    return 1;
> +  if (movifeq (5.0, 3.0, 12, 23) != 23)
> +    return 1;
> +  if (movifeq (3.0, -1.0, 12, 23) != 23)
> +    return 1;
> +  if (movifeq (3.0, 1.0, 12, 23) != 23)
> +    return 1;
> +  if (movifeq (3.0, 5.0, 12, 23) != 23)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/movifge.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/movifge.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef int int_t;
> +
> +__attribute__ ((noinline)) int_t
> +movifge (double w, double x, int_t y, int_t z)
> +{
> +  return w >= x ? y : z;
> +}
> +
> +int
> +main (void)
> +{
> +  if (movifge (-1.0, -1.0, 12, 23) != 12)
> +    return 1;
> +  if (movifge (-1.0, 3.0, 12, 23) != 23)
> +    return 1;
> +  if (movifge (1.0, 3.0, 12, 23) != 23)
> +    return 1;
> +  if (movifge (3.0, 3.0, 12, 23) != 12)
> +    return 1;
> +  if (movifge (5.0, 3.0, 12, 23) != 12)
> +    return 1;
> +  if (movifge (3.0, -1.0, 12, 23) != 12)
> +    return 1;
> +  if (movifge (3.0, 1.0, 12, 23) != 12)
> +    return 1;
> +  if (movifge (3.0, 5.0, 12, 23) != 23)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/movifgt.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/movifgt.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef int int_t;
> +
> +__attribute__ ((noinline)) int_t
> +movifgt (double w, double x, int_t y, int_t z)
> +{
> +  return w > x ? y : z;
> +}
> +
> +int
> +main (void)
> +{
> +  if (movifgt (-1.0, -1.0, 12, 23) != 23)
> +    return 1;
> +  if (movifgt (-1.0, 3.0, 12, 23) != 23)
> +    return 1;
> +  if (movifgt (1.0, 3.0, 12, 23) != 23)
> +    return 1;
> +  if (movifgt (3.0, 3.0, 12, 23) != 23)
> +    return 1;
> +  if (movifgt (5.0, 3.0, 12, 23) != 12)
> +    return 1;
> +  if (movifgt (3.0, -1.0, 12, 23) != 12)
> +    return 1;
> +  if (movifgt (3.0, 1.0, 12, 23) != 12)
> +    return 1;
> +  if (movifgt (3.0, 5.0, 12, 23) != 23)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/movifle.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/movifle.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef int int_t;
> +
> +__attribute__ ((noinline)) int_t
> +movifle (double w, double x, int_t y, int_t z)
> +{
> +  return w <= x ? y : z;
> +}
> +
> +int
> +main (void)
> +{
> +  if (movifle (-1.0, -1.0, 12, 23) != 12)
> +    return 1;
> +  if (movifle (-1.0, 3.0, 12, 23) != 12)
> +    return 1;
> +  if (movifle (1.0, 3.0, 12, 23) != 12)
> +    return 1;
> +  if (movifle (3.0, 3.0, 12, 23) != 12)
> +    return 1;
> +  if (movifle (5.0, 3.0, 12, 23) != 23)
> +    return 1;
> +  if (movifle (3.0, -1.0, 12, 23) != 23)
> +    return 1;
> +  if (movifle (3.0, 1.0, 12, 23) != 23)
> +    return 1;
> +  if (movifle (3.0, 5.0, 12, 23) != 12)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/moviflt.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/moviflt.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef int int_t;
> +
> +__attribute__ ((noinline)) int_t
> +moviflt (double w, double x, int_t y, int_t z)
> +{
> +  return w < x ? y : z;
> +}
> +
> +int
> +main (void)
> +{
> +  if (moviflt (-1.0, -1.0, 12, 23) != 23)
> +    return 1;
> +  if (moviflt (-1.0, 3.0, 12, 23) != 12)
> +    return 1;
> +  if (moviflt (1.0, 3.0, 12, 23) != 12)
> +    return 1;
> +  if (moviflt (3.0, 3.0, 12, 23) != 23)
> +    return 1;
> +  if (moviflt (5.0, 3.0, 12, 23) != 23)
> +    return 1;
> +  if (moviflt (3.0, -1.0, 12, 23) != 23)
> +    return 1;
> +  if (moviflt (3.0, 1.0, 12, 23) != 23)
> +    return 1;
> +  if (moviflt (3.0, 5.0, 12, 23) != 12)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/movifne.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/movifne.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef int int_t;
> +
> +__attribute__ ((noinline)) int_t
> +movifne (double w, double x, int_t y, int_t z)
> +{
> +  return w != x ? y : z;
> +}
> +
> +int
> +main (void)
> +{
> +  if (movifne (-1.0, -1.0, 12, 23) != 23)
> +    return 1;
> +  if (movifne (-1.0, 3.0, 12, 23) != 12)
> +    return 1;
> +  if (movifne (1.0, 3.0, 12, 23) != 12)
> +    return 1;
> +  if (movifne (3.0, 3.0, 12, 23) != 23)
> +    return 1;
> +  if (movifne (5.0, 3.0, 12, 23) != 12)
> +    return 1;
> +  if (movifne (3.0, -1.0, 12, 23) != 12)
> +    return 1;
> +  if (movifne (3.0, 1.0, 12, 23) != 12)
> +    return 1;
> +  if (movifne (3.0, 5.0, 12, 23) != 12)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/movige.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/movige.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef int int_t;
> +
> +__attribute__ ((noinline)) int_t
> +movige (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w >= x ? y : z;
> +}
> +
> +int
> +main (void)
> +{
> +  if (movige (-1, -1, 12, 23) != 12)
> +    return 1;
> +  if (movige (-1, 3, 12, 23) != 23)
> +    return 1;
> +  if (movige (1, 3, 12, 23) != 23)
> +    return 1;
> +  if (movige (3, 3, 12, 23) != 12)
> +    return 1;
> +  if (movige (5, 3, 12, 23) != 12)
> +    return 1;
> +  if (movige (3, -1, 12, 23) != 12)
> +    return 1;
> +  if (movige (3, 1, 12, 23) != 12)
> +    return 1;
> +  if (movige (3, 5, 12, 23) != 23)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/movigeu.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/movigeu.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef unsigned int int_t;
> +
> +__attribute__ ((noinline)) int_t
> +movigeu (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w >= x ? y : z;
> +}
> +
> +int
> +main (void)
> +{
> +  if (movigeu (-1, -1, 12, 23) != 12)
> +    return 1;
> +  if (movigeu (-1, 3, 12, 23) != 12)
> +    return 1;
> +  if (movigeu (1, 3, 12, 23) != 23)
> +    return 1;
> +  if (movigeu (3, 3, 12, 23) != 12)
> +    return 1;
> +  if (movigeu (5, 3, 12, 23) != 12)
> +    return 1;
> +  if (movigeu (3, -1, 12, 23) != 23)
> +    return 1;
> +  if (movigeu (3, 1, 12, 23) != 12)
> +    return 1;
> +  if (movigeu (3, 5, 12, 23) != 23)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/movigt.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/movigt.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef int int_t;
> +
> +__attribute__ ((noinline)) int_t
> +movigt (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w > x ? y : z;
> +}
> +
> +int
> +main (void)
> +{
> +  if (movigt (-1, -1, 12, 23) != 23)
> +    return 1;
> +  if (movigt (-1, 3, 12, 23) != 23)
> +    return 1;
> +  if (movigt (1, 3, 12, 23) != 23)
> +    return 1;
> +  if (movigt (3, 3, 12, 23) != 23)
> +    return 1;
> +  if (movigt (5, 3, 12, 23) != 12)
> +    return 1;
> +  if (movigt (3, -1, 12, 23) != 12)
> +    return 1;
> +  if (movigt (3, 1, 12, 23) != 12)
> +    return 1;
> +  if (movigt (3, 5, 12, 23) != 23)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/movigtu.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/movigtu.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef unsigned int int_t;
> +
> +__attribute__ ((noinline)) int_t
> +movigtu (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w > x ? y : z;
> +}
> +
> +int
> +main (void)
> +{
> +  if (movigtu (-1, -1, 12, 23) != 23)
> +    return 1;
> +  if (movigtu (-1, 3, 12, 23) != 12)
> +    return 1;
> +  if (movigtu (1, 3, 12, 23) != 23)
> +    return 1;
> +  if (movigtu (3, 3, 12, 23) != 23)
> +    return 1;
> +  if (movigtu (5, 3, 12, 23) != 12)
> +    return 1;
> +  if (movigtu (3, -1, 12, 23) != 23)
> +    return 1;
> +  if (movigtu (3, 1, 12, 23) != 12)
> +    return 1;
> +  if (movigtu (3, 5, 12, 23) != 23)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/movile.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/movile.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef int int_t;
> +
> +__attribute__ ((noinline)) int_t
> +movile (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w <= x ? y : z;
> +}
> +
> +int
> +main (void)
> +{
> +  if (movile (-1, -1, 12, 23) != 12)
> +    return 1;
> +  if (movile (-1, 3, 12, 23) != 12)
> +    return 1;
> +  if (movile (1, 3, 12, 23) != 12)
> +    return 1;
> +  if (movile (3, 3, 12, 23) != 12)
> +    return 1;
> +  if (movile (5, 3, 12, 23) != 23)
> +    return 1;
> +  if (movile (3, -1, 12, 23) != 23)
> +    return 1;
> +  if (movile (3, 1, 12, 23) != 23)
> +    return 1;
> +  if (movile (3, 5, 12, 23) != 12)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/movileu.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/movileu.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef unsigned int int_t;
> +
> +__attribute__ ((noinline)) int_t
> +movileu (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w <= x ? y : z;
> +}
> +
> +int
> +main (void)
> +{
> +  if (movileu (-1, -1, 12, 23) != 12)
> +    return 1;
> +  if (movileu (-1, 3, 12, 23) != 23)
> +    return 1;
> +  if (movileu (1, 3, 12, 23) != 12)
> +    return 1;
> +  if (movileu (3, 3, 12, 23) != 12)
> +    return 1;
> +  if (movileu (5, 3, 12, 23) != 23)
> +    return 1;
> +  if (movileu (3, -1, 12, 23) != 12)
> +    return 1;
> +  if (movileu (3, 1, 12, 23) != 23)
> +    return 1;
> +  if (movileu (3, 5, 12, 23) != 12)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/movilt.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/movilt.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef int int_t;
> +
> +__attribute__ ((noinline)) int_t
> +movilt (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w < x ? y : z;
> +}
> +
> +int
> +main (void)
> +{
> +  if (movilt (-1, -1, 12, 23) != 23)
> +    return 1;
> +  if (movilt (-1, 3, 12, 23) != 12)
> +    return 1;
> +  if (movilt (1, 3, 12, 23) != 12)
> +    return 1;
> +  if (movilt (3, 3, 12, 23) != 23)
> +    return 1;
> +  if (movilt (5, 3, 12, 23) != 23)
> +    return 1;
> +  if (movilt (3, -1, 12, 23) != 23)
> +    return 1;
> +  if (movilt (3, 1, 12, 23) != 23)
> +    return 1;
> +  if (movilt (3, 5, 12, 23) != 12)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/moviltu.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/moviltu.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef unsigned int int_t;
> +
> +__attribute__ ((noinline)) int_t
> +moviltu (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w < x ? y : z;
> +}
> +
> +int
> +main (void)
> +{
> +  if (moviltu (-1, -1, 12, 23) != 23)
> +    return 1;
> +  if (moviltu (-1, 3, 12, 23) != 23)
> +    return 1;
> +  if (moviltu (1, 3, 12, 23) != 12)
> +    return 1;
> +  if (moviltu (3, 3, 12, 23) != 23)
> +    return 1;
> +  if (moviltu (5, 3, 12, 23) != 23)
> +    return 1;
> +  if (moviltu (3, -1, 12, 23) != 12)
> +    return 1;
> +  if (moviltu (3, 1, 12, 23) != 23)
> +    return 1;
> +  if (moviltu (3, 5, 12, 23) != 12)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/movine.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/movine.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef int int_t;
> +
> +__attribute__ ((noinline)) int_t
> +movine (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w != x ? y : z;
> +}
> +
> +int
> +main (void)
> +{
> +  if (movine (-1, -1, 12, 23) != 23)
> +    return 1;
> +  if (movine (-1, 3, 12, 23) != 12)
> +    return 1;
> +  if (movine (1, 3, 12, 23) != 12)
> +    return 1;
> +  if (movine (3, 3, 12, 23) != 23)
> +    return 1;
> +  if (movine (5, 3, 12, 23) != 12)
> +    return 1;
> +  if (movine (3, -1, 12, 23) != 12)
> +    return 1;
> +  if (movine (3, 1, 12, 23) != 12)
> +    return 1;
> +  if (movine (3, 5, 12, 23) != 12)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/movleq.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/movleq.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef long int_t;
> +
> +__attribute__ ((noinline)) int_t
> +movleq (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w == x ? y : z;
> +}
> +
> +int
> +main (void)
> +{
> +  if (movleq (-1L, -1L, 12L, 23L) != 12L)
> +    return 1;
> +  if (movleq (-1L, 3L, 12L, 23L) != 23L)
> +    return 1;
> +  if (movleq (1L, 3L, 12L, 23L) != 23L)
> +    return 1;
> +  if (movleq (3L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (movleq (5L, 3L, 12L, 23L) != 23L)
> +    return 1;
> +  if (movleq (3L, -1L, 12L, 23L) != 23L)
> +    return 1;
> +  if (movleq (3L, 1L, 12L, 23L) != 23L)
> +    return 1;
> +  if (movleq (3L, 5L, 12L, 23L) != 23L)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/movlfeq.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/movlfeq.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef long int_t;
> +
> +__attribute__ ((noinline)) int_t
> +movlfeq (double w, double x, int_t y, int_t z)
> +{
> +  return w == x ? y : z;
> +}
> +
> +int
> +main (void)
> +{
> +  if (movlfeq (-1.0, -1.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlfeq (-1.0, 3.0, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlfeq (1.0, 3.0, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlfeq (3.0, 3.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlfeq (5.0, 3.0, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlfeq (3.0, -1.0, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlfeq (3.0, 1.0, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlfeq (3.0, 5.0, 12L, 23L) != 23L)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/movlfge.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/movlfge.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef long int_t;
> +
> +__attribute__ ((noinline)) int_t
> +movlfge (double w, double x, int_t y, int_t z)
> +{
> +  return w >= x ? y : z;
> +}
> +
> +int
> +main (void)
> +{
> +  if (movlfge (-1.0, -1.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlfge (-1.0, 3.0, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlfge (1.0, 3.0, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlfge (3.0, 3.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlfge (5.0, 3.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlfge (3.0, -1.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlfge (3.0, 1.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlfge (3.0, 5.0, 12L, 23L) != 23L)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/movlfgt.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/movlfgt.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef long int_t;
> +
> +__attribute__ ((noinline)) int_t
> +movlfgt (double w, double x, int_t y, int_t z)
> +{
> +  return w > x ? y : z;
> +}
> +
> +int
> +main (void)
> +{
> +  if (movlfgt (-1.0, -1.0, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlfgt (-1.0, 3.0, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlfgt (1.0, 3.0, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlfgt (3.0, 3.0, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlfgt (5.0, 3.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlfgt (3.0, -1.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlfgt (3.0, 1.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlfgt (3.0, 5.0, 12L, 23L) != 23L)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/movlfle.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/movlfle.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef long int_t;
> +
> +__attribute__ ((noinline)) int_t
> +movlfle (double w, double x, int_t y, int_t z)
> +{
> +  return w <= x ? y : z;
> +}
> +
> +int
> +main (void)
> +{
> +  if (movlfle (-1.0, -1.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlfle (-1.0, 3.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlfle (1.0, 3.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlfle (3.0, 3.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlfle (5.0, 3.0, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlfle (3.0, -1.0, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlfle (3.0, 1.0, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlfle (3.0, 5.0, 12L, 23L) != 12L)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/movlflt.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/movlflt.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef long int_t;
> +
> +__attribute__ ((noinline)) int_t
> +movlflt (double w, double x, int_t y, int_t z)
> +{
> +  return w < x ? y : z;
> +}
> +
> +int
> +main (void)
> +{
> +  if (movlflt (-1.0, -1.0, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlflt (-1.0, 3.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlflt (1.0, 3.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlflt (3.0, 3.0, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlflt (5.0, 3.0, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlflt (3.0, -1.0, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlflt (3.0, 1.0, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlflt (3.0, 5.0, 12L, 23L) != 12L)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/movlfne.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/movlfne.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef long int_t;
> +
> +__attribute__ ((noinline)) int_t
> +movlfne (double w, double x, int_t y, int_t z)
> +{
> +  return w != x ? y : z;
> +}
> +
> +int
> +main (void)
> +{
> +  if (movlfne (-1.0, -1.0, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlfne (-1.0, 3.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlfne (1.0, 3.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlfne (3.0, 3.0, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlfne (5.0, 3.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlfne (3.0, -1.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlfne (3.0, 1.0, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlfne (3.0, 5.0, 12L, 23L) != 12L)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/movlge.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/movlge.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef long int_t;
> +
> +__attribute__ ((noinline)) int_t
> +movlge (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w >= x ? y : z;
> +}
> +
> +int
> +main (void)
> +{
> +  if (movlge (-1L, -1L, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlge (-1L, 3L, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlge (1L, 3L, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlge (3L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlge (5L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlge (3L, -1L, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlge (3L, 1L, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlge (3L, 5L, 12L, 23L) != 23L)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/movlgeu.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/movlgeu.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef unsigned long int_t;
> +
> +__attribute__ ((noinline)) int_t
> +movlgeu (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w >= x ? y : z;
> +}
> +
> +int
> +main (void)
> +{
> +  if (movlgeu (-1L, -1L, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlgeu (-1L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlgeu (1L, 3L, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlgeu (3L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlgeu (5L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlgeu (3L, -1L, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlgeu (3L, 1L, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlgeu (3L, 5L, 12L, 23L) != 23L)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/movlgt.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/movlgt.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef long int_t;
> +
> +__attribute__ ((noinline)) int_t
> +movlgt (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w > x ? y : z;
> +}
> +
> +int
> +main (void)
> +{
> +  if (movlgt (-1L, -1L, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlgt (-1L, 3L, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlgt (1L, 3L, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlgt (3L, 3L, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlgt (5L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlgt (3L, -1L, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlgt (3L, 1L, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlgt (3L, 5L, 12L, 23L) != 23L)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/movlgtu.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/movlgtu.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef unsigned long int_t;
> +
> +__attribute__ ((noinline)) int_t
> +movlgtu (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w > x ? y : z;
> +}
> +
> +int
> +main (void)
> +{
> +  if (movlgtu (-1L, -1L, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlgtu (-1L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlgtu (1L, 3L, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlgtu (3L, 3L, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlgtu (5L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlgtu (3L, -1L, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlgtu (3L, 1L, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlgtu (3L, 5L, 12L, 23L) != 23L)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/movlle.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/movlle.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef long int_t;
> +
> +__attribute__ ((noinline)) int_t
> +movlle (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w <= x ? y : z;
> +}
> +
> +int
> +main (void)
> +{
> +  if (movlle (-1L, -1L, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlle (-1L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlle (1L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlle (3L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlle (5L, 3L, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlle (3L, -1L, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlle (3L, 1L, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlle (3L, 5L, 12L, 23L) != 12L)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/movlleu.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/movlleu.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef unsigned long int_t;
> +
> +__attribute__ ((noinline)) int_t
> +movlleu (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w <= x ? y : z;
> +}
> +
> +int
> +main (void)
> +{
> +  if (movlleu (-1L, -1L, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlleu (-1L, 3L, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlleu (1L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlleu (3L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlleu (5L, 3L, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlleu (3L, -1L, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlleu (3L, 1L, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlleu (3L, 5L, 12L, 23L) != 12L)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/movllt.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/movllt.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef long int_t;
> +
> +__attribute__ ((noinline)) int_t
> +movllt (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w < x ? y : z;
> +}
> +
> +int
> +main (void)
> +{
> +  if (movllt (-1L, -1L, 12L, 23L) != 23L)
> +    return 1;
> +  if (movllt (-1L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (movllt (1L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (movllt (3L, 3L, 12L, 23L) != 23L)
> +    return 1;
> +  if (movllt (5L, 3L, 12L, 23L) != 23L)
> +    return 1;
> +  if (movllt (3L, -1L, 12L, 23L) != 23L)
> +    return 1;
> +  if (movllt (3L, 1L, 12L, 23L) != 23L)
> +    return 1;
> +  if (movllt (3L, 5L, 12L, 23L) != 12L)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/movlltu.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/movlltu.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef unsigned long int_t;
> +
> +__attribute__ ((noinline)) int_t
> +movlltu (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w < x ? y : z;
> +}
> +
> +int
> +main (void)
> +{
> +  if (movlltu (-1L, -1L, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlltu (-1L, 3L, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlltu (1L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlltu (3L, 3L, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlltu (5L, 3L, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlltu (3L, -1L, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlltu (3L, 1L, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlltu (3L, 5L, 12L, 23L) != 12L)
> +    return 1;
> +  return 0;
> +}
> Index: gcc/gcc/testsuite/gcc.dg/torture/movlne.c
> ===================================================================
> --- /dev/null
> +++ gcc/gcc/testsuite/gcc.dg/torture/movlne.c
> @@ -0,0 +1,31 @@
> +/* { dg-do run } */
> +
> +typedef long int_t;
> +
> +__attribute__ ((noinline)) int_t
> +movlne (int_t w, int_t x, int_t y, int_t z)
> +{
> +  return w != x ? y : z;
> +}
> +
> +int
> +main (void)
> +{
> +  if (movlne (-1L, -1L, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlne (-1L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlne (1L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlne (3L, 3L, 12L, 23L) != 23L)
> +    return 1;
> +  if (movlne (5L, 3L, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlne (3L, -1L, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlne (3L, 1L, 12L, 23L) != 12L)
> +    return 1;
> +  if (movlne (3L, 5L, 12L, 23L) != 12L)
> +    return 1;
> +  return 0;
> +}
Maciej W. Rozycki Nov. 20, 2023, 10:16 a.m. UTC | #2
On Sun, 19 Nov 2023, Kito Cheng wrote:

> ok

 Thank you for your review, but I think I need a general maintainer's ack 
for this one.

  Maciej
Richard Biener Nov. 20, 2023, 12:57 p.m. UTC | #3
On Mon, Nov 20, 2023 at 11:16 AM Maciej W. Rozycki <macro@embecosm.com> wrote:
>
> On Sun, 19 Nov 2023, Kito Cheng wrote:
>
> > ok
>
>  Thank you for your review, but I think I need a general maintainer's ack
> for this one.

OK.

>   Maciej
Maciej W. Rozycki Nov. 22, 2023, 1:33 a.m. UTC | #4
On Mon, 20 Nov 2023, Richard Biener wrote:

> > > ok
> >
> >  Thank you for your review, but I think I need a general maintainer's ack
> > for this one.
> 
> OK.

 I have committed this change now, thank you for your review.

  Maciej
diff mbox series

Patch

Index: gcc/gcc/testsuite/gcc.dg/torture/addieq.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/addieq.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef int int_t;
+
+__attribute__ ((noinline)) int_t
+addieq (int_t w, int_t x, int_t y, int_t z)
+{
+  return w == x ? y + z : y;
+}
+
+int
+main (void)
+{
+  if (addieq (-1, -1, 12, 23) != 35)
+    return 1;
+  if (addieq (-1, 3, 12, 23) != 12)
+    return 1;
+  if (addieq (1, 3, 12, 23) != 12)
+    return 1;
+  if (addieq (3, 3, 12, 23) != 35)
+    return 1;
+  if (addieq (5, 3, 12, 23) != 12)
+    return 1;
+  if (addieq (3, -1, 12, 23) != 12)
+    return 1;
+  if (addieq (3, 1, 12, 23) != 12)
+    return 1;
+  if (addieq (3, 5, 12, 23) != 12)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/addifeq.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/addifeq.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef int int_t;
+
+__attribute__ ((noinline)) int_t
+addifeq (double w, double x, int_t y, int_t z)
+{
+  return w == x ? y + z : y;
+}
+
+int
+main (void)
+{
+  if (addifeq (-1.0, -1.0, 12, 23) != 35)
+    return 1;
+  if (addifeq (-1.0, 3.0, 12, 23) != 12)
+    return 1;
+  if (addifeq (1.0, 3.0, 12, 23) != 12)
+    return 1;
+  if (addifeq (3.0, 3.0, 12, 23) != 35)
+    return 1;
+  if (addifeq (5.0, 3.0, 12, 23) != 12)
+    return 1;
+  if (addifeq (3.0, -1.0, 12, 23) != 12)
+    return 1;
+  if (addifeq (3.0, 1.0, 12, 23) != 12)
+    return 1;
+  if (addifeq (3.0, 5.0, 12, 23) != 12)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/addifge.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/addifge.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef int int_t;
+
+__attribute__ ((noinline)) int_t
+addifge (double w, double x, int_t y, int_t z)
+{
+  return w >= x ? y + z : y;
+}
+
+int
+main (void)
+{
+  if (addifge (-1.0, -1.0, 12, 23) != 35)
+    return 1;
+  if (addifge (-1.0, 3.0, 12, 23) != 12)
+    return 1;
+  if (addifge (1.0, 3.0, 12, 23) != 12)
+    return 1;
+  if (addifge (3.0, 3.0, 12, 23) != 35)
+    return 1;
+  if (addifge (5.0, 3.0, 12, 23) != 35)
+    return 1;
+  if (addifge (3.0, -1.0, 12, 23) != 35)
+    return 1;
+  if (addifge (3.0, 1.0, 12, 23) != 35)
+    return 1;
+  if (addifge (3.0, 5.0, 12, 23) != 12)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/addifgt.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/addifgt.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef int int_t;
+
+__attribute__ ((noinline)) int_t
+addifgt (double w, double x, int_t y, int_t z)
+{
+  return w > x ? y + z : y;
+}
+
+int
+main (void)
+{
+  if (addifgt (-1.0, -1.0, 12, 23) != 12)
+    return 1;
+  if (addifgt (-1.0, 3.0, 12, 23) != 12)
+    return 1;
+  if (addifgt (1.0, 3.0, 12, 23) != 12)
+    return 1;
+  if (addifgt (3.0, 3.0, 12, 23) != 12)
+    return 1;
+  if (addifgt (5.0, 3.0, 12, 23) != 35)
+    return 1;
+  if (addifgt (3.0, -1.0, 12, 23) != 35)
+    return 1;
+  if (addifgt (3.0, 1.0, 12, 23) != 35)
+    return 1;
+  if (addifgt (3.0, 5.0, 12, 23) != 12)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/addifle.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/addifle.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef int int_t;
+
+__attribute__ ((noinline)) int_t
+addifle (double w, double x, int_t y, int_t z)
+{
+  return w <= x ? y + z : y;
+}
+
+int
+main (void)
+{
+  if (addifle (-1.0, -1.0, 12, 23) != 35)
+    return 1;
+  if (addifle (-1.0, 3.0, 12, 23) != 35)
+    return 1;
+  if (addifle (1.0, 3.0, 12, 23) != 35)
+    return 1;
+  if (addifle (3.0, 3.0, 12, 23) != 35)
+    return 1;
+  if (addifle (5.0, 3.0, 12, 23) != 12)
+    return 1;
+  if (addifle (3.0, -1.0, 12, 23) != 12)
+    return 1;
+  if (addifle (3.0, 1.0, 12, 23) != 12)
+    return 1;
+  if (addifle (3.0, 5.0, 12, 23) != 35)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/addiflt.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/addiflt.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef int int_t;
+
+__attribute__ ((noinline)) int_t
+addiflt (double w, double x, int_t y, int_t z)
+{
+  return w < x ? y + z : y;
+}
+
+int
+main (void)
+{
+  if (addiflt (-1.0, -1.0, 12, 23) != 12)
+    return 1;
+  if (addiflt (-1.0, 3.0, 12, 23) != 35)
+    return 1;
+  if (addiflt (1.0, 3.0, 12, 23) != 35)
+    return 1;
+  if (addiflt (3.0, 3.0, 12, 23) != 12)
+    return 1;
+  if (addiflt (5.0, 3.0, 12, 23) != 12)
+    return 1;
+  if (addiflt (3.0, -1.0, 12, 23) != 12)
+    return 1;
+  if (addiflt (3.0, 1.0, 12, 23) != 12)
+    return 1;
+  if (addiflt (3.0, 5.0, 12, 23) != 35)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/addifne.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/addifne.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef int int_t;
+
+__attribute__ ((noinline)) int_t
+addifne (double w, double x, int_t y, int_t z)
+{
+  return w != x ? y + z : y;
+}
+
+int
+main (void)
+{
+  if (addifne (-1.0, -1.0, 12, 23) != 12)
+    return 1;
+  if (addifne (-1.0, 3.0, 12, 23) != 35)
+    return 1;
+  if (addifne (1.0, 3.0, 12, 23) != 35)
+    return 1;
+  if (addifne (3.0, 3.0, 12, 23) != 12)
+    return 1;
+  if (addifne (5.0, 3.0, 12, 23) != 35)
+    return 1;
+  if (addifne (3.0, -1.0, 12, 23) != 35)
+    return 1;
+  if (addifne (3.0, 1.0, 12, 23) != 35)
+    return 1;
+  if (addifne (3.0, 5.0, 12, 23) != 35)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/addige.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/addige.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef int int_t;
+
+__attribute__ ((noinline)) int_t
+addige (int_t w, int_t x, int_t y, int_t z)
+{
+  return w >= x ? y + z : y;
+}
+
+int
+main (void)
+{
+  if (addige (-1, -1, 12, 23) != 35)
+    return 1;
+  if (addige (-1, 3, 12, 23) != 12)
+    return 1;
+  if (addige (1, 3, 12, 23) != 12)
+    return 1;
+  if (addige (3, 3, 12, 23) != 35)
+    return 1;
+  if (addige (5, 3, 12, 23) != 35)
+    return 1;
+  if (addige (3, -1, 12, 23) != 35)
+    return 1;
+  if (addige (3, 1, 12, 23) != 35)
+    return 1;
+  if (addige (3, 5, 12, 23) != 12)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/addigeu.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/addigeu.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef unsigned int int_t;
+
+__attribute__ ((noinline)) int_t
+addigeu (int_t w, int_t x, int_t y, int_t z)
+{
+  return w >= x ? y + z : y;
+}
+
+int
+main (void)
+{
+  if (addigeu (-1, -1, 12, 23) != 35)
+    return 1;
+  if (addigeu (-1, 3, 12, 23) != 35)
+    return 1;
+  if (addigeu (1, 3, 12, 23) != 12)
+    return 1;
+  if (addigeu (3, 3, 12, 23) != 35)
+    return 1;
+  if (addigeu (5, 3, 12, 23) != 35)
+    return 1;
+  if (addigeu (3, -1, 12, 23) != 12)
+    return 1;
+  if (addigeu (3, 1, 12, 23) != 35)
+    return 1;
+  if (addigeu (3, 5, 12, 23) != 12)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/addigt.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/addigt.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef int int_t;
+
+__attribute__ ((noinline)) int_t
+addigt (int_t w, int_t x, int_t y, int_t z)
+{
+  return w > x ? y + z : y;
+}
+
+int
+main (void)
+{
+  if (addigt (-1, -1, 12, 23) != 12)
+    return 1;
+  if (addigt (-1, 3, 12, 23) != 12)
+    return 1;
+  if (addigt (1, 3, 12, 23) != 12)
+    return 1;
+  if (addigt (3, 3, 12, 23) != 12)
+    return 1;
+  if (addigt (5, 3, 12, 23) != 35)
+    return 1;
+  if (addigt (3, -1, 12, 23) != 35)
+    return 1;
+  if (addigt (3, 1, 12, 23) != 35)
+    return 1;
+  if (addigt (3, 5, 12, 23) != 12)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/addigtu.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/addigtu.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef unsigned int int_t;
+
+__attribute__ ((noinline)) int_t
+addigtu (int_t w, int_t x, int_t y, int_t z)
+{
+  return w > x ? y + z : y;
+}
+
+int
+main (void)
+{
+  if (addigtu (-1, -1, 12, 23) != 12)
+    return 1;
+  if (addigtu (-1, 3, 12, 23) != 35)
+    return 1;
+  if (addigtu (1, 3, 12, 23) != 12)
+    return 1;
+  if (addigtu (3, 3, 12, 23) != 12)
+    return 1;
+  if (addigtu (5, 3, 12, 23) != 35)
+    return 1;
+  if (addigtu (3, -1, 12, 23) != 12)
+    return 1;
+  if (addigtu (3, 1, 12, 23) != 35)
+    return 1;
+  if (addigtu (3, 5, 12, 23) != 12)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/addile.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/addile.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef int int_t;
+
+__attribute__ ((noinline)) int_t
+addile (int_t w, int_t x, int_t y, int_t z)
+{
+  return w <= x ? y + z : y;
+}
+
+int
+main (void)
+{
+  if (addile (-1, -1, 12, 23) != 35)
+    return 1;
+  if (addile (-1, 3, 12, 23) != 35)
+    return 1;
+  if (addile (1, 3, 12, 23) != 35)
+    return 1;
+  if (addile (3, 3, 12, 23) != 35)
+    return 1;
+  if (addile (5, 3, 12, 23) != 12)
+    return 1;
+  if (addile (3, -1, 12, 23) != 12)
+    return 1;
+  if (addile (3, 1, 12, 23) != 12)
+    return 1;
+  if (addile (3, 5, 12, 23) != 35)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/addileu.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/addileu.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef unsigned int int_t;
+
+__attribute__ ((noinline)) int_t
+addileu (int_t w, int_t x, int_t y, int_t z)
+{
+  return w <= x ? y + z : y;
+}
+
+int
+main (void)
+{
+  if (addileu (-1, -1, 12, 23) != 35)
+    return 1;
+  if (addileu (-1, 3, 12, 23) != 12)
+    return 1;
+  if (addileu (1, 3, 12, 23) != 35)
+    return 1;
+  if (addileu (3, 3, 12, 23) != 35)
+    return 1;
+  if (addileu (5, 3, 12, 23) != 12)
+    return 1;
+  if (addileu (3, -1, 12, 23) != 35)
+    return 1;
+  if (addileu (3, 1, 12, 23) != 12)
+    return 1;
+  if (addileu (3, 5, 12, 23) != 35)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/addilt.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/addilt.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef int int_t;
+
+__attribute__ ((noinline)) int_t
+addilt (int_t w, int_t x, int_t y, int_t z)
+{
+  return w < x ? y + z : y;
+}
+
+int
+main (void)
+{
+  if (addilt (-1, -1, 12, 23) != 12)
+    return 1;
+  if (addilt (-1, 3, 12, 23) != 35)
+    return 1;
+  if (addilt (1, 3, 12, 23) != 35)
+    return 1;
+  if (addilt (3, 3, 12, 23) != 12)
+    return 1;
+  if (addilt (5, 3, 12, 23) != 12)
+    return 1;
+  if (addilt (3, -1, 12, 23) != 12)
+    return 1;
+  if (addilt (3, 1, 12, 23) != 12)
+    return 1;
+  if (addilt (3, 5, 12, 23) != 35)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/addiltu.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/addiltu.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef unsigned int int_t;
+
+__attribute__ ((noinline)) int_t
+addiltu (int_t w, int_t x, int_t y, int_t z)
+{
+  return w < x ? y + z : y;
+}
+
+int
+main (void)
+{
+  if (addiltu (-1, -1, 12, 23) != 12)
+    return 1;
+  if (addiltu (-1, 3, 12, 23) != 12)
+    return 1;
+  if (addiltu (1, 3, 12, 23) != 35)
+    return 1;
+  if (addiltu (3, 3, 12, 23) != 12)
+    return 1;
+  if (addiltu (5, 3, 12, 23) != 12)
+    return 1;
+  if (addiltu (3, -1, 12, 23) != 35)
+    return 1;
+  if (addiltu (3, 1, 12, 23) != 12)
+    return 1;
+  if (addiltu (3, 5, 12, 23) != 35)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/addine.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/addine.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef int int_t;
+
+__attribute__ ((noinline)) int_t
+addine (int_t w, int_t x, int_t y, int_t z)
+{
+  return w != x ? y + z : y;
+}
+
+int
+main (void)
+{
+  if (addine (-1, -1, 12, 23) != 12)
+    return 1;
+  if (addine (-1, 3, 12, 23) != 35)
+    return 1;
+  if (addine (1, 3, 12, 23) != 35)
+    return 1;
+  if (addine (3, 3, 12, 23) != 12)
+    return 1;
+  if (addine (5, 3, 12, 23) != 35)
+    return 1;
+  if (addine (3, -1, 12, 23) != 35)
+    return 1;
+  if (addine (3, 1, 12, 23) != 35)
+    return 1;
+  if (addine (3, 5, 12, 23) != 35)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/addleq.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/addleq.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef long int_t;
+
+__attribute__ ((noinline)) int_t
+addleq (int_t w, int_t x, int_t y, int_t z)
+{
+  return w == x ? y + z : y;
+}
+
+int
+main (void)
+{
+  if (addleq (-1L, -1L, 12L, 23L) != 35L)
+    return 1;
+  if (addleq (-1L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (addleq (1L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (addleq (3L, 3L, 12L, 23L) != 35L)
+    return 1;
+  if (addleq (5L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (addleq (3L, -1L, 12L, 23L) != 12L)
+    return 1;
+  if (addleq (3L, 1L, 12L, 23L) != 12L)
+    return 1;
+  if (addleq (3L, 5L, 12L, 23L) != 12L)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/addlfeq.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/addlfeq.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef long int_t;
+
+__attribute__ ((noinline)) int_t
+addlfeq (double w, double x, int_t y, int_t z)
+{
+  return w == x ? y + z : y;
+}
+
+int
+main (void)
+{
+  if (addlfeq (-1.0, -1.0, 12L, 23L) != 35L)
+    return 1;
+  if (addlfeq (-1.0, 3.0, 12L, 23L) != 12L)
+    return 1;
+  if (addlfeq (1.0, 3.0, 12L, 23L) != 12L)
+    return 1;
+  if (addlfeq (3.0, 3.0, 12L, 23L) != 35L)
+    return 1;
+  if (addlfeq (5.0, 3.0, 12L, 23L) != 12L)
+    return 1;
+  if (addlfeq (3.0, -1.0, 12L, 23L) != 12L)
+    return 1;
+  if (addlfeq (3.0, 1.0, 12L, 23L) != 12L)
+    return 1;
+  if (addlfeq (3.0, 5.0, 12L, 23L) != 12L)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/addlfge.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/addlfge.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef long int_t;
+
+__attribute__ ((noinline)) int_t
+addlfge (double w, double x, int_t y, int_t z)
+{
+  return w >= x ? y + z : y;
+}
+
+int
+main (void)
+{
+  if (addlfge (-1.0, -1.0, 12L, 23L) != 35L)
+    return 1;
+  if (addlfge (-1.0, 3.0, 12L, 23L) != 12L)
+    return 1;
+  if (addlfge (1.0, 3.0, 12L, 23L) != 12L)
+    return 1;
+  if (addlfge (3.0, 3.0, 12L, 23L) != 35L)
+    return 1;
+  if (addlfge (5.0, 3.0, 12L, 23L) != 35L)
+    return 1;
+  if (addlfge (3.0, -1.0, 12L, 23L) != 35L)
+    return 1;
+  if (addlfge (3.0, 1.0, 12L, 23L) != 35L)
+    return 1;
+  if (addlfge (3.0, 5.0, 12L, 23L) != 12L)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/addlfgt.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/addlfgt.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef long int_t;
+
+__attribute__ ((noinline)) int_t
+addlfgt (double w, double x, int_t y, int_t z)
+{
+  return w > x ? y + z : y;
+}
+
+int
+main (void)
+{
+  if (addlfgt (-1.0, -1.0, 12L, 23L) != 12L)
+    return 1;
+  if (addlfgt (-1.0, 3.0, 12L, 23L) != 12L)
+    return 1;
+  if (addlfgt (1.0, 3.0, 12L, 23L) != 12L)
+    return 1;
+  if (addlfgt (3.0, 3.0, 12L, 23L) != 12L)
+    return 1;
+  if (addlfgt (5.0, 3.0, 12L, 23L) != 35L)
+    return 1;
+  if (addlfgt (3.0, -1.0, 12L, 23L) != 35L)
+    return 1;
+  if (addlfgt (3.0, 1.0, 12L, 23L) != 35L)
+    return 1;
+  if (addlfgt (3.0, 5.0, 12L, 23L) != 12L)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/addlfle.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/addlfle.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef long int_t;
+
+__attribute__ ((noinline)) int_t
+addlfle (double w, double x, int_t y, int_t z)
+{
+  return w <= x ? y + z : y;
+}
+
+int
+main (void)
+{
+  if (addlfle (-1.0, -1.0, 12L, 23L) != 35L)
+    return 1;
+  if (addlfle (-1.0, 3.0, 12L, 23L) != 35L)
+    return 1;
+  if (addlfle (1.0, 3.0, 12L, 23L) != 35L)
+    return 1;
+  if (addlfle (3.0, 3.0, 12L, 23L) != 35L)
+    return 1;
+  if (addlfle (5.0, 3.0, 12L, 23L) != 12L)
+    return 1;
+  if (addlfle (3.0, -1.0, 12L, 23L) != 12L)
+    return 1;
+  if (addlfle (3.0, 1.0, 12L, 23L) != 12L)
+    return 1;
+  if (addlfle (3.0, 5.0, 12L, 23L) != 35L)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/addlflt.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/addlflt.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef long int_t;
+
+__attribute__ ((noinline)) int_t
+addlflt (double w, double x, int_t y, int_t z)
+{
+  return w < x ? y + z : y;
+}
+
+int
+main (void)
+{
+  if (addlflt (-1.0, -1.0, 12L, 23L) != 12L)
+    return 1;
+  if (addlflt (-1.0, 3.0, 12L, 23L) != 35L)
+    return 1;
+  if (addlflt (1.0, 3.0, 12L, 23L) != 35L)
+    return 1;
+  if (addlflt (3.0, 3.0, 12L, 23L) != 12L)
+    return 1;
+  if (addlflt (5.0, 3.0, 12L, 23L) != 12L)
+    return 1;
+  if (addlflt (3.0, -1.0, 12L, 23L) != 12L)
+    return 1;
+  if (addlflt (3.0, 1.0, 12L, 23L) != 12L)
+    return 1;
+  if (addlflt (3.0, 5.0, 12L, 23L) != 35L)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/addlfne.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/addlfne.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef long int_t;
+
+__attribute__ ((noinline)) int_t
+addlfne (double w, double x, int_t y, int_t z)
+{
+  return w != x ? y + z : y;
+}
+
+int
+main (void)
+{
+  if (addlfne (-1.0, -1.0, 12L, 23L) != 12L)
+    return 1;
+  if (addlfne (-1.0, 3.0, 12L, 23L) != 35L)
+    return 1;
+  if (addlfne (1.0, 3.0, 12L, 23L) != 35L)
+    return 1;
+  if (addlfne (3.0, 3.0, 12L, 23L) != 12L)
+    return 1;
+  if (addlfne (5.0, 3.0, 12L, 23L) != 35L)
+    return 1;
+  if (addlfne (3.0, -1.0, 12L, 23L) != 35L)
+    return 1;
+  if (addlfne (3.0, 1.0, 12L, 23L) != 35L)
+    return 1;
+  if (addlfne (3.0, 5.0, 12L, 23L) != 35L)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/addlge.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/addlge.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef long int_t;
+
+__attribute__ ((noinline)) int_t
+addlge (int_t w, int_t x, int_t y, int_t z)
+{
+  return w >= x ? y + z : y;
+}
+
+int
+main (void)
+{
+  if (addlge (-1L, -1L, 12L, 23L) != 35L)
+    return 1;
+  if (addlge (-1L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (addlge (1L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (addlge (3L, 3L, 12L, 23L) != 35L)
+    return 1;
+  if (addlge (5L, 3L, 12L, 23L) != 35L)
+    return 1;
+  if (addlge (3L, -1L, 12L, 23L) != 35L)
+    return 1;
+  if (addlge (3L, 1L, 12L, 23L) != 35L)
+    return 1;
+  if (addlge (3L, 5L, 12L, 23L) != 12L)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/addlgeu.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/addlgeu.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef unsigned long int_t;
+
+__attribute__ ((noinline)) int_t
+addlgeu (int_t w, int_t x, int_t y, int_t z)
+{
+  return w >= x ? y + z : y;
+}
+
+int
+main (void)
+{
+  if (addlgeu (-1L, -1L, 12L, 23L) != 35L)
+    return 1;
+  if (addlgeu (-1L, 3L, 12L, 23L) != 35L)
+    return 1;
+  if (addlgeu (1L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (addlgeu (3L, 3L, 12L, 23L) != 35L)
+    return 1;
+  if (addlgeu (5L, 3L, 12L, 23L) != 35L)
+    return 1;
+  if (addlgeu (3L, -1L, 12L, 23L) != 12L)
+    return 1;
+  if (addlgeu (3L, 1L, 12L, 23L) != 35L)
+    return 1;
+  if (addlgeu (3L, 5L, 12L, 23L) != 12L)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/addlgt.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/addlgt.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef long int_t;
+
+__attribute__ ((noinline)) int_t
+addlgt (int_t w, int_t x, int_t y, int_t z)
+{
+  return w > x ? y + z : y;
+}
+
+int
+main (void)
+{
+  if (addlgt (-1L, -1L, 12L, 23L) != 12L)
+    return 1;
+  if (addlgt (-1L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (addlgt (1L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (addlgt (3L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (addlgt (5L, 3L, 12L, 23L) != 35L)
+    return 1;
+  if (addlgt (3L, -1L, 12L, 23L) != 35L)
+    return 1;
+  if (addlgt (3L, 1L, 12L, 23L) != 35L)
+    return 1;
+  if (addlgt (3L, 5L, 12L, 23L) != 12L)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/addlgtu.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/addlgtu.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef unsigned long int_t;
+
+__attribute__ ((noinline)) int_t
+addlgtu (int_t w, int_t x, int_t y, int_t z)
+{
+  return w > x ? y + z : y;
+}
+
+int
+main (void)
+{
+  if (addlgtu (-1L, -1L, 12L, 23L) != 12L)
+    return 1;
+  if (addlgtu (-1L, 3L, 12L, 23L) != 35L)
+    return 1;
+  if (addlgtu (1L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (addlgtu (3L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (addlgtu (5L, 3L, 12L, 23L) != 35L)
+    return 1;
+  if (addlgtu (3L, -1L, 12L, 23L) != 12L)
+    return 1;
+  if (addlgtu (3L, 1L, 12L, 23L) != 35L)
+    return 1;
+  if (addlgtu (3L, 5L, 12L, 23L) != 12L)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/addlle.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/addlle.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef long int_t;
+
+__attribute__ ((noinline)) int_t
+addlle (int_t w, int_t x, int_t y, int_t z)
+{
+  return w <= x ? y + z : y;
+}
+
+int
+main (void)
+{
+  if (addlle (-1L, -1L, 12L, 23L) != 35L)
+    return 1;
+  if (addlle (-1L, 3L, 12L, 23L) != 35L)
+    return 1;
+  if (addlle (1L, 3L, 12L, 23L) != 35L)
+    return 1;
+  if (addlle (3L, 3L, 12L, 23L) != 35L)
+    return 1;
+  if (addlle (5L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (addlle (3L, -1L, 12L, 23L) != 12L)
+    return 1;
+  if (addlle (3L, 1L, 12L, 23L) != 12L)
+    return 1;
+  if (addlle (3L, 5L, 12L, 23L) != 35L)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/addlleu.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/addlleu.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef unsigned long int_t;
+
+__attribute__ ((noinline)) int_t
+addlleu (int_t w, int_t x, int_t y, int_t z)
+{
+  return w <= x ? y + z : y;
+}
+
+int
+main (void)
+{
+  if (addlleu (-1L, -1L, 12L, 23L) != 35L)
+    return 1;
+  if (addlleu (-1L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (addlleu (1L, 3L, 12L, 23L) != 35L)
+    return 1;
+  if (addlleu (3L, 3L, 12L, 23L) != 35L)
+    return 1;
+  if (addlleu (5L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (addlleu (3L, -1L, 12L, 23L) != 35L)
+    return 1;
+  if (addlleu (3L, 1L, 12L, 23L) != 12L)
+    return 1;
+  if (addlleu (3L, 5L, 12L, 23L) != 35L)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/addllt.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/addllt.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef long int_t;
+
+__attribute__ ((noinline)) int_t
+addllt (int_t w, int_t x, int_t y, int_t z)
+{
+  return w < x ? y + z : y;
+}
+
+int
+main (void)
+{
+  if (addllt (-1L, -1L, 12L, 23L) != 12L)
+    return 1;
+  if (addllt (-1L, 3L, 12L, 23L) != 35L)
+    return 1;
+  if (addllt (1L, 3L, 12L, 23L) != 35L)
+    return 1;
+  if (addllt (3L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (addllt (5L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (addllt (3L, -1L, 12L, 23L) != 12L)
+    return 1;
+  if (addllt (3L, 1L, 12L, 23L) != 12L)
+    return 1;
+  if (addllt (3L, 5L, 12L, 23L) != 35L)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/addlltu.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/addlltu.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef unsigned long int_t;
+
+__attribute__ ((noinline)) int_t
+addlltu (int_t w, int_t x, int_t y, int_t z)
+{
+  return w < x ? y + z : y;
+}
+
+int
+main (void)
+{
+  if (addlltu (-1L, -1L, 12L, 23L) != 12L)
+    return 1;
+  if (addlltu (-1L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (addlltu (1L, 3L, 12L, 23L) != 35L)
+    return 1;
+  if (addlltu (3L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (addlltu (5L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (addlltu (3L, -1L, 12L, 23L) != 35L)
+    return 1;
+  if (addlltu (3L, 1L, 12L, 23L) != 12L)
+    return 1;
+  if (addlltu (3L, 5L, 12L, 23L) != 35L)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/addlne.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/addlne.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef long int_t;
+
+__attribute__ ((noinline)) int_t
+addlne (int_t w, int_t x, int_t y, int_t z)
+{
+  return w != x ? y + z : y;
+}
+
+int
+main (void)
+{
+  if (addlne (-1L, -1L, 12L, 23L) != 12L)
+    return 1;
+  if (addlne (-1L, 3L, 12L, 23L) != 35L)
+    return 1;
+  if (addlne (1L, 3L, 12L, 23L) != 35L)
+    return 1;
+  if (addlne (3L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (addlne (5L, 3L, 12L, 23L) != 35L)
+    return 1;
+  if (addlne (3L, -1L, 12L, 23L) != 35L)
+    return 1;
+  if (addlne (3L, 1L, 12L, 23L) != 35L)
+    return 1;
+  if (addlne (3L, 5L, 12L, 23L) != 35L)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/movieq.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/movieq.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef int int_t;
+
+__attribute__ ((noinline)) int_t
+movieq (int_t w, int_t x, int_t y, int_t z)
+{
+  return w == x ? y : z;
+}
+
+int
+main (void)
+{
+  if (movieq (-1, -1, 12, 23) != 12)
+    return 1;
+  if (movieq (-1, 3, 12, 23) != 23)
+    return 1;
+  if (movieq (1, 3, 12, 23) != 23)
+    return 1;
+  if (movieq (3, 3, 12, 23) != 12)
+    return 1;
+  if (movieq (5, 3, 12, 23) != 23)
+    return 1;
+  if (movieq (3, -1, 12, 23) != 23)
+    return 1;
+  if (movieq (3, 1, 12, 23) != 23)
+    return 1;
+  if (movieq (3, 5, 12, 23) != 23)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/movifeq.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/movifeq.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef int int_t;
+
+__attribute__ ((noinline)) int_t
+movifeq (double w, double x, int_t y, int_t z)
+{
+  return w == x ? y : z;
+}
+
+int
+main (void)
+{
+  if (movifeq (-1.0, -1.0, 12, 23) != 12)
+    return 1;
+  if (movifeq (-1.0, 3.0, 12, 23) != 23)
+    return 1;
+  if (movifeq (1.0, 3.0, 12, 23) != 23)
+    return 1;
+  if (movifeq (3.0, 3.0, 12, 23) != 12)
+    return 1;
+  if (movifeq (5.0, 3.0, 12, 23) != 23)
+    return 1;
+  if (movifeq (3.0, -1.0, 12, 23) != 23)
+    return 1;
+  if (movifeq (3.0, 1.0, 12, 23) != 23)
+    return 1;
+  if (movifeq (3.0, 5.0, 12, 23) != 23)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/movifge.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/movifge.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef int int_t;
+
+__attribute__ ((noinline)) int_t
+movifge (double w, double x, int_t y, int_t z)
+{
+  return w >= x ? y : z;
+}
+
+int
+main (void)
+{
+  if (movifge (-1.0, -1.0, 12, 23) != 12)
+    return 1;
+  if (movifge (-1.0, 3.0, 12, 23) != 23)
+    return 1;
+  if (movifge (1.0, 3.0, 12, 23) != 23)
+    return 1;
+  if (movifge (3.0, 3.0, 12, 23) != 12)
+    return 1;
+  if (movifge (5.0, 3.0, 12, 23) != 12)
+    return 1;
+  if (movifge (3.0, -1.0, 12, 23) != 12)
+    return 1;
+  if (movifge (3.0, 1.0, 12, 23) != 12)
+    return 1;
+  if (movifge (3.0, 5.0, 12, 23) != 23)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/movifgt.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/movifgt.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef int int_t;
+
+__attribute__ ((noinline)) int_t
+movifgt (double w, double x, int_t y, int_t z)
+{
+  return w > x ? y : z;
+}
+
+int
+main (void)
+{
+  if (movifgt (-1.0, -1.0, 12, 23) != 23)
+    return 1;
+  if (movifgt (-1.0, 3.0, 12, 23) != 23)
+    return 1;
+  if (movifgt (1.0, 3.0, 12, 23) != 23)
+    return 1;
+  if (movifgt (3.0, 3.0, 12, 23) != 23)
+    return 1;
+  if (movifgt (5.0, 3.0, 12, 23) != 12)
+    return 1;
+  if (movifgt (3.0, -1.0, 12, 23) != 12)
+    return 1;
+  if (movifgt (3.0, 1.0, 12, 23) != 12)
+    return 1;
+  if (movifgt (3.0, 5.0, 12, 23) != 23)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/movifle.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/movifle.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef int int_t;
+
+__attribute__ ((noinline)) int_t
+movifle (double w, double x, int_t y, int_t z)
+{
+  return w <= x ? y : z;
+}
+
+int
+main (void)
+{
+  if (movifle (-1.0, -1.0, 12, 23) != 12)
+    return 1;
+  if (movifle (-1.0, 3.0, 12, 23) != 12)
+    return 1;
+  if (movifle (1.0, 3.0, 12, 23) != 12)
+    return 1;
+  if (movifle (3.0, 3.0, 12, 23) != 12)
+    return 1;
+  if (movifle (5.0, 3.0, 12, 23) != 23)
+    return 1;
+  if (movifle (3.0, -1.0, 12, 23) != 23)
+    return 1;
+  if (movifle (3.0, 1.0, 12, 23) != 23)
+    return 1;
+  if (movifle (3.0, 5.0, 12, 23) != 12)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/moviflt.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/moviflt.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef int int_t;
+
+__attribute__ ((noinline)) int_t
+moviflt (double w, double x, int_t y, int_t z)
+{
+  return w < x ? y : z;
+}
+
+int
+main (void)
+{
+  if (moviflt (-1.0, -1.0, 12, 23) != 23)
+    return 1;
+  if (moviflt (-1.0, 3.0, 12, 23) != 12)
+    return 1;
+  if (moviflt (1.0, 3.0, 12, 23) != 12)
+    return 1;
+  if (moviflt (3.0, 3.0, 12, 23) != 23)
+    return 1;
+  if (moviflt (5.0, 3.0, 12, 23) != 23)
+    return 1;
+  if (moviflt (3.0, -1.0, 12, 23) != 23)
+    return 1;
+  if (moviflt (3.0, 1.0, 12, 23) != 23)
+    return 1;
+  if (moviflt (3.0, 5.0, 12, 23) != 12)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/movifne.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/movifne.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef int int_t;
+
+__attribute__ ((noinline)) int_t
+movifne (double w, double x, int_t y, int_t z)
+{
+  return w != x ? y : z;
+}
+
+int
+main (void)
+{
+  if (movifne (-1.0, -1.0, 12, 23) != 23)
+    return 1;
+  if (movifne (-1.0, 3.0, 12, 23) != 12)
+    return 1;
+  if (movifne (1.0, 3.0, 12, 23) != 12)
+    return 1;
+  if (movifne (3.0, 3.0, 12, 23) != 23)
+    return 1;
+  if (movifne (5.0, 3.0, 12, 23) != 12)
+    return 1;
+  if (movifne (3.0, -1.0, 12, 23) != 12)
+    return 1;
+  if (movifne (3.0, 1.0, 12, 23) != 12)
+    return 1;
+  if (movifne (3.0, 5.0, 12, 23) != 12)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/movige.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/movige.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef int int_t;
+
+__attribute__ ((noinline)) int_t
+movige (int_t w, int_t x, int_t y, int_t z)
+{
+  return w >= x ? y : z;
+}
+
+int
+main (void)
+{
+  if (movige (-1, -1, 12, 23) != 12)
+    return 1;
+  if (movige (-1, 3, 12, 23) != 23)
+    return 1;
+  if (movige (1, 3, 12, 23) != 23)
+    return 1;
+  if (movige (3, 3, 12, 23) != 12)
+    return 1;
+  if (movige (5, 3, 12, 23) != 12)
+    return 1;
+  if (movige (3, -1, 12, 23) != 12)
+    return 1;
+  if (movige (3, 1, 12, 23) != 12)
+    return 1;
+  if (movige (3, 5, 12, 23) != 23)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/movigeu.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/movigeu.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef unsigned int int_t;
+
+__attribute__ ((noinline)) int_t
+movigeu (int_t w, int_t x, int_t y, int_t z)
+{
+  return w >= x ? y : z;
+}
+
+int
+main (void)
+{
+  if (movigeu (-1, -1, 12, 23) != 12)
+    return 1;
+  if (movigeu (-1, 3, 12, 23) != 12)
+    return 1;
+  if (movigeu (1, 3, 12, 23) != 23)
+    return 1;
+  if (movigeu (3, 3, 12, 23) != 12)
+    return 1;
+  if (movigeu (5, 3, 12, 23) != 12)
+    return 1;
+  if (movigeu (3, -1, 12, 23) != 23)
+    return 1;
+  if (movigeu (3, 1, 12, 23) != 12)
+    return 1;
+  if (movigeu (3, 5, 12, 23) != 23)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/movigt.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/movigt.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef int int_t;
+
+__attribute__ ((noinline)) int_t
+movigt (int_t w, int_t x, int_t y, int_t z)
+{
+  return w > x ? y : z;
+}
+
+int
+main (void)
+{
+  if (movigt (-1, -1, 12, 23) != 23)
+    return 1;
+  if (movigt (-1, 3, 12, 23) != 23)
+    return 1;
+  if (movigt (1, 3, 12, 23) != 23)
+    return 1;
+  if (movigt (3, 3, 12, 23) != 23)
+    return 1;
+  if (movigt (5, 3, 12, 23) != 12)
+    return 1;
+  if (movigt (3, -1, 12, 23) != 12)
+    return 1;
+  if (movigt (3, 1, 12, 23) != 12)
+    return 1;
+  if (movigt (3, 5, 12, 23) != 23)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/movigtu.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/movigtu.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef unsigned int int_t;
+
+__attribute__ ((noinline)) int_t
+movigtu (int_t w, int_t x, int_t y, int_t z)
+{
+  return w > x ? y : z;
+}
+
+int
+main (void)
+{
+  if (movigtu (-1, -1, 12, 23) != 23)
+    return 1;
+  if (movigtu (-1, 3, 12, 23) != 12)
+    return 1;
+  if (movigtu (1, 3, 12, 23) != 23)
+    return 1;
+  if (movigtu (3, 3, 12, 23) != 23)
+    return 1;
+  if (movigtu (5, 3, 12, 23) != 12)
+    return 1;
+  if (movigtu (3, -1, 12, 23) != 23)
+    return 1;
+  if (movigtu (3, 1, 12, 23) != 12)
+    return 1;
+  if (movigtu (3, 5, 12, 23) != 23)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/movile.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/movile.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef int int_t;
+
+__attribute__ ((noinline)) int_t
+movile (int_t w, int_t x, int_t y, int_t z)
+{
+  return w <= x ? y : z;
+}
+
+int
+main (void)
+{
+  if (movile (-1, -1, 12, 23) != 12)
+    return 1;
+  if (movile (-1, 3, 12, 23) != 12)
+    return 1;
+  if (movile (1, 3, 12, 23) != 12)
+    return 1;
+  if (movile (3, 3, 12, 23) != 12)
+    return 1;
+  if (movile (5, 3, 12, 23) != 23)
+    return 1;
+  if (movile (3, -1, 12, 23) != 23)
+    return 1;
+  if (movile (3, 1, 12, 23) != 23)
+    return 1;
+  if (movile (3, 5, 12, 23) != 12)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/movileu.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/movileu.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef unsigned int int_t;
+
+__attribute__ ((noinline)) int_t
+movileu (int_t w, int_t x, int_t y, int_t z)
+{
+  return w <= x ? y : z;
+}
+
+int
+main (void)
+{
+  if (movileu (-1, -1, 12, 23) != 12)
+    return 1;
+  if (movileu (-1, 3, 12, 23) != 23)
+    return 1;
+  if (movileu (1, 3, 12, 23) != 12)
+    return 1;
+  if (movileu (3, 3, 12, 23) != 12)
+    return 1;
+  if (movileu (5, 3, 12, 23) != 23)
+    return 1;
+  if (movileu (3, -1, 12, 23) != 12)
+    return 1;
+  if (movileu (3, 1, 12, 23) != 23)
+    return 1;
+  if (movileu (3, 5, 12, 23) != 12)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/movilt.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/movilt.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef int int_t;
+
+__attribute__ ((noinline)) int_t
+movilt (int_t w, int_t x, int_t y, int_t z)
+{
+  return w < x ? y : z;
+}
+
+int
+main (void)
+{
+  if (movilt (-1, -1, 12, 23) != 23)
+    return 1;
+  if (movilt (-1, 3, 12, 23) != 12)
+    return 1;
+  if (movilt (1, 3, 12, 23) != 12)
+    return 1;
+  if (movilt (3, 3, 12, 23) != 23)
+    return 1;
+  if (movilt (5, 3, 12, 23) != 23)
+    return 1;
+  if (movilt (3, -1, 12, 23) != 23)
+    return 1;
+  if (movilt (3, 1, 12, 23) != 23)
+    return 1;
+  if (movilt (3, 5, 12, 23) != 12)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/moviltu.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/moviltu.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef unsigned int int_t;
+
+__attribute__ ((noinline)) int_t
+moviltu (int_t w, int_t x, int_t y, int_t z)
+{
+  return w < x ? y : z;
+}
+
+int
+main (void)
+{
+  if (moviltu (-1, -1, 12, 23) != 23)
+    return 1;
+  if (moviltu (-1, 3, 12, 23) != 23)
+    return 1;
+  if (moviltu (1, 3, 12, 23) != 12)
+    return 1;
+  if (moviltu (3, 3, 12, 23) != 23)
+    return 1;
+  if (moviltu (5, 3, 12, 23) != 23)
+    return 1;
+  if (moviltu (3, -1, 12, 23) != 12)
+    return 1;
+  if (moviltu (3, 1, 12, 23) != 23)
+    return 1;
+  if (moviltu (3, 5, 12, 23) != 12)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/movine.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/movine.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef int int_t;
+
+__attribute__ ((noinline)) int_t
+movine (int_t w, int_t x, int_t y, int_t z)
+{
+  return w != x ? y : z;
+}
+
+int
+main (void)
+{
+  if (movine (-1, -1, 12, 23) != 23)
+    return 1;
+  if (movine (-1, 3, 12, 23) != 12)
+    return 1;
+  if (movine (1, 3, 12, 23) != 12)
+    return 1;
+  if (movine (3, 3, 12, 23) != 23)
+    return 1;
+  if (movine (5, 3, 12, 23) != 12)
+    return 1;
+  if (movine (3, -1, 12, 23) != 12)
+    return 1;
+  if (movine (3, 1, 12, 23) != 12)
+    return 1;
+  if (movine (3, 5, 12, 23) != 12)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/movleq.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/movleq.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef long int_t;
+
+__attribute__ ((noinline)) int_t
+movleq (int_t w, int_t x, int_t y, int_t z)
+{
+  return w == x ? y : z;
+}
+
+int
+main (void)
+{
+  if (movleq (-1L, -1L, 12L, 23L) != 12L)
+    return 1;
+  if (movleq (-1L, 3L, 12L, 23L) != 23L)
+    return 1;
+  if (movleq (1L, 3L, 12L, 23L) != 23L)
+    return 1;
+  if (movleq (3L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (movleq (5L, 3L, 12L, 23L) != 23L)
+    return 1;
+  if (movleq (3L, -1L, 12L, 23L) != 23L)
+    return 1;
+  if (movleq (3L, 1L, 12L, 23L) != 23L)
+    return 1;
+  if (movleq (3L, 5L, 12L, 23L) != 23L)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/movlfeq.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/movlfeq.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef long int_t;
+
+__attribute__ ((noinline)) int_t
+movlfeq (double w, double x, int_t y, int_t z)
+{
+  return w == x ? y : z;
+}
+
+int
+main (void)
+{
+  if (movlfeq (-1.0, -1.0, 12L, 23L) != 12L)
+    return 1;
+  if (movlfeq (-1.0, 3.0, 12L, 23L) != 23L)
+    return 1;
+  if (movlfeq (1.0, 3.0, 12L, 23L) != 23L)
+    return 1;
+  if (movlfeq (3.0, 3.0, 12L, 23L) != 12L)
+    return 1;
+  if (movlfeq (5.0, 3.0, 12L, 23L) != 23L)
+    return 1;
+  if (movlfeq (3.0, -1.0, 12L, 23L) != 23L)
+    return 1;
+  if (movlfeq (3.0, 1.0, 12L, 23L) != 23L)
+    return 1;
+  if (movlfeq (3.0, 5.0, 12L, 23L) != 23L)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/movlfge.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/movlfge.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef long int_t;
+
+__attribute__ ((noinline)) int_t
+movlfge (double w, double x, int_t y, int_t z)
+{
+  return w >= x ? y : z;
+}
+
+int
+main (void)
+{
+  if (movlfge (-1.0, -1.0, 12L, 23L) != 12L)
+    return 1;
+  if (movlfge (-1.0, 3.0, 12L, 23L) != 23L)
+    return 1;
+  if (movlfge (1.0, 3.0, 12L, 23L) != 23L)
+    return 1;
+  if (movlfge (3.0, 3.0, 12L, 23L) != 12L)
+    return 1;
+  if (movlfge (5.0, 3.0, 12L, 23L) != 12L)
+    return 1;
+  if (movlfge (3.0, -1.0, 12L, 23L) != 12L)
+    return 1;
+  if (movlfge (3.0, 1.0, 12L, 23L) != 12L)
+    return 1;
+  if (movlfge (3.0, 5.0, 12L, 23L) != 23L)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/movlfgt.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/movlfgt.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef long int_t;
+
+__attribute__ ((noinline)) int_t
+movlfgt (double w, double x, int_t y, int_t z)
+{
+  return w > x ? y : z;
+}
+
+int
+main (void)
+{
+  if (movlfgt (-1.0, -1.0, 12L, 23L) != 23L)
+    return 1;
+  if (movlfgt (-1.0, 3.0, 12L, 23L) != 23L)
+    return 1;
+  if (movlfgt (1.0, 3.0, 12L, 23L) != 23L)
+    return 1;
+  if (movlfgt (3.0, 3.0, 12L, 23L) != 23L)
+    return 1;
+  if (movlfgt (5.0, 3.0, 12L, 23L) != 12L)
+    return 1;
+  if (movlfgt (3.0, -1.0, 12L, 23L) != 12L)
+    return 1;
+  if (movlfgt (3.0, 1.0, 12L, 23L) != 12L)
+    return 1;
+  if (movlfgt (3.0, 5.0, 12L, 23L) != 23L)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/movlfle.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/movlfle.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef long int_t;
+
+__attribute__ ((noinline)) int_t
+movlfle (double w, double x, int_t y, int_t z)
+{
+  return w <= x ? y : z;
+}
+
+int
+main (void)
+{
+  if (movlfle (-1.0, -1.0, 12L, 23L) != 12L)
+    return 1;
+  if (movlfle (-1.0, 3.0, 12L, 23L) != 12L)
+    return 1;
+  if (movlfle (1.0, 3.0, 12L, 23L) != 12L)
+    return 1;
+  if (movlfle (3.0, 3.0, 12L, 23L) != 12L)
+    return 1;
+  if (movlfle (5.0, 3.0, 12L, 23L) != 23L)
+    return 1;
+  if (movlfle (3.0, -1.0, 12L, 23L) != 23L)
+    return 1;
+  if (movlfle (3.0, 1.0, 12L, 23L) != 23L)
+    return 1;
+  if (movlfle (3.0, 5.0, 12L, 23L) != 12L)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/movlflt.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/movlflt.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef long int_t;
+
+__attribute__ ((noinline)) int_t
+movlflt (double w, double x, int_t y, int_t z)
+{
+  return w < x ? y : z;
+}
+
+int
+main (void)
+{
+  if (movlflt (-1.0, -1.0, 12L, 23L) != 23L)
+    return 1;
+  if (movlflt (-1.0, 3.0, 12L, 23L) != 12L)
+    return 1;
+  if (movlflt (1.0, 3.0, 12L, 23L) != 12L)
+    return 1;
+  if (movlflt (3.0, 3.0, 12L, 23L) != 23L)
+    return 1;
+  if (movlflt (5.0, 3.0, 12L, 23L) != 23L)
+    return 1;
+  if (movlflt (3.0, -1.0, 12L, 23L) != 23L)
+    return 1;
+  if (movlflt (3.0, 1.0, 12L, 23L) != 23L)
+    return 1;
+  if (movlflt (3.0, 5.0, 12L, 23L) != 12L)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/movlfne.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/movlfne.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef long int_t;
+
+__attribute__ ((noinline)) int_t
+movlfne (double w, double x, int_t y, int_t z)
+{
+  return w != x ? y : z;
+}
+
+int
+main (void)
+{
+  if (movlfne (-1.0, -1.0, 12L, 23L) != 23L)
+    return 1;
+  if (movlfne (-1.0, 3.0, 12L, 23L) != 12L)
+    return 1;
+  if (movlfne (1.0, 3.0, 12L, 23L) != 12L)
+    return 1;
+  if (movlfne (3.0, 3.0, 12L, 23L) != 23L)
+    return 1;
+  if (movlfne (5.0, 3.0, 12L, 23L) != 12L)
+    return 1;
+  if (movlfne (3.0, -1.0, 12L, 23L) != 12L)
+    return 1;
+  if (movlfne (3.0, 1.0, 12L, 23L) != 12L)
+    return 1;
+  if (movlfne (3.0, 5.0, 12L, 23L) != 12L)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/movlge.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/movlge.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef long int_t;
+
+__attribute__ ((noinline)) int_t
+movlge (int_t w, int_t x, int_t y, int_t z)
+{
+  return w >= x ? y : z;
+}
+
+int
+main (void)
+{
+  if (movlge (-1L, -1L, 12L, 23L) != 12L)
+    return 1;
+  if (movlge (-1L, 3L, 12L, 23L) != 23L)
+    return 1;
+  if (movlge (1L, 3L, 12L, 23L) != 23L)
+    return 1;
+  if (movlge (3L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (movlge (5L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (movlge (3L, -1L, 12L, 23L) != 12L)
+    return 1;
+  if (movlge (3L, 1L, 12L, 23L) != 12L)
+    return 1;
+  if (movlge (3L, 5L, 12L, 23L) != 23L)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/movlgeu.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/movlgeu.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef unsigned long int_t;
+
+__attribute__ ((noinline)) int_t
+movlgeu (int_t w, int_t x, int_t y, int_t z)
+{
+  return w >= x ? y : z;
+}
+
+int
+main (void)
+{
+  if (movlgeu (-1L, -1L, 12L, 23L) != 12L)
+    return 1;
+  if (movlgeu (-1L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (movlgeu (1L, 3L, 12L, 23L) != 23L)
+    return 1;
+  if (movlgeu (3L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (movlgeu (5L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (movlgeu (3L, -1L, 12L, 23L) != 23L)
+    return 1;
+  if (movlgeu (3L, 1L, 12L, 23L) != 12L)
+    return 1;
+  if (movlgeu (3L, 5L, 12L, 23L) != 23L)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/movlgt.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/movlgt.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef long int_t;
+
+__attribute__ ((noinline)) int_t
+movlgt (int_t w, int_t x, int_t y, int_t z)
+{
+  return w > x ? y : z;
+}
+
+int
+main (void)
+{
+  if (movlgt (-1L, -1L, 12L, 23L) != 23L)
+    return 1;
+  if (movlgt (-1L, 3L, 12L, 23L) != 23L)
+    return 1;
+  if (movlgt (1L, 3L, 12L, 23L) != 23L)
+    return 1;
+  if (movlgt (3L, 3L, 12L, 23L) != 23L)
+    return 1;
+  if (movlgt (5L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (movlgt (3L, -1L, 12L, 23L) != 12L)
+    return 1;
+  if (movlgt (3L, 1L, 12L, 23L) != 12L)
+    return 1;
+  if (movlgt (3L, 5L, 12L, 23L) != 23L)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/movlgtu.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/movlgtu.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef unsigned long int_t;
+
+__attribute__ ((noinline)) int_t
+movlgtu (int_t w, int_t x, int_t y, int_t z)
+{
+  return w > x ? y : z;
+}
+
+int
+main (void)
+{
+  if (movlgtu (-1L, -1L, 12L, 23L) != 23L)
+    return 1;
+  if (movlgtu (-1L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (movlgtu (1L, 3L, 12L, 23L) != 23L)
+    return 1;
+  if (movlgtu (3L, 3L, 12L, 23L) != 23L)
+    return 1;
+  if (movlgtu (5L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (movlgtu (3L, -1L, 12L, 23L) != 23L)
+    return 1;
+  if (movlgtu (3L, 1L, 12L, 23L) != 12L)
+    return 1;
+  if (movlgtu (3L, 5L, 12L, 23L) != 23L)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/movlle.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/movlle.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef long int_t;
+
+__attribute__ ((noinline)) int_t
+movlle (int_t w, int_t x, int_t y, int_t z)
+{
+  return w <= x ? y : z;
+}
+
+int
+main (void)
+{
+  if (movlle (-1L, -1L, 12L, 23L) != 12L)
+    return 1;
+  if (movlle (-1L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (movlle (1L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (movlle (3L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (movlle (5L, 3L, 12L, 23L) != 23L)
+    return 1;
+  if (movlle (3L, -1L, 12L, 23L) != 23L)
+    return 1;
+  if (movlle (3L, 1L, 12L, 23L) != 23L)
+    return 1;
+  if (movlle (3L, 5L, 12L, 23L) != 12L)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/movlleu.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/movlleu.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef unsigned long int_t;
+
+__attribute__ ((noinline)) int_t
+movlleu (int_t w, int_t x, int_t y, int_t z)
+{
+  return w <= x ? y : z;
+}
+
+int
+main (void)
+{
+  if (movlleu (-1L, -1L, 12L, 23L) != 12L)
+    return 1;
+  if (movlleu (-1L, 3L, 12L, 23L) != 23L)
+    return 1;
+  if (movlleu (1L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (movlleu (3L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (movlleu (5L, 3L, 12L, 23L) != 23L)
+    return 1;
+  if (movlleu (3L, -1L, 12L, 23L) != 12L)
+    return 1;
+  if (movlleu (3L, 1L, 12L, 23L) != 23L)
+    return 1;
+  if (movlleu (3L, 5L, 12L, 23L) != 12L)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/movllt.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/movllt.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef long int_t;
+
+__attribute__ ((noinline)) int_t
+movllt (int_t w, int_t x, int_t y, int_t z)
+{
+  return w < x ? y : z;
+}
+
+int
+main (void)
+{
+  if (movllt (-1L, -1L, 12L, 23L) != 23L)
+    return 1;
+  if (movllt (-1L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (movllt (1L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (movllt (3L, 3L, 12L, 23L) != 23L)
+    return 1;
+  if (movllt (5L, 3L, 12L, 23L) != 23L)
+    return 1;
+  if (movllt (3L, -1L, 12L, 23L) != 23L)
+    return 1;
+  if (movllt (3L, 1L, 12L, 23L) != 23L)
+    return 1;
+  if (movllt (3L, 5L, 12L, 23L) != 12L)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/movlltu.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/movlltu.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef unsigned long int_t;
+
+__attribute__ ((noinline)) int_t
+movlltu (int_t w, int_t x, int_t y, int_t z)
+{
+  return w < x ? y : z;
+}
+
+int
+main (void)
+{
+  if (movlltu (-1L, -1L, 12L, 23L) != 23L)
+    return 1;
+  if (movlltu (-1L, 3L, 12L, 23L) != 23L)
+    return 1;
+  if (movlltu (1L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (movlltu (3L, 3L, 12L, 23L) != 23L)
+    return 1;
+  if (movlltu (5L, 3L, 12L, 23L) != 23L)
+    return 1;
+  if (movlltu (3L, -1L, 12L, 23L) != 12L)
+    return 1;
+  if (movlltu (3L, 1L, 12L, 23L) != 23L)
+    return 1;
+  if (movlltu (3L, 5L, 12L, 23L) != 12L)
+    return 1;
+  return 0;
+}
Index: gcc/gcc/testsuite/gcc.dg/torture/movlne.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.dg/torture/movlne.c
@@ -0,0 +1,31 @@ 
+/* { dg-do run } */
+
+typedef long int_t;
+
+__attribute__ ((noinline)) int_t
+movlne (int_t w, int_t x, int_t y, int_t z)
+{
+  return w != x ? y : z;
+}
+
+int
+main (void)
+{
+  if (movlne (-1L, -1L, 12L, 23L) != 23L)
+    return 1;
+  if (movlne (-1L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (movlne (1L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (movlne (3L, 3L, 12L, 23L) != 23L)
+    return 1;
+  if (movlne (5L, 3L, 12L, 23L) != 12L)
+    return 1;
+  if (movlne (3L, -1L, 12L, 23L) != 12L)
+    return 1;
+  if (movlne (3L, 1L, 12L, 23L) != 12L)
+    return 1;
+  if (movlne (3L, 5L, 12L, 23L) != 12L)
+    return 1;
+  return 0;
+}