mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
ARM: Add a better diagnostic for some out of range immediates.
As an example of how the custom DiagnosticType can be used to provide better operand-mismatch diagnostics, add a custom diagnostic for the imm0_15 operand class used for several system instructions. Update the tests to expect the improved diagnostic. rdar://8987109 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159051 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
4dbfdfba6c
commit
70c9bf3c1a
@ -587,7 +587,10 @@ def imm1_31 : Operand<i32>, ImmLeaf<i32, [{ return Imm > 0 && Imm < 32; }]> {
|
||||
}
|
||||
|
||||
/// imm0_15 predicate - Immediate in the range [0,15].
|
||||
def Imm0_15AsmOperand: ImmAsmOperand { let Name = "Imm0_15"; }
|
||||
def Imm0_15AsmOperand: ImmAsmOperand {
|
||||
let Name = "Imm0_15";
|
||||
let DiagnosticType = "ImmRange0_15";
|
||||
}
|
||||
def imm0_15 : Operand<i32>, ImmLeaf<i32, [{
|
||||
return Imm >= 0 && Imm < 16;
|
||||
}]> {
|
||||
|
@ -236,7 +236,10 @@ public:
|
||||
Match_RequiresITBlock = FIRST_TARGET_MATCH_RESULT_TY,
|
||||
Match_RequiresNotITBlock,
|
||||
Match_RequiresV6,
|
||||
Match_RequiresThumb2
|
||||
Match_RequiresThumb2,
|
||||
#define GET_OPERAND_DIAGNOSTIC_TYPES
|
||||
#include "ARMGenAsmMatcher.inc"
|
||||
|
||||
};
|
||||
|
||||
ARMAsmParser(MCSubtargetInfo &_STI, MCAsmParser &_Parser)
|
||||
@ -7411,6 +7414,11 @@ MatchAndEmitInstruction(SMLoc IDLoc,
|
||||
return Error(IDLoc, "instruction variant requires ARMv6 or later");
|
||||
case Match_RequiresThumb2:
|
||||
return Error(IDLoc, "instruction variant requires Thumb2");
|
||||
case Match_ImmRange0_15: {
|
||||
SMLoc ErrorLoc = ((ARMOperand*)Operands[ErrorInfo])->getStartLoc();
|
||||
if (ErrorLoc == SMLoc()) ErrorLoc = IDLoc;
|
||||
return Error(ErrorLoc, "immediate operand must be in the range [0,15]");
|
||||
}
|
||||
}
|
||||
|
||||
llvm_unreachable("Implement any new match types added!");
|
||||
|
@ -70,8 +70,8 @@
|
||||
dbg #-1
|
||||
dbg #16
|
||||
|
||||
@ CHECK-ERRORS: error: invalid operand for instruction
|
||||
@ CHECK-ERRORS: error: invalid operand for instruction
|
||||
@ CHECK-ERRORS: error: immediate operand must be in the range [0,15]
|
||||
@ CHECK-ERRORS: error: immediate operand must be in the range [0,15]
|
||||
@ Double-check that we're synced up with the right diagnostics.
|
||||
@ CHECK-ERRORS: dbg #16
|
||||
|
||||
@ -86,8 +86,8 @@
|
||||
@ CHECK-ERRORS: error: invalid operand for instruction
|
||||
@ CHECK-ERRORS: error: invalid operand for instruction
|
||||
@ CHECK-ERRORS: error: invalid operand for instruction
|
||||
@ CHECK-ERRORS: error: invalid operand for instruction
|
||||
@ CHECK-ERRORS: error: invalid operand for instruction
|
||||
@ CHECK-ERRORS: error: immediate operand must be in the range [0,15]
|
||||
@ CHECK-ERRORS: error: immediate operand must be in the range [0,15]
|
||||
|
||||
|
||||
@ Out of range immediate for MOV
|
||||
@ -115,8 +115,8 @@
|
||||
@ CHECK-ERRORS: error: invalid operand for instruction
|
||||
@ CHECK-ERRORS: error: invalid operand for instruction
|
||||
@ CHECK-ERRORS: error: invalid operand for instruction
|
||||
@ CHECK-ERRORS: error: invalid operand for instruction
|
||||
@ CHECK-ERRORS: error: invalid operand for instruction
|
||||
@ CHECK-ERRORS: error: immediate operand must be in the range [0,15]
|
||||
@ CHECK-ERRORS: error: immediate operand must be in the range [0,15]
|
||||
|
||||
@ Shifter operand validation for PKH instructions.
|
||||
pkhbt r2, r2, r3, lsl #-1
|
||||
|
@ -40,5 +40,5 @@
|
||||
@ CHECK-ERRORS: error: invalid operand for instruction
|
||||
@ CHECK-ERRORS: error: invalid operand for instruction
|
||||
@ CHECK-ERRORS: error: invalid operand for instruction
|
||||
@ CHECK-ERRORS: error: invalid operand for instruction
|
||||
@ CHECK-ERRORS: error: invalid operand for instruction
|
||||
@ CHECK-ERRORS: error: immediate operand must be in the range [0,15]
|
||||
@ CHECK-ERRORS: error: immediate operand must be in the range [0,15]
|
||||
|
Loading…
Reference in New Issue
Block a user