mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-30 02:25:19 +00:00
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
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
Reference in New Issue
Block a user