htm-nofloat-1.c: Rename to ...
2014-04-11 Andreas Krebbel <Andreas.Krebbel@de.ibm.com> * gcc.target/s390/htm-nofloat-1.c: Rename to ... * gcc.target/s390/htm-nofloat-compile-1.c: ... this one. * gcc.target/s390/htm-nofloat-2.c: Add check for htm target and rename to ... * gcc.target/s390/htm-nofloat-1.c: ... this one. * gcc.target/s390/s390.exp: Make sure the assembler supports htm instructions as well. From-SVN: r209294
This commit is contained in:
parent
d8d6ea53a7
commit
8f0ad2e592
|
@ -1,3 +1,13 @@
|
|||
2014-04-11 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
|
||||
|
||||
* gcc.target/s390/htm-nofloat-1.c: Rename to ...
|
||||
* gcc.target/s390/htm-nofloat-compile-1.c: ... this one.
|
||||
* gcc.target/s390/htm-nofloat-2.c: Add check for htm target and
|
||||
rename to ...
|
||||
* gcc.target/s390/htm-nofloat-1.c: ... this one.
|
||||
* gcc.target/s390/s390.exp: Make sure the assembler supports htm
|
||||
instructions as well.
|
||||
|
||||
2014-04-11 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR rtl-optimization/60663
|
||||
|
|
|
@ -1,12 +1,50 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O3 -march=zEC12 -mzarch" } */
|
||||
/* { dg-do run } */
|
||||
/* { dg-require-effective-target htm } */
|
||||
/* { dg-options "-O3 -march=zEC12 -mzarch --save-temps" } */
|
||||
|
||||
int
|
||||
foo ()
|
||||
/* __builtin_tbegin has to emit clobbers for all FPRs since the tbegin
|
||||
instruction does not automatically preserves them. If the
|
||||
transaction body is fully contained in a function the backend tries
|
||||
after reload to get rid of the FPR save/restore operations
|
||||
triggered by the clobbers. This testcase failed since the backend
|
||||
was able to get rid of all FPR saves/restores and since these were
|
||||
the only stack operations also of the entire stack space. So even
|
||||
the save/restore of the stack pointer was omitted in the end.
|
||||
However, since the frame layout has been fixed before, the prologue
|
||||
still generated the stack pointer decrement making foo return with
|
||||
a modified stack pointer. */
|
||||
|
||||
void abort(void);
|
||||
|
||||
void __attribute__((noinline))
|
||||
foo (int a)
|
||||
{
|
||||
__builtin_tbegin_nofloat (0);
|
||||
__builtin_tbegin_retry_nofloat (0, 42);
|
||||
if (__builtin_tbegin (0) == 0)
|
||||
__builtin_tend ();
|
||||
}
|
||||
|
||||
#ifdef __s390x__
|
||||
#define GET_STACK_POINTER(SP) \
|
||||
asm volatile ("stg %%r15, %0" : "=QRST" (SP));
|
||||
#else
|
||||
#define GET_STACK_POINTER(SP) \
|
||||
asm volatile ("st %%r15, %0" : "=QR" (SP));
|
||||
#endif
|
||||
|
||||
int main(void)
|
||||
{
|
||||
unsigned long new_sp, old_sp;
|
||||
|
||||
GET_STACK_POINTER (old_sp);
|
||||
foo(42);
|
||||
GET_STACK_POINTER (new_sp);
|
||||
|
||||
if (old_sp != new_sp)
|
||||
abort ();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Make sure no FPR saves/restores are emitted. */
|
||||
/* { dg-final { scan-assembler-not "std" } } */
|
||||
/* { dg-final { scan-assembler-not "ld" } } */
|
||||
/* { dg-final { scan-assembler-not "\tstd\t" } } */
|
||||
/* { dg-final { scan-assembler-not "\tld\t" } } */
|
||||
|
|
|
@ -1,55 +0,0 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-options "-O3 -mhtm -Wa,-march=zEC12,-mzarch --save-temps" } */
|
||||
|
||||
/* __builtin_tbegin has to emit clobbers for all FPRs since the tbegin
|
||||
instruction does not automatically preserves them. If the
|
||||
transaction body is fully contained in a function the backend tries
|
||||
after reload to get rid of the FPR save/restore operations
|
||||
triggered by the clobbers. This testcase failed since the backend
|
||||
was able to get rid of all FPR saves/restores and since these were
|
||||
the only stack operations also of the entire stack space. So even
|
||||
the save/restore of the stack pointer was omitted in the end.
|
||||
However, since the frame layout has been fixed before, the prologue
|
||||
still generated the stack pointer decrement making foo return with
|
||||
a modified stack pointer. */
|
||||
|
||||
void abort(void);
|
||||
|
||||
void __attribute__((noinline))
|
||||
foo (int a)
|
||||
{
|
||||
/* This is just to prevent the tbegin code from actually being
|
||||
executed. That way the test may even run on machines prior to
|
||||
zEC12. */
|
||||
if (a == 42)
|
||||
return;
|
||||
|
||||
if (__builtin_tbegin (0) == 0)
|
||||
__builtin_tend ();
|
||||
}
|
||||
|
||||
#ifdef __s390x__
|
||||
#define GET_STACK_POINTER(SP) \
|
||||
asm volatile ("stg %%r15, %0" : "=QRST" (SP));
|
||||
#else
|
||||
#define GET_STACK_POINTER(SP) \
|
||||
asm volatile ("st %%r15, %0" : "=QR" (SP));
|
||||
#endif
|
||||
|
||||
int main(void)
|
||||
{
|
||||
unsigned long new_sp, old_sp;
|
||||
|
||||
GET_STACK_POINTER (old_sp);
|
||||
foo(42);
|
||||
GET_STACK_POINTER (new_sp);
|
||||
|
||||
if (old_sp != new_sp)
|
||||
abort ();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Make sure no FPR saves/restores are emitted. */
|
||||
/* { dg-final { scan-assembler-not "\tstd\t" } } */
|
||||
/* { dg-final { scan-assembler-not "\tld\t" } } */
|
|
@ -0,0 +1,12 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O3 -march=zEC12 -mzarch" } */
|
||||
|
||||
int
|
||||
foo ()
|
||||
{
|
||||
__builtin_tbegin_nofloat (0);
|
||||
__builtin_tbegin_retry_nofloat (0, 42);
|
||||
}
|
||||
/* Make sure no FPR saves/restores are emitted. */
|
||||
/* { dg-final { scan-assembler-not "std" } } */
|
||||
/* { dg-final { scan-assembler-not "ld" } } */
|
|
@ -24,17 +24,17 @@ if ![istarget s390*-*-*] then {
|
|||
# Load support procs.
|
||||
load_lib gcc-dg.exp
|
||||
|
||||
# Return 1 if htm (etnd - extract nesting depth) instructions can be
|
||||
# compiled.
|
||||
# Return 1 if htm (etnd - extract nesting depth) instructions are
|
||||
# understood by the assembler and can be executed.
|
||||
proc check_effective_target_htm { } {
|
||||
if { ![check_runtime s390_check_htm [subst {
|
||||
int main (void)
|
||||
{
|
||||
unsigned int nd = 77;
|
||||
asm (".insn rre,0xb2ec0000,%0,0" : "=d" (nd));
|
||||
unsigned int nd;
|
||||
asm ("etnd %0" : "=d" (nd));
|
||||
return nd;
|
||||
}
|
||||
}]] } { return 0 } else { return 1 }
|
||||
}] "-march=zEC12 -mzarch" ] } { return 0 } else { return 1 }
|
||||
}
|
||||
|
||||
# If a testcase doesn't have special options, use these.
|
||||
|
|
Loading…
Reference in New Issue