Index: lib/MC/MCParser/AsmParser.cpp =================================================================== --- lib/MC/MCParser/AsmParser.cpp +++ lib/MC/MCParser/AsmParser.cpp @@ -4707,7 +4707,9 @@ } if (Lexer.is(AsmToken::Identifier) && - (getTok().getIdentifier() == ".rept")) { + (getTok().getIdentifier() == ".rept" || + getTok().getIdentifier() == ".irp" || + getTok().getIdentifier() == ".irpc")) { ++NestLevel; } Index: test/MC/AsmParser/macro-irp.s =================================================================== --- test/MC/AsmParser/macro-irp.s +++ test/MC/AsmParser/macro-irp.s @@ -6,3 +6,16 @@ // CHECK: pushl %eax // CHECK: pushl %ebx + +.irp reg,%eax,%ebx +.irp imm,4,3,5 + addl \reg, \imm +.endr +.endr + +// CHECK: addl %eax, 4 +// CHECK: addl %eax, 3 +// CHECK: addl %eax, 5 +// CHECK: addl %ebx, 4 +// CHECK: addl %ebx, 3 +// CHECK: addl %ebx, 5 Index: test/MC/AsmParser/macro-irpc.s =================================================================== --- test/MC/AsmParser/macro-irpc.s +++ test/MC/AsmParser/macro-irpc.s @@ -7,3 +7,16 @@ // CHECK: long 1 // CHECK: long 2 // CHECK: long 3 + +.irpc foo,123 +.irpc bar,45 + addl %eax, \foo\bar +.endr +.endr + +// CHECK: addl %eax, 14 +// CHECK: addl %eax, 15 +// CHECK: addl %eax, 24 +// CHECK: addl %eax, 25 +// CHECK: addl %eax, 34 +// CHECK: addl %eax, 35