From: Alex Lorenz Date: Wed, 12 Aug 2015 21:00:22 +0000 (+0000) Subject: MIR Serialization: Serialize the GOT pseudo source values. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=6b8e62f3f53ad4c70e0071e71555060eabd80e5f;p=oota-llvm.git MIR Serialization: Serialize the GOT pseudo source values. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244809 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/MIRParser/MILexer.cpp b/lib/CodeGen/MIRParser/MILexer.cpp index 8a6a1ff817a..950181bf17d 100644 --- a/lib/CodeGen/MIRParser/MILexer.cpp +++ b/lib/CodeGen/MIRParser/MILexer.cpp @@ -202,6 +202,7 @@ static MIToken::TokenKind getIdentifierKind(StringRef Identifier) { .Case("invariant", MIToken::kw_invariant) .Case("align", MIToken::kw_align) .Case("stack", MIToken::kw_stack) + .Case("got", MIToken::kw_got) .Case("constant-pool", MIToken::kw_constant_pool) .Case("liveout", MIToken::kw_liveout) .Default(MIToken::Identifier); diff --git a/lib/CodeGen/MIRParser/MILexer.h b/lib/CodeGen/MIRParser/MILexer.h index 2c7a32cf508..beb38d0876f 100644 --- a/lib/CodeGen/MIRParser/MILexer.h +++ b/lib/CodeGen/MIRParser/MILexer.h @@ -71,6 +71,7 @@ struct MIToken { kw_invariant, kw_align, kw_stack, + kw_got, kw_constant_pool, kw_liveout, diff --git a/lib/CodeGen/MIRParser/MIParser.cpp b/lib/CodeGen/MIRParser/MIParser.cpp index 47a9eaf14c3..6dae29a58e3 100644 --- a/lib/CodeGen/MIRParser/MIParser.cpp +++ b/lib/CodeGen/MIRParser/MIParser.cpp @@ -1124,6 +1124,9 @@ bool MIParser::parseMemoryPseudoSourceValue(const PseudoSourceValue *&PSV) { case MIToken::kw_stack: PSV = MF.getPSVManager().getStack(); break; + case MIToken::kw_got: + PSV = MF.getPSVManager().getGOT(); + break; case MIToken::kw_constant_pool: PSV = MF.getPSVManager().getConstantPool(); break; @@ -1136,7 +1139,8 @@ bool MIParser::parseMemoryPseudoSourceValue(const PseudoSourceValue *&PSV) { } bool MIParser::parseMachinePointerInfo(MachinePointerInfo &Dest) { - if (Token.is(MIToken::kw_constant_pool) || Token.is(MIToken::kw_stack)) { + if (Token.is(MIToken::kw_constant_pool) || Token.is(MIToken::kw_stack) || + Token.is(MIToken::kw_got)) { const PseudoSourceValue *PSV = nullptr; if (parseMemoryPseudoSourceValue(PSV)) return true; diff --git a/lib/CodeGen/MIRPrinter.cpp b/lib/CodeGen/MIRPrinter.cpp index 019383cc7cf..83e7b3e5862 100644 --- a/lib/CodeGen/MIRPrinter.cpp +++ b/lib/CodeGen/MIRPrinter.cpp @@ -713,6 +713,9 @@ void MIPrinter::print(const MachineMemOperand &Op) { case PseudoSourceValue::Stack: OS << "stack"; break; + case PseudoSourceValue::GOT: + OS << "got"; + break; case PseudoSourceValue::ConstantPool: OS << "constant-pool"; break; diff --git a/test/CodeGen/MIR/X86/memory-operands.mir b/test/CodeGen/MIR/X86/memory-operands.mir index 289a5f6267f..c95d6d45900 100644 --- a/test/CodeGen/MIR/X86/memory-operands.mir +++ b/test/CodeGen/MIR/X86/memory-operands.mir @@ -75,6 +75,15 @@ attributes #0 = { readonly } + @G = external global i32 + + define i32 @got_psv() { + entry: + %a = load i32, i32* @G + %b = add i32 %a, 1 + ret i32 %b + } + ... --- name: test @@ -246,3 +255,17 @@ body: - '%rsp = ADD64ri8 %rsp, 24, implicit-def dead %eflags' - RETQ ... +--- +name: got_psv +tracksRegLiveness: true +body: + - id: 0 + name: entry + instructions: +# CHECK: name: got_psv +# CHECK: %rax = MOV64rm %rip, 1, _, @G, _ :: (load 8 from got) + - '%rax = MOV64rm %rip, 1, _, @G, _ :: (load 8 from got)' + - '%eax = MOV32rm killed %rax, 1, _, 0, _' + - '%eax = INC32r killed %eax, implicit-def dead %eflags' + - 'RETQ %eax' +...