diff options
author | Kyrylo Tkachov <kyrylo.tkachov@arm.com> | 2015-06-11 10:01:11 +0000 |
---|---|---|
committer | Kyrylo Tkachov <ktkachov@gcc.gnu.org> | 2015-06-11 10:01:11 +0000 |
commit | 06b8f7acf3786fafb54e402ebdf794e7ee3caa3e (patch) | |
tree | 55ab11bcdbb23411548e1e260602175106ac6535 /gcc | |
parent | 41927df0256a8ed9aee931306e92eef26ea6fd8d (diff) | |
download | gcc-06b8f7acf3786fafb54e402ebdf794e7ee3caa3e.zip gcc-06b8f7acf3786fafb54e402ebdf794e7ee3caa3e.tar.gz gcc-06b8f7acf3786fafb54e402ebdf794e7ee3caa3e.tar.bz2 |
[ARM] Restrict MAX_CONDITIONAL_EXECUTE when -mrestrict-it is in place
* config/arm/arm.c (arm_option_params_internal): When optimising
for speed set max_insns_skipped when arm_restrict_it.
* gcc.target/arm/short-it-ifcvt-1.c: New test.
* gcc.target/arm/short-it-ifcvt-2.c: Likewise.
From-SVN: r224367
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/arm/arm.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/arm/short-it-ifcvt-1.c | 23 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/arm/short-it-ifcvt-2.c | 21 |
5 files changed, 58 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f89cbb6..409171c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2015-06-11 Kyrylo Tkachov <kyrylo.tkachov@arm.com> + + * config/arm/arm.c (arm_option_params_internal): When optimising + for speed set max_insns_skipped when arm_restrict_it. + 2015-06-11 Christian Bruel <christian.bruel@st.com> PR target/52144 diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 353c2c5..5744f95 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -2788,7 +2788,10 @@ arm_option_params_internal (struct gcc_options *opts) max_insns_skipped = opts->x_arm_restrict_it ? 1 : 4; } else - max_insns_skipped = current_tune->max_insns_skipped; + /* When -mrestrict-it is in use tone down the if-conversion. */ + max_insns_skipped + = (TARGET_THUMB2_P (opts->x_target_flags) && opts->x_arm_restrict_it) + ? 1 : current_tune->max_insns_skipped; } /* Options after initial target override. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0accb7c..cf2c0d6 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-06-11 Kyrylo Tkachov <kyrylo.tkachov@arm.com> + + * gcc.target/arm/short-it-ifcvt-1.c: New test. + * gcc.target/arm/short-it-ifcvt-2.c: Likewise. + 2015-06-11 Christian Bruel <christian.bruel@st.com> PR target/52144 diff --git a/gcc/testsuite/gcc.target/arm/short-it-ifcvt-1.c b/gcc/testsuite/gcc.target/arm/short-it-ifcvt-1.c new file mode 100644 index 0000000..f3d29b7 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/short-it-ifcvt-1.c @@ -0,0 +1,23 @@ +/* Test that ifcvt is not being too aggressive when -mrestrict-it. */ +/* { dg-do compile } */ +/* { dg-options "-O2 -mrestrict-it" } */ +/* { dg-require-effective-target arm_thumb2_ok } */ + +int +f1(int x, int y, int z) +{ + if (x > 100) + { + x++; + z = -z; + } + else + { + x = -x; + y = -y; + z = 1; + } + return x + y + z; +} + +/* { dg-final { scan-assembler "b(gt|le)" } } */ diff --git a/gcc/testsuite/gcc.target/arm/short-it-ifcvt-2.c b/gcc/testsuite/gcc.target/arm/short-it-ifcvt-2.c new file mode 100644 index 0000000..9ac8153 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/short-it-ifcvt-2.c @@ -0,0 +1,21 @@ +/* Test that ifcvt is not being too aggressive when -mrestrict-it. */ +/* { dg-do compile } */ +/* { dg-options "-O2 -mrestrict-it" } */ +/* { dg-require-effective-target arm_thumb2_ok } */ + +int +f1(int x, int y, int z) +{ + if (x > 100) + { + x++; + z = -z; + } + else + { + x = -x; + y = -y; + } + return x + y + z; +} +/* { dg-final { scan-assembler "b(gt|le)" } } */ |