[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / postlegalizercombiner-rotate.mir
blob98a9cb7624edc6b9aaa1bbbdd2f47a5d8975bf02
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple aarch64 -run-pass=aarch64-postlegalizer-combiner --aarch64postlegalizercombiner-only-enable-rule="rotate_out_of_range" -verify-machineinstrs %s -o - | FileCheck %s
3 # REQUIRES: asserts
5 # Check that we simplify the constant rotate amount to be in range.
6 ---
7 name:            rotl
8 alignment:       4
9 legalized:       true
10 tracksRegLiveness: true
11 liveins:
12   - { reg: '$w0' }
13 body:             |
14   bb.1.entry:
15     liveins: $w0
17     ; CHECK-LABEL: name: rotl
18     ; CHECK: liveins: $w0
19     ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
20     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
21     ; CHECK: [[ROTL:%[0-9]+]]:_(s32) = G_ROTL [[COPY]], [[C]](s64)
22     ; CHECK: $w0 = COPY [[ROTL]](s32)
23     ; CHECK: RET_ReallyLR implicit $w0
24     %0:_(s32) = COPY $w0
25     %5:_(s64) = G_CONSTANT i64 -16
26     %2:_(s32) = G_ROTL %0, %5(s64)
27     $w0 = COPY %2(s32)
28     RET_ReallyLR implicit $w0
30 ...
31 ---
32 name:            rotr
33 alignment:       4
34 legalized:       true
35 tracksRegLiveness: true
36 liveins:
37   - { reg: '$w0' }
38 body:             |
39   bb.1.entry:
40     liveins: $w0
42     ; CHECK-LABEL: name: rotr
43     ; CHECK: liveins: $w0
44     ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
45     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
46     ; CHECK: [[ROTR:%[0-9]+]]:_(s32) = G_ROTR [[COPY]], [[C]](s64)
47     ; CHECK: $w0 = COPY [[ROTR]](s32)
48     ; CHECK: RET_ReallyLR implicit $w0
49     %0:_(s32) = COPY $w0
50     %5:_(s64) = G_CONSTANT i64 -16
51     %2:_(s32) = G_ROTR %0, %5(s64)
52     $w0 = COPY %2(s32)
53     RET_ReallyLR implicit $w0
55 ...
56 ---
57 name:            rotl_bitwidth_cst
58 alignment:       4
59 legalized:       true
60 tracksRegLiveness: true
61 liveins:
62   - { reg: '$w0' }
63 body:             |
64   bb.1.entry:
65     liveins: $w0
67     ; CHECK-LABEL: name: rotl_bitwidth_cst
68     ; CHECK: liveins: $w0
69     ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
70     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
71     ; CHECK: [[ROTL:%[0-9]+]]:_(s32) = G_ROTL [[COPY]], [[C]](s64)
72     ; CHECK: $w0 = COPY [[ROTL]](s32)
73     ; CHECK: RET_ReallyLR implicit $w0
74     %0:_(s32) = COPY $w0
75     %5:_(s64) = G_CONSTANT i64 32
76     %2:_(s32) = G_ROTL %0, %5(s64)
77     $w0 = COPY %2(s32)
78     RET_ReallyLR implicit $w0
80 ...
81 ---
82 name:            rotl_bitwidth_minus_one_cst
83 alignment:       4
84 legalized:       true
85 tracksRegLiveness: true
86 liveins:
87   - { reg: '$w0' }
88 body:             |
89   bb.1.entry:
90     liveins: $w0
92     ; CHECK-LABEL: name: rotl_bitwidth_minus_one_cst
93     ; CHECK: liveins: $w0
94     ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
95     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 31
96     ; CHECK: [[ROTL:%[0-9]+]]:_(s32) = G_ROTL [[COPY]], [[C]](s64)
97     ; CHECK: $w0 = COPY [[ROTL]](s32)
98     ; CHECK: RET_ReallyLR implicit $w0
99     %0:_(s32) = COPY $w0
100     %5:_(s64) = G_CONSTANT i64 31
101     %2:_(s32) = G_ROTL %0, %5(s64)
102     $w0 = COPY %2(s32)
103     RET_ReallyLR implicit $w0