[ARM] More MVE compare vector splat combines for ANDs
[llvm-complete.git] / test / CodeGen / AArch64 / machine-outliner-compatible-candidates.mir
blobb153b4c5de2771ffd5789f40fe88812225a8ee5b
1 # RUN: llc -mtriple=aarch64--- -run-pass=machine-outliner \
2 # RUN: -verify-machineinstrs %s -o - | FileCheck %s
4 # Ensure that we can outline candidates with compatible call/frame classes.
6 # - Save/restores that don't impact the stack can be outlined together.
7 # - Save/restores that impact the stack if the outlined sequence doesn't use
8 #   the stack.
10 --- |
11   define void @no-save1() #0 { ret void }
12   define void @no-save2() #0 { ret void }
13   define void @reg-save() #0 { ret void }
14   define void @stack-save() #0 { ret void }
15   attributes #0 = { minsize noinline noredzone "no-frame-pointer-elim"="true" }
16 ...
17 ---
19 name:            no-save1
20 tracksRegLiveness: true
21 body:             |
22   bb.0:
23   liveins: $lr
24   $lr = ORRXri $xzr, 1
25   bb.1:
26     ; CHECK-LABEL: name:            no-save1
27     ; CHECK: BL [[FN:@OUTLINED_FUNCTION_[0-9]+]]
28     ; CHECK-NOT: STRXpre
29     ; CHECK-NOT: $lr =
30     ; CHECK-NOT: ORRXrs
31     $w11 = ORRWri $wzr, 1
32     $w11 = ORRWri $wzr, 1
33     $w11 = ORRWri $wzr, 1
34     $w11 = ORRWri $wzr, 1
35   bb.2:
36     RET undef $lr
38 ...
39 ---
41 name:            no-save2
42 tracksRegLiveness: true
43 body:             |
44   bb.0:
45   liveins: $lr
46   $lr = ORRXri $xzr, 1
47   bb.1:
48     ; CHECK-LABEL: name:            no-save2
49     ; CHECK: BL [[FN]]
50     ; CHECK-NOT: STRXpre
51     ; CHECK-NOT: $lr =
52     ; CHECK-NOT: ORRXrs
53     $w11 = ORRWri $wzr, 1
54     $w11 = ORRWri $wzr, 1
55     $w11 = ORRWri $wzr, 1
56     $w11 = ORRWri $wzr, 1
57   bb.2:
58     RET undef $lr
59 ...
60 ---
62 name:            reg-save
63 tracksRegLiveness: true
64 body:             |
65   bb.0:
66   liveins: $lr
67   $lr = ORRXri $xzr, 1
68   bb.1:
69   liveins: $lr
70     ; CHECK-LABEL: name:            reg-save
71     ; CHECK: $[[REG:x[0-9]+]] = ORRXrs $xzr, $lr, 0
72     ; CHECK-NEXT: BL [[FN]]
73     ; CHECK-NEXT: $lr = ORRXrs $xzr, $[[REG]], 0
74     $w11 = ORRWri $wzr, 1
75     $w11 = ORRWri $wzr, 1
76     $w11 = ORRWri $wzr, 1
77     $w11 = ORRWri $wzr, 1
78   bb.2:
79   liveins: $lr
80     RET undef $lr
82 ...
83 ---
85 name:            stack-save
86 tracksRegLiveness: true
87 body:             |
88   bb.0:
89   liveins: $lr, $x0, $x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $x9, $x10, $x11, $x12, $x13, $x14, $x15, $x18, $x19, $x20, $x21, $x22, $x23, $x20, $x21, $x22, $x23, $x24, $x25, $x26, $x27, $x28, $fp
90   $lr = ORRXri $xzr, 1
91   bb.1:
92   liveins: $lr, $x0, $x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $x9, $x10, $x11, $x12, $x13, $x14, $x15, $x18, $x19, $x20, $x21, $x22, $x23, $x20, $x21, $x22, $x23, $x24, $x25, $x26, $x27, $x28, $fp
93     ; CHECK-LABEL: name:            stack-save
94     ; CHECK: $sp = STRXpre $lr, $sp, -16
95     ; CHECK-NEXT: BL [[FN]]
96     ; CHECK-NEXT: $sp, $lr = LDRXpost $sp, 16
97     $w11 = ORRWri $wzr, 1
98     $w11 = ORRWri $wzr, 1
99     $w11 = ORRWri $wzr, 1
100     $w11 = ORRWri $wzr, 1
101   bb.2:
102   liveins: $lr, $x0, $x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $x9, $x10, $x11, $x12, $x13, $x14, $x15, $x18, $x19, $x20, $x21, $x22, $x23, $x20, $x21, $x22, $x23, $x24, $x25, $x26, $x27, $x28, $fp
103     RET undef $lr