From e60bc4e8b82e5ab94eb70bb21d94c431be9f257d Mon Sep 17 00:00:00 2001 From: Hal Finkel Date: Wed, 28 Oct 2015 03:26:45 +0000 Subject: [PATCH] [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! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251489 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/PowerPC/PPCInstrInfo.td | 7 ++++-- test/CodeGen/PowerPC/cttz.ll | 2 +- test/CodeGen/PowerPC/long-compare.ll | 2 +- test/CodeGen/PowerPC/seteq-0.ll | 2 +- .../Disassembler/PowerPC/ppc64-encoding.txt | 4 ++-- .../Disassembler/PowerPC/ppc64le-encoding.txt | 4 ++-- test/MC/PowerPC/ppc64-encoding.s | 22 ++++++++++--------- 7 files changed, 24 insertions(+), 19 deletions(-) diff --git a/lib/Target/PowerPC/PPCInstrInfo.td b/lib/Target/PowerPC/PPCInstrInfo.td index 24fd9bd5c1f..cc1af1a7132 100644 --- a/lib/Target/PowerPC/PPCInstrInfo.td +++ b/lib/Target/PowerPC/PPCInstrInfo.td @@ -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)>; diff --git a/test/CodeGen/PowerPC/cttz.ll b/test/CodeGen/PowerPC/cttz.ll index 60de982d91a..3757fa3e2f2 100644 --- a/test/CodeGen/PowerPC/cttz.ll +++ b/test/CodeGen/PowerPC/cttz.ll @@ -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 ) ; [#uses=1] ret i32 %tmp.1 } diff --git a/test/CodeGen/PowerPC/long-compare.ll b/test/CodeGen/PowerPC/long-compare.ll index e53356a5ddf..d596068cbb7 100644 --- a/test/CodeGen/PowerPC/long-compare.ll +++ b/test/CodeGen/PowerPC/long-compare.ll @@ -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 " diff --git a/test/CodeGen/PowerPC/seteq-0.ll b/test/CodeGen/PowerPC/seteq-0.ll index 4afb8fee177..b7dd78085eb 100644 --- a/test/CodeGen/PowerPC/seteq-0.ll +++ b/test/CodeGen/PowerPC/seteq-0.ll @@ -5,7 +5,7 @@ define i32 @eq0(i32 %a) { %tmp.2 = zext i1 %tmp.1 to 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 } diff --git a/test/MC/Disassembler/PowerPC/ppc64-encoding.txt b/test/MC/Disassembler/PowerPC/ppc64-encoding.txt index f235c242fbc..74023340d50 100644 --- a/test/MC/Disassembler/PowerPC/ppc64-encoding.txt +++ b/test/MC/Disassembler/PowerPC/ppc64-encoding.txt @@ -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 diff --git a/test/MC/Disassembler/PowerPC/ppc64le-encoding.txt b/test/MC/Disassembler/PowerPC/ppc64le-encoding.txt index f154e00ff51..9ddc286d8aa 100644 --- a/test/MC/Disassembler/PowerPC/ppc64le-encoding.txt +++ b/test/MC/Disassembler/PowerPC/ppc64le-encoding.txt @@ -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 diff --git a/test/MC/PowerPC/ppc64-encoding.s b/test/MC/PowerPC/ppc64-encoding.s index 4a698adadda..b2aac8874ff 100644 --- a/test/MC/PowerPC/ppc64-encoding.s +++ b/test/MC/PowerPC/ppc64-encoding.s @@ -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] -- 2.34.1