diff --git a/lib/Target/X86/README.txt b/lib/Target/X86/README.txt index 46f31164d5d..08b5875c574 100644 --- a/lib/Target/X86/README.txt +++ b/lib/Target/X86/README.txt @@ -702,28 +702,6 @@ The add\sub pair is really unneeded here. //===---------------------------------------------------------------------===// -We currently compile sign_extend_inreg into two shifts: - -long foo(long X) { - return (long)(signed char)X; -} - -becomes: - -_foo: - movl 4(%esp), %eax - shll $24, %eax - sarl $24, %eax - ret - -This could be: - -_foo: - movsbl 4(%esp),%eax - ret - -//===---------------------------------------------------------------------===// - Consider the expansion of: uint %test3(uint %X) { diff --git a/test/CodeGen/X86/sext-load.ll b/test/CodeGen/X86/sext-load.ll new file mode 100644 index 00000000000..a6d1080bd84 --- /dev/null +++ b/test/CodeGen/X86/sext-load.ll @@ -0,0 +1,9 @@ +; RUN: llvm-as < %s | llc -march=x86 | grep movsbl + +define i32 @foo(i32 %X) nounwind { +entry: + %tmp12 = trunc i32 %X to i8 ; [#uses=1] + %tmp123 = sext i8 %tmp12 to i32 ; [#uses=1] + ret i32 %tmp123 +} +