From: Dan Gohman Date: Thu, 16 Jun 2011 15:55:48 +0000 (+0000) Subject: Add a comment describing why transforming (shl x, 1) to (add x, x) is to be X-Git-Tag: android-x86-6.0-r1~964^2~35 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=a0697a7ef5a980727d8361acd1fc429a5b1b8e2b;p=android-x86%2Fexternal-llvm.git Add a comment describing why transforming (shl x, 1) to (add x, x) is to be considered safe enough in this context. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@133159 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/X86/X86InstrCompiler.td b/lib/Target/X86/X86InstrCompiler.td index 33534cd82bd..adcc747eb4b 100644 --- a/lib/Target/X86/X86InstrCompiler.td +++ b/lib/Target/X86/X86InstrCompiler.td @@ -1368,6 +1368,11 @@ def : Pat<(store (i8 (trunc_su (srl_su GR16:$src, (i8 8)))), addr:$dst), // (shl x, 1) ==> (add x, x) +// Note that if x is undef (immediate or otherwise), we could theoretically +// end up with the two uses of x getting different values, producing a result +// where the least significant bit is not 0. However, the probability of this +// happening is considered low enough that this is officially not a +// "real problem". def : Pat<(shl GR8 :$src1, (i8 1)), (ADD8rr GR8 :$src1, GR8 :$src1)>; def : Pat<(shl GR16:$src1, (i8 1)), (ADD16rr GR16:$src1, GR16:$src1)>; def : Pat<(shl GR32:$src1, (i8 1)), (ADD32rr GR32:$src1, GR32:$src1)>;