aboutsummaryrefslogtreecommitdiff
path: root/gcc/expr.c
diff options
context:
space:
mode:
authorZhenqiang Chen <zhenqiang.chen@linaro.org>2014-11-17 06:03:07 +0000
committerZhenqiang Chen <zqchen@gcc.gnu.org>2014-11-17 06:03:07 +0000
commitf06cd23dc761a7769f8bdca26a42db59b71dec54 (patch)
tree6cfdb458bba92a9545deccf6b36dbf8290c4cc36 /gcc/expr.c
parent2d52a3a19d16f75e57f5278d722e227d29ba4d03 (diff)
downloadgcc-f06cd23dc761a7769f8bdca26a42db59b71dec54.zip
gcc-f06cd23dc761a7769f8bdca26a42db59b71dec54.tar.gz
gcc-f06cd23dc761a7769f8bdca26a42db59b71dec54.tar.bz2
Makefile.in: Add ccmp.o.
2014-11-17 Zhenqiang Chen <zhenqiang.chen@linaro.org> * Makefile.in: Add ccmp.o. * ccmp.c: New file. * ccmp.h: New file. * expr.c: include "ccmp.h" (expand_cond_expr_using_cmove): Handle VOIDmode. (expand_expr_real_1): Try to expand ccmp. From-SVN: r217641
Diffstat (limited to 'gcc/expr.c')
-rw-r--r--gcc/expr.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index 7b1cb29..093f544 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -81,6 +81,7 @@ along with GCC; see the file COPYING3. If not see
#include "builtins.h"
#include "tree-chkp.h"
#include "rtl-chkp.h"
+#include "ccmp.h"
#ifndef STACK_PUSH_CODE
#ifdef STACK_GROWS_DOWNWARD
@@ -8062,7 +8063,9 @@ expand_cond_expr_using_cmove (tree treeop0 ATTRIBUTE_UNUSED,
op00 = expand_normal (treeop0);
op01 = const0_rtx;
comparison_code = NE;
- comparison_mode = TYPE_MODE (TREE_TYPE (treeop0));
+ comparison_mode = GET_MODE (op00);
+ if (comparison_mode == VOIDmode)
+ comparison_mode = TYPE_MODE (TREE_TYPE (treeop0));
}
if (GET_MODE (op1) != mode)
@@ -9504,6 +9507,15 @@ expand_expr_real_1 (tree exp, rtx target, machine_mode tmode,
/* Fallthru */
case GIMPLE_BINARY_RHS:
ops.op1 = gimple_assign_rhs2 (g);
+
+ /* Try to expand conditonal compare. */
+ if (targetm.gen_ccmp_first)
+ {
+ gcc_checking_assert (targetm.gen_ccmp_next != NULL);
+ r = expand_ccmp_expr (g);
+ if (r)
+ break;
+ }
/* Fallthru */
case GIMPLE_UNARY_RHS:
ops.op0 = gimple_assign_rhs1 (g);