[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / legalize-cttz-zero-undef.mir
blobef6af8fe22dc4c8790928aaef0d0891e0345109c
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=aarch64 -global-isel -verify-machineinstrs -run-pass=legalizer %s -o - | FileCheck %s
3 # RUN: llc -mtriple=aarch64 -global-isel -verify-machineinstrs -mattr=+cssc -run-pass=legalizer %s -o - | FileCheck %s --check-prefix=CHECK-CSSC
4 ...
5 ---
6 name:            s8
7 tracksRegLiveness: true
8 body:             |
9   bb.0:
10     liveins: $w0
11     ; CHECK-LABEL: name: s8
12     ; CHECK: liveins: $w0
13     ; CHECK-NEXT: {{  $}}
14     ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
15     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 256
16     ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[DEF]], [[C]]
17     ; CHECK-NEXT: [[BITREVERSE:%[0-9]+]]:_(s32) = G_BITREVERSE [[OR]]
18     ; CHECK-NEXT: [[CTLZ:%[0-9]+]]:_(s32) = G_CTLZ [[BITREVERSE]](s32)
19     ; CHECK-NEXT: $w0 = COPY [[CTLZ]](s32)
20     ; CHECK-NEXT: RET_ReallyLR implicit $w0
21     ; CHECK-CSSC-LABEL: name: s8
22     ; CHECK-CSSC: liveins: $w0
23     ; CHECK-CSSC-NEXT: {{  $}}
24     ; CHECK-CSSC-NEXT: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
25     ; CHECK-CSSC-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 256
26     ; CHECK-CSSC-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[DEF]], [[C]]
27     ; CHECK-CSSC-NEXT: [[CTTZ:%[0-9]+]]:_(s32) = G_CTTZ [[OR]](s32)
28     ; CHECK-CSSC-NEXT: $w0 = COPY [[CTTZ]](s32)
29     ; CHECK-CSSC-NEXT: RET_ReallyLR implicit $w0
30     %val:_(s8) = G_IMPLICIT_DEF
31     %cttz:_(s8) = G_CTTZ_ZERO_UNDEF %val(s8)
32     %ext:_(s32) = G_ANYEXT %cttz(s8)
33     $w0 = COPY %ext(s32)
34     RET_ReallyLR implicit $w0
36 ...
37 ---
38 name:            s16
39 tracksRegLiveness: true
40 body:             |
41   bb.0:
42     liveins: $w0
43     ; CHECK-LABEL: name: s16
44     ; CHECK: liveins: $w0
45     ; CHECK-NEXT: {{  $}}
46     ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
47     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65536
48     ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[DEF]], [[C]]
49     ; CHECK-NEXT: [[BITREVERSE:%[0-9]+]]:_(s32) = G_BITREVERSE [[OR]]
50     ; CHECK-NEXT: [[CTLZ:%[0-9]+]]:_(s32) = G_CTLZ [[BITREVERSE]](s32)
51     ; CHECK-NEXT: $w0 = COPY [[CTLZ]](s32)
52     ; CHECK-NEXT: RET_ReallyLR implicit $w0
53     ; CHECK-CSSC-LABEL: name: s16
54     ; CHECK-CSSC: liveins: $w0
55     ; CHECK-CSSC-NEXT: {{  $}}
56     ; CHECK-CSSC-NEXT: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
57     ; CHECK-CSSC-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65536
58     ; CHECK-CSSC-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[DEF]], [[C]]
59     ; CHECK-CSSC-NEXT: [[CTTZ:%[0-9]+]]:_(s32) = G_CTTZ [[OR]](s32)
60     ; CHECK-CSSC-NEXT: $w0 = COPY [[CTTZ]](s32)
61     ; CHECK-CSSC-NEXT: RET_ReallyLR implicit $w0
62     %val:_(s16) = G_IMPLICIT_DEF
63     %cttz:_(s16) = G_CTTZ_ZERO_UNDEF %val(s16)
64     %ext:_(s32) = G_ANYEXT %cttz(s16)
65     $w0 = COPY %ext(s32)
66     RET_ReallyLR implicit $w0
68 ...
69 ---
70 name:            s32
71 alignment:       4
72 tracksRegLiveness: true
73 body:             |
74   bb.0:
75     liveins: $w0
77     ; CHECK-LABEL: name: s32
78     ; CHECK: liveins: $w0
79     ; CHECK-NEXT: {{  $}}
80     ; CHECK-NEXT: %val:_(s32) = COPY $w0
81     ; CHECK-NEXT: [[BITREVERSE:%[0-9]+]]:_(s32) = G_BITREVERSE %val
82     ; CHECK-NEXT: [[CTLZ:%[0-9]+]]:_(s32) = G_CTLZ [[BITREVERSE]](s32)
83     ; CHECK-NEXT: $w0 = COPY [[CTLZ]](s32)
84     ; CHECK-NEXT: RET_ReallyLR implicit $w0
85     ; CHECK-CSSC-LABEL: name: s32
86     ; CHECK-CSSC: liveins: $w0
87     ; CHECK-CSSC-NEXT: {{  $}}
88     ; CHECK-CSSC-NEXT: %val:_(s32) = COPY $w0
89     ; CHECK-CSSC-NEXT: [[CTTZ:%[0-9]+]]:_(s32) = G_CTTZ %val(s32)
90     ; CHECK-CSSC-NEXT: $w0 = COPY [[CTTZ]](s32)
91     ; CHECK-CSSC-NEXT: RET_ReallyLR implicit $w0
92     %val:_(s32) = COPY $w0
93     %1:_(s32) = G_CTTZ_ZERO_UNDEF %val(s32)
94     $w0 = COPY %1(s32)
95     RET_ReallyLR implicit $w0
97 ...
98 ---
99 name:            s64
100 alignment:       4
101 tracksRegLiveness: true
102 body:             |
103   bb.0:
104     liveins: $x0
106     ; CHECK-LABEL: name: s64
107     ; CHECK: liveins: $x0
108     ; CHECK-NEXT: {{  $}}
109     ; CHECK-NEXT: %val:_(s64) = COPY $x0
110     ; CHECK-NEXT: [[BITREVERSE:%[0-9]+]]:_(s64) = G_BITREVERSE %val
111     ; CHECK-NEXT: [[CTLZ:%[0-9]+]]:_(s64) = G_CTLZ [[BITREVERSE]](s64)
112     ; CHECK-NEXT: $x0 = COPY [[CTLZ]](s64)
113     ; CHECK-NEXT: RET_ReallyLR implicit $x0
114     ; CHECK-CSSC-LABEL: name: s64
115     ; CHECK-CSSC: liveins: $x0
116     ; CHECK-CSSC-NEXT: {{  $}}
117     ; CHECK-CSSC-NEXT: %val:_(s64) = COPY $x0
118     ; CHECK-CSSC-NEXT: [[CTTZ:%[0-9]+]]:_(s64) = G_CTTZ %val(s64)
119     ; CHECK-CSSC-NEXT: $x0 = COPY [[CTTZ]](s64)
120     ; CHECK-CSSC-NEXT: RET_ReallyLR implicit $x0
121     %val:_(s64) = COPY $x0
122     %1:_(s64) = G_CTTZ_ZERO_UNDEF %val(s64)
123     $x0 = COPY %1(s64)
124     RET_ReallyLR implicit $x0