[PowerPC][AIX] Fix printing of program counter for AIX assembly.
authorSean Fertile <sd.fertile@gmail.com>
Thu, 12 Mar 2020 14:21:42 +0000 (10:21 -0400)
committerSean Fertile <sd.fertile@gmail.com>
Thu, 12 Mar 2020 14:37:18 +0000 (10:37 -0400)
Program counter on AIX is the dollar-sign.

Differential Revision:https://reviews.llvm.org/D75627

llvm/lib/Target/PowerPC/MCTargetDesc/PPCInstPrinter.cpp
llvm/test/CodeGen/PowerPC/aix-print-pc.mir [new file with mode: 0644]

index 2ff3f5d..4dc2b35 100644 (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 << "+";
diff --git a/llvm/test/CodeGen/PowerPC/aix-print-pc.mir b/llvm/test/CodeGen/PowerPC/aix-print-pc.mir
new file mode 100644 (file)
index 0000000..c736d13
--- /dev/null
@@ -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
+