forked from llvm-mirror/llvm
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[AsmParser] Mnemonic Spell Corrector
This implements suggesting other mnemonics when an invalid one is specified, for example: $ echo "adXd r1,r2,llvm-mirror#3" | llvm-mc -triple arm <stdin>:1:1: error: invalid instruction, did you mean: add, qadd? adXd r1,r2,llvm-mirror#3 ^ The implementation is target agnostic, but as a first step I have added it only to the ARM backend; so the ARM backend is a good example if someone wants to enable this too for another target. Differential Revision: https://reviews.llvm.org/D33128 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@307148 91177308-0d34-0410-b5e6-96231b3b80d8
- Loading branch information
Sjoerd Meijer
committed
Jul 5, 2017
1 parent
c61a590
commit 8b755a3
Showing
3 changed files
with
119 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
@ RUN: not llvm-mc -triple=arm -show-encoding < %s 2>&1 | FileCheck %s | ||
@ RUN: not llvm-mc -triple=thumb -show-encoding < %s 2>&1 | FileCheck %s --check-prefix=CHECK-THUMB | ||
|
||
@ This tests the mnemonic spell checker. | ||
|
||
@ First check what happens when an instruction is omitted: | ||
|
||
r1, r2, r3 | ||
|
||
@ CHECK: error: unexpected token in operand | ||
@ CHECK-NEXT: r1, r2, r3 | ||
@ CHECK-NEXT: ^ | ||
|
||
@ We don't want to see a suggestion here; the edit distance is too large to | ||
@ give sensible suggestions: | ||
|
||
aaaaaaaaaaaaaaa r1, r2, r3 | ||
|
||
@ CHECK: error: invalid instruction | ||
@ CHECK-NEXT: aaaaaaaaaaaaaaa r1, r2, r3 | ||
@ CHECK-NEXT: ^ | ||
|
||
@ Check that we get one suggestion: 'pushh' is 1 edit away, i.e. an deletion. | ||
|
||
pushh r1, r2, r3 | ||
|
||
@CHECK: error: invalid instruction, did you mean: push? | ||
@CHECK-NEXT: pushh r1, r2, r3 | ||
@CHECK-NEXT: ^ | ||
|
||
adXd r1, r2, r3 | ||
|
||
@ Check edit distance 1 and 2: 'add' has edit distance of 1 (a deletion), | ||
@ and 'qadd' a distance of 2 (a deletion and an insertion) | ||
|
||
@ CHECK: error: invalid instruction, did you mean: add, qadd? | ||
@ CHECK-NEXT: adXd r1, r2, r3 | ||
@ CHECK-NEXT: ^ | ||
|
||
@ Check edit distance 1 and 2, just insertions: | ||
|
||
ad r1, r2, r3 | ||
|
||
@ CHECK: error: invalid instruction, did you mean: adc, add, adr, and, qadd? | ||
@ CHECK-NEXT: ad r1, r2, r3 | ||
@ CHECK-NEXT: ^ | ||
|
||
@ Check an instruction that is 2 edits away, and also has a lot of candidates: | ||
|
||
ldre r1, r2, r3 | ||
|
||
@ CHECK: error: invalid instruction, did you mean: ldr, ldrb, ldrd, ldrex, ldrexb, ldrexd, ldrexh, ldrh, ldrt? | ||
@ CHECK-NEXT: ldre r1, r2, r3 | ||
@ CHECK-NEXT: ^ | ||
|
||
@ Here it is checked that we don't suggest instructions that are not supported. | ||
@ For example, in Thumb mode we don't want to see suggestions 'faddd' of 'qadd' | ||
@ because they are not supported. | ||
|
||
fadd r1, r2, r3 | ||
|
||
@ CHECK-THUMB: error: invalid instruction, did you mean: add? | ||
@ CHECK-THUMB: fadd r1, r2, r3 | ||
@ CHECK-THUMB: ^ | ||
|
||
@ CHECK: error: invalid instruction, did you mean: add, qadd? | ||
@ CHECK-NEXT: fadd r1, r2, r3 | ||
@ CHECK-NEXT: ^ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters