Index: lib/Target/X86/AsmParser/X86AsmParser.cpp =================================================================== --- lib/Target/X86/AsmParser/X86AsmParser.cpp +++ lib/Target/X86/AsmParser/X86AsmParser.cpp @@ -1615,7 +1615,8 @@ if (!isParsingInlineAsm()) { if (getParser().parsePrimaryExpr(Val, End)) return ErrorOperand(Tok.getLoc(), "unknown token in expression"); - + if (Val->getKind() == MCExpr::Constant) + return X86Operand::CreateImm(Val, Start, End); return X86Operand::CreateMem(getPointerWidth(), Val, Start, End, Size); } @@ -1625,9 +1626,10 @@ /*Unevaluated=*/false, End)) return nullptr; - if (!getLexer().is(AsmToken::LBrac)) + if (getLexer().isNot(AsmToken::LBrac)){ return CreateMemForInlineAsm(/*SegReg=*/0, Val, /*BaseReg=*/0, /*IndexReg=*/0, /*Scale=*/1, Start, End, Size, Identifier, Info); + } Parser.Lex(); // Eat '[' Index: test/MC/X86/intel-syntax-encoding.s =================================================================== --- test/MC/X86/intel-syntax-encoding.s +++ test/MC/X86/intel-syntax-encoding.s @@ -76,3 +76,6 @@ // CHECK: encoding: [0xca,0x08,0x00] retf 8 + .set FOO, 2 + cmp eax, FOO +// CHECK: encoding: [0x83,0xf8,0x02]