From 60197adbfd6b91e997c61ead24e925f65be3fcbe Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Mon, 7 May 2012 16:38:41 +0200 Subject: [PATCH] i386.md (ctz2): Emit rep;bsf only for TARGET_GENERIC, when not optimizing for size. * config/i386/i386.md (ctz2): Emit rep;bsf only for TARGET_GENERIC, when not optimizing for size. (*ffs_1): Ditto. From-SVN: r187247 --- gcc/ChangeLog | 6 ++++++ gcc/config/i386/i386.md | 36 ++++++++++++++++++++++-------------- 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 47ede162d5c5..133719b3387b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2012-05-07 Uros Bizjak + + * config/i386/i386.md (ctz2): Emit rep;bsf + only for TARGET_GENERIC, when not optimizing for size. + (*ffs_1): Ditto. + 2012-05-07 Steven Bosscher * tree-cfg.c (verify_gimple_switch): Tighten checks. diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index b78054fd5498..80f1ec483cf9 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{}\t{%1, %0|%0, %1}"; - else if (TARGET_BMI) + if (TARGET_BMI) return "tzcnt{}\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{}\t{%1, %0|%0, %1}"; + + return "bsf{}\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" "")]) (define_insn "ctz2" @@ -12136,21 +12140,25 @@ (clobber (reg:CC FLAGS_REG))] "" { - if (optimize_function_for_size_p (cfun)) - return "bsf{}\t{%1, %0|%0, %1}"; - else if (TARGET_BMI) + if (TARGET_BMI) return "tzcnt{}\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{}\t{%1, %0|%0, %1}"; + + return "bsf{}\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" "")]) (define_expand "clz2"