[llvm] r194384 - Add PPC option for full register names in asm

Hal Finkel hfinkel at anl.gov
Mon Nov 11 06:58:40 PST 2013

Author: hfinkel
Date: Mon Nov 11 08:58:40 2013
New Revision: 194384

URL: http://llvm.org/viewvc/llvm-project?rev=194384&view=rev
Add PPC option for full register names in asm

On non-Darwin PPC systems, we currently strip off the register name prefix
prior to instruction printing. So instead of something like this:

  mr r3, r4

we print this:

  mr 3, 4

The first form is the default on Darwin, and is understood by binutils, but not
yet understood by our integrated assembler. Once our integrated-as understands
full register names as well, this temporary option will be replaced by tying
this functionality to the verbose-asm option. The numeric-only form is
compatible with legacy assemblers and tools, and is also gcc's default on most
PPC systems. On the other hand, it is harder to read, and there are some
analysis tools that expect full register names.


Modified: llvm/trunk/lib/Target/PowerPC/InstPrinter/PPCInstPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/InstPrinter/PPCInstPrinter.cpp?rev=194384&r1=194383&r2=194384&view=diff
--- llvm/trunk/lib/Target/PowerPC/InstPrinter/PPCInstPrinter.cpp (original)
+++ llvm/trunk/lib/Target/PowerPC/InstPrinter/PPCInstPrinter.cpp Mon Nov 11 08:58:40 2013
@@ -18,10 +18,17 @@
 #include "llvm/MC/MCExpr.h"
 #include "llvm/MC/MCInst.h"
 #include "llvm/MC/MCInstrInfo.h"
+#include "llvm/Support/CommandLine.h"
 #include "llvm/Support/raw_ostream.h"
 #include "llvm/Target/TargetOpcodes.h"
 using namespace llvm;
+// FIXME: Once the integrated assembler supports full register names, tie this
+// to the verbose-asm setting.
+static cl::opt<bool>
+FullRegNames("ppc-asm-full-reg-names", cl::Hidden, cl::init(false),
+             cl::desc("Use full register names when printing assembly"));
 #include "PPCGenAsmWriter.inc"
 void PPCInstPrinter::printRegName(raw_ostream &OS, unsigned RegNo) const {
@@ -297,6 +304,9 @@ void PPCInstPrinter::printTLSCall(const
 /// 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)
+    return RegName;
   switch (RegName[0]) {
   case 'r':
   case 'f':

Added: llvm/trunk/test/CodeGen/PowerPC/reg-names.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/reg-names.ll?rev=194384&view=auto
--- llvm/trunk/test/CodeGen/PowerPC/reg-names.ll (added)
+++ llvm/trunk/test/CodeGen/PowerPC/reg-names.ll Mon Nov 11 08:58:40 2013
@@ -0,0 +1,17 @@
+; RUN: llc -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s
+; RUN: llc -mtriple=powerpc64-unknown-linux-gnu -ppc-asm-full-reg-names < %s | FileCheck -check-prefix=CHECK-FN %s
+define i64 @test1(i64 %a, i64 %b) {
+; CHECK-LABEL: @test1
+; CHECK-FN-LABEL: @test1
+  ret i64 %b
+; CHECK: mr 3, 4
+; CHECK-FN: mr r3, r4
+; CHECK: blr
+; CHECK-FN: blr

More information about the llvm-commits mailing list