[AArch64] Unroll some loops with early-continues on Apple Silicon. (#118499)
[llvm-project.git] / llvm / test / CodeGen / RISCV / GlobalISel / legalizer / merge-unmerge-rv64.mir
blob3cf3a7c248639361ec7aea9ae3f7272c586dadf3
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
4 ---
5 name:            merge_i32
6 body:             |
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 ---
28 name:            merge_i64
29 body:             |
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 ---
50 name:            merge_i128
51 body:             |
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 ---
67 name:            unmerge_i32
68 body:             |
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 ---
86 name:            unmerge_i64
87 body:             |
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
103 name:            unmerge_i128
104 body:             |
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