Skip to content

Commit 3ed6a6f

Browse files
committed
[SystemZ][z/OS] Enforce prefix-less registers in SystemZAsmParser for the HLASM dialect.
- Previously, https://reviews.llvm.org/D101308 removed prefixes from register while printing them out. This was especially needed for inline asm statements which used input/output operands. - However, the backend SystemZAsmParser, accepts both prefixed registers and prefix-less registers as part of its implementation - This patch aims to change that by ensuring that prefixed registers are only allowed for the ATT dialect. Reviewed By: uweigand Differential Revision: https://reviews.llvm.org/D101665
1 parent c3d5f30 commit 3ed6a6f

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

llvm/lib/Target/SystemZ/AsmParser/SystemZAsmParser.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -830,7 +830,7 @@ SystemZAsmParser::parseRegister(OperandVector &Operands, RegisterKind Kind) {
830830
}
831831

832832
// Handle register names of the form %<prefix><number>
833-
if (Parser.getTok().is(AsmToken::Percent)) {
833+
if (isParsingATT() && Parser.getTok().is(AsmToken::Percent)) {
834834
if (parseRegister(Reg))
835835
return MatchOperand_ParseFail;
836836

@@ -912,6 +912,9 @@ SystemZAsmParser::parseAnyRegister(OperandVector &Operands) {
912912
Operands.push_back(SystemZOperand::createImm(Register, StartLoc, EndLoc));
913913
}
914914
else {
915+
if (isParsingHLASM())
916+
return MatchOperand_NoMatch;
917+
915918
Register Reg;
916919
if (parseRegister(Reg))
917920
return MatchOperand_ParseFail;
@@ -1019,7 +1022,7 @@ bool SystemZAsmParser::parseAddress(bool &HaveReg1, Register &Reg1,
10191022
if (getLexer().is(AsmToken::LParen)) {
10201023
Parser.Lex();
10211024

1022-
if (getLexer().is(AsmToken::Percent)) {
1025+
if (isParsingATT() && getLexer().is(AsmToken::Percent)) {
10231026
// Parse the first register.
10241027
HaveReg1 = true;
10251028
if (parseRegister(Reg1))
@@ -1062,7 +1065,7 @@ bool SystemZAsmParser::parseAddress(bool &HaveReg1, Register &Reg1,
10621065
if (parseIntegerRegister(Reg2, RegGR))
10631066
return true;
10641067
} else {
1065-
if (parseRegister(Reg2))
1068+
if (isParsingATT() && parseRegister(Reg2))
10661069
return true;
10671070
}
10681071
}
@@ -1419,7 +1422,7 @@ bool SystemZAsmParser::parseOperand(OperandVector &Operands,
14191422
// a context-dependent parse routine, which gives the required register
14201423
// class. The code is here to mop up other cases, like those where
14211424
// the instruction isn't recognized.
1422-
if (Parser.getTok().is(AsmToken::Percent)) {
1425+
if (isParsingATT() && Parser.getTok().is(AsmToken::Percent)) {
14231426
Register Reg;
14241427
if (parseRegister(Reg))
14251428
return true;

0 commit comments

Comments
 (0)