From dbe804d9cf7ae11df64f40cbd7fb33e329b368a0 Mon Sep 17 00:00:00 2001 From: dje Date: Fri, 29 Apr 2016 17:20:36 +0000 Subject: [PATCH] PR target/69810 * config/rs6000/rs6000.md (EXTQI): Don't allow extension to HImode. (zero_extendqi2_dot): Revert earlier conversion from define_insn_and_split to define_insn. (zero_extendqi2_dot2): Same. (extendqi2_dot): Same. (extendqi2_dot2): Same. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@235646 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 10 ++++++++++ gcc/config/rs6000/rs6000.md | 46 ++++++++++++++++++++++++++++++++++++--------- 2 files changed, 47 insertions(+), 9 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 01f2580cc77..1b06c04e430 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2016-04-29 David Edelsohn + + PR target/69810 + * config/rs6000/rs6000.md (EXTQI): Don't allow extension to HImode. + (zero_extendqi2_dot): Revert earlier conversion from + define_insn_and_split to define_insn. + (zero_extendqi2_dot2): Same. + (extendqi2_dot): Same. + (extendqi2_dot2): Same. + 2016-04-29 Uros Bizjak * config/i386/i386.md (unspec): Add UNSPEC_PROBE_STACK. diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index 849b19a7b0b..5566185076a 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -322,7 +322,7 @@ (define_mode_iterator INT1 [QI HI SI (DI "TARGET_POWERPC64")]) ; Everything we can extend QImode to. -(define_mode_iterator EXTQI [HI SI (DI "TARGET_POWERPC64")]) +(define_mode_iterator EXTQI [SI (DI "TARGET_POWERPC64")]) ; Everything we can extend HImode to. (define_mode_iterator EXTHI [SI (DI "TARGET_POWERPC64")]) @@ -711,7 +711,7 @@ rlwinm %0,%1,0,0xff" [(set_attr "type" "load,shift")]) -(define_insn "*zero_extendqi2_dot" +(define_insn_and_split "*zero_extendqi2_dot" [(set (match_operand:CC 2 "cc_reg_operand" "=x,?y") (compare:CC (zero_extend:EXTQI (match_operand:QI 1 "gpc_reg_operand" "r,r")) (const_int 0))) @@ -719,12 +719,19 @@ "rs6000_gen_cell_microcode" "@ andi. %0,%1,0xff - rlwinm %0,%1,0,0xff\;cmpwi %2,%0,0" + #" + "&& reload_completed && cc_reg_not_cr0_operand (operands[2], CCmode)" + [(set (match_dup 0) + (zero_extend:EXTQI (match_dup 1))) + (set (match_dup 2) + (compare:CC (match_dup 0) + (const_int 0)))] + "" [(set_attr "type" "logical") (set_attr "dot" "yes") (set_attr "length" "4,8")]) -(define_insn "*zero_extendqi2_dot2" +(define_insn_and_split "*zero_extendqi2_dot2" [(set (match_operand:CC 2 "cc_reg_operand" "=x,?y") (compare:CC (zero_extend:EXTQI (match_operand:QI 1 "gpc_reg_operand" "r,r")) (const_int 0))) @@ -733,7 +740,14 @@ "rs6000_gen_cell_microcode" "@ andi. %0,%1,0xff - rlwinm %0,%1,0,0xff\;cmpwi %2,%0,0" + #" + "&& reload_completed && cc_reg_not_cr0_operand (operands[2], CCmode)" + [(set (match_dup 0) + (zero_extend:EXTQI (match_dup 1))) + (set (match_dup 2) + (compare:CC (match_dup 0) + (const_int 0)))] + "" [(set_attr "type" "logical") (set_attr "dot" "yes") (set_attr "length" "4,8")]) @@ -851,7 +865,7 @@ "extsb %0,%1" [(set_attr "type" "exts")]) -(define_insn "*extendqi2_dot" +(define_insn_and_split "*extendqi2_dot" [(set (match_operand:CC 2 "cc_reg_operand" "=x,?y") (compare:CC (sign_extend:EXTQI (match_operand:QI 1 "gpc_reg_operand" "r,r")) (const_int 0))) @@ -859,12 +873,19 @@ "rs6000_gen_cell_microcode" "@ extsb. %0,%1 - extsb %0,%1\;cmpwi %2,%0,0" + #" + "&& reload_completed && cc_reg_not_cr0_operand (operands[2], CCmode)" + [(set (match_dup 0) + (sign_extend:EXTQI (match_dup 1))) + (set (match_dup 2) + (compare:CC (match_dup 0) + (const_int 0)))] + "" [(set_attr "type" "exts") (set_attr "dot" "yes") (set_attr "length" "4,8")]) -(define_insn "*extendqi2_dot2" +(define_insn_and_split "*extendqi2_dot2" [(set (match_operand:CC 2 "cc_reg_operand" "=x,?y") (compare:CC (sign_extend:EXTQI (match_operand:QI 1 "gpc_reg_operand" "r,r")) (const_int 0))) @@ -873,7 +894,14 @@ "rs6000_gen_cell_microcode" "@ extsb. %0,%1 - extsb %0,%1\;cmpwi %2,%0,0" + #" + "&& reload_completed && cc_reg_not_cr0_operand (operands[2], CCmode)" + [(set (match_dup 0) + (sign_extend:EXTQI (match_dup 1))) + (set (match_dup 2) + (compare:CC (match_dup 0) + (const_int 0)))] + "" [(set_attr "type" "exts") (set_attr "dot" "yes") (set_attr "length" "4,8")]) -- 2.11.4.GIT