From: Uros Bizjak Date: Mon, 7 May 2012 14:38:41 +0000 (+0200) Subject: i386.md (ctz2): Emit rep;bsf only for TARGET_GENERIC, when not optimizing for... X-Git-Tag: misc/gccgo-go1_1_2~3050 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=60197adbfd6b91e997c61ead24e925f65be3fcbe;p=thirdparty%2Fgcc.git 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 --- 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"