[llvm] r244803 - MIR Serialization: Serialize the constant pool pseudo source values.

Duncan P. N. Exon Smith via llvm-commits llvm-commits at lists.llvm.org
Wed Aug 12 14:27:37 PDT 2015


> On 2015-Aug-12, at 13:33, Alex Lorenz via llvm-commits <llvm-commits at lists.llvm.org> wrote:
> 
> Author: arphaman
> Date: Wed Aug 12 15:33:26 2015
> New Revision: 244803
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=244803&view=rev
> Log:
> MIR Serialization: Serialize the constant pool pseudo source values.
> 
> Modified:
>    llvm/trunk/lib/CodeGen/MIRParser/MILexer.cpp
>    llvm/trunk/lib/CodeGen/MIRParser/MILexer.h
>    llvm/trunk/lib/CodeGen/MIRParser/MIParser.cpp
>    llvm/trunk/lib/CodeGen/MIRPrinter.cpp
>    llvm/trunk/test/CodeGen/MIR/X86/memory-operands.mir
> 
> Modified: llvm/trunk/lib/CodeGen/MIRParser/MILexer.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MIRParser/MILexer.cpp?rev=244803&r1=244802&r2=244803&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/MIRParser/MILexer.cpp (original)
> +++ llvm/trunk/lib/CodeGen/MIRParser/MILexer.cpp Wed Aug 12 15:33:26 2015
> @@ -201,6 +201,7 @@ static MIToken::TokenKind getIdentifierK
>       .Case("non-temporal", MIToken::kw_non_temporal)
>       .Case("invariant", MIToken::kw_invariant)
>       .Case("align", MIToken::kw_align)
> +      .Case("constant-pool", MIToken::kw_constant_pool)
>       .Case("liveout", MIToken::kw_liveout)
>       .Default(MIToken::Identifier);
> }
> 
> Modified: llvm/trunk/lib/CodeGen/MIRParser/MILexer.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MIRParser/MILexer.h?rev=244803&r1=244802&r2=244803&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/MIRParser/MILexer.h (original)
> +++ llvm/trunk/lib/CodeGen/MIRParser/MILexer.h Wed Aug 12 15:33:26 2015
> @@ -70,6 +70,7 @@ struct MIToken {
>     kw_non_temporal,
>     kw_invariant,
>     kw_align,
> +    kw_constant_pool,
>     kw_liveout,
> 
>     // Identifier tokens
> 
> Modified: llvm/trunk/lib/CodeGen/MIRParser/MIParser.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MIRParser/MIParser.cpp?rev=244803&r1=244802&r2=244803&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/MIRParser/MIParser.cpp (original)
> +++ llvm/trunk/lib/CodeGen/MIRParser/MIParser.cpp Wed Aug 12 15:33:26 2015
> @@ -128,6 +128,8 @@ public:
>   bool parseOperandsOffset(MachineOperand &Op);
>   bool parseIRValue(Value *&V);
>   bool parseMemoryOperandFlag(unsigned &Flags);
> +  bool parseMemoryPseudoSourceValue(const PseudoSourceValue *&PSV);
> +  bool parseMachinePointerInfo(MachinePointerInfo &Dest);
>   bool parseMachineMemoryOperand(MachineMemOperand *&Dest);
> 
> private:
> @@ -1117,6 +1119,45 @@ bool MIParser::parseMemoryOperandFlag(un
>   return false;
> }
> 
> +bool MIParser::parseMemoryPseudoSourceValue(const PseudoSourceValue *&PSV) {
> +  switch (Token.kind()) {
> +  case MIToken::kw_constant_pool:
> +    PSV = MF.getPSVManager().getConstantPool();
> +    break;
> +  // TODO: Parse the other pseudo source values.
> +  default:
> +    llvm_unreachable("The current token should be pseudo source value");
> +  }
> +  lex();
> +  return false;
> +}
> +
> +bool MIParser::parseMachinePointerInfo(MachinePointerInfo &Dest) {
> +  if (Token.is(MIToken::kw_constant_pool)) {
> +    const PseudoSourceValue *PSV = nullptr;
> +    if (parseMemoryPseudoSourceValue(PSV))
> +      return true;
> +    int64_t Offset = 0;
> +    if (parseOffset(Offset))
> +      return true;
> +    Dest = MachinePointerInfo(PSV, Offset);
> +    return false;
> +  }
> +  if (Token.isNot(MIToken::NamedIRValue))
> +    return error("expected an IR value reference");
> +  Value *V = nullptr;
> +  if (parseIRValue(V))
> +    return true;
> +  if (!V->getType()->isPointerTy())
> +    return error("expected a pointer IR value");
> +  lex();
> +  int64_t Offset = 0;
> +  if (parseOffset(Offset))
> +    return true;
> +  Dest = MachinePointerInfo(V, Offset);
> +  return false;
> +}
> +
> bool MIParser::parseMachineMemoryOperand(MachineMemOperand *&Dest) {
>   if (expectAndConsume(MIToken::lparen))
>     return true;
> @@ -1146,17 +1187,8 @@ bool MIParser::parseMachineMemoryOperand
>     return error(Twine("expected '") + Word + "'");
>   lex();
> 
> -  // TODO: Parse pseudo source values.
> -  if (Token.isNot(MIToken::NamedIRValue))
> -    return error("expected an IR value reference");
> -  Value *V = nullptr;
> -  if (parseIRValue(V))
> -    return true;
> -  if (!V->getType()->isPointerTy())
> -    return error("expected a pointer IR value");
> -  lex();
> -  int64_t Offset = 0;
> -  if (parseOffset(Offset))
> +  MachinePointerInfo Ptr = MachinePointerInfo();
> +  if (parseMachinePointerInfo(Ptr))

For next time: it'd be easier to read this patch -- to see what's
changed -- if you'd moved the code to a helper function in a
preparatory NFC commit.



More information about the llvm-commits mailing list