• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple=aarch64-linux-gnu -O0 -run-pass=legalizer %s -o - | FileCheck %s
3
4---
5name:            test_extracts_1
6body: |
7  bb.0:
8    liveins: $w0
9
10    ; Low part of extraction takes entirity of the low register entirely, so
11    ; value stored is forwarded directly from first load.
12
13    ; CHECK-LABEL: name: test_extracts_1
14    ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x2
15    ; CHECK: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[COPY]](p0) :: (load 8, align 16)
16    ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
17    ; CHECK: [[GEP:%[0-9]+]]:_(p0) = G_GEP [[COPY]], [[C]](s64)
18    ; CHECK: [[LOAD1:%[0-9]+]]:_(s64) = G_LOAD [[GEP]](p0) :: (load 8)
19    ; CHECK: [[COPY1:%[0-9]+]]:_(s64) = COPY [[LOAD]](s64)
20    ; CHECK: G_STORE [[COPY1]](s64), [[COPY]](p0) :: (store 8)
21    ; CHECK: RET_ReallyLR
22    %0:_(s64) = COPY $x0
23    %1:_(s32) = COPY $w1
24    %2:_(p0) = COPY $x2
25    %3:_(s128) = G_LOAD %2(p0) :: (load 16)
26    %4:_(s64) = G_EXTRACT %3(s128), 0
27    G_STORE %4(s64), %2(p0) :: (store 8)
28    RET_ReallyLR
29...
30
31---
32name:            test_extracts_2
33body: |
34  bb.0:
35    liveins: $w0
36
37      ; Low extraction wipes takes whole low register. High extraction is real.
38    ; CHECK-LABEL: name: test_extracts_2
39    ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x2
40    ; CHECK: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[COPY]](p0) :: (load 8, align 16)
41    ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
42    ; CHECK: [[GEP:%[0-9]+]]:_(p0) = G_GEP [[COPY]], [[C]](s64)
43    ; CHECK: [[LOAD1:%[0-9]+]]:_(s64) = G_LOAD [[GEP]](p0) :: (load 8)
44    ; CHECK: [[COPY1:%[0-9]+]]:_(s64) = COPY [[LOAD]](s64)
45    ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[LOAD1]](s64), 0
46    ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY [[EXTRACT]](s32)
47    ; CHECK: G_STORE [[COPY1]](s64), [[COPY]](p0) :: (store 8)
48    ; CHECK: G_STORE [[COPY2]](s32), [[COPY]](p0) :: (store 4)
49    ; CHECK: RET_ReallyLR
50    %0:_(s64) = COPY $x0
51    %1:_(s32) = COPY $w1
52    %2:_(p0) = COPY $x2
53    %3:_(s128) = G_LOAD %2(p0) :: (load 16)
54    %4:_(s64) = G_EXTRACT %3(s128), 0
55    %5:_(s32) = G_EXTRACT %3(s128), 64
56    G_STORE %4(s64), %2(p0) :: (store 8)
57    G_STORE %5(s32), %2(p0) :: (store 4)
58    RET_ReallyLR
59...
60
61---
62name:            test_extracts_3
63body: |
64  bb.0:
65    liveins: $x0, $x1, $x2
66
67
68    ; CHECK-LABEL: name: test_extracts_3
69    ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
70    ; CHECK: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
71    ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s64), 32
72    ; CHECK: [[EXTRACT1:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY1]](s64), 0
73    ; CHECK: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[EXTRACT]](s32), [[EXTRACT1]](s32)
74    ; CHECK: $x0 = COPY [[MV]](s64)
75    ; CHECK: RET_ReallyLR
76    %0:_(s64) = COPY $x0
77    %1:_(s64) = COPY $x1
78    %2:_(s128) = G_MERGE_VALUES %0, %1
79    %3:_(s64) = G_EXTRACT %2, 32
80    $x0 = COPY %3
81    RET_ReallyLR
82...
83
84---
85name:            test_extracts_4
86body: |
87  bb.0:
88    liveins: $x0, $x1, $x2
89
90
91    ; CHECK-LABEL: name: test_extracts_4
92    ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
93    ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s64), 32
94    ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[EXTRACT]](s32)
95    ; CHECK: $w0 = COPY [[COPY1]](s32)
96    ; CHECK: RET_ReallyLR
97    %0:_(s64) = COPY $x0
98    %1:_(s64) = COPY $x1
99    %2:_(s128) = G_MERGE_VALUES %0, %1
100    %3:_(s32) = G_EXTRACT %2, 32
101    $w0 = COPY %3
102    RET_ReallyLR
103...
104