mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-01 15:40:46 +00:00
[SparcV9]: Use SRL instead of SLL to clear top 32-bits in ctpop:i32. SLL does not clear top 32 bit, only SRL does.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@198280 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
550848ecb9
commit
ca0ef6fe4f
@ -967,13 +967,13 @@ let Predicates = [HasV9] in {
|
||||
}
|
||||
|
||||
// POPCrr - This does a ctpop of a 64-bit register. As such, we have to clear
|
||||
// the top 32-bits before using it. To do this clearing, we use a SLLri X,0.
|
||||
// the top 32-bits before using it. To do this clearing, we use a SRLri X,0.
|
||||
let rs1 = 0 in
|
||||
def POPCrr : F3_1<2, 0b101110,
|
||||
(outs IntRegs:$dst), (ins IntRegs:$src),
|
||||
"popc $src, $dst", []>, Requires<[HasV9]>;
|
||||
def : Pat<(ctpop i32:$src),
|
||||
(POPCrr (SLLri $src, 0))>;
|
||||
(POPCrr (SRLri $src, 0))>;
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Non-Instruction Patterns
|
||||
|
@ -1,8 +1,22 @@
|
||||
; RUN: llc < %s -march=sparc -mattr=-v9 | not grep popc
|
||||
; RUN: llc < %s -march=sparc -mattr=+v9 | grep popc
|
||||
; RUN: llc < %s -march=sparc -mattr=-v9 | FileCheck %s -check-prefix=V8
|
||||
; RUN: llc < %s -march=sparc -mattr=+v9 | FileCheck %s -check-prefix=V9
|
||||
; RUN: llc < %s -march=sparcv9 | FileCheck %s -check-prefix=SPARC64
|
||||
|
||||
declare i32 @llvm.ctpop.i32(i32)
|
||||
|
||||
; V8-LABEL: test
|
||||
; V8-NOT : popc
|
||||
|
||||
; V9-LABEL: test
|
||||
; V9: srl %o0, 0, %o0
|
||||
; V9-NEXT: jmp %o7+8
|
||||
; V9-NEXT: popc %o0, %o0
|
||||
|
||||
; SPARC64-LABEL: test
|
||||
; SPARC64: srl %o0, 0, %o0
|
||||
; SPARC64: jmp %o7+8
|
||||
; SPARC64: popc %o0, %o0
|
||||
|
||||
define i32 @test(i32 %X) {
|
||||
%Y = call i32 @llvm.ctpop.i32( i32 %X ) ; <i32> [#uses=1]
|
||||
ret i32 %Y
|
||||
|
Loading…
Reference in New Issue
Block a user