From: krebbel Date: Fri, 20 Nov 2015 07:36:07 +0000 (+0000) Subject: S/390: Clobber r1 in patterns resulting in pfpo instruction. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2777447815a59c36fa66e9b1d7386a42d183da70;p=thirdparty%2Fgcc.git S/390: Clobber r1 in patterns resulting in pfpo instruction. gcc/ChangeLog * config/s390/s390.md (GPR1_REGNUM): New constant. ("*trunc2") ("*trunc2") ("trunc2") ("trunc2") ("*extend2") ("*extend2") ("extend2") ("extend2"): Clobber r1. gcc/testsuite/ChangeLog * gcc.target/s390/pfpo.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@230642 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 949e12e580ef..0a04eaa2d583 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,15 @@ +2015-11-20 Dominik Vogt + + * config/s390/s390.md (GPR1_REGNUM): New constant. + ("*trunc2") + ("*trunc2") + ("trunc2") + ("trunc2") + ("*extend2") + ("*extend2") + ("extend2") + ("extend2"): Clobber r1. + 2015-11-19 Aditya Kumar Sebastian Pop diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md index ea65c746fca0..f2bb24c24318 100644 --- a/gcc/config/s390/s390.md +++ b/gcc/config/s390/s390.md @@ -301,6 +301,7 @@ [ ; General purpose registers (GPR0_REGNUM 0) + (GPR1_REGNUM 1) ; Floating point registers. (FPR0_REGNUM 16) (FPR1_REGNUM 20) @@ -4895,7 +4896,8 @@ [(set (reg:DFP_ALL FPR0_REGNUM) (float_truncate:DFP_ALL (reg:BFP FPR4_REGNUM))) (use (reg:SI GPR0_REGNUM)) - (clobber (reg:CC CC_REGNUM))] + (clobber (reg:CC CC_REGNUM)) + (clobber (reg:SI GPR1_REGNUM))] "TARGET_HARD_DFP" "pfpo") @@ -4903,7 +4905,8 @@ [(set (reg:BFP FPR0_REGNUM) (float_truncate:BFP (reg:DFP_ALL FPR4_REGNUM))) (use (reg:SI GPR0_REGNUM)) - (clobber (reg:CC CC_REGNUM))] + (clobber (reg:CC CC_REGNUM)) + (clobber (reg:SI GPR1_REGNUM))] "TARGET_HARD_DFP" "pfpo") @@ -4914,7 +4917,8 @@ [(set (reg:DFP_ALL FPR0_REGNUM) (float_truncate:DFP_ALL (reg:BFP FPR4_REGNUM))) (use (reg:SI GPR0_REGNUM)) - (clobber (reg:CC CC_REGNUM))]) + (clobber (reg:CC CC_REGNUM)) + (clobber (reg:SI GPR1_REGNUM))]) (set (match_operand:DFP_ALL 0 "nonimmediate_operand" "") (reg:DFP_ALL FPR0_REGNUM))] "TARGET_HARD_DFP @@ -4936,7 +4940,8 @@ (parallel [(set (reg:BFP FPR0_REGNUM) (float_truncate:BFP (reg:DFP_ALL FPR4_REGNUM))) (use (reg:SI GPR0_REGNUM)) - (clobber (reg:CC CC_REGNUM))]) + (clobber (reg:CC CC_REGNUM)) + (clobber (reg:SI GPR1_REGNUM))]) (set (match_operand:BFP 0 "nonimmediate_operand" "") (reg:BFP FPR0_REGNUM))] "TARGET_HARD_DFP && GET_MODE_SIZE (mode) >= GET_MODE_SIZE (mode)" @@ -4957,14 +4962,16 @@ (define_insn "*extend2" [(set (reg:DFP_ALL FPR0_REGNUM) (float_extend:DFP_ALL (reg:BFP FPR4_REGNUM))) (use (reg:SI GPR0_REGNUM)) - (clobber (reg:CC CC_REGNUM))] + (clobber (reg:CC CC_REGNUM)) + (clobber (reg:SI GPR1_REGNUM))] "TARGET_HARD_DFP" "pfpo") (define_insn "*extend2" [(set (reg:BFP FPR0_REGNUM) (float_extend:BFP (reg:DFP_ALL FPR4_REGNUM))) (use (reg:SI GPR0_REGNUM)) - (clobber (reg:CC CC_REGNUM))] + (clobber (reg:CC CC_REGNUM)) + (clobber (reg:SI GPR1_REGNUM))] "TARGET_HARD_DFP" "pfpo") @@ -4975,7 +4982,8 @@ [(set (reg:DFP_ALL FPR0_REGNUM) (float_extend:DFP_ALL (reg:BFP FPR4_REGNUM))) (use (reg:SI GPR0_REGNUM)) - (clobber (reg:CC CC_REGNUM))]) + (clobber (reg:CC CC_REGNUM)) + (clobber (reg:SI GPR1_REGNUM))]) (set (match_operand:DFP_ALL 0 "nonimmediate_operand" "") (reg:DFP_ALL FPR0_REGNUM))] "TARGET_HARD_DFP @@ -4997,7 +5005,8 @@ (parallel [(set (reg:BFP FPR0_REGNUM) (float_extend:BFP (reg:DFP_ALL FPR4_REGNUM))) (use (reg:SI GPR0_REGNUM)) - (clobber (reg:CC CC_REGNUM))]) + (clobber (reg:CC CC_REGNUM)) + (clobber (reg:SI GPR1_REGNUM))]) (set (match_operand:BFP 0 "nonimmediate_operand" "") (reg:BFP FPR0_REGNUM))] "TARGET_HARD_DFP && GET_MODE_SIZE (mode) < GET_MODE_SIZE (mode)" diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c8a7238f977a..247aa3accf14 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2015-11-20 Dominik Vogt + + * gcc.target/s390/pfpo.c: New test. + 2015-11-20 Kirill Yukhin * c-c++-common/attr-simd-3.c: Put xfail (PR68158) on dg-error. diff --git a/gcc/testsuite/gcc.target/s390/pfpo.c b/gcc/testsuite/gcc.target/s390/pfpo.c new file mode 100644 index 000000000000..32725c991a62 --- /dev/null +++ b/gcc/testsuite/gcc.target/s390/pfpo.c @@ -0,0 +1,21 @@ +/* The pfpo instruction generated by this code clobbers the r1 register while + it was still in use. */ + +/* { dg-do run } */ +/* { dg-options "-O0 -march=z10 -mzarch" } */ + +int foo(int x) +{ + return x; +} + +int bar(int i, float f) +{ + return i; +} + +int main() +{ + _Decimal32 d = 7; + return bar(foo(0x10203040), (float)d) == 0x10203040 ? 0 : 1; +}