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

Nick Desaulniers via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Jun 12 16:34:15 PDT 2020


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

- add source comment


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
@@ -24,3 +24,12 @@
   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: stw 3, 0(5)
+; CHECK-NEXT: stw 4, 4(5)
+define dso_local void @test_inlineasm_L_output_template(i64 %0, i64* %1) local_unnamed_addr #0 {
+  tail call void asm sideeffect "stw${1:X} $0, $1\0A\09stw${1:X} ${0:L}, ${1:L}", "r,*m"(i64 %0, 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.270542.patch
Type: text/x-patch
Size: 1921 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200612/f6647009/attachment-0001.bin>


More information about the llvm-commits mailing list