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/CodeGen/X86/zext-fold.ll | |
parent | e0b5cfcae88190bd45778e11d20bc676823098a7 (diff) | |
download | llvm-c06b5bf34004a9b01048905c8750761146094586.tar.gz llvm-c06b5bf34004a9b01048905c8750761146094586.tar.bz2 llvm-c06b5bf34004a9b01048905c8750761146094586.tar.xz |
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/CodeGen/X86/zext-fold.ll')
-rw-r--r-- | test/CodeGen/X86/zext-fold.ll | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/test/CodeGen/X86/zext-fold.ll b/test/CodeGen/X86/zext-fold.ll new file mode 100644 index 0000000000..f9a5762c02 --- /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 |