diff options
author | Diana Picus <diana.picus@linaro.org> | 2017-08-02 11:09:30 +0000 |
---|---|---|
committer | Diana Picus <diana.picus@linaro.org> | 2017-08-02 11:09:30 +0000 |
commit | d5a00b0ff645be2fa219fd9abd95527c70ccdc5c (patch) | |
tree | bdf65c5756046f935e1fe1ee4e6700046890836d /llvm/lib/CodeGen/MIRPrinter.cpp | |
parent | f5a4394ad6a402795ee0e5b3c8836b955ba00aed (diff) | |
download | bcm5719-llvm-d5a00b0ff645be2fa219fd9abd95527c70ccdc5c.tar.gz bcm5719-llvm-d5a00b0ff645be2fa219fd9abd95527c70ccdc5c.zip |
[MIR] Print target-specific constant pools
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
isTargetSpecific: true
I intend to use this to test PIC support in GlobalISel for ARM.
This is difficult to test outside of that context, since the existing
MIR tests usually rely on parser support as well, and that seems a bit
trickier to add. We could try to add a unit test, but the setup for that
seems rather convoluted and overkill.
We do test however that the parser reports a nice error when
encountering a target-specific constant pool.
Differential Revision: https://reviews.llvm.org/D36092
llvm-svn: 309806
Diffstat (limited to 'llvm/lib/CodeGen/MIRPrinter.cpp')
-rw-r--r-- | llvm/lib/CodeGen/MIRPrinter.cpp | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/llvm/lib/CodeGen/MIRPrinter.cpp b/llvm/lib/CodeGen/MIRPrinter.cpp index b9281b1e5e1..db9ccef8a36 100644 --- a/llvm/lib/CodeGen/MIRPrinter.cpp +++ b/llvm/lib/CodeGen/MIRPrinter.cpp @@ -458,17 +458,20 @@ void MIRPrinter::convert(yaml::MachineFunction &MF, 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(); + YamlConstant.IsTargetSpecific = Constant.isMachineConstantPoolEntry(); + MF.Constants.push_back(YamlConstant); } } |