Skip to content

Commit 23ac381

Browse files
committed
Remove cast support for vector registers, and improve error tests
1 parent ab863ce commit 23ac381

File tree

2 files changed

+20
-20
lines changed

2 files changed

+20
-20
lines changed

llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2595,14 +2595,8 @@ uint16_t RegSizeInBits(const MCRegisterInfo &MRI, MCRegister RegNo) {
25952595
return 64;
25962596
if (X86MCRegisterClasses[X86::RFP80RegClassID].contains(RegNo))
25972597
return 80;
2598-
if (X86MCRegisterClasses[X86::VR128RegClassID].contains(RegNo) ||
2599-
X86MCRegisterClasses[X86::VR128XRegClassID].contains(RegNo))
2600-
return 128;
2601-
if (X86MCRegisterClasses[X86::VR256XRegClassID].contains(RegNo))
2602-
return 256;
2603-
if (X86MCRegisterClasses[X86::VR512RegClassID].contains(RegNo))
2604-
return 512;
2605-
llvm_unreachable("Register without known register class");
2598+
// Unknown register size
2599+
return 0;
26062600
}
26072601

26082602
bool X86AsmParser::parseIntelOperand(OperandVector &Operands, StringRef Name) {
@@ -2639,6 +2633,12 @@ bool X86AsmParser::parseIntelOperand(OperandVector &Operands, StringRef Name) {
26392633
// sizes, but not to other types.
26402634
uint16_t RegSize =
26412635
RegSizeInBits(*getContext().getRegisterInfo(), RegNo);
2636+
if (RegSize == 0)
2637+
return Error(
2638+
Start,
2639+
"cannot cast register '" +
2640+
StringRef(getContext().getRegisterInfo()->getName(RegNo)) +
2641+
"'; its size is not easily defined.");
26422642
if (RegSize != Size)
26432643
return Error(
26442644
Start,

llvm/test/tools/llvm-ml/cast_errors.asm

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,39 +3,39 @@
33
.code
44

55
mov word ptr al, ax
6-
; CHECK: error: 8-bit register 'AL' cannot be used as a 16-bit WORD
6+
; CHECK: [[#@LINE-1]]:14: error: 8-bit register 'AL' cannot be used as a 16-bit WORD
77

88
mov dword ptr al, eax
9-
; CHECK: error: 8-bit register 'AL' cannot be used as a 32-bit DWORD
9+
; CHECK: [[#@LINE-1]]:15: error: 8-bit register 'AL' cannot be used as a 32-bit DWORD
1010

1111
mov qword ptr al, rax
12-
; CHECK: error: 8-bit register 'AL' cannot be used as a 64-bit QWORD
12+
; CHECK: [[#@LINE-1]]:15: error: 8-bit register 'AL' cannot be used as a 64-bit QWORD
1313

1414
mov byte ptr ax, al
15-
; CHECK: error: 16-bit register 'AX' cannot be used as a 8-bit BYTE
15+
; CHECK: [[#@LINE-1]]:14: error: 16-bit register 'AX' cannot be used as a 8-bit BYTE
1616

1717
mov dword ptr ax, eax
18-
; CHECK: error: 16-bit register 'AX' cannot be used as a 32-bit DWORD
18+
; CHECK: [[#@LINE-1]]:15: error: 16-bit register 'AX' cannot be used as a 32-bit DWORD
1919

2020
mov qword ptr ax, rax
21-
; CHECK: error: 16-bit register 'AX' cannot be used as a 64-bit QWORD
21+
; CHECK: [[#@LINE-1]]:15: error: 16-bit register 'AX' cannot be used as a 64-bit QWORD
2222

2323
mov byte ptr eax, al
24-
; CHECK: error: 32-bit register 'EAX' cannot be used as a 8-bit BYTE
24+
; CHECK: [[#@LINE-1]]:14: error: 32-bit register 'EAX' cannot be used as a 8-bit BYTE
2525

2626
mov word ptr eax, ax
27-
; CHECK: error: 32-bit register 'EAX' cannot be used as a 16-bit WORD
27+
; CHECK: [[#@LINE-1]]:14: error: 32-bit register 'EAX' cannot be used as a 16-bit WORD
2828

2929
mov qword ptr eax, rax
30-
; CHECK: error: 32-bit register 'EAX' cannot be used as a 64-bit QWORD
30+
; CHECK: [[#@LINE-1]]:15: error: 32-bit register 'EAX' cannot be used as a 64-bit QWORD
3131

3232
mov byte ptr rax, al
33-
; CHECK: error: 64-bit register 'RAX' cannot be used as a 8-bit BYTE
33+
; CHECK: [[#@LINE-1]]:14: error: 64-bit register 'RAX' cannot be used as a 8-bit BYTE
3434

3535
mov word ptr rax, ax
36-
; CHECK: error: 64-bit register 'RAX' cannot be used as a 16-bit WORD
36+
; CHECK: [[#@LINE-1]]:14: error: 64-bit register 'RAX' cannot be used as a 16-bit WORD
3737

3838
mov dword ptr rax, eax
39-
; CHECK: error: 64-bit register 'RAX' cannot be used as a 32-bit DWORD
39+
; CHECK: [[#@LINE-1]]:15: error: 64-bit register 'RAX' cannot be used as a 32-bit DWORD
4040

4141
END

0 commit comments

Comments
 (0)