mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-10-25 10:27:04 +00:00
X86: Remove test instructions proceeding shift by immediate instructions
Allow LLVM to take advantage of shift instructions that set the ZF flag, making instructions that test the destination superfluous. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@182454 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -27,6 +27,5 @@ if.end: ; preds = %if.then, %entry
|
||||
|
||||
; CHECK: fn1:
|
||||
; CHECK: shrq $32, [[REG:%.*]]
|
||||
; CHECK: testq [[REG]], [[REG]]
|
||||
; CHECK: je
|
||||
}
|
||||
|
||||
@@ -96,7 +96,6 @@ entry:
|
||||
; CHECK: test7:
|
||||
; CHECK-NOT: movabsq
|
||||
; CHECK: shrq $32, %rdi
|
||||
; CHECK: testq %rdi, %rdi
|
||||
; CHECK: sete
|
||||
%lnot = icmp ult i64 %res, 4294967296
|
||||
%lnot.ext = zext i1 %lnot to i32
|
||||
@@ -119,7 +118,6 @@ entry:
|
||||
; CHECK: test9:
|
||||
; CHECK-NOT: movabsq
|
||||
; CHECK: shrq $33, %rdi
|
||||
; CHECK: testq %rdi, %rdi
|
||||
; CHECK: sete
|
||||
%lnot = icmp ult i64 %res, 8589934592
|
||||
%lnot.ext = zext i1 %lnot to i32
|
||||
@@ -131,7 +129,6 @@ entry:
|
||||
; CHECK: test10:
|
||||
; CHECK-NOT: movabsq
|
||||
; CHECK: shrq $32, %rdi
|
||||
; CHECK: testq %rdi, %rdi
|
||||
; CHECK: setne
|
||||
%lnot = icmp uge i64 %res, 4294967296
|
||||
%lnot.ext = zext i1 %lnot to i32
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
; RUN: llc < %s -mtriple=x86_64-pc-linux -mattr=+bmi,+bmi2,+popcnt | FileCheck %s
|
||||
declare void @foo(i32)
|
||||
declare void @foo64(i64)
|
||||
|
||||
; CHECK: neg:
|
||||
; CHECK: negl %edi
|
||||
@@ -55,6 +56,24 @@ return:
|
||||
ret void
|
||||
}
|
||||
|
||||
; CHECK: shri:
|
||||
; CHECK: shrl $3, %edi
|
||||
; CHECK-NEXT: je
|
||||
; CHECK: jmp foo
|
||||
; CHECK: ret
|
||||
define void @shri(i32 %x) nounwind {
|
||||
%ashr = lshr i32 %x, 3
|
||||
%cmp = icmp eq i32 %ashr, 0
|
||||
br i1 %cmp, label %return, label %bb
|
||||
|
||||
bb:
|
||||
tail call void @foo(i32 %ashr)
|
||||
br label %return
|
||||
|
||||
return:
|
||||
ret void
|
||||
}
|
||||
|
||||
; CHECK: shl:
|
||||
; CHECK: addl %edi, %edi
|
||||
; CHECK-NEXT: je
|
||||
@@ -73,6 +92,24 @@ return:
|
||||
ret void
|
||||
}
|
||||
|
||||
; CHECK: shli:
|
||||
; CHECK: shll $4, %edi
|
||||
; CHECK-NEXT: je
|
||||
; CHECK: jmp foo
|
||||
; CHECK: ret
|
||||
define void @shli(i32 %x) nounwind {
|
||||
%shl = shl i32 %x, 4
|
||||
%cmp = icmp eq i32 %shl, 0
|
||||
br i1 %cmp, label %return, label %bb
|
||||
|
||||
bb:
|
||||
tail call void @foo(i32 %shl)
|
||||
br label %return
|
||||
|
||||
return:
|
||||
ret void
|
||||
}
|
||||
|
||||
; CHECK: adc:
|
||||
; CHECK: movabsq $-9223372036854775808, %rax
|
||||
; CHECK-NEXT: addq %rdi, %rax
|
||||
|
||||
Reference in New Issue
Block a user