xref: /llvm-project/llvm/test/CodeGen/RISCV/GlobalISel/legalizer/merge-unmerge-rv64.mir (revision dbb9043dea238fa4e5b6a9a7fef99623b543493e)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple=riscv64 -run-pass=legalizer %s -o - | FileCheck %s
3
4---
5name:            merge_i32
6body:             |
7  bb.0.entry:
8    liveins: $x10
9    ; CHECK-LABEL: name: merge_i32
10    ; CHECK: liveins: $x10
11    ; CHECK-NEXT: {{  $}}
12    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10
13    ; CHECK-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s64) = G_ASSERT_ZEXT [[COPY]], 16
14    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
15    ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[ASSERT_ZEXT]], [[C]](s64)
16    ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[ASSERT_ZEXT]], [[SHL]]
17    ; CHECK-NEXT: $x10 = COPY [[OR]](s64)
18    ; CHECK-NEXT: PseudoRET implicit $x10
19    %0:_(s64) = COPY $x10
20    %1:_(s64) = G_ASSERT_ZEXT %0, 16
21    %2:_(s16) = G_TRUNC %1(s64)
22    %3:_(s32) = G_MERGE_VALUES %2(s16), %2(s16)
23    %4:_(s64) = G_ZEXT %3(s32)
24    $x10 = COPY %4(s64)
25    PseudoRET implicit $x10
26...
27---
28name:            merge_i64
29body:             |
30  bb.0.entry:
31    liveins: $x10
32    ; CHECK-LABEL: name: merge_i64
33    ; CHECK: liveins: $x10
34    ; CHECK-NEXT: {{  $}}
35    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10
36    ; CHECK-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s64) = G_ASSERT_ZEXT [[COPY]], 32
37    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 32
38    ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[ASSERT_ZEXT]], [[C]](s64)
39    ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[ASSERT_ZEXT]], [[SHL]]
40    ; CHECK-NEXT: $x10 = COPY [[OR]](s64)
41    ; CHECK-NEXT: PseudoRET implicit $x10
42    %0:_(s64) = COPY $x10
43    %1:_(s64) = G_ASSERT_ZEXT %0, 32
44    %2:_(s32) = G_TRUNC %1(s64)
45    %3:_(s64) = G_MERGE_VALUES %2(s32), %2(s32)
46    $x10 = COPY %3(s64)
47    PseudoRET implicit $x10
48...
49---
50name:            merge_i128
51body:             |
52  bb.0.entry:
53    liveins: $x10
54    ; CHECK-LABEL: name: merge_i128
55    ; CHECK: liveins: $x10
56    ; CHECK-NEXT: {{  $}}
57    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10
58    ; CHECK-NEXT: $x10 = COPY [[COPY]](s64)
59    ; CHECK-NEXT: PseudoRET implicit $x10
60    %0:_(s64) = COPY $x10
61    %1:_(s128) = G_MERGE_VALUES %0(s64), %0(s64)
62    %2:_(s64) = G_TRUNC %1(s128)
63    $x10 = COPY %2(s64)
64    PseudoRET implicit $x10
65...
66---
67name:            unmerge_i32
68body:             |
69  bb.0.entry:
70    liveins: $x10
71    ; CHECK-LABEL: name: unmerge_i32
72    ; CHECK: liveins: $x10
73    ; CHECK-NEXT: {{  $}}
74    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10
75    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 4294967295
76    ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY]], [[C]]
77    ; CHECK-NEXT: $x10 = COPY [[AND]](s64)
78    ; CHECK-NEXT: PseudoRET implicit $x10
79    %0:_(s64) = COPY $x10
80    %1:_(s32), %2:_(s32) = G_UNMERGE_VALUES %0(s64)
81    %3:_(s64) = G_ZEXT %1(s32)
82    $x10 = COPY %3(s64)
83    PseudoRET implicit $x10
84...
85---
86name:            unmerge_i64
87body:             |
88  bb.0.entry:
89    liveins: $x10
90    ; CHECK-LABEL: name: unmerge_i64
91    ; CHECK: liveins: $x10
92    ; CHECK-NEXT: {{  $}}
93    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10
94    ; CHECK-NEXT: $x10 = COPY [[COPY]](s64)
95    ; CHECK-NEXT: PseudoRET implicit $x10
96    %0:_(s64) = COPY $x10
97    %1:_(s128) = G_ZEXT %0(s64)
98    %2:_(s64), %3:_(s64) = G_UNMERGE_VALUES %1(s128)
99    $x10 = COPY %2(s64)
100    PseudoRET implicit $x10
101...
102---
103name:            unmerge_i128
104body:             |
105  bb.0.entry:
106    liveins: $x10
107    ; CHECK-LABEL: name: unmerge_i128
108    ; CHECK: liveins: $x10
109    ; CHECK-NEXT: {{  $}}
110    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10
111    ; CHECK-NEXT: $x10 = COPY [[COPY]](s64)
112    ; CHECK-NEXT: PseudoRET implicit $x10
113    %0:_(s64) = COPY $x10
114    %1:_(s256) = G_ZEXT %0(s64)
115    %2:_(s128), %3:_(s128) = G_UNMERGE_VALUES %1(s256)
116    %4:_(s64) = G_TRUNC %2(s128)
117    $x10 = COPY %4(s64)
118    PseudoRET implicit $x10
119...
120