|
From: <sv...@va...> - 2007-01-29 00:52:49
|
Author: sewardj
Date: 2007-01-29 00:52:43 +0000 (Mon, 29 Jan 2007)
New Revision: 6557
Log:
Add regtest against vex cse failure that surfaced in 3.2.2.
Added:
trunk/none/tests/x86/cse_fail.c
trunk/none/tests/x86/cse_fail.stderr.exp
trunk/none/tests/x86/cse_fail.stdout.exp
trunk/none/tests/x86/cse_fail.vgtest
Modified:
trunk/none/tests/x86/Makefile.am
Modified: trunk/none/tests/x86/Makefile.am
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/none/tests/x86/Makefile.am 2007-01-28 06:32:01 UTC (rev 6556)
+++ trunk/none/tests/x86/Makefile.am 2007-01-29 00:52:43 UTC (rev 6557)
@@ -15,6 +15,7 @@
bug137714-x86.stderr.exp bug137714-x86.stdout.exp bug137714-x86.vgtest =
\
cpuid.stderr.exp cpuid.stdout.exp cpuid.vgtest \
cmpxchg8b.stderr.exp cmpxchg8b.stdout.exp cmpxchg8b.vgtest \
+ cse_fail.stderr.exp cse_fail.stdout.exp cse_fail.vgtest \
faultstatus.disabled faultstatus.stderr.exp \
fcmovnu.vgtest fcmovnu.stderr.exp fcmovnu.stdout.exp \
fpu_lazy_eflags.stderr.exp fpu_lazy_eflags.stdout.exp \
@@ -44,7 +45,7 @@
bug132813-x86 \
bug135421-x86 \
bug137714-x86 \
- cmpxchg8b cpuid \
+ cmpxchg8b cpuid cse_fail \
faultstatus fcmovnu fpu_lazy_eflags fxtract \
getseg incdec_alt $(INSN_TESTS) \
jcxz \
Added: trunk/none/tests/x86/cse_fail.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/none/tests/x86/cse_fail.c (rev 0)
+++ trunk/none/tests/x86/cse_fail.c 2007-01-29 00:52:43 UTC (rev 6557)
@@ -0,0 +1,62 @@
+
+/* This isn't really an x86 specific test. It checks for an
+ iropt CSE failure that appeared in 3.2.2:
+
+ex: the `impossible' happened:
+ eqIRConst
+vex storage: T total 68337344 bytes allocated
+
+valgrind: the 'impossible' happened:
+ LibVEX called failure_exit().
+=3D=3D23986=3D=3D at 0x38017803: report_and_quit (m_libcassert.c:136)
+=3D=3D23986=3D=3D by 0x38017941: panic (m_libcassert.c:210)
+=3D=3D23986=3D=3D by 0x38017997: vgPlain_core_panic_at (m_libcassert.=
c:215)
+=3D=3D23986=3D=3D by 0x380179B5: vgPlain_core_panic (m_libcassert.c:2=
20)
+=3D=3D23986=3D=3D by 0x3802A650: failure_exit (m_translate.c:487)
+=3D=3D23986=3D=3D by 0x38071678: vpanic (vex_util.c:225)
+=3D=3D23986=3D=3D by 0x3806A1B0: eqIRConst (irdefs.c:2576)
+=3D=3D23986=3D=3D by 0x3810BB84: do_cse_BB (iropt.c:2279)
+=3D=3D23986=3D=3D by 0x3810CBBD: do_iropt_BB (iropt.c:4208)
+=3D=3D23986=3D=3D by 0x3807010B: LibVEX_Translate (vex_main.c:478)
+=3D=3D23986=3D=3D by 0x38029365: vgPlain_translate (m_translate.c:109=
7)
+=3D=3D23986=3D=3D by 0x38037610: vgPlain_scheduler (scheduler.c:693)
+=3D=3D23986=3D=3D by 0x38052FBE: run_a_thread_NORETURN (syswrap-linux=
.c:87)
+*/
+
+#include <stdio.h>
+
+int main ( void )
+{
+ /* This bombs 3.2.2 w/ V128 non-match in eqIRConst. */
+ printf("V128 cse:\n");
+ __asm__ __volatile__(
+ "pxor %%xmm0,%%xmm0\n\t"
+ "movaps %%xmm1,%%xmm2\n\t"
+ "addps %%xmm0,%%xmm1\n\t"
+ "addps %%xmm0,%%xmm2\n\t"
+ "addps %%xmm1,%%xmm2\n\t"
+ : : : "xmm0","xmm1", "st"
+ );
+
+ /* This ought to cause it to fail w/ F64i non-match in eqIRConst,
+ but it doesn't. I don't understand why not. */
+ printf("F64i cse:\n");
+ __asm__ __volatile__(
+ "fninit\n\t"
+
+ "fldz\n\t"
+ "fldz\n\t"
+ "fstp %%st(4)\n\t"
+ "fstp %%st(3)\n\t"
+
+ "fldpi\n\t"
+ "fldpi\n\t"
+ "fsqrt\n\t"
+ "fxch %%st(1)\n\t"
+ "fsqrt\n\t"
+ "faddp %%st(1)\n\t"
+
+ : : : "st"
+ );
+ return 0;
+}
Added: trunk/none/tests/x86/cse_fail.stderr.exp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
Added: trunk/none/tests/x86/cse_fail.stdout.exp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/none/tests/x86/cse_fail.stdout.exp (rev=
0)
+++ trunk/none/tests/x86/cse_fail.stdout.exp 2007-01-29 00:52:43 UTC (rev=
6557)
@@ -0,0 +1,2 @@
+V128 cse:
+F64i cse:
Added: trunk/none/tests/x86/cse_fail.vgtest
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/none/tests/x86/cse_fail.vgtest (rev 0)
+++ trunk/none/tests/x86/cse_fail.vgtest 2007-01-29 00:52:43 UTC (rev 655=
7)
@@ -0,0 +1,3 @@
+prog: cse_fail
+prereq: ../../../tests/cputest x86-sse
+vgopts: -q
|