1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 12:41:49 +01:00

[PowerPC][AIX] Fix printing of program counter for AIX assembly.

Program counter on AIX is the dollar-sign.

Differential Revision:https://reviews.llvm.org/D75627
This commit is contained in:
Sean Fertile 2020-03-12 10:21:42 -04:00
parent df7173628b
commit 5c20469fda
2 changed files with 39 additions and 3 deletions

View File

@ -418,9 +418,14 @@ void PPCInstPrinter::printBranchOperand(const MCInst *MI, unsigned OpNo,
if (!MI->getOperand(OpNo).isImm())
return printOperand(MI, OpNo, O);
// Branches can take an immediate operand. This is used by the branch
// selection pass to print .+8, an eight byte displacement from the PC.
O << ".";
// Branches can take an immediate operand. This is used by the branch
// selection pass to print, for example `.+8` (for ELF) or `$+8` (for AIX) to
// express an eight byte displacement from the program counter.
if (!TT.isOSAIX())
O << ".";
else
O << "$";
int32_t Imm = SignExtend32<32>((unsigned)MI->getOperand(OpNo).getImm() << 2);
if (Imm >= 0)
O << "+";

View File

@ -0,0 +1,31 @@
# RUN: llc -x mir -mtriple powerpc-unknown-aix-xcoff --verify-machineinstrs \
# RUN: -start-before=ppc-branch-select < %s | FileCheck %s
#
# RUN: llc -x mir -mtriple powerpc64-unknown-aix-xcoff --verify-machineinstrs \
# RUN: -start-before=ppc-branch-select < %s | FileCheck %s
# Test uses a long branch to force printing of a branch that uses the program
# counter as an operand. ($PC + 8)
---
name: print_program_counter
machineFunctionInfo: {}
body: |
bb.0.entry:
successors: %bb.1(0x30000000), %bb.2(0x50000000)
liveins: $r3
renamable $cr0 = CMPLWI killed renamable $r3, 0
BCC 76, killed renamable $cr0, %bb.1
bb.2:
renamable $r3 = LI 2
INLINEASM &".space 32760", 1
BLR implicit $lr, implicit $rm, implicit killed $r3
bb.1:
renamable $r3 = LI 1
INLINEASM &".space 32760", 1
BLR implicit $lr, implicit $rm, implicit killed $r3
# CHECK-LABEL: .print_program_counter:
# CHECK: cmplwi
# CHECK-NEXT: bne {{[0-9]}}, $+8