1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 11:02:59 +02:00

[PowerPC] Replace cntlz[.] with cntlzw[.]

cntlz is the old POWER mnemonic. cntlzw is the PowerPC mnemonic.

This change fixes an issue when -no-integrated-as: The opcode cntlz is
unrecognized by gas

Alias the POWER mnemonic cntlz[.] to the PowerPC mnemonic cntlzw[.]
This is done for because the POWER cntlz mnemonic has be used by LLVM for
a very long time. We need to make sure that assembly programs
that are using the cntlz[.] do not break with this change.

Change PowerPC tests to reflect the insn change from cntlz to cntlzw.
Add assembly test to verify cntlz[.] is encoded correctly.

Patch by Tom Rix!

llvm-svn: 251489
This commit is contained in:
Hal Finkel 2015-10-28 03:26:45 +00:00
parent 43a55dd2a9
commit 91f52b0e31
7 changed files with 24 additions and 19 deletions

View File

@ -3883,8 +3883,11 @@ def : InstAlias<"rotlw. $rA, $rS, $rB", (RLWNMo gprc:$rA, gprc:$rS, gprc:$rB, 0,
def : InstAlias<"clrlwi $rA, $rS, $n", (RLWINM gprc:$rA, gprc:$rS, 0, u5imm:$n, 31)>;
def : InstAlias<"clrlwi. $rA, $rS, $n", (RLWINMo gprc:$rA, gprc:$rS, 0, u5imm:$n, 31)>;
def : InstAlias<"cntlz $rA, $rS", (CNTLZW gprc:$rA, gprc:$rS)>;
def : InstAlias<"cntlz. $rA, $rS", (CNTLZWo gprc:$rA, gprc:$rS)>;
def : InstAlias<"cntlzw $rA, $rS", (CNTLZW gprc:$rA, gprc:$rS)>;
def : InstAlias<"cntlzw. $rA, $rS", (CNTLZWo gprc:$rA, gprc:$rS)>;
// The POWER variant
def : MnemonicAlias<"cntlz", "cntlzw">;
def : MnemonicAlias<"cntlz.", "cntlzw.">;
def EXTLDI : PPCAsmPseudo<"extldi $rA, $rS, $n, $b",
(ins g8rc:$rA, g8rc:$rS, u6imm:$n, u6imm:$b)>;

View File

@ -6,7 +6,7 @@ declare i32 @llvm.cttz.i32(i32, i1)
define i32 @bar(i32 %x) {
entry:
; CHECK: @bar
; CHECK: cntlz
; CHECK: cntlzw
%tmp.1 = call i32 @llvm.cttz.i32( i32 %x, i1 true ) ; <i32> [#uses=1]
ret i32 %tmp.1
}

View File

@ -1,4 +1,4 @@
; RUN: llc < %s -march=ppc32 | grep cntlz
; RUN: llc < %s -march=ppc32 | grep cntlzw
; RUN: llc < %s -march=ppc32 | not grep xori
; RUN: llc < %s -march=ppc32 | not grep "li "
; RUN: llc < %s -march=ppc32 | not grep "mr "

View File

@ -5,7 +5,7 @@ define i32 @eq0(i32 %a) {
%tmp.2 = zext i1 %tmp.1 to i32 ; <i32> [#uses=1]
ret i32 %tmp.2
; CHECK: cntlz [[REG:r[0-9]+]], r3
; CHECK: cntlzw [[REG:r[0-9]+]], r3
; CHECK: rlwinm r3, [[REG]], 27, 31, 31
; CHECK: blr
}

View File

@ -508,10 +508,10 @@
# CHECK: extsh. 2, 3
0x7c 0x62 0x07 0x35
# CHECK: cntlz 2, 3
# CHECK: cntlzw 2, 3
0x7c 0x62 0x00 0x34
# CHECK: cntlz. 2, 3
# CHECK: cntlzw. 2, 3
0x7c 0x62 0x00 0x35
# CHECK: popcntw 2, 3

View File

@ -508,10 +508,10 @@
# CHECK: extsh. 2, 3
0x35 0x07 0x62 0x7c
# CHECK: cntlz 2, 3
# CHECK: cntlzw 2, 3
0x34 0x00 0x62 0x7c
# CHECK: cntlz. 2, 3
# CHECK: cntlzw. 2, 3
0x35 0x00 0x62 0x7c
# CHECK: popcntw 2, 3

View File

@ -634,18 +634,20 @@
# CHECK-LE: extsh. 2, 3 # encoding: [0x35,0x07,0x62,0x7c]
extsh. 2, 3
# CHECK-BE: cntlz 2, 3 # encoding: [0x7c,0x62,0x00,0x34]
# CHECK-LE: cntlz 2, 3 # encoding: [0x34,0x00,0x62,0x7c]
# CHECK-BE: cntlzw 2, 3 # encoding: [0x7c,0x62,0x00,0x34]
# CHECK-LE: cntlzw 2, 3 # encoding: [0x34,0x00,0x62,0x7c]
cntlzw 2, 3
# CHECK-BE: cntlz. 2, 3 # encoding: [0x7c,0x62,0x00,0x35]
# CHECK-LE: cntlz. 2, 3 # encoding: [0x35,0x00,0x62,0x7c]
# CHECK-BE: cntlzw. 2, 3 # encoding: [0x7c,0x62,0x00,0x35]
# CHECK-LE: cntlzw. 2, 3 # encoding: [0x35,0x00,0x62,0x7c]
cntlzw. 2, 3
# CHECK-BE: cntlz 2, 3 # encoding: [0x7c,0x62,0x00,0x34]
# CHECK-LE: cntlz 2, 3 # encoding: [0x34,0x00,0x62,0x7c]
cntlz 2, 3
# CHECK-BE: cntlz. 2, 3 # encoding: [0x7c,0x62,0x00,0x35]
# CHECK-LE: cntlz. 2, 3 # encoding: [0x35,0x00,0x62,0x7c]
cntlz. 2, 3
#
# The POWER variant of cntlzw
# CHECK-BE: cntlzw 2, 3 # encoding: [0x7c,0x62,0x00,0x34]
# CHECK-LE: cntlzw 2, 3 # encoding: [0x34,0x00,0x62,0x7c]
cntlz 2, 3
# CHECK-BE: cntlzw. 2, 3 # encoding: [0x7c,0x62,0x00,0x35]
# CHECK-LE: cntlzw. 2, 3 # encoding: [0x35,0x00,0x62,0x7c]
cntlz. 2, 3
cmpb 7, 21, 4
# CHECK-BE: cmpb 7, 21, 4 # encoding: [0x7e,0xa7,0x23,0xf8]
# CHECK-LE: cmpb 7, 21, 4 # encoding: [0xf8,0x23,0xa7,0x7e]