From: Wei Guozhi Date: Thu, 12 Aug 2010 02:03:59 +0000 (+0000) Subject: arm.md (andsi3): Change to zero extension if possible. X-Git-Tag: releases/gcc-4.6.0~5035 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3565ffedc8f301d0f13d7c5d2aa89ea8261c2299;p=thirdparty%2Fgcc.git arm.md (andsi3): Change to zero extension if possible. * config/arm/arm.md (andsi3): Change to zero extension if possible. * config/arm/thumb2.md (thumb2_zero_extendqisi2_v6): Change the name. * gcc.target/arm/pr44999.c: New testcase. From-SVN: r163184 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 031e7d25da2b..d55ddbe40121 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-08-12 Wei Guozhi + + PR target/44999 + * config/arm/arm.md (andsi3): Change to zero extension if possible. + * config/arm/thumb2.md (thumb2_zero_extendqisi2_v6): Change the name. + 2010-08-11 Vladimir Makarov * ira-int.h (ira_remove_allocno_copy_from_list): Remove. diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md index 78b1710f8c8a..1506935901ca 100644 --- a/gcc/config/arm/arm.md +++ b/gcc/config/arm/arm.md @@ -1937,9 +1937,17 @@ { if (GET_CODE (operands[2]) == CONST_INT) { - arm_split_constant (AND, SImode, NULL_RTX, - INTVAL (operands[2]), operands[0], - operands[1], optimize && can_create_pseudo_p ()); + if (INTVAL (operands[2]) == 255 && arm_arch6) + { + operands[1] = convert_to_mode (QImode, operands[1], 1); + emit_insn (gen_thumb2_zero_extendqisi2_v6 (operands[0], + operands[1])); + } + else + arm_split_constant (AND, SImode, NULL_RTX, + INTVAL (operands[2]), operands[0], + operands[1], + optimize && can_create_pseudo_p ()); DONE; } diff --git a/gcc/config/arm/thumb2.md b/gcc/config/arm/thumb2.md index 46767d49f767..2e4cfc96d436 100644 --- a/gcc/config/arm/thumb2.md +++ b/gcc/config/arm/thumb2.md @@ -907,7 +907,7 @@ (set_attr "neg_pool_range" "*,250")] ) -(define_insn "*thumb2_zero_extendqisi2_v6" +(define_insn "thumb2_zero_extendqisi2_v6" [(set (match_operand:SI 0 "s_register_operand" "=r,r") (zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "r,m")))] "TARGET_THUMB2 && arm_arch6" diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e76af3f266d3..6ac7bbac087d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-08-12 Wei Guozhi + + PR target/44999 + * gcc.target/arm/pr44999.c: New testcase. + 2010-08-12 Jie Zhang * gcc.dg/graphite/interchange-9.c (M): Define to be 111. diff --git a/gcc/testsuite/gcc.target/arm/pr44999.c b/gcc/testsuite/gcc.target/arm/pr44999.c new file mode 100644 index 000000000000..d07dca1a010b --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/pr44999.c @@ -0,0 +1,9 @@ +/* Use UXTB to extract the lowest byte. */ +/* { dg-options "-mthumb -Os" } */ +/* { dg-require-effective-target arm_thumb2_ok } */ +/* { dg-final { scan-assembler "uxtb" } } */ + +int tp(int x, int y) +{ + return (x & 0xff) - (y & 0xffff); +}