mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-10-25 10:27:04 +00:00
Disable rematerialization in TwoAddressInstructionPass.
It is redundant; RegisterCoalescer will do the remat if it can't eliminate the copy. Collected instruction counts before and after this. A few extra instructions are generated due to spilling but it is normal to see these kinds of changes with almost any small codegen change, according to Jakob. This also fixed rdar://11830760 where xor is expected instead of movi0. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@160749 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -4,8 +4,8 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
|
||||
define i32 @test1(i32 %x, i32 %n, i32 %w, i32* %vp) nounwind readnone {
|
||||
entry:
|
||||
; CHECK: test1:
|
||||
; CHECK: btl
|
||||
; CHECK-NEXT: movl $12, %eax
|
||||
; CHECK: movl $12, %eax
|
||||
; CHECK-NEXT: btl
|
||||
; CHECK-NEXT: cmovael (%rcx), %eax
|
||||
; CHECK-NEXT: ret
|
||||
|
||||
@@ -19,8 +19,8 @@ entry:
|
||||
define i32 @test2(i32 %x, i32 %n, i32 %w, i32* %vp) nounwind readnone {
|
||||
entry:
|
||||
; CHECK: test2:
|
||||
; CHECK: btl
|
||||
; CHECK-NEXT: movl $12, %eax
|
||||
; CHECK: movl $12, %eax
|
||||
; CHECK-NEXT: btl
|
||||
; CHECK-NEXT: cmovbl (%rcx), %eax
|
||||
; CHECK-NEXT: ret
|
||||
|
||||
|
||||
@@ -142,6 +142,7 @@ if.else:
|
||||
define i32 @l4(i32 %a, i32 %b) nounwind {
|
||||
entry:
|
||||
; CHECK: l4:
|
||||
; CHECK: xor
|
||||
; CHECK: sub
|
||||
; CHECK-NOT: cmp
|
||||
%cmp = icmp sgt i32 %b, %a
|
||||
|
||||
@@ -189,8 +189,8 @@ entry:
|
||||
%call = tail call noalias i8* @_Znam(i64 %D) nounwind noredzone
|
||||
ret i8* %call
|
||||
; CHECK: test12:
|
||||
; CHECK: mulq
|
||||
; CHECK: movq $-1, %rdi
|
||||
; CHECK: mulq
|
||||
; CHECK: cmovnoq %rax, %rdi
|
||||
; CHECK: jmp __Znam
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user