# RUN: llc -march=x86-64 -start-after machine-sink -stop-after machine-sink -o - %s | FileCheck %s
# REQUIRES: global-isel
# This test ensures that the MIR parser parses generic virtual
# register definitions correctly.

--- |
  ; ModuleID = 'generic-virtual-registers-type-error.mir'
  target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
  %type_alias = type <2 x i32>
  %structure_alias = type { i32, i16 }
  define void @bar() {
  entry:
    ret void
  }

...

---
name:            bar
isSSA:           true
# CHECK:      registers:
# CHECK-NEXT:   - { id: 0, class: _ }
# CHECK-NEXT:   - { id: 1, class: _ }
# CHECK-NEXT:   - { id: 2, class: _ }
# CHECK-NEXT:   - { id: 3, class: _ }
# CHECK-NEXT:   - { id: 4, class: _ }
registers:
  - { id: 0, class: _ }
  - { id: 1, class: _ }
  - { id: 2, class: _ }
  - { id: 3, class: _ }
  - { id: 4, class: _ }
body: |
  bb.0.entry:
    liveins: %edi
    ; CHECK:      %0(32) = G_ADD i32 %edi
    %0(32) = G_ADD i32 %edi, %edi
    ; CHECK:      %1(64) = G_ADD <2 x i32> %edi
    %1(64) = G_ADD <2 x i32> %edi, %edi
    ; CHECK:      %2(64) = G_ADD <2 x i32> %edi
    %2(64) = G_ADD %type_alias %edi, %edi
    ; G_ADD is actually not a valid operand for structure type,
    ; but that is the only one we have for now for testing.
    ; CHECK:      %3(64) = G_ADD { i32, i32 } %edi
    %3(64) = G_ADD {i32, i32} %edi, %edi
    ; CHECK:      %4(48) = G_ADD %structure_alias %edi
    %4(48) = G_ADD %structure_alias %edi, %edi
...