aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEvandro Menezes <e.menezes@samsung.com>2015-10-27 11:57:01 +0000
committerJames Greenhalgh <jgreenhalgh@gcc.gnu.org>2015-10-27 11:57:01 +0000
commit783879e617bf3b4d0d94ccabb9a6f40b43c985a2 (patch)
treebbee70ab0ce4fe06d18ddfe289ae5959cca2b96a /gcc
parent4a334cbaf89552015039132e0016b003a5022e73 (diff)
downloadgcc-783879e617bf3b4d0d94ccabb9a6f40b43c985a2.zip
gcc-783879e617bf3b4d0d94ccabb9a6f40b43c985a2.tar.gz
gcc-783879e617bf3b4d0d94ccabb9a6f40b43c985a2.tar.bz2
[PATCH] [AArch64] Distinct costs for sign and zero extension
gcc/ * config/aarch64/aarch64-protos.h (cpu_addrcost_table): Split member for register extension into sign and zero register extension. * config/aarch64/aarch64.c (generic_addrcost_table): Infer values for sign and zero register extension. (cortexa57_addrcost_table): Likewise. (xgene1_addrcost_table): Likewise. From-SVN: r229431
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/config/aarch64/aarch64-protos.h3
-rw-r--r--gcc/config/aarch64/aarch64.c16
3 files changed, 22 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1066861..ff593e1 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2015-10-27 Evandro Menezes <e.menezes@samsung.com>
+
+ * config/aarch64/aarch64-protos.h (cpu_addrcost_table): Split member
+ for register extension into sign and zero register extension.
+ * config/aarch64/aarch64.c (generic_addrcost_table): Infer values
+ for sign and zero register extension.
+ (cortexa57_addrcost_table): Likewise.
+ (xgene1_addrcost_table): Likewise.
+
2015-10-27 Richard Sandiford <richard.sandiford@arm.com>
* fold-const.c (fold_minmax): Delete.
diff --git a/gcc/config/aarch64/aarch64-protos.h b/gcc/config/aarch64/aarch64-protos.h
index b1bf582..81792bc 100644
--- a/gcc/config/aarch64/aarch64-protos.h
+++ b/gcc/config/aarch64/aarch64-protos.h
@@ -134,7 +134,8 @@ struct cpu_addrcost_table
const int pre_modify;
const int post_modify;
const int register_offset;
- const int register_extend;
+ const int register_sextend;
+ const int register_zextend;
const int imm_offset;
};
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index 7678840..4965041 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -194,7 +194,8 @@ static const struct cpu_addrcost_table generic_addrcost_table =
0, /* pre_modify */
0, /* post_modify */
0, /* register_offset */
- 0, /* register_extend */
+ 0, /* register_sextend */
+ 0, /* register_zextend */
0 /* imm_offset */
};
@@ -209,7 +210,8 @@ static const struct cpu_addrcost_table cortexa57_addrcost_table =
0, /* pre_modify */
0, /* post_modify */
0, /* register_offset */
- 0, /* register_extend */
+ 0, /* register_sextend */
+ 0, /* register_zextend */
0, /* imm_offset */
};
@@ -224,7 +226,8 @@ static const struct cpu_addrcost_table xgene1_addrcost_table =
1, /* pre_modify */
0, /* post_modify */
0, /* register_offset */
- 1, /* register_extend */
+ 1, /* register_sextend */
+ 1, /* register_zextend */
0, /* imm_offset */
};
@@ -5530,9 +5533,12 @@ aarch64_address_cost (rtx x,
cost += addr_cost->register_offset;
break;
- case ADDRESS_REG_UXTW:
case ADDRESS_REG_SXTW:
- cost += addr_cost->register_extend;
+ cost += addr_cost->register_sextend;
+ break;
+
+ case ADDRESS_REG_UXTW:
+ cost += addr_cost->register_zextend;
break;
default: