aboutsummaryrefslogtreecommitdiff
path: root/gcc/optabs.c
diff options
context:
space:
mode:
authorVlad Lazar <vlad.lazar@arm.com>2018-08-16 16:33:43 +0000
committerJeff Law <law@gcc.gnu.org>2018-08-16 10:33:43 -0600
commitec18e48eaa0d7e06d46c7b544508a191d11a8921 (patch)
treeab7980e4a0ea136a6da132a6eaa6bd5bad54c76d /gcc/optabs.c
parent891b1d6872ecf18ccf605d036f8f01dec32d66a4 (diff)
downloadgcc-ec18e48eaa0d7e06d46c7b544508a191d11a8921.zip
gcc-ec18e48eaa0d7e06d46c7b544508a191d11a8921.tar.gz
gcc-ec18e48eaa0d7e06d46c7b544508a191d11a8921.tar.bz2
expmed.h (canonicalize_comparison): New declaration.
* expmed.h (canonicalize_comparison): New declaration. * expmed.c (canonicalize_comparison, equivalent_cmp_code): New function. * expmed.c (emit_store_flag_1): Add call to canonicalize_comparison. * optabs.c (prepare_cmp_insn): Likewise. * rtl.h (unsigned_condition_p): New function which checks if a comparison operator is unsigned. * gcc.target/aarch64/imm_choice_comparison.c: New test. From-SVN: r263591
Diffstat (limited to 'gcc/optabs.c')
-rw-r--r--gcc/optabs.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/gcc/optabs.c b/gcc/optabs.c
index cadf467..6052222 100644
--- a/gcc/optabs.c
+++ b/gcc/optabs.c
@@ -3812,6 +3812,9 @@ prepare_cmp_insn (rtx x, rtx y, enum rtx_code comparison, rtx size,
gcc_assert (methods == OPTAB_DIRECT || methods == OPTAB_WIDEN
|| methods == OPTAB_LIB_WIDEN);
+ if (CONST_SCALAR_INT_P (y))
+ canonicalize_comparison (mode, &comparison, &y);
+
/* If we are optimizing, force expensive constants into a register. */
if (CONSTANT_P (x) && optimize
&& (rtx_cost (x, mode, COMPARE, 0, optimize_insn_for_speed_p ())