xref: /llvm-project/llvm/test/CodeGen/AArch64/GlobalISel/postlegalizer-combiner-merge.mir (revision 6af8d360546e01ee2e8c8c45fb5d0cf39fcda462)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple aarch64 -run-pass=aarch64-postlegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s
3
4---
5name:            merge_unmerge
6alignment:       4
7legalized:       true
8liveins:
9  - { reg: '$w0' }
10body:             |
11  bb.1.entry:
12    liveins: $x0
13
14    ; CHECK-LABEL: name: merge_unmerge
15    ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
16    ; CHECK: $x0 = COPY [[COPY]](s64)
17    ; CHECK: RET_ReallyLR implicit $x0
18    %0:_(s64) = COPY $x0
19    %a:_(s32), %b:_(s32) = G_UNMERGE_VALUES %0
20    %merge:_(s64) = G_MERGE_VALUES %a, %b
21    $x0 = COPY %merge(s64)
22    RET_ReallyLR implicit $x0
23
24...
25---
26name:            merge_unmerge_mismatched_order
27alignment:       4
28legalized:       true
29liveins:
30  - { reg: '$w0' }
31body:             |
32  bb.1.entry:
33    liveins: $x0
34
35    ; CHECK-LABEL: name: merge_unmerge_mismatched_order
36    ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
37    ; CHECK: %b:_(s32), %a:_(s32) = G_UNMERGE_VALUES [[COPY]](s64)
38    ; CHECK: %merge:_(s64) = G_MERGE_VALUES %a(s32), %b(s32)
39    ; CHECK: $x0 = COPY %merge(s64)
40    ; CHECK: RET_ReallyLR implicit $x0
41    %0:_(s64) = COPY $x0
42    %b:_(s32), %a:_(s32) = G_UNMERGE_VALUES %0
43    %merge:_(s64) = G_MERGE_VALUES %a, %b
44    $x0 = COPY %merge(s64)
45    RET_ReallyLR implicit $x0
46
47...
48---
49name:            merge_unmerge_mismatched_num_defs
50alignment:       4
51legalized:       true
52liveins:
53  - { reg: '$w0' }
54body:             |
55  bb.1.entry:
56    liveins: $q0
57
58    ; CHECK-LABEL: name: merge_unmerge_mismatched_num_defs
59    ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $q0
60    ; CHECK: %a:_(s32), %b:_(s32), %c:_(s32), %d:_(s32) = G_UNMERGE_VALUES [[COPY]](s128)
61    ; CHECK: %merge:_(s64) = G_MERGE_VALUES %a(s32), %b(s32)
62    ; CHECK: $x0 = COPY %merge(s64)
63    ; CHECK: RET_ReallyLR implicit $x0
64    %0:_(s128) = COPY $q0
65    %a:_(s32), %b:_(s32), %c:_(s32), %d:_(s32) = G_UNMERGE_VALUES %0
66    %merge:_(s64) = G_MERGE_VALUES %a, %b
67    $x0 = COPY %merge(s64)
68    RET_ReallyLR implicit $x0
69
70...
71---
72name:            merge_to_zext
73alignment:       4
74legalized:       true
75liveins:
76  - { reg: '$w0' }
77body:             |
78  bb.1.entry:
79    liveins: $w0
80
81    ; CHECK-LABEL: name: merge_to_zext
82    ; CHECK: %v:_(s32) = COPY $w0
83    ; CHECK: %merge:_(s64) = G_ZEXT %v(s32)
84    ; CHECK: $x0 = COPY %merge(s64)
85    ; CHECK: RET_ReallyLR implicit $x0
86    %v:_(s32) = COPY $w0
87    %zero:_(s32) = G_CONSTANT i32 0
88    %merge:_(s64) = G_MERGE_VALUES %v, %zero
89    $x0 = COPY %merge(s64)
90    RET_ReallyLR implicit $x0
91
92...
93