diff options
author | Evandro Menezes <e.menezes@samsung.com> | 2015-10-27 11:57:01 +0000 |
---|---|---|
committer | James Greenhalgh <jgreenhalgh@gcc.gnu.org> | 2015-10-27 11:57:01 +0000 |
commit | 783879e617bf3b4d0d94ccabb9a6f40b43c985a2 (patch) | |
tree | bbee70ab0ce4fe06d18ddfe289ae5959cca2b96a /gcc | |
parent | 4a334cbaf89552015039132e0016b003a5022e73 (diff) | |
download | gcc-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/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/config/aarch64/aarch64-protos.h | 3 | ||||
-rw-r--r-- | gcc/config/aarch64/aarch64.c | 16 |
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: |