<div dir="ltr">This looks pretty good to me, but Craig should probably have a look before it lands.<div><br></div><div>If you don't have commit access, you may need to send it as an attachment -- my email client at least destroys the patch file when in-line so that I can't apply it and commit it easily for you.</div><div><br></div><div>Also, thanks again for jumping on this piece!</div></div><br><div class="gmail_quote"><div dir="ltr">On Thu, Feb 8, 2018 at 3:14 AM David Woodhouse via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">This allows the register name to be printed without the leading '%'.<br>
This can be used for emitting calls to the retpoline thunks from inline<br>
asm.<br>
---<br>
v2: fix 'call' expectation in test cases for -no-integrated-as<br>
<br>
 lib/Target/X86/X86AsmPrinter.cpp          | 11 ++++++++++-<br>
 test/CodeGen/X86/inline-asm-modifier-V.ll | 14 ++++++++++++++<br>
 2 files changed, 24 insertions(+), 1 deletion(-)<br>
 create mode 100644 test/CodeGen/X86/inline-asm-modifier-V.ll<br>
<br>
diff --git a/lib/Target/X86/X86AsmPrinter.cpp b/lib/Target/X86/X86AsmPrinter.cpp<br>
index 4da7d59df46..991a81c8f11 100644<br>
--- a/lib/Target/X86/X86AsmPrinter.cpp<br>
+++ b/lib/Target/X86/X86AsmPrinter.cpp<br>
@@ -370,6 +370,8 @@ static void printIntelMemReference(X86AsmPrinter &P, const MachineInstr *MI,<br>
 static bool printAsmMRegister(X86AsmPrinter &P, const MachineOperand &MO,<br>
                               char Mode, raw_ostream &O) {<br>
   unsigned Reg = MO.getReg();<br>
+  bool EmitPercent = true;<br>
+<br>
   switch (Mode) {<br>
   default: return true;  // Unknown mode.<br>
   case 'b': // Print QImode register<br>
@@ -384,6 +386,9 @@ static bool printAsmMRegister(X86AsmPrinter &P, const MachineOperand &MO,<br>
   case 'k': // Print SImode register<br>
     Reg = getX86SubSuperRegister(Reg, 32);<br>
     break;<br>
+  case 'V':<br>
+    EmitPercent = false;<br>
+    LLVM_FALLTHROUGH;<br>
   case 'q':<br>
     // Print 64-bit register names if 64-bit integer registers are available.<br>
     // Otherwise, print 32-bit register names.<br>
@@ -391,7 +396,10 @@ static bool printAsmMRegister(X86AsmPrinter &P, const MachineOperand &MO,<br>
     break;<br>
   }<br>
<br>
-  O << '%' << X86ATTInstPrinter::getRegisterName(Reg);<br>
+  if (EmitPercent)<br>
+    O << '%';<br>
+<br>
+  O << X86ATTInstPrinter::getRegisterName(Reg);<br>
   return false;<br>
 }<br>
<br>
@@ -464,6 +472,7 @@ bool X86AsmPrinter::PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,<br>
     case 'w': // Print HImode register<br>
     case 'k': // Print SImode register<br>
     case 'q': // Print DImode register<br>
+    case 'V': // Print native register without '%'<br>
       if (MO.isReg())<br>
         return printAsmMRegister(*this, MO, ExtraCode[0], O);<br>
       printOperand(*this, MI, OpNo, O);<br>
diff --git a/test/CodeGen/X86/inline-asm-modifier-V.ll b/test/CodeGen/X86/inline-asm-modifier-V.ll<br>
new file mode 100644<br>
index 00000000000..5a7f3fdd25f<br>
--- /dev/null<br>
+++ b/test/CodeGen/X86/inline-asm-modifier-V.ll<br>
@@ -0,0 +1,14 @@<br>
+; RUN: llc < %s -mtriple=i686-- -no-integrated-as | FileCheck -check-prefix=X86 %s<br>
+; RUN: llc < %s -mtriple=x86_64-- -no-integrated-as | FileCheck -check-prefix=X64 %s<br>
+<br>
+; If the target does not have 64-bit integer registers, emit 32-bit register<br>
+; names.<br>
+<br>
+; X86: call __x86_indirect_thunk_e{{[abcd]}}x<br>
+; X64: call __x86_indirect_thunk_r<br>
+<br>
+define void @q_modifier(i32* %p) {<br>
+entry:<br>
+  tail call void asm sideeffect "call __x86_indirect_thunk_${0:V}", "r,~{dirflag},~{fpsr},~{flags}"(i32* %p)<br>
+  ret void<br>
+}<br>
--<br>
2.14.3<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>