summaryrefslogtreecommitdiff
path: root/test/CodeGen/X86/zext-fold.ll
diff options
context:
space:
mode:
authorNick Lewycky <nicholas@mxc.ca>2011-06-16 01:15:49 +0000
committerNick Lewycky <nicholas@mxc.ca>2011-06-16 01:15:49 +0000
commitc06b5bf34004a9b01048905c8750761146094586 (patch)
treef390ddf37bec64d00087f8695acc881cc9a1dbaa /test/CodeGen/X86/zext-fold.ll
parente0b5cfcae88190bd45778e11d20bc676823098a7 (diff)
downloadllvm-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.ll36
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