[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / form-bitfield-extract-from-sextinreg.mir
blobe79939ffcb9fc55deee99fffb6b1cbe4d3cfec7f
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
4 # Check that we can fold a G_SEXT_INREG fed by a G_ASHR/G_LSHR into a G_SBFX.
6 ...
7 ---
8 name:            sextinreg_ashr_to_sbfx
9 tracksRegLiveness: true
10 legalized: true
11 body:             |
12   bb.0:
13     liveins: $w0
14     ; CHECK-LABEL: name: sextinreg_ashr_to_sbfx
15     ; CHECK: liveins: $w0
16     ; CHECK: %x:_(s32) = COPY $w0
17     ; CHECK: %lsb:_(s32) = G_CONSTANT i32 5
18     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 10
19     ; CHECK: %sext_inreg:_(s32) = G_SBFX %x, %lsb(s32), [[C]]
20     ; CHECK: $w0 = COPY %sext_inreg(s32)
21     ; CHECK: RET_ReallyLR implicit $w0
22     %x:_(s32) = COPY $w0
23     %lsb:_(s32) = G_CONSTANT i32 5
24     %shift:_(s32) = G_ASHR %x, %lsb
25     %sext_inreg:_(s32) = G_SEXT_INREG %shift, 10
26     $w0 = COPY %sext_inreg
27     RET_ReallyLR implicit $w0
29 ...
30 ---
31 name:            sextinreg_lshr_to_sbfx
32 tracksRegLiveness: true
33 legalized: true
34 body:             |
35   bb.0:
36     liveins: $w0
37     ; CHECK-LABEL: name: sextinreg_lshr_to_sbfx
38     ; CHECK: liveins: $w0
39     ; CHECK: %x:_(s32) = COPY $w0
40     ; CHECK: %lsb:_(s32) = G_CONSTANT i32 5
41     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 10
42     ; CHECK: %sext_inreg:_(s32) = G_SBFX %x, %lsb(s32), [[C]]
43     ; CHECK: $w0 = COPY %sext_inreg(s32)
44     ; CHECK: RET_ReallyLR implicit $w0
45     %x:_(s32) = COPY $w0
46     %lsb:_(s32) = G_CONSTANT i32 5
47     %shift:_(s32) = G_LSHR %x, %lsb
48     %sext_inreg:_(s32) = G_SEXT_INREG %shift, 10
49     $w0 = COPY %sext_inreg
50     RET_ReallyLR implicit $w0
53 ...
54 ---
55 name:            dont_apply_no_constant
56 tracksRegLiveness: true
57 legalized: true
58 body:             |
59   bb.0:
60     liveins: $w0
61     ; AArch64 needs a constant on the shift for this combine.
63     ; CHECK-LABEL: name: dont_apply_no_constant
64     ; CHECK: liveins: $w0
65     ; CHECK: %x:_(s32) = COPY $w0
66     ; CHECK: %y:_(s32) = COPY $w0
67     ; CHECK: %shift:_(s32) = G_LSHR %x, %y(s32)
68     ; CHECK: %sext_inreg:_(s32) = G_SEXT_INREG %shift, 10
69     ; CHECK: $w0 = COPY %sext_inreg(s32)
70     ; CHECK: RET_ReallyLR implicit $w0
71     %x:_(s32) = COPY $w0
72     %y:_(s32) = COPY $w0
73     %shift:_(s32) = G_LSHR %x, %y
74     %sext_inreg:_(s32) = G_SEXT_INREG %shift, 10
75     $w0 = COPY %sext_inreg
76     RET_ReallyLR implicit $w0
78 ...
79 ---
80 name:            dont_apply_shift_imm_too_large
81 tracksRegLiveness: true
82 legalized: true
83 body:             |
84   bb.0:
85     liveins: $w0
87     ; LSB must be in 0-31.
89     ; CHECK-LABEL: name: dont_apply_shift_imm_too_large
90     ; CHECK: liveins: $w0
91     ; CHECK: %x:_(s32) = COPY $w0
92     ; CHECK: %lsb:_(s32) = G_CONSTANT i32 32
93     ; CHECK: %shift:_(s32) = G_ASHR %x, %lsb(s32)
94     ; CHECK: %sext_inreg:_(s32) = G_SEXT_INREG %shift, 1
95     ; CHECK: $w0 = COPY %sext_inreg(s32)
96     ; CHECK: RET_ReallyLR implicit $w0
97     %x:_(s32) = COPY $w0
98     %lsb:_(s32) = G_CONSTANT i32 32
99     %shift:_(s32) = G_ASHR %x, %lsb
100     %sext_inreg:_(s32) = G_SEXT_INREG %shift, 1
101     $w0 = COPY %sext_inreg
102     RET_ReallyLR implicit $w0
106 name:            dont_apply_negative_shift_imm
107 tracksRegLiveness: true
108 legalized: true
109 body:             |
110   bb.0:
111     liveins: $w0
113     ; LSB must be in 0-31.
115     ; CHECK-LABEL: name: dont_apply_negative_shift_imm
116     ; CHECK: liveins: $w0
117     ; CHECK: %x:_(s32) = COPY $w0
118     ; CHECK: %lsb:_(s32) = G_CONSTANT i32 -1
119     ; CHECK: %shift:_(s32) = G_ASHR %x, %lsb(s32)
120     ; CHECK: %sext_inreg:_(s32) = G_SEXT_INREG %shift, 1
121     ; CHECK: $w0 = COPY %sext_inreg(s32)
122     ; CHECK: RET_ReallyLR implicit $w0
123     %x:_(s32) = COPY $w0
124     %lsb:_(s32) = G_CONSTANT i32 -1
125     %shift:_(s32) = G_ASHR %x, %lsb
126     %sext_inreg:_(s32) = G_SEXT_INREG %shift, 1
127     $w0 = COPY %sext_inreg
128     RET_ReallyLR implicit $w0
132 name:            dont_apply_more_than_one_use
133 tracksRegLiveness: true
134 legalized: true
135 body:             |
136   bb.0:
137     liveins: $w0
138     ; CHECK-LABEL: name: dont_apply_more_than_one_use
139     ; CHECK: liveins: $w0
140     ; CHECK: %x:_(s32) = COPY $w0
141     ; CHECK: %lsb:_(s32) = G_CONSTANT i32 1
142     ; CHECK: %shift:_(s32) = G_ASHR %x, %lsb(s32)
143     ; CHECK: %sext_inreg:_(s32) = G_SEXT_INREG %shift, 1
144     ; CHECK: %mul:_(s32) = G_MUL %shift, %sext_inreg
145     ; CHECK: $w0 = COPY %mul(s32)
146     ; CHECK: RET_ReallyLR implicit $w0
147     %x:_(s32) = COPY $w0
148     %lsb:_(s32) = G_CONSTANT i32 1
149     %shift:_(s32) = G_ASHR %x, %lsb
150     %sext_inreg:_(s32) = G_SEXT_INREG %shift, 1
151     %mul:_(s32) = G_MUL %shift, %sext_inreg
152     $w0 = COPY %mul
153     RET_ReallyLR implicit $w0