diff options
author | Doug Gilbert <dgilbert@us.ibm.com> | 2015-12-14 09:44:29 -0600 |
---|---|---|
committer | Patrick Williams <patrick@stwcx.xyz> | 2016-08-15 11:45:09 -0500 |
commit | 70f39347266ca3bc76f93be6f5f7cb25bf171dd8 (patch) | |
tree | b730e02bfc8bddce971b531d3514c3b05045d659 | |
parent | 63e29f0ff006e97a1bcf206f6382874c26f660f6 (diff) | |
download | ppe42-gcc-70f39347266ca3bc76f93be6f5f7cb25bf171dd8.tar.gz ppe42-gcc-70f39347266ca3bc76f93be6f5f7cb25bf171dd8.zip |
Unsigned compare immediate branch emitting wrong instructions
-rw-r--r-- | gcc/config/rs6000/predicates.md | 4 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 4 |
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); |