mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-09 01:38:03 +00:00
MIR Parser: Report an error when a virtual register is redefined.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243695 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
8a6197a968
commit
2bc631660b
@ -131,7 +131,7 @@ namespace llvm {
|
||||
namespace yaml {
|
||||
|
||||
struct VirtualRegisterDefinition {
|
||||
unsigned ID;
|
||||
UnsignedValue ID;
|
||||
StringValue Class;
|
||||
StringValue PreferredRegister;
|
||||
// TODO: Serialize the target specific register hints.
|
||||
|
@ -414,9 +414,11 @@ bool MIRParserImpl::initializeRegisterInfo(MachineFunction &MF,
|
||||
Twine("use of undefined register class '") +
|
||||
VReg.Class.Value + "'");
|
||||
unsigned Reg = RegInfo.createVirtualRegister(RC);
|
||||
// TODO: Report an error when the same virtual register with the same ID is
|
||||
// redefined.
|
||||
PFS.VirtualRegisterSlots.insert(std::make_pair(VReg.ID, Reg));
|
||||
if (!PFS.VirtualRegisterSlots.insert(std::make_pair(VReg.ID.Value, Reg))
|
||||
.second)
|
||||
return error(VReg.ID.SourceRange.Start,
|
||||
Twine("redefinition of virtual register '%") +
|
||||
Twine(VReg.ID.Value) + "'");
|
||||
if (!VReg.PreferredRegister.Value.empty()) {
|
||||
unsigned PreferredReg = 0;
|
||||
if (parseNamedRegisterReference(PreferredReg, SM, MF,
|
||||
|
28
test/CodeGen/MIR/X86/virtual-register-redefinition-error.mir
Normal file
28
test/CodeGen/MIR/X86/virtual-register-redefinition-error.mir
Normal file
@ -0,0 +1,28 @@
|
||||
# RUN: not llc -march=x86-64 -start-after machine-sink -stop-after machine-sink -o /dev/null %s 2>&1 | FileCheck %s
|
||||
|
||||
--- |
|
||||
|
||||
define i32 @test(i32 %a) {
|
||||
body:
|
||||
ret i32 %a
|
||||
}
|
||||
|
||||
...
|
||||
---
|
||||
name: test
|
||||
isSSA: true
|
||||
tracksRegLiveness: true
|
||||
registers:
|
||||
- { id: 0, class: gr32 }
|
||||
# CHECK: [[@LINE+1]]:11: redefinition of virtual register '%0'
|
||||
- { id: 0, class: gr32 }
|
||||
body:
|
||||
- id: 0
|
||||
name: body
|
||||
liveins: [ '%edi' ]
|
||||
instructions:
|
||||
- '%0 = COPY %edi'
|
||||
- '%eax = COPY %0'
|
||||
- 'RETQ %eax'
|
||||
...
|
||||
|
Loading…
x
Reference in New Issue
Block a user