[LLVMdev] Metadata

David Greene dag at cray.com
Thu Feb 11 12:05:21 PST 2010

On Thursday 11 February 2010 13:31:58 David Greene wrote:

> > Putting a bit (or multiple bits) in MachineMemOperand for this
> > would also make sense.
> Is there any chance a MachineMemOperand will be shared by multiple
> instructions?

So I tried to do this:

	%r8 = load <2 x double>* %r6, align 16, !"nontemporal"

and the assembler doesn't like it.

Do I need to use named metadata?  That would be rather inconvenient.

The problem is this code in llvm-as:

int LLParser::ParseLoad(Instruction *&Inst, PerFunctionState &PFS,
                        bool isVolatile) {
  Value *Val; LocTy Loc;
  unsigned Alignment = 0;
  bool AteExtraComma = false;
  if (ParseTypeAndValue(Val, Loc, PFS) ||
      ParseOptionalCommaAlign(Alignment, AteExtraComma))
    return true;

/// ParseOptionalCommaAlign
///   ::= 
///   ::= ',' align 4
/// This returns with AteExtraComma set to true if it ate an excess comma at 
/// end.
bool LLParser::ParseOptionalCommaAlign(unsigned &Alignment,
                                       bool &AteExtraComma) {
  AteExtraComma = false;
  while (EatIfPresent(lltok::comma)) {
    // Metadata at the end is an early exit.
    if (Lex.getKind() == lltok::MetadataVar) {
      AteExtraComma = true;
      return false;
    if (Lex.getKind() == lltok::kw_align) {
      if (ParseOptionalAlignment(Alignment)) return true;
    } else
      return true;

  return false;

Either ParseLoad and probably other instructions need to look for metadata
explicitly or ParseOptionalCommaAlign needs to know about general metadata.

My inkling is to fix ParseOptionalCommaAlign.  Sound reasonable?


More information about the llvm-dev mailing list