diff options
author | Nick Lewycky <nicholas@mxc.ca> | 2011-06-16 01:15:49 +0000 |
---|---|---|
committer | Nick Lewycky <nicholas@mxc.ca> | 2011-06-16 01:15:49 +0000 |
commit | c06b5bf34004a9b01048905c8750761146094586 (patch) | |
tree | f390ddf37bec64d00087f8695acc881cc9a1dbaa /test | |
parent | e0b5cfcae88190bd45778e11d20bc676823098a7 (diff) | |
download | external_llvm-c06b5bf34004a9b01048905c8750761146094586.zip external_llvm-c06b5bf34004a9b01048905c8750761146094586.tar.gz external_llvm-c06b5bf34004a9b01048905c8750761146094586.tar.bz2 |
Add a DAGCombine for (ext (binop (load x), cst)).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@133124 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r-- | test/CodeGen/X86/promote-i16.ll | 14 | ||||
-rw-r--r-- | test/CodeGen/X86/zext-fold.ll | 36 |
2 files changed, 48 insertions, 2 deletions
diff --git a/test/CodeGen/X86/promote-i16.ll b/test/CodeGen/X86/promote-i16.ll index 101bb29..a785daf 100644 --- a/test/CodeGen/X86/promote-i16.ll +++ b/test/CodeGen/X86/promote-i16.ll @@ -3,9 +3,19 @@ define signext i16 @foo(i16 signext %x) nounwind { entry: ; CHECK: foo: -; CHECK: movzwl 4(%esp), %eax -; CHECK: xorl $21998, %eax +; CHECK-NOT: movzwl ; CHECK: movswl %ax, %eax +; CHECK: xorl $21998, %eax %0 = xor i16 %x, 21998 ret i16 %0 } + +define signext i16 @bar(i16 signext %x) nounwind { +entry: +; CHECK: bar: +; CHECK-NOT: movzwl +; CHECK: movswl %ax, %eax +; CHECK: xorl $-10770, %eax + %0 = xor i16 %x, 54766 + ret i16 %0 +} diff --git a/test/CodeGen/X86/zext-fold.ll b/test/CodeGen/X86/zext-fold.ll new file mode 100644 index 0000000..f9a5762 --- /dev/null +++ b/test/CodeGen/X86/zext-fold.ll @@ -0,0 +1,36 @@ +; RUN: llc < %s -march=x86 | FileCheck %s + +;; Simple case +define i32 @test1(i8 %x) nounwind readnone { + %A = and i8 %x, -32 + %B = zext i8 %A to i32 + ret i32 %B +} +; CHECK: test1 +; CHECK: movzbl +; CHECK-NEXT: andl {{.*}}224 + +;; Multiple uses of %x but easily extensible. +define i32 @test2(i8 %x) nounwind readnone { + %A = and i8 %x, -32 + %B = zext i8 %A to i32 + %C = or i8 %x, 63 + %D = zext i8 %C to i32 + %E = add i32 %B, %D + ret i32 %E +} +; CHECK: test2 +; CHECK: movzbl +; CHECK-NEXT: orl {{.*}}63 +; CHECK-NEXT: andl {{.*}}224 + +declare void @use(i32, i8) + +;; Multiple uses of %x where we shouldn't extend the load. +define void @test3(i8 %x) nounwind readnone { + %A = and i8 %x, -32 + %B = zext i8 %A to i32 + call void @use(i32 %B, i8 %x) + ret void +} +; CHECK: test3 |