diff options
author | Manman Ren <mren@apple.com> | 2012-07-28 16:48:01 +0000 |
---|---|---|
committer | Manman Ren <mren@apple.com> | 2012-07-28 16:48:01 +0000 |
commit | 0eb3edea9cb6819334173a7d288da85943201fe5 (patch) | |
tree | 77172a23d7618e5dbe447fc4b7536ba1a416deaf /test/CodeGen/X86/fold-load.ll | |
parent | cdfbcdeeede52de472ae8187c0fb4ed4a014c2a3 (diff) | |
download | llvm-0eb3edea9cb6819334173a7d288da85943201fe5.tar.gz llvm-0eb3edea9cb6819334173a7d288da85943201fe5.tar.bz2 llvm-0eb3edea9cb6819334173a7d288da85943201fe5.tar.xz |
X86 Peephole: fold loads to the source register operand if possible.
Machine CSE and other optimizations can remove instructions so folding
is possible at peephole while not possible at ISel.
rdar://10554090 and rdar://11873276
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@160919 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/X86/fold-load.ll')
-rw-r--r-- | test/CodeGen/X86/fold-load.ll | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/test/CodeGen/X86/fold-load.ll b/test/CodeGen/X86/fold-load.ll index e03cb7edb5..c961f7576f 100644 --- a/test/CodeGen/X86/fold-load.ll +++ b/test/CodeGen/X86/fold-load.ll @@ -45,3 +45,29 @@ L: } +; rdar://10554090 +; xor in exit block will be CSE'ed and load will be folded to xor in entry. +define i1 @test3(i32* %P, i32* %Q) nounwind { +; CHECK: test3: +; CHECK: movl 8(%esp), %eax +; CHECK: xorl (%eax), +; CHECK: j +; CHECK-NOT: xor +entry: + %0 = load i32* %P, align 4 + %1 = load i32* %Q, align 4 + %2 = xor i32 %0, %1 + %3 = and i32 %2, 65535 + %4 = icmp eq i32 %3, 0 + br i1 %4, label %exit, label %land.end + +exit: + %shr.i.i19 = xor i32 %1, %0 + %5 = and i32 %shr.i.i19, 2147418112 + %6 = icmp eq i32 %5, 0 + br label %land.end + +land.end: + %7 = phi i1 [ %6, %exit ], [ false, %entry ] + ret i1 %7 +} |