s390: Fix constraint for insn *cmphi_ccu
Currently for an unsigned 16-bit comparison between memory and an immediate where the high bit is set, a clc is emitted. This is because the constant is created for mode HI and therefore sign extended. This means constraint D does not hold anymore. Since the mode already restricts the immediate to 16 bit, it is enough to make use of constraint n and chop of the high bits in the output template. gcc/ChangeLog: * config/s390/s390.md (*cmphi_ccu): For immediate operand 1 make use of constraint n instead of D and chop of high bits in the output template.
This commit is contained in:
parent
221166ad15
commit
74a7bb2c50
1 changed files with 2 additions and 2 deletions
|
@ -1356,13 +1356,13 @@
|
|||
(define_insn "*cmphi_ccu"
|
||||
[(set (reg CC_REGNUM)
|
||||
(compare (match_operand:HI 0 "nonimmediate_operand" "d,d,Q,Q,BQ")
|
||||
(match_operand:HI 1 "general_operand" "Q,S,D,BQ,Q")))]
|
||||
(match_operand:HI 1 "general_operand" "Q,S,n,BQ,Q")))]
|
||||
"s390_match_ccmode (insn, CCUmode)
|
||||
&& !register_operand (operands[1], HImode)"
|
||||
"@
|
||||
clm\t%0,3,%S1
|
||||
clmy\t%0,3,%S1
|
||||
clhhsi\t%0,%1
|
||||
clhhsi\t%0,%x1
|
||||
#
|
||||
#"
|
||||
[(set_attr "op_type" "RS,RSY,SIL,SS,SS")
|
||||
|
|
Loading…
Add table
Reference in a new issue