summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDoug Gilbert <dgilbert@us.ibm.com>2015-12-14 09:44:29 -0600
committerPatrick Williams <patrick@stwcx.xyz>2016-08-15 11:45:09 -0500
commit70f39347266ca3bc76f93be6f5f7cb25bf171dd8 (patch)
treeb730e02bfc8bddce971b531d3514c3b05045d659
parent63e29f0ff006e97a1bcf206f6382874c26f660f6 (diff)
downloadppe42-gcc-70f39347266ca3bc76f93be6f5f7cb25bf171dd8.tar.gz
ppe42-gcc-70f39347266ca3bc76f93be6f5f7cb25bf171dd8.zip
Unsigned compare immediate branch emitting wrong instructions
-rw-r--r--gcc/config/rs6000/predicates.md4
-rw-r--r--gcc/config/rs6000/rs6000.c4
2 files changed, 7 insertions, 1 deletions
diff --git a/gcc/config/rs6000/predicates.md b/gcc/config/rs6000/predicates.md
index eac07c71f59..a3b86dc8ff3 100644
--- a/gcc/config/rs6000/predicates.md
+++ b/gcc/config/rs6000/predicates.md
@@ -1207,6 +1207,10 @@
{
if(GET_CODE(XEXP(op,1)) == CONST_INT )
{
+ if(GET_CODE( op ) == GEU ||
+ GET_CODE( op ) == GTU ||
+ GET_CODE( op ) == LEU ||
+ GET_CODE( op ) == LTU) return 0;
if((INTVAL(XEXP(op,1)) < 32) && (INTVAL(XEXP(op,1)) >= 0)) return 1;
else return 0;
}
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 1ada02f42a4..62c2a52b450 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -19148,12 +19148,14 @@ rs6000_emit_cbranch (enum machine_mode mode, rtx operands[])
//debug_rtx(loc_ref); // (label_ref 0)
loc_ref = gen_rtx_LABEL_REF (VOIDmode, operands[3]);
+ enum rtx_code code = GET_CODE (operands[0]);
// Split the compare and branch if not PPE42 or not optimized for size
// or can't meet the constraints of fused compare-branch.
if( (rs6000_cpu != PROCESSOR_PPE42) || !optimize_size ||
((GET_CODE (operands[2]) == CONST_INT) &&
- ((INTVAL(operands[2]) < 0) || (INTVAL(operands[2]) > 31))))
+ ((INTVAL(operands[2]) < 0) || (INTVAL(operands[2]) > 31) ||
+ code==GTU || code==GEU || code==LTU || code==LEU )))
{
condition_rtx = rs6000_generate_compare (operands[0], mode);
OpenPOWER on IntegriCloud