[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / combine-build-vector.mir
blob2d36fb3df0338a05c5549a35296dbb63e217592e
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -o - -mtriple=aarch64 -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs %s | FileCheck %s
3 ---
4 name:            full_extracts_from_build_vector
5 alignment:       4
6 tracksRegLiveness: true
7 liveins:
8   - { reg: '$x0' }
9   - { reg: '$x1' }
10 frameInfo:
11   maxAlignment:    1
12   maxCallFrameSize: 0
13 machineFunctionInfo: {}
14 body:             |
15   bb.0:
16     liveins: $x0, $x1
18     ; CHECK-LABEL: name: full_extracts_from_build_vector
19     ; CHECK: liveins: $x0, $x1
20     ; CHECK-NEXT: {{  $}}
21     ; CHECK-NEXT: %arg1:_(s64) = COPY $x0
22     ; CHECK-NEXT: %arg2:_(s64) = COPY $x1
23     ; CHECK-NEXT: $x0 = COPY %arg1(s64)
24     ; CHECK-NEXT: $x1 = COPY %arg2(s64)
25     ; CHECK-NEXT: RET_ReallyLR implicit $x0
26     %arg1:_(s64) = COPY $x0
27     %arg2:_(s64) = COPY $x1
28     %zero:_(s32) = G_CONSTANT i32 0
29     %one:_(s32) = G_CONSTANT i32 1
30     %bv:_(<2 x s64>) = G_BUILD_VECTOR %arg1(s64), %arg2(s64)
31     %extract:_(s64) = G_EXTRACT_VECTOR_ELT %bv(<2 x s64>), %zero(s32)
32     %extract2:_(s64) = G_EXTRACT_VECTOR_ELT %bv(<2 x s64>), %one(s32)
33     $x0 = COPY %extract(s64)
34     $x1 = COPY %extract2(s64)
35     RET_ReallyLR implicit $x0
37 ...
38 ---
39 name:            full_extracts_from_build_vector_other_use
40 alignment:       4
41 tracksRegLiveness: true
42 liveins:
43   - { reg: '$x0' }
44   - { reg: '$x1' }
45 frameInfo:
46   maxAlignment:    1
47   maxCallFrameSize: 0
48 machineFunctionInfo: {}
49 body:             |
50   bb.0:
51     liveins: $x0, $x1
53     ; CHECK-LABEL: name: full_extracts_from_build_vector_other_use
54     ; CHECK: liveins: $x0, $x1
55     ; CHECK-NEXT: {{  $}}
56     ; CHECK-NEXT: %arg1:_(s64) = COPY $x0
57     ; CHECK-NEXT: %arg2:_(s64) = COPY $x1
58     ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 0
59     ; CHECK-NEXT: %one:_(s32) = G_CONSTANT i32 1
60     ; CHECK-NEXT: %bv:_(<2 x s64>) = G_BUILD_VECTOR %arg1(s64), %arg2(s64)
61     ; CHECK-NEXT: %extract:_(s64) = G_EXTRACT_VECTOR_ELT %bv(<2 x s64>), %zero(s32)
62     ; CHECK-NEXT: %extract2:_(s64) = G_EXTRACT_VECTOR_ELT %bv(<2 x s64>), %one(s32)
63     ; CHECK-NEXT: $x0 = COPY %extract(s64)
64     ; CHECK-NEXT: $x1 = COPY %extract2(s64)
65     ; CHECK-NEXT: $q0 = COPY %bv(<2 x s64>)
66     ; CHECK-NEXT: RET_ReallyLR implicit $x0
67     %arg1:_(s64) = COPY $x0
68     %arg2:_(s64) = COPY $x1
69     %zero:_(s32) = G_CONSTANT i32 0
70     %one:_(s32) = G_CONSTANT i32 1
71     %bv:_(<2 x s64>) = G_BUILD_VECTOR %arg1(s64), %arg2(s64)
72     %extract:_(s64) = G_EXTRACT_VECTOR_ELT %bv(<2 x s64>), %zero(s32)
73     %extract2:_(s64) = G_EXTRACT_VECTOR_ELT %bv(<2 x s64>), %one(s32)
74     $x0 = COPY %extract(s64)
75     $x1 = COPY %extract2(s64)
76     $q0 = COPY %bv(<2 x s64>)
77     RET_ReallyLR implicit $x0
79 ...
80 ---
81 name:            partial_extracts_from_build_vector_multiple_per_elt
82 alignment:       4
83 tracksRegLiveness: true
84 liveins:
85   - { reg: '$x0' }
86   - { reg: '$x1' }
87 frameInfo:
88   maxAlignment:    1
89   maxCallFrameSize: 0
90 machineFunctionInfo: {}
91 body:             |
92   bb.0:
93     liveins: $x0, $x1
95     ; CHECK-LABEL: name: partial_extracts_from_build_vector_multiple_per_elt
96     ; CHECK: liveins: $x0, $x1
97     ; CHECK-NEXT: {{  $}}
98     ; CHECK-NEXT: %arg1:_(s64) = COPY $x0
99     ; CHECK-NEXT: %arg2:_(s64) = COPY $x1
100     ; CHECK-NEXT: $x0 = COPY %arg1(s64)
101     ; CHECK-NEXT: $x1 = COPY %arg2(s64)
102     ; CHECK-NEXT: $x2 = COPY %arg2(s64)
103     ; CHECK-NEXT: RET_ReallyLR implicit $x0
104     %arg1:_(s64) = COPY $x0
105     %arg2:_(s64) = COPY $x1
106     %zero:_(s32) = G_CONSTANT i32 0
107     %one:_(s32) = G_CONSTANT i32 1
108     %bv:_(<2 x s64>) = G_BUILD_VECTOR %arg1(s64), %arg2(s64)
109     %extract:_(s64) = G_EXTRACT_VECTOR_ELT %bv(<2 x s64>), %zero(s32)
110     %extract2:_(s64) = G_EXTRACT_VECTOR_ELT %bv(<2 x s64>), %one(s32)
111     %extract3:_(s64) = G_EXTRACT_VECTOR_ELT %bv(<2 x s64>), %one(s32)
112     $x0 = COPY %extract(s64)
113     $x1 = COPY %extract2(s64)
114     $x2 = COPY %extract3(s64)
115     RET_ReallyLR implicit $x0
119 name:            full_extracts_from_build_vector_idx_out_of_range
120 alignment:       4
121 tracksRegLiveness: true
122 liveins:
123   - { reg: '$x0' }
124   - { reg: '$x1' }
125 frameInfo:
126   maxAlignment:    1
127   maxCallFrameSize: 0
128 machineFunctionInfo: {}
129 body:             |
130   bb.0:
131     liveins: $x0, $x1
133     ; CHECK-LABEL: name: full_extracts_from_build_vector_idx_out_of_range
134     ; CHECK: liveins: $x0, $x1
135     ; CHECK-NEXT: {{  $}}
136     ; CHECK-NEXT: %arg1:_(s64) = COPY $x0
137     ; CHECK-NEXT: %extract2:_(s64) = G_IMPLICIT_DEF
138     ; CHECK-NEXT: $x0 = COPY %arg1(s64)
139     ; CHECK-NEXT: $x1 = COPY %extract2(s64)
140     ; CHECK-NEXT: RET_ReallyLR implicit $x0
141     %arg1:_(s64) = COPY $x0
142     %arg2:_(s64) = COPY $x1
143     %zero:_(s32) = G_CONSTANT i32 0
144     %one:_(s32) = G_CONSTANT i32 1
145     %two:_(s32) = G_CONSTANT i32 2
146     %bv:_(<2 x s64>) = G_BUILD_VECTOR %arg1(s64), %arg2(s64)
147     %extract:_(s64) = G_EXTRACT_VECTOR_ELT %bv(<2 x s64>), %zero(s32)
148     %extract2:_(s64) = G_EXTRACT_VECTOR_ELT %bv(<2 x s64>), %two(s32)
149     $x0 = COPY %extract(s64)
150     $x1 = COPY %extract2(s64)
151     RET_ReallyLR implicit $x0