From: uros Date: Mon, 7 May 2012 14:38:41 +0000 (+0000) Subject: * config/i386/i386.md (ctz2): Emit rep;bsf X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=dbfd6d04340d22df68ad3e21ae446cd17784bb4e;p=thirdparty%2Fgcc.git * config/i386/i386.md (ctz2): Emit rep;bsf only for TARGET_GENERIC, when not optimizing for size. (*ffs_1): Ditto. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@187247 138bc75d-0d04-0410-961f-82ee72b054a4 --- 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"