diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2012-05-07 16:38:41 +0200 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2012-05-07 16:38:41 +0200 |
commit | 60197adbfd6b91e997c61ead24e925f65be3fcbe (patch) | |
tree | 9f4d2b1fae8ac80107e6f294c1bfa990fafb1bb0 /gcc | |
parent | 198fc9f199b905c51873bf17a0a3f05afe11c2c5 (diff) | |
download | gcc-60197adbfd6b91e997c61ead24e925f65be3fcbe.zip gcc-60197adbfd6b91e997c61ead24e925f65be3fcbe.tar.gz gcc-60197adbfd6b91e997c61ead24e925f65be3fcbe.tar.bz2 |
i386.md (ctz<mode>2): Emit rep;bsf only for TARGET_GENERIC, when not optimizing for size.
* config/i386/i386.md (ctz<mode>2): Emit rep;bsf
only for TARGET_GENERIC, when not optimizing for size.
(*ffs<mode>_1): Ditto.
From-SVN: r187247
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/i386/i386.md | 36 |
2 files changed, 28 insertions, 14 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 47ede16..133719b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2012-05-07 Uros Bizjak <ubizjak@gmail.com> + + * config/i386/i386.md (ctz<mode>2): Emit rep;bsf + only for TARGET_GENERIC, when not optimizing for size. + (*ffs<mode>_1): Ditto. + 2012-05-07 Steven Bosscher <steven@gcc.gnu.org> * tree-cfg.c (verify_gimple_switch): Tighten checks. diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index b78054f..80f1ec4 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -12113,21 +12113,25 @@ (ctz:SWI48 (match_dup 1)))] "" { - if (optimize_function_for_size_p (cfun)) - return "bsf{<imodesuffix>}\t{%1, %0|%0, %1}"; - else if (TARGET_BMI) + if (TARGET_BMI) return "tzcnt{<imodesuffix>}\t{%1, %0|%0, %1}"; - else + else if (optimize_function_for_size_p (cfun)) + ; + else if (TARGET_GENERIC) /* tzcnt expands to rep;bsf and we can use it even if !TARGET_BMI. */ return "rep; bsf{<imodesuffix>}\t{%1, %0|%0, %1}"; + + return "bsf{<imodesuffix>}\t{%1, %0|%0, %1}"; } [(set_attr "type" "alu1") (set_attr "prefix_0f" "1") (set (attr "prefix_rep") (if_then_else - (match_test "optimize_function_for_size_p (cfun)") - (const_string "0") - (const_string "1"))) + (ior (match_test "TARGET_BMI") + (and (not (match_test "optimize_function_for_size_p (cfun)")) + (match_test "TARGET_GENERIC"))) + (const_string "1") + (const_string "0"))) (set_attr "mode" "<MODE>")]) (define_insn "ctz<mode>2" @@ -12136,21 +12140,25 @@ (clobber (reg:CC FLAGS_REG))] "" { - if (optimize_function_for_size_p (cfun)) - return "bsf{<imodesuffix>}\t{%1, %0|%0, %1}"; - else if (TARGET_BMI) + if (TARGET_BMI) return "tzcnt{<imodesuffix>}\t{%1, %0|%0, %1}"; - else + else if (optimize_function_for_size_p (cfun)) + ; + else if (TARGET_GENERIC) /* tzcnt expands to rep;bsf and we can use it even if !TARGET_BMI. */ return "rep; bsf{<imodesuffix>}\t{%1, %0|%0, %1}"; + + return "bsf{<imodesuffix>}\t{%1, %0|%0, %1}"; } [(set_attr "type" "alu1") (set_attr "prefix_0f" "1") (set (attr "prefix_rep") (if_then_else - (match_test "optimize_function_for_size_p (cfun)") - (const_string "0") - (const_string "1"))) + (ior (match_test "TARGET_BMI") + (and (not (match_test "optimize_function_for_size_p (cfun)")) + (match_test "TARGET_GENERIC"))) + (const_string "1") + (const_string "0"))) (set_attr "mode" "<MODE>")]) (define_expand "clz<mode>2" |