diff options
| author | Venkatraman Govindaraju <venkatra@cs.wisc.edu> | 2014-01-01 19:00:10 +0000 |
|---|---|---|
| committer | Venkatraman Govindaraju <venkatra@cs.wisc.edu> | 2014-01-01 19:00:10 +0000 |
| commit | acf0233a467510afd225d2b7117e43b0300be7ef (patch) | |
| tree | 1615507f469a592a1fa05961b1211cdcb6414164 /llvm | |
| parent | 545b6803c3beb49a2cb7cfc8c0f516ad5be7c5d7 (diff) | |
| download | bcm5719-llvm-acf0233a467510afd225d2b7117e43b0300be7ef.tar.gz bcm5719-llvm-acf0233a467510afd225d2b7117e43b0300be7ef.zip | |
[SparcV9]: Use SRL instead of SLL to clear top 32-bits in ctpop:i32. SLL does not clear top 32 bit, only SRL does.
llvm-svn: 198280
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/Target/Sparc/SparcInstrInfo.td | 4 | ||||
| -rw-r--r-- | llvm/test/CodeGen/SPARC/ctpop.ll | 18 |
2 files changed, 18 insertions, 4 deletions
diff --git a/llvm/lib/Target/Sparc/SparcInstrInfo.td b/llvm/lib/Target/Sparc/SparcInstrInfo.td index 12a0962cac1..3b2b17191fe 100644 --- a/llvm/lib/Target/Sparc/SparcInstrInfo.td +++ b/llvm/lib/Target/Sparc/SparcInstrInfo.td @@ -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 diff --git a/llvm/test/CodeGen/SPARC/ctpop.ll b/llvm/test/CodeGen/SPARC/ctpop.ll index 916a41496e2..eab1de6c952 100644 --- a/llvm/test/CodeGen/SPARC/ctpop.ll +++ b/llvm/test/CodeGen/SPARC/ctpop.ll @@ -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 |

