From a1c48edc71e032f01eb3661bb8fccf46cf98306c Mon Sep 17 00:00:00 2001
From: Richard Sandiford <rdsandiford@googlemail.com>
Date: Sun, 27 Nov 2011 10:18:25 +0000
Subject: [PATCH] re PR target/51278 (gcc.target/mips/octeon-baddu-1.c fails on
 the trunk)

gcc/
	PR target/51278
	* config/mips/mips.c (mips_rtx_costs): Handle baddu.

From-SVN: r181763
---
 gcc/ChangeLog          |  5 +++++
 gcc/config/mips/mips.c | 10 ++++++++++
 2 files changed, 15 insertions(+)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 88ad9d84baf7..2105c646c3af 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2011-11-27  Richard Sandiford  <rdsandiford@googlemail.com>
+
+	PR target/51278
+	* config/mips/mips.c (mips_rtx_costs): Handle baddu.
+
 2011-11-27  Richard Sandiford  <rdsandiford@googlemail.com>
 
 	* config/mips/mips.c (mips16_unextended_reference_p): Test for BLKmode.
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c
index 0559a9b78d95..d3fd7097f573 100644
--- a/gcc/config/mips/mips.c
+++ b/gcc/config/mips/mips.c
@@ -3777,6 +3777,16 @@ mips_rtx_costs (rtx x, int code, int outer_code, int opno ATTRIBUTE_UNUSED,
       return false;
 
     case ZERO_EXTEND:
+      if (outer_code == SET
+	  && ISA_HAS_BADDU
+	  && (GET_CODE (XEXP (x, 0)) == TRUNCATE
+	      || GET_CODE (XEXP (x, 0)) == SUBREG)
+	  && GET_MODE (XEXP (x, 0)) == QImode
+	  && GET_CODE (XEXP (XEXP (x, 0), 0)) == PLUS)
+	{
+	  *total = set_src_cost (XEXP (XEXP (x, 0), 0), speed);
+	  return true;
+	}
       *total = mips_zero_extend_cost (mode, XEXP (x, 0));
       return false;
 
-- 
GitLab