From 1fce2f18ba8210728f074c6145aa731b215ef2e7 Mon Sep 17 00:00:00 2001 From: Walter Lee Date: Tue, 26 Mar 2013 06:30:55 +0000 Subject: [PATCH] backport: tilegx.c (expand_set_cint64_one_inst): Inline tests for constraint J, K, N, P. Backport from mainline: 2013-03-25 Walter Lee * config/tilegx/tilegx.c (expand_set_cint64_one_inst): Inline tests for constraint J, K, N, P. From-SVN: r197091 --- gcc/ChangeLog | 8 ++++++++ gcc/config/tilegx/tilegx.c | 16 +++++++++------- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d7929950139c..6108b098fd08 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2013-03-26 Walter Lee + + Backport from mainline: + 2013-03-25 Walter Lee + + * config/tilegx/tilegx.c (expand_set_cint64_one_inst): Inline + tests for constraint J, K, N, P. + 2013-03-26 Walter Lee Backport from mainline: diff --git a/gcc/config/tilegx/tilegx.c b/gcc/config/tilegx/tilegx.c index de652c3bd3a0..ff36b2e35165 100644 --- a/gcc/config/tilegx/tilegx.c +++ b/gcc/config/tilegx/tilegx.c @@ -1352,14 +1352,16 @@ expand_set_cint64_one_inst (rtx dest_reg, } else if (!three_wide_only) { - rtx imm_op = GEN_INT (val); - - if (satisfies_constraint_J (imm_op) - || satisfies_constraint_K (imm_op) - || satisfies_constraint_N (imm_op) - || satisfies_constraint_P (imm_op)) + /* Test for the following constraints: J, K, N, P. We avoid + generating an rtx and using existing predicates because we + can be testing and rejecting a lot of constants, and GEN_INT + is O(N). */ + if ((val >= -32768 && val <= 65535) + || ((val == (val & 0xFF) * 0x0101010101010101LL)) + || (val == ((trunc_int_for_mode (val, QImode) & 0xFFFF) + * 0x0001000100010001LL))) { - emit_move_insn (dest_reg, imm_op); + emit_move_insn (dest_reg, GEN_INT (val)); return true; } } -- 2.47.2