mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-10 09:20:31 +08:00
[multiple changes]
2004-10-09 Roger Sayle <roger@eyesopen.com> PR rtl-optimization/17853 * simplify-rtx.c (simplify_relational_operation): Correct comment. Reorganize handling of comparison operations with floating point results (always return 0.0 even without FLOAT_STORE_FLAG_VALUE). Likewise, introduce support for comparison operations with vector result types, introducing a new VECTOR_STORE_FLAG_VALUE target macro. * doc/rtl.texi: Document new VECTOR_STORE_FLAG_VALUE target macro. * doc/tm.texi: Likewise. 2004-10-09 Stuart Hastings <stuart@apple.com> Roger Sayle <roger@eyesopen.com> PR rtl-optimization/17853 * gcc.dg/i386-mmx-5.c: New testcase. From-SVN: r88826
This commit is contained in:
parent
35ed0a936a
commit
fc7ca5fd39
@ -1,3 +1,15 @@
|
||||
2004-10-09 Roger Sayle <roger@eyesopen.com>
|
||||
|
||||
PR rtl-optimization/17853
|
||||
* simplify-rtx.c (simplify_relational_operation): Correct comment.
|
||||
Reorganize handling of comparison operations with floating point
|
||||
results (always return 0.0 even without FLOAT_STORE_FLAG_VALUE).
|
||||
Likewise, introduce support for comparison operations with vector
|
||||
result types, introducing a new VECTOR_STORE_FLAG_VALUE target macro.
|
||||
|
||||
* doc/rtl.texi: Document new VECTOR_STORE_FLAG_VALUE target macro.
|
||||
* doc/tm.texi: Likewise.
|
||||
|
||||
2004-10-09 Steven Bosscher <stevenb@suse.de>
|
||||
|
||||
* regs.h (struct reg_info_def): Remove the last_node_uid and
|
||||
|
@ -2028,10 +2028,13 @@ Comparison operators test a relation on two operands and are considered
|
||||
to represent a machine-dependent nonzero value described by, but not
|
||||
necessarily equal to, @code{STORE_FLAG_VALUE} (@pxref{Misc})
|
||||
if the relation holds, or zero if it does not, for comparison operators
|
||||
whose results have a `MODE_INT' mode, and
|
||||
whose results have a `MODE_INT' mode,
|
||||
@code{FLOAT_STORE_FLAG_VALUE} (@pxref{Misc}) if the relation holds, or
|
||||
zero if it does not, for comparison operators that return floating-point
|
||||
values. The mode of the comparison operation is independent of the mode
|
||||
values, and a vector of either @code{VECTOR_STORE_FLAG_VALUE} (@pxref{Misc})
|
||||
if the relation holds, or of zeros if it does not, for comparison operators
|
||||
that return vector results.
|
||||
The mode of the comparison operation is independent of the mode
|
||||
of the data being compared. If the comparison operation is being tested
|
||||
(e.g., the first operand of an @code{if_then_else}), the mode must be
|
||||
@code{VOIDmode}.
|
||||
|
@ -8920,11 +8920,23 @@ instructions, or if the value generated by these instructions is 1.
|
||||
@defmac FLOAT_STORE_FLAG_VALUE (@var{mode})
|
||||
A C expression that gives a nonzero @code{REAL_VALUE_TYPE} value that is
|
||||
returned when comparison operators with floating-point results are true.
|
||||
Define this macro on machine that have comparison operations that return
|
||||
Define this macro on machines that have comparison operations that return
|
||||
floating-point values. If there are no such operations, do not define
|
||||
this macro.
|
||||
@end defmac
|
||||
|
||||
@defmac VECTOR_STORE_FLAG_VALUE (@var{mode})
|
||||
A C expression that gives a rtx representing the non-zero true element
|
||||
for vector comparisons. The returned rtx should be valid for the inner
|
||||
mode of @var{mode} which is guaranteed to be a vector mode. Define
|
||||
this macro on machines that have vector comparison operations that
|
||||
return a vector result. If there are no such operations, do not define
|
||||
this macro. Typically, this macro is defined as @code{const1_rtx} or
|
||||
@code{constm1_rtx}. This macro may return @code{NULL_RTX} to prevent
|
||||
the compiler optimizing such vector comparison operations for the
|
||||
given mode.
|
||||
@end defmac
|
||||
|
||||
@defmac CLZ_DEFINED_VALUE_AT_ZERO (@var{mode}, @var{value})
|
||||
@defmacx CTZ_DEFINED_VALUE_AT_ZERO (@var{mode}, @var{value})
|
||||
A C expression that evaluates to true if the architecture defines a value
|
||||
|
@ -2679,7 +2679,7 @@ simplify_plus_minus (enum rtx_code code, enum machine_mode mode, rtx op0,
|
||||
|
||||
/* Like simplify_binary_operation except used for relational operators.
|
||||
MODE is the mode of the result. If MODE is VOIDmode, both operands must
|
||||
also be VOIDmode.
|
||||
not also be VOIDmode.
|
||||
|
||||
CMP_MODE specifies in which mode the comparison is done in, so it is
|
||||
the mode of the operands. If CMP_MODE is VOIDmode, it is taken from
|
||||
@ -2699,19 +2699,45 @@ simplify_relational_operation (enum rtx_code code, enum machine_mode mode,
|
||||
tem = simplify_const_relational_operation (code, cmp_mode, op0, op1);
|
||||
if (tem)
|
||||
{
|
||||
#ifdef FLOAT_STORE_FLAG_VALUE
|
||||
if (GET_MODE_CLASS (mode) == MODE_FLOAT)
|
||||
{
|
||||
if (tem == const0_rtx)
|
||||
return CONST0_RTX (mode);
|
||||
else if (GET_MODE_CLASS (mode) == MODE_FLOAT)
|
||||
{
|
||||
REAL_VALUE_TYPE val;
|
||||
val = FLOAT_STORE_FLAG_VALUE (mode);
|
||||
return CONST_DOUBLE_FROM_REAL_VALUE (val, mode);
|
||||
}
|
||||
#ifdef FLOAT_STORE_FLAG_VALUE
|
||||
{
|
||||
REAL_VALUE_TYPE val;
|
||||
val = FLOAT_STORE_FLAG_VALUE (mode);
|
||||
return CONST_DOUBLE_FROM_REAL_VALUE (val, mode);
|
||||
}
|
||||
#else
|
||||
return NULL_RTX;
|
||||
#endif
|
||||
}
|
||||
if (VECTOR_MODE_P (mode))
|
||||
{
|
||||
if (tem == const0_rtx)
|
||||
return CONST0_RTX (mode);
|
||||
#ifdef VECTOR_STORE_FLAG_VALUE
|
||||
{
|
||||
int i, units;
|
||||
rtvec c;
|
||||
|
||||
rtx val = VECTOR_STORE_FLAG_VALUE (mode);
|
||||
if (val == NULL_RTX)
|
||||
return NULL_RTX;
|
||||
if (val == const1_rtx)
|
||||
return CONST1_RTX (mode);
|
||||
|
||||
units = GET_MODE_NUNITS (mode);
|
||||
v = rtvec_alloc (units);
|
||||
for (i = 0; i < units; i++)
|
||||
RTVEC_ELT (v, i) = val;
|
||||
return gen_rtx_raw_CONST_VECTOR (mode, v);
|
||||
}
|
||||
#else
|
||||
return NULL_RTX;
|
||||
#endif
|
||||
}
|
||||
|
||||
return tem;
|
||||
}
|
||||
|
@ -1,3 +1,9 @@
|
||||
2004-10-09 Stuart Hastings <stuart@apple.com>
|
||||
Roger Sayle <roger@eyesopen.com>
|
||||
|
||||
PR rtl-optimization/17853
|
||||
* gcc.dg/i386-mmx-5.c: New testcase.
|
||||
|
||||
2004-10-09 Andrew Pinski <pinskia@physics.uc.edu>
|
||||
|
||||
* g++.dg/opt/pr17902.C: Fix typo in dg-do.
|
||||
|
18
gcc/testsuite/gcc.dg/i386-mmx-5.c
Normal file
18
gcc/testsuite/gcc.dg/i386-mmx-5.c
Normal file
@ -0,0 +1,18 @@
|
||||
/* PR rtl-optimization/17853 */
|
||||
/* Contributed by Stuart Hastings <stuart@apple.com> */
|
||||
/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
|
||||
/* { dg-options "-O2 -mmmx" } */
|
||||
#include <mmintrin.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
__m64 global_mask;
|
||||
|
||||
int main()
|
||||
{
|
||||
__m64 zero = _mm_setzero_si64();
|
||||
__m64 mask = _mm_cmpeq_pi8( zero, zero );
|
||||
mask = _mm_unpacklo_pi8( mask, zero );
|
||||
global_mask = mask;
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user