Index: llvm/trunk/lib/Target/PowerPC/InstPrinter/PPCInstPrinter.cpp =================================================================== --- llvm/trunk/lib/Target/PowerPC/InstPrinter/PPCInstPrinter.cpp +++ llvm/trunk/lib/Target/PowerPC/InstPrinter/PPCInstPrinter.cpp @@ -84,7 +84,7 @@ return; } } - + if ((MI->getOpcode() == PPC::OR || MI->getOpcode() == PPC::OR8) && MI->getOperand(1).getReg() == MI->getOperand(2).getReg()) { O << "\tmr "; @@ -94,7 +94,7 @@ printAnnotation(O, Annot); return; } - + if (MI->getOpcode() == PPC::RLDICR || MI->getOpcode() == PPC::RLDICR_32) { unsigned char SH = MI->getOperand(2).getImm(); @@ -161,7 +161,7 @@ return; } } - + if (!printAliasInstr(MI, O)) printInstruction(MI, O); printAnnotation(O, Annot); @@ -259,7 +259,7 @@ } llvm_unreachable("Invalid predicate code"); } - + assert(StringRef(Modifier) == "reg" && "Need to specify 'cc', 'pm' or 'reg' as predicate op modifier!"); printOperand(MI, OpNo+1, O); @@ -448,9 +448,24 @@ /// stripRegisterPrefix - This method strips the character prefix from a /// register name so that only the number is left. Used by for linux asm. -static const char *stripRegisterPrefix(const char *RegName) { - if (FullRegNames || ShowVSRNumsAsVR) +static const char *stripRegisterPrefix(const char *RegName, unsigned RegNum, + unsigned RegEncoding) { + if (FullRegNames) { + if (RegNum >= PPC::CR0EQ && RegNum <= PPC::CR7UN) { + const char *CRBits[] = + { "lt", "gt", "eq", "un", + "4*cr1+lt", "4*cr1+gt", "4*cr1+eq", "4*cr1+un", + "4*cr2+lt", "4*cr2+gt", "4*cr2+eq", "4*cr2+un", + "4*cr3+lt", "4*cr3+gt", "4*cr3+eq", "4*cr3+un", + "4*cr4+lt", "4*cr4+gt", "4*cr4+eq", "4*cr4+un", + "4*cr5+lt", "4*cr5+gt", "4*cr5+eq", "4*cr5+un", + "4*cr6+lt", "4*cr6+gt", "4*cr6+eq", "4*cr6+un", + "4*cr7+lt", "4*cr7+gt", "4*cr7+eq", "4*cr7+un" + }; + return CRBits[RegEncoding]; + } return RegName; + } switch (RegName[0]) { case 'r': @@ -462,7 +477,7 @@ return RegName + 1; case 'c': if (RegName[1] == 'r') return RegName + 2; } - + return RegName; } @@ -490,17 +505,17 @@ const char *RegName = getRegisterName(Reg); // The linux and AIX assembler does not take register prefixes. if (!isDarwinSyntax()) - RegName = stripRegisterPrefix(RegName); - + RegName = stripRegisterPrefix(RegName, Reg, MRI.getEncodingValue(Reg)); + O << RegName; return; } - + if (Op.isImm()) { O << Op.getImm(); return; } - + assert(Op.isExpr() && "unknown operand kind in printOperand"); Op.getExpr()->print(O, &MAI); } Index: llvm/trunk/test/CodeGen/PowerPC/build-vector-tests.ll =================================================================== --- llvm/trunk/test/CodeGen/PowerPC/build-vector-tests.ll +++ llvm/trunk/test/CodeGen/PowerPC/build-vector-tests.ll @@ -1,11 +1,15 @@ -; RUN: llc -mcpu=pwr9 -ppc-vsr-nums-as-vr -mtriple=powerpc64-unknown-unknown \ -; RUN: < %s | FileCheck %s -check-prefix=P9BE -implicit-check-not frsp -; RUN: llc -mcpu=pwr9 -ppc-vsr-nums-as-vr -mtriple=powerpc64le-unknown-unknown \ -; RUN: < %s | FileCheck %s -check-prefix=P9LE -implicit-check-not frsp -; RUN: llc -mcpu=pwr8 -ppc-vsr-nums-as-vr -mtriple=powerpc64-unknown-unknown \ -; RUN: < %s | FileCheck %s -check-prefix=P8BE -implicit-check-not frsp -; RUN: llc -mcpu=pwr8 -ppc-vsr-nums-as-vr -mtriple=powerpc64le-unknown-unknown \ -; RUN: < %s | FileCheck %s -check-prefix=P8LE -implicit-check-not frsp +; RUN: llc -mcpu=pwr9 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \ +; RUN: -mtriple=powerpc64-unknown-unknown < %s | FileCheck %s \ +; RUN: -check-prefix=P9BE -implicit-check-not frsp +; RUN: llc -mcpu=pwr9 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \ +; RUN: -mtriple=powerpc64le-unknown-unknown < %s | FileCheck %s \ +; RUN: -check-prefix=P9LE -implicit-check-not frsp +; RUN: llc -mcpu=pwr8 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \ +; RUN: -mtriple=powerpc64-unknown-unknown < %s | FileCheck %s \ +; RUN: -check-prefix=P8BE -implicit-check-not frsp +; RUN: llc -mcpu=pwr8 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \ +; RUN: -mtriple=powerpc64le-unknown-unknown < %s | FileCheck %s \ +; RUN: -check-prefix=P8LE -implicit-check-not frsp ; This test case comes from the following C test case (included as it may be ; slightly more readable than the LLVM IR. Index: llvm/trunk/test/CodeGen/PowerPC/expand-contiguous-isel.ll =================================================================== --- llvm/trunk/test/CodeGen/PowerPC/expand-contiguous-isel.ll +++ llvm/trunk/test/CodeGen/PowerPC/expand-contiguous-isel.ll @@ -122,7 +122,7 @@ ; CHECK-LABEL: @_Z3fn1N4llvm9StringRefE ; CHECK-GEN-ISEL-TRUE: isel [[SAME:r[0-9]+]], [[SAME]], [[SAME]] ; CHECK-GEN-ISEL-TRUE: isel [[SAME:r[0-9]+]], {{r[0-9]+}}, [[SAME]] -; CHECK: bc 12, 2, [[TRUE:.LBB[0-9]+]] +; CHECK: bc 12, eq, [[TRUE:.LBB[0-9]+]] ; CHECK-NEXT: b [[SUCCESSOR:.LBB[0-9]+]] ; CHECK-NEXT: [[TRUE]] ; CHECK-NEXT: addi {{r[0-9]+}}, {{r[0-9]+}}, 0 Index: llvm/trunk/test/CodeGen/PowerPC/expand-isel.ll =================================================================== --- llvm/trunk/test/CodeGen/PowerPC/expand-isel.ll +++ llvm/trunk/test/CodeGen/PowerPC/expand-isel.ll @@ -12,7 +12,7 @@ ; CHECK-LABEL: @testExpandISELToIfElse ; CHECK: addi r5, r3, 1 ; CHECK-NEXT: cmpwi cr0, r3, 0 -; CHECK-NEXT: bc 12, 1, [[TRUE:.LBB[0-9]+]] +; CHECK-NEXT: bc 12, gt, [[TRUE:.LBB[0-9]+]] ; CHECK: ori r3, r4, 0 ; CHECK-NEXT: b [[SUCCESSOR:.LBB[0-9]+]] ; CHECK-NEXT: [[TRUE]] @@ -32,7 +32,7 @@ ; CHECK-LABEL: @testExpandISELToIf ; CHECK: cmpwi r3, 0 -; CHECK-NEXT: bc 12, 1, [[TRUE:.LBB[0-9]+]] +; CHECK-NEXT: bc 12, gt, [[TRUE:.LBB[0-9]+]] ; CHECK-NEXT: blr ; CHECK-NEXT: [[TRUE]] ; CHECK-NEXT: addi r3, r4, 0 @@ -48,7 +48,7 @@ ; CHECK-LABEL: @testExpandISELToElse ; CHECK: cmpwi r3, 0 -; CHECK-NEXT: bclr 12, 1, 0 +; CHECK-NEXT: bclr 12, gt, 0 ; CHECK: ori r3, r4, 0 ; CHECK-NEXT: blr } @@ -95,7 +95,7 @@ ; CHECK-LABEL: @testExpandISELsTo2ORIs2ADDIs ; CHECK: cmpwi r7, 0 -; CHECK-NEXT: bc 12, 1, [[TRUE:.LBB[0-9]+]] +; CHECK-NEXT: bc 12, gt, [[TRUE:.LBB[0-9]+]] ; CHECK: ori r3, r4, 0 ; CHECK-NEXT: ori r12, r6, 0 ; CHECK-NEXT: b [[SUCCESSOR:.LBB[0-9]+]] @@ -121,7 +121,7 @@ ; CHECK-LABEL: @testExpandISELsTo2ORIs1ADDI ; CHECK: cmpwi cr0, r7, 0 -; CHECK-NEXT: bc 12, 1, [[TRUE:.LBB[0-9]+]] +; CHECK-NEXT: bc 12, gt, [[TRUE:.LBB[0-9]+]] ; CHECK: ori r3, r4, 0 ; CHECK-NEXT: ori r12, r6, 0 ; CHECK-NEXT: b [[SUCCESSOR:.LBB[0-9]+]] @@ -148,7 +148,7 @@ ; CHECK-LABEL: @testExpandISELsTo1ORI1ADDI ; CHECK: cmpwi cr0, r7, 0 -; CHECK-NEXT: bc 12, 1, [[TRUE:.LBB[0-9]+]] +; CHECK-NEXT: bc 12, gt, [[TRUE:.LBB[0-9]+]] ; CHECK: ori r5, r6, 0 ; CHECK-NEXT: b [[SUCCESSOR:.LBB[0-9]+]] ; CHECK-NEXT: [[TRUE]] @@ -176,7 +176,7 @@ ; CHECK-LABEL: @testExpandISELsTo0ORI2ADDIs ; CHECK: cmpwi cr0, r7, 0 -; CHECK-NEXT: bc 12, 1, [[TRUE:.LBB[0-9]+]] +; CHECK-NEXT: bc 12, gt, [[TRUE:.LBB[0-9]+]] ; CHECK-NEXT: b [[SUCCESSOR:.LBB[0-9]+]] ; CHECK-NEXT: [[TRUE]] ; CHECK-NEXT: addi r4, r3, 0 Index: llvm/trunk/test/CodeGen/PowerPC/logic-ops-on-compares.ll =================================================================== --- llvm/trunk/test/CodeGen/PowerPC/logic-ops-on-compares.ll +++ llvm/trunk/test/CodeGen/PowerPC/logic-ops-on-compares.ll @@ -18,7 +18,7 @@ ; CHECK-NEXT: srwi r6, r6, 5 ; CHECK-NEXT: srwi r5, r5, 5 ; CHECK-NEXT: or. r5, r6, r5 -; CHECK-NEXT: bc 4, 1 +; CHECK-NEXT: bc 4, gt entry: %tobool = icmp eq i32 %a, %b %tobool1 = icmp eq i32 %b, 0 @@ -45,7 +45,7 @@ ; CHECK: # BB#0: # %entry ; CHECK-NEXT: lwz r3, 0(r3) ; CHECK-NEXT: rldicl. r3, r3, 0, 63 -; CHECK-NEXT: bclr 12, 2, 0 +; CHECK-NEXT: bclr 12, eq, 0 ; CHECK-NEXT: # BB#1: # %if.end29.thread136 ; CHECK-NEXT: .LBB1_2: # %if.end29 entry: @@ -77,7 +77,7 @@ ; CHECK-NEXT: rldicl r6, r6, 58, 63 ; CHECK-NEXT: rldicl r5, r5, 58, 63 ; CHECK-NEXT: or. r5, r6, r5 -; CHECK-NEXT: bc 4, 1 +; CHECK-NEXT: bc 4, gt entry: %tobool = icmp eq i64 %a, %b %tobool1 = icmp eq i64 %b, 0 @@ -104,7 +104,7 @@ ; CHECK: # BB#0: # %entry ; CHECK-NEXT: ld r3, 0(r3) ; CHECK-NEXT: rldicl. r3, r3, 0, 63 -; CHECK-NEXT: bclr 12, 2, 0 +; CHECK-NEXT: bclr 12, eq, 0 ; CHECK-NEXT: # BB#1: # %if.end29.thread136 ; CHECK-NEXT: .LBB3_2: # %if.end29 entry: @@ -138,7 +138,7 @@ ; CHECK-NEXT: subfe r6, r12, r4 ; CHECK-NEXT: and r6, r7, r6 ; CHECK-NEXT: or. r5, r6, r5 -; CHECK-NEXT: bc 4, 1 +; CHECK-NEXT: bc 4, gt entry: %tobool = icmp ne i64 %a, %b %tobool1 = icmp ne i64 %b, 0 @@ -165,7 +165,7 @@ ; CHECK: # BB#0: # %entry ; CHECK-NEXT: ld r3, 0(r3) ; CHECK-NEXT: andi. r3, r3, 1 -; CHECK-NEXT: bclr 12, 1, 0 +; CHECK-NEXT: bclr 12, gt, 0 ; CHECK-NEXT: # BB#1: # %if.end29.thread136 ; CHECK-NEXT: .LBB5_2: # %if.end29 entry: Index: llvm/trunk/test/CodeGen/PowerPC/mtvsrdd.ll =================================================================== --- llvm/trunk/test/CodeGen/PowerPC/mtvsrdd.ll +++ llvm/trunk/test/CodeGen/PowerPC/mtvsrdd.ll @@ -1,5 +1,5 @@ -; RUN: llc -mcpu=pwr9 -ppc-vsr-nums-as-vr -mtriple=powerpc64le-unknown-unknown \ -; RUN: < %s | FileCheck %s +; RUN: llc -mcpu=pwr9 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \ +; RUN: -mtriple=powerpc64le-unknown-unknown < %s | FileCheck %s ; This test case checks r0 is used as constant 0 in instruction mtvsrdd. Index: llvm/trunk/test/CodeGen/PowerPC/ppc64-i128-abi.ll =================================================================== --- llvm/trunk/test/CodeGen/PowerPC/ppc64-i128-abi.ll +++ llvm/trunk/test/CodeGen/PowerPC/ppc64-i128-abi.ll @@ -20,8 +20,8 @@ ; RUN: FileCheck %s -check-prefix=CHECK-LE-NOVSX --implicit-check-not xxswapd ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \ -; RUN: -mcpu=pwr9 -ppc-vsr-nums-as-vr < %s | FileCheck %s \ -; RUN: -check-prefix=CHECK-P9 --implicit-check-not xxswapd +; RUN: -mcpu=pwr9 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr < %s | \ +; RUN: FileCheck %s -check-prefix=CHECK-P9 --implicit-check-not xxswapd ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \ ; RUN: -mcpu=pwr9 -mattr=-vsx < %s | FileCheck %s -check-prefix=CHECK-NOVSX \