Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / AArch64 / misched-branch-targets.mir
blob40f148438e537d2edd1ce9ded7fe798e47bb6ba9
1 # RUN: llc -o - -run-pass=machine-scheduler -misched=shuffle %s | FileCheck %s
2 # RUN: llc -o - -run-pass=postmisched %s | FileCheck %s
4 # REQUIRES: asserts
5 # -misched=shuffle is only available with assertions enabled
7 # Check that instructions that are recognized as branch targets by BTI
8 # are not reordered by machine instruction schedulers.
10 --- |
11   target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
12   target triple = "aarch64-unknown-linux-gnu"
14   define i32 @f_pac_pseudo(i32 %a, i32 %b, i32 %c) #0 "sign-return-address"="all" {
15   entry:
16     ret i32 0
17   }
19   define i32 @f_pac(i32 %a, i32 %b, i32 %c) #0 "sign-return-address"="all" {
20   entry:
21     ret i32 0
22   }
24   define i32 @f_bti(i32 %a, i32 %b, i32 %c) #0 {
25   entry:
26     ret i32 0
27   }
29   define i32 @f_brk(i32 %a, i32 %b, i32 %c) #0 {
30   entry:
31     ret i32 0
32   }
34   define i32 @f_hlt(i32 %a, i32 %b, i32 %c) #0 {
35   entry:
36     ret i32 0
37   }
39   define i32 @f_nop(i32 %a, i32 %b, i32 %c) #0 {
40   entry:
41     ret i32 0
42   }
44   attributes #0 = { nounwind memory(none) "target-features"="+v8.2a" }
46 ...
47 ---
48 name:            f_pac_pseudo
49 alignment:       4
50 tracksRegLiveness: true
51 body:             |
52   bb.0.entry:
53     liveins: $w0, $w1, $w2, $lr
55     frame-setup PAUTH_PROLOGUE implicit-def $lr, implicit $lr, implicit $sp
56     $w8 = ADDWrs $w0, $w1, 0
57     $w0 = MADDWrrr $w8, $w2, $wzr
58     RET undef $lr, implicit $w0
60 # PAUTH_EPILOGUE instruction is omitted for simplicity as it is technically possible
61 # to move it, so it may end up at a less obvious position in a basic block.
63 # CHECK-LABEL: name: f_pac_pseudo
64 # CHECK:       body:             |
65 # CHECK-NEXT:    bb.0.entry:
66 # CHECK-NEXT:      liveins: $w0, $w1, $w2, $lr
68 # CHECK:           frame-setup PAUTH_PROLOGUE implicit-def $lr, implicit {{.*}}$lr, implicit $sp
69 # CHECK-NEXT:      $w8 = ADDWrs {{.*}}$w0, {{.*}}$w1, 0
70 # CHECK-NEXT:      $w0 = MADDWrrr {{.*}}$w8, {{.*}}$w2, $wzr
71 # CHECK-NEXT:      RET undef $lr, implicit {{.*}}$w0
73 ...
74 ---
75 name:            f_pac
76 alignment:       4
77 tracksRegLiveness: true
78 body:             |
79   bb.0.entry:
80     liveins: $w0, $w1, $w2, $lr
82     frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp
83     $w8 = ADDWrs $w0, $w1, 0
84     $w0 = MADDWrrr $w8, $w2, $wzr
85     RET undef $lr, implicit $w0
87 # AUTIASP is omitted, see above.
89 # CHECK-LABEL: name: f_pac
90 # CHECK:       body:             |
91 # CHECK-NEXT:    bb.0.entry:
92 # CHECK-NEXT:      liveins: $w0, $w1, $w2, $lr
94 # CHECK:           frame-setup PACIASP implicit-def $lr, implicit {{.*}}$lr, implicit $sp
95 # CHECK-NEXT:      $w8 = ADDWrs {{.*}}$w0, {{.*}}$w1, 0
96 # CHECK-NEXT:      $w0 = MADDWrrr {{.*}}$w8, {{.*}}$w2, $wzr
97 # CHECK-NEXT:      RET undef $lr, implicit {{.*}}$w0
99 ...
101 name:            f_bti
102 alignment:       4
103 tracksRegLiveness: true
104 body:             |
105   bb.0.entry:
106     liveins: $w0, $w1, $w2, $lr
108     HINT 34
109     $w8 = ADDWrs $w0, $w1, 0
110     $w0 = MADDWrrr $w8, $w2, $wzr
111     RET undef $lr, implicit $w0
113 # CHECK-LABEL: name: f_bti
114 # CHECK:       body:             |
115 # CHECK-NEXT:    bb.0.entry:
116 # CHECK-NEXT:      liveins: $w0, $w1, $w2, $lr
118 # CHECK:           HINT 34
119 # CHECK-NEXT:      $w8 = ADDWrs {{.*}}$w0, {{.*}}$w1, 0
120 # CHECK-NEXT:      $w0 = MADDWrrr {{.*}}$w8, {{.*}}$w2, $wzr
121 # CHECK-NEXT:      RET undef $lr, implicit {{.*}}$w0
125 name:            f_brk
126 alignment:       4
127 tracksRegLiveness: true
128 body:             |
129   bb.0.entry:
130     liveins: $w0, $w1, $w2, $lr
132     BRK 1
133     $w8 = ADDWrs $w0, $w1, 0
134     $w0 = MADDWrrr $w8, $w2, $wzr
135     RET undef $lr, implicit $w0
137 # CHECK-LABEL: name: f_brk
138 # CHECK:       body:             |
139 # CHECK-NEXT:    bb.0.entry:
140 # CHECK-NEXT:      liveins: $w0, $w1, $w2, $lr
142 # CHECK:           BRK 1
143 # CHECK-NEXT:      $w8 = ADDWrs {{.*}}$w0, {{.*}}$w1, 0
144 # CHECK-NEXT:      $w0 = MADDWrrr {{.*}}$w8, {{.*}}$w2, $wzr
145 # CHECK-NEXT:      RET undef $lr, implicit {{.*}}$w0
149 name:            f_hlt
150 alignment:       4
151 tracksRegLiveness: true
152 body:             |
153   bb.0.entry:
154     liveins: $w0, $w1, $w2, $lr
156     HLT 1
157     $w8 = ADDWrs $w0, $w1, 0
158     $w0 = MADDWrrr $w8, $w2, $wzr
159     RET undef $lr, implicit $w0
161 # CHECK-LABEL: name: f_hlt
162 # CHECK:       body:             |
163 # CHECK-NEXT:    bb.0.entry:
164 # CHECK-NEXT:      liveins: $w0, $w1, $w2, $lr
166 # CHECK:           HLT 1
167 # CHECK-NEXT:      $w8 = ADDWrs {{.*}}$w0, {{.*}}$w1, 0
168 # CHECK-NEXT:      $w0 = MADDWrrr {{.*}}$w8, {{.*}}$w2, $wzr
169 # CHECK-NEXT:      RET undef $lr, implicit {{.*}}$w0
173 name:            f_nop
174 alignment:       4
175 tracksRegLiveness: true
176 body:             |
177   bb.0.entry:
178     liveins: $w0, $w1, $w2, $lr
180     HINT 0
181     $w8 = ADDWrs $w0, $w1, 0
182     $w0 = MADDWrrr $w8, $w2, $wzr
183     RET undef $lr, implicit $w0
185 # Check that BTI-related instructions are left intact not because *anything*
186 # is left intact.
188 # CHECK-LABEL: name: f_nop
189 # CHECK:       body:             |
190 # CHECK-NEXT:    bb.0.entry:
191 # CHECK-NEXT:      liveins: $w0, $w1, $w2, $lr
193 # CHECK:           $w8 = ADDWrs {{.*}}$w0, {{.*}}$w1, 0
194 # CHECK-DAG:       $w0 = MADDWrrr {{.*}}$w8, {{.*}}$w2, $wzr
195 # CHECK-DAG:       HINT 0
196 # CHECK-NEXT:      RET undef $lr, implicit {{.*}}$w0