[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / combine-build-vector.mir
bloba1f83cb098296e6d185265359b22be52ca09af1d
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -o - -march=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: %arg1:_(s64) = COPY $x0
21     ; CHECK: %arg2:_(s64) = COPY $x1
22     ; CHECK: $x0 = COPY %arg1(s64)
23     ; CHECK: $x1 = COPY %arg2(s64)
24     ; CHECK: RET_ReallyLR implicit $x0
25     %arg1:_(s64) = COPY $x0
26     %arg2:_(s64) = COPY $x1
27     %zero:_(s32) = G_CONSTANT i32 0
28     %one:_(s32) = G_CONSTANT i32 1
29     %bv:_(<2 x s64>) = G_BUILD_VECTOR %arg1(s64), %arg2(s64)
30     %extract:_(s64) = G_EXTRACT_VECTOR_ELT %bv(<2 x s64>), %zero(s32)
31     %extract2:_(s64) = G_EXTRACT_VECTOR_ELT %bv(<2 x s64>), %one(s32)
32     $x0 = COPY %extract(s64)
33     $x1 = COPY %extract2(s64)
34     RET_ReallyLR implicit $x0
36 ...
37 ---
38 name:            full_extracts_from_build_vector_other_use
39 alignment:       4
40 tracksRegLiveness: true
41 liveins:
42   - { reg: '$x0' }
43   - { reg: '$x1' }
44 frameInfo:
45   maxAlignment:    1
46   maxCallFrameSize: 0
47 machineFunctionInfo: {}
48 body:             |
49   bb.0:
50     liveins: $x0, $x1
52     ; CHECK-LABEL: name: full_extracts_from_build_vector_other_use
53     ; CHECK: liveins: $x0, $x1
54     ; CHECK: %arg1:_(s64) = COPY $x0
55     ; CHECK: %arg2:_(s64) = COPY $x1
56     ; CHECK: %zero:_(s32) = G_CONSTANT i32 0
57     ; CHECK: %one:_(s32) = G_CONSTANT i32 1
58     ; CHECK: %bv:_(<2 x s64>) = G_BUILD_VECTOR %arg1(s64), %arg2(s64)
59     ; CHECK: %extract:_(s64) = G_EXTRACT_VECTOR_ELT %bv(<2 x s64>), %zero(s32)
60     ; CHECK: %extract2:_(s64) = G_EXTRACT_VECTOR_ELT %bv(<2 x s64>), %one(s32)
61     ; CHECK: $x0 = COPY %extract(s64)
62     ; CHECK: $x1 = COPY %extract2(s64)
63     ; CHECK: $q0 = COPY %bv(<2 x s64>)
64     ; CHECK: RET_ReallyLR implicit $x0
65     %arg1:_(s64) = COPY $x0
66     %arg2:_(s64) = COPY $x1
67     %zero:_(s32) = G_CONSTANT i32 0
68     %one:_(s32) = G_CONSTANT i32 1
69     %bv:_(<2 x s64>) = G_BUILD_VECTOR %arg1(s64), %arg2(s64)
70     %extract:_(s64) = G_EXTRACT_VECTOR_ELT %bv(<2 x s64>), %zero(s32)
71     %extract2:_(s64) = G_EXTRACT_VECTOR_ELT %bv(<2 x s64>), %one(s32)
72     $x0 = COPY %extract(s64)
73     $x1 = COPY %extract2(s64)
74     $q0 = COPY %bv(<2 x s64>)
75     RET_ReallyLR implicit $x0
77 ...
78 ---
79 name:            partial_extracts_from_build_vector_multiple_per_elt
80 alignment:       4
81 tracksRegLiveness: true
82 liveins:
83   - { reg: '$x0' }
84   - { reg: '$x1' }
85 frameInfo:
86   maxAlignment:    1
87   maxCallFrameSize: 0
88 machineFunctionInfo: {}
89 body:             |
90   bb.0:
91     liveins: $x0, $x1
93     ; CHECK-LABEL: name: partial_extracts_from_build_vector_multiple_per_elt
94     ; CHECK: liveins: $x0, $x1
95     ; CHECK: %arg1:_(s64) = COPY $x0
96     ; CHECK: %arg2:_(s64) = COPY $x1
97     ; CHECK: $x0 = COPY %arg1(s64)
98     ; CHECK: $x1 = COPY %arg2(s64)
99     ; CHECK: $x2 = COPY %arg2(s64)
100     ; CHECK: RET_ReallyLR implicit $x0
101     %arg1:_(s64) = COPY $x0
102     %arg2:_(s64) = COPY $x1
103     %zero:_(s32) = G_CONSTANT i32 0
104     %one:_(s32) = G_CONSTANT i32 1
105     %bv:_(<2 x s64>) = G_BUILD_VECTOR %arg1(s64), %arg2(s64)
106     %extract:_(s64) = G_EXTRACT_VECTOR_ELT %bv(<2 x s64>), %zero(s32)
107     %extract2:_(s64) = G_EXTRACT_VECTOR_ELT %bv(<2 x s64>), %one(s32)
108     %extract3:_(s64) = G_EXTRACT_VECTOR_ELT %bv(<2 x s64>), %one(s32)
109     $x0 = COPY %extract(s64)
110     $x1 = COPY %extract2(s64)
111     $x2 = COPY %extract3(s64)
112     RET_ReallyLR implicit $x0
116 name:            full_extracts_from_build_vector_idx_out_of_range
117 alignment:       4
118 tracksRegLiveness: true
119 liveins:
120   - { reg: '$x0' }
121   - { reg: '$x1' }
122 frameInfo:
123   maxAlignment:    1
124   maxCallFrameSize: 0
125 machineFunctionInfo: {}
126 body:             |
127   bb.0:
128     liveins: $x0, $x1
130     ; CHECK-LABEL: name: full_extracts_from_build_vector_idx_out_of_range
131     ; CHECK: liveins: $x0, $x1
132     ; CHECK: %arg1:_(s64) = COPY $x0
133     ; CHECK: %arg2:_(s64) = COPY $x1
134     ; CHECK: %zero:_(s32) = G_CONSTANT i32 0
135     ; CHECK: %two:_(s32) = G_CONSTANT i32 2
136     ; CHECK: %bv:_(<2 x s64>) = G_BUILD_VECTOR %arg1(s64), %arg2(s64)
137     ; CHECK: %extract:_(s64) = G_EXTRACT_VECTOR_ELT %bv(<2 x s64>), %zero(s32)
138     ; CHECK: %extract2:_(s64) = G_EXTRACT_VECTOR_ELT %bv(<2 x s64>), %two(s32)
139     ; CHECK: $x0 = COPY %extract(s64)
140     ; CHECK: $x1 = COPY %extract2(s64)
141     ; CHECK: RET_ReallyLR implicit $x0
142     %arg1:_(s64) = COPY $x0
143     %arg2:_(s64) = COPY $x1
144     %zero:_(s32) = G_CONSTANT i32 0
145     %one:_(s32) = G_CONSTANT i32 1
146     %two:_(s32) = G_CONSTANT i32 2
147     %bv:_(<2 x s64>) = G_BUILD_VECTOR %arg1(s64), %arg2(s64)
148     %extract:_(s64) = G_EXTRACT_VECTOR_ELT %bv(<2 x s64>), %zero(s32)
149     %extract2:_(s64) = G_EXTRACT_VECTOR_ELT %bv(<2 x s64>), %two(s32)
150     $x0 = COPY %extract(s64)
151     $x1 = COPY %extract2(s64)
152     RET_ReallyLR implicit $x0