|  | # RUN: not --crash llc -o - -run-pass=none -verify-machineinstrs -mtriple=arm64 %s 2>&1 | FileCheck %s | 
|  | # REQUIRES: aarch64-registered-target | 
|  | --- | 
|  | name:            g_extract_subvector | 
|  | tracksRegLiveness: true | 
|  | liveins: | 
|  | body:             | | 
|  | bb.0: | 
|  | %0:_(s32) = G_CONSTANT i32 0 | 
|  | %1:_(<vscale x 2 x s32>) = G_IMPLICIT_DEF | 
|  | %2:_(<vscale x 1 x s32>) = G_IMPLICIT_DEF | 
|  |  | 
|  | ; CHECK: generic instruction must use register operands | 
|  | ; CHECK: G_EXTRACT_SUBVECTOR first source must be a register | 
|  | %3:_(<vscale x 2 x s32>) = G_EXTRACT_SUBVECTOR 1, 0 | 
|  |  | 
|  | ; CHECK: G_EXTRACT_SUBVECTOR index must be an immediate | 
|  | %4:_(<vscale x 1 x s32>) = G_EXTRACT_SUBVECTOR %2, %0 | 
|  |  | 
|  | ; CHECK: Destination type must be a vector | 
|  | %5:_(s32) = G_EXTRACT_SUBVECTOR %2, 0 | 
|  |  | 
|  | ; CHECK: Source must be a vector | 
|  | %6:_(<vscale x 2 x s32>) = G_EXTRACT_SUBVECTOR %0, 0 | 
|  |  | 
|  | %7:_(<vscale x 1 x s16>) = G_IMPLICIT_DEF | 
|  |  | 
|  | ; CHECK: Element type of vectors must be the same | 
|  | %8:_(<vscale x 2 x s32>) = G_EXTRACT_SUBVECTOR %7, 0 | 
|  |  | 
|  | ; CHECK: Destination vector must be smaller than source vector | 
|  | %9:_(<vscale x 4 x s32>) = G_EXTRACT_SUBVECTOR  %1, 3 | 
|  |  | 
|  | ; CHECK: Destination vector must be smaller than source vector | 
|  | %10:_(<vscale x 4 x s32>) = G_EXTRACT_SUBVECTOR  %1, 2 | 
|  |  | 
|  | ; CHECK: Destination type and index must not cause extract to overrun the source vector | 
|  | %11:_(<vscale x 1 x s32>) = G_EXTRACT_SUBVECTOR  %1, 4 | 
|  |  | 
|  | %12:_(<vscale x 4 x s32>) = G_IMPLICIT_DEF | 
|  |  | 
|  | ; CHECK: Destination type and index must not cause extract to overrun the source vector | 
|  | %13:_(<vscale x 3 x s32>) = G_EXTRACT_SUBVECTOR  %12, 3 | 
|  |  | 
|  | %14:_(<2 x s32>) = G_IMPLICIT_DEF | 
|  | %15:_(<4 x s32>) = G_IMPLICIT_DEF | 
|  |  | 
|  | ; CHECK: Destination type and index must not cause extract to overrun the source vector | 
|  | %16:_(<2 x s32>) = G_EXTRACT_SUBVECTOR  %14, 4 | 
|  |  | 
|  | ; CHECK: Destination type and index must not cause extract to overrun the source vector | 
|  | %17:_(<3 x s32>) = G_EXTRACT_SUBVECTOR  %15, 3 | 
|  |  | 
|  | ; CHECK: Vector types must both be fixed or both be scalable | 
|  | %18:_(<vscale x 2 x s32>) = G_EXTRACT_SUBVECTOR %15, 0 | 
|  |  | 
|  | ; CHECK: Vector types must both be fixed or both be scalable | 
|  | %19:_(<2 x s32>) = G_EXTRACT_SUBVECTOR %12, 0 | 
|  |  | 
|  | ; CHECK: Index must be a multiple of the destination vector's minimum vector length | 
|  | %20:_(<vscale x 2 x s32>) = G_EXTRACT_SUBVECTOR %12, 1 | 
|  |  | 
|  | ... |