diff options
author | krebbel <krebbel@138bc75d-0d04-0410-961f-82ee72b054a4> | 2017-04-25 07:31:22 +0000 |
---|---|---|
committer | krebbel <krebbel@138bc75d-0d04-0410-961f-82ee72b054a4> | 2017-04-25 07:31:22 +0000 |
commit | ec80f584d6d9b6ba245c3cb8e23dc9911a428137 (patch) | |
tree | 423d691896e4cab7d3de7f7be2629822f3950cbf /gcc/config/s390/s390.md | |
parent | 058e17ce15bf30197329a335563b3d2f6129c0a8 (diff) | |
download | gcc-ec80f584d6d9b6ba245c3cb8e23dc9911a428137.tar.gz |
S/390: Use load-on-condition in cstorecc4
gcc/ChangeLog:
2017-04-25 Dominik Vogt <vogt@linux.vnet.ibm.com>
* config/s390/s390.md ("cstorecc4"): Use load-on-condition and deal
with CCZmode for TARGET_Z196.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@247130 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/s390/s390.md')
-rw-r--r-- | gcc/config/s390/s390.md | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md index 59f189c5e97..6a1cab6947a 100644 --- a/gcc/config/s390/s390.md +++ b/gcc/config/s390/s390.md @@ -6518,13 +6518,30 @@ [(parallel [(set (match_operand:SI 0 "register_operand" "") (match_operator:SI 1 "s390_eqne_operator" - [(match_operand:CCZ1 2 "register_operand") + [(match_operand 2 "cc_reg_operand") (match_operand 3 "const0_operand")])) (clobber (reg:CC CC_REGNUM))])] "" - "emit_insn (gen_sne (operands[0], operands[2])); - if (GET_CODE (operands[1]) == EQ) - emit_insn (gen_xorsi3 (operands[0], operands[0], const1_rtx)); + "machine_mode mode = GET_MODE (operands[2]); + if (TARGET_Z196) + { + rtx cond, ite; + + if (GET_CODE (operands[1]) == NE) + cond = gen_rtx_NE (VOIDmode, operands[2], const0_rtx); + else + cond = gen_rtx_EQ (VOIDmode, operands[2], const0_rtx); + ite = gen_rtx_IF_THEN_ELSE (SImode, cond, const1_rtx, const0_rtx); + emit_insn (gen_rtx_SET (operands[0], ite)); + } + else + { + if (mode != CCZ1mode) + FAIL; + emit_insn (gen_sne (operands[0], operands[2])); + if (GET_CODE (operands[1]) == EQ) + emit_insn (gen_xorsi3 (operands[0], operands[0], const1_rtx)); + } DONE;") (define_insn_and_split "sne" |