[PATCH] D81767: [PPCAsmPrinter] support 'L' output template for memory operands

Nick Desaulniers via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 15 12:38:25 PDT 2020


nickdesaulniers updated this revision to Diff 270829.
nickdesaulniers added a comment.

- add ppc64 test as per @maskray


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D81767/new/

https://reviews.llvm.org/D81767

Files:
  llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
  llvm/test/CodeGen/PowerPC/inlineasm-output-template.ll


Index: llvm/test/CodeGen/PowerPC/inlineasm-output-template.ll
===================================================================
--- llvm/test/CodeGen/PowerPC/inlineasm-output-template.ll
+++ llvm/test/CodeGen/PowerPC/inlineasm-output-template.ll
@@ -1,4 +1,5 @@
 ; RUN: llc -mtriple=ppc32-- < %s | FileCheck %s
+; RUN: llc -mtriple=ppc64-- < %s | FileCheck %s --check-prefix=PPC64
 
 ; Test that %c works with immediates
 ; CHECK-LABEL: test_inlineasm_c_output_template0
@@ -24,3 +25,13 @@
   tail call void asm sideeffect "#TEST ${0:n}", "i"(i32 42)
   ret i32 42
 }
+
+; Test that the machine specific %L works with memory operands.
+; CHECK-LABEL: test_inlineasm_L_output_template
+; CHECK: # 4(5)
+; PPC64-LABEL: test_inlineasm_L_output_template
+; PPC64: # 8(4)
+define dso_local void @test_inlineasm_L_output_template(i64 %0, i64* %1) {
+  tail call void asm sideeffect "# ${0:L}", "*m"(i64* %1)
+  ret void
+}
Index: llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
===================================================================
--- llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
+++ llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
@@ -282,14 +282,17 @@
 
     switch (ExtraCode[0]) {
     default: return true;  // Unknown modifier.
-    case 'y': {            // A memory reference for an X-form instruction
+    case 'L': // A memory reference to the upper word of a double word op.
+      O << getDataLayout().getPointerSize() << "(";
+      printOperand(MI, OpNo, O);
+      O << ")";
+      return false;
+    case 'y': // A memory reference for an X-form instruction
       O << "0, ";
       printOperand(MI, OpNo, O);
       return false;
-    }
     case 'U': // Print 'u' for update form.
     case 'X': // Print 'x' for indexed form.
-    {
       // FIXME: Currently for PowerPC memory operands are always loaded
       // into a register, so we never get an update or indexed form.
       // This is bad even for offset forms, since even if we know we
@@ -299,7 +302,6 @@
       assert(MI->getOperand(OpNo).isReg());
       return false;
     }
-    }
   }
 
   assert(MI->getOperand(OpNo).isReg());


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D81767.270829.patch
Type: text/x-patch
Size: 2110 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200615/40eb8ff8/attachment.bin>


More information about the llvm-commits mailing list