[PATCH] D36092: [MIR] Print target specific constant pools

Diana Picus via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Jul 31 08:07:22 PDT 2017


rovka created this revision.
Herald added subscribers: kristof.beyls, igorb, aemerson.

This should enable us to test the generation of target-specific constant
pools, e.g. for ARM:

constants:

- id:              0 value:           'g(GOT_PREL)-(LPC0+8-.)' alignment:       4

I intend to use this to test PIC support in GlobalISel for ARM.

I don't really know how to test it outside of that context, since the
existing MIR tests usually rely on parser support as well, and that
seems a bit trickier to add. I don't have an immediate use for that, but
I can put in the extra effort if people point me in the right direction
with it (i.e. where would we put the target-specific parsing?
Piggy-back it on the Subtarget, maybe?). Alternatively, I could try to
add a unit test, but the setup for that seems rather convoluted and I'm
not sure it's the best way to go about this.

Thoughts?


https://reviews.llvm.org/D36092

Files:
  lib/CodeGen/MIRPrinter.cpp


Index: lib/CodeGen/MIRPrinter.cpp
===================================================================
--- lib/CodeGen/MIRPrinter.cpp
+++ lib/CodeGen/MIRPrinter.cpp
@@ -458,17 +458,19 @@
                          const MachineConstantPool &ConstantPool) {
   unsigned ID = 0;
   for (const MachineConstantPoolEntry &Constant : ConstantPool.getConstants()) {
-    // TODO: Serialize target specific constant pool entries.
-    if (Constant.isMachineConstantPoolEntry())
-      llvm_unreachable("Can't print target specific constant pool entries yet");
-
-    yaml::MachineConstantPoolValue YamlConstant;
     std::string Str;
     raw_string_ostream StrOS(Str);
-    Constant.Val.ConstVal->printAsOperand(StrOS);
+    if (Constant.isMachineConstantPoolEntry()) {
+      Constant.Val.MachineCPVal->print(StrOS);
+    } else {
+      Constant.Val.ConstVal->printAsOperand(StrOS);
+    }
+
+    yaml::MachineConstantPoolValue YamlConstant;
     YamlConstant.ID = ID++;
     YamlConstant.Value = StrOS.str();
     YamlConstant.Alignment = Constant.getAlignment();
+
     MF.Constants.push_back(YamlConstant);
   }
 }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D36092.108927.patch
Type: text/x-patch
Size: 1111 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170731/720bd850/attachment.bin>


More information about the llvm-commits mailing list