1; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
2
3define void @nop_test() {
4entry:
5; CHECK-LABEL: nop_test:
6
7; 2
8; CHECK:      bcr 0, %r0
9
10; 4
11; CHECK:      bc 0, 0
12
13; 6
14; CHECK:      brcl 0, [[LAB:.Ltmp[0-9]+]]
15; CHECK-NEXT: [[LAB]]:
16
17; 8
18; CHECK:      brcl 0, [[LAB:.Ltmp[0-9]+]]
19; CHECK-NEXT: [[LAB]]:
20; CHECK:      bcr 0, %r0
21
22; 10
23; CHECK:      brcl 0, [[LAB:.Ltmp[0-9]+]]
24; CHECK-NEXT: [[LAB]]:
25; CHECK:      bc 0, 0
26
27; 12
28; CHECK:      brcl 0, [[LAB:.Ltmp[0-9]+]]
29; CHECK-NEXT: [[LAB]]:
30; CHECK:      brcl 0, [[LAB:.Ltmp[0-9]+]]
31; CHECK-NEXT: [[LAB]]:
32
33; 14
34; CHECK:      brcl 0, [[LAB:.Ltmp[0-9]+]]
35; CHECK-NEXT: [[LAB]]:
36; CHECK:      brcl 0, [[LAB:.Ltmp[0-9]+]]
37; CHECK-NEXT: [[LAB]]:
38; CHECK:      bcr 0, %r0
39
40; 16
41; CHECK:      brcl 0, [[LAB:.Ltmp[0-9]+]]
42; CHECK-NEXT: [[LAB]]:
43; CHECK:      brcl 0, [[LAB:.Ltmp[0-9]+]]
44; CHECK-NEXT: [[LAB]]:
45; CHECK:      bc 0, 0
46
47; 18
48; CHECK:      brcl 0, [[LAB:.Ltmp[0-9]+]]
49; CHECK-NEXT: [[LAB]]:
50; CHECK:      brcl 0, [[LAB:.Ltmp[0-9]+]]
51; CHECK-NEXT: [[LAB]]:
52; CHECK:      brcl 0, [[LAB:.Ltmp[0-9]+]]
53; CHECK-NEXT: [[LAB]]:
54
55; 20
56; CHECK:      brcl 0, [[LAB:.Ltmp[0-9]+]]
57; CHECK-NEXT: [[LAB]]:
58; CHECK:      brcl 0, [[LAB:.Ltmp[0-9]+]]
59; CHECK-NEXT: [[LAB]]:
60; CHECK:      brcl 0, [[LAB:.Ltmp[0-9]+]]
61; CHECK-NEXT: [[LAB]]:
62; CHECK:      bcr 0, %r0
63
64; 22
65; CHECK:      brcl 0, [[LAB:.Ltmp[0-9]+]]
66; CHECK-NEXT: [[LAB]]:
67; CHECK:      brcl 0, [[LAB:.Ltmp[0-9]+]]
68; CHECK-NEXT: [[LAB]]:
69; CHECK:      brcl 0, [[LAB:.Ltmp[0-9]+]]
70; CHECK-NEXT: [[LAB]]:
71; CHECK:      bc 0, 0
72
73; 24
74; CHECK:      brcl 0, [[LAB:.Ltmp[0-9]+]]
75; CHECK-NEXT: [[LAB]]:
76; CHECK:      brcl 0, [[LAB:.Ltmp[0-9]+]]
77; CHECK-NEXT: [[LAB]]:
78; CHECK:      brcl 0, [[LAB:.Ltmp[0-9]+]]
79; CHECK-NEXT: [[LAB]]:
80; CHECK:      brcl 0, [[LAB:.Ltmp[0-9]+]]
81; CHECK-NEXT: [[LAB]]:
82
83; 26
84; CHECK:      brcl 0, [[LAB:.Ltmp[0-9]+]]
85; CHECK-NEXT: [[LAB]]:
86; CHECK:      brcl 0, [[LAB:.Ltmp[0-9]+]]
87; CHECK-NEXT: [[LAB]]:
88; CHECK:      brcl 0, [[LAB:.Ltmp[0-9]+]]
89; CHECK-NEXT: [[LAB]]:
90; CHECK:      brcl 0, [[LAB:.Ltmp[0-9]+]]
91; CHECK-NEXT: [[LAB]]:
92; CHECK:      bcr 0, %r0
93
94; 28
95; CHECK:      brcl 0, [[LAB:.Ltmp[0-9]+]]
96; CHECK-NEXT: [[LAB]]:
97; CHECK:      brcl 0, [[LAB:.Ltmp[0-9]+]]
98; CHECK-NEXT: [[LAB]]:
99; CHECK:      brcl 0, [[LAB:.Ltmp[0-9]+]]
100; CHECK-NEXT: [[LAB]]:
101; CHECK:      brcl 0, [[LAB:.Ltmp[0-9]+]]
102; CHECK-NEXT: [[LAB]]:
103; CHECK:      bc 0, 0
104
105; 30
106; CHECK:      brcl 0, [[LAB:.Ltmp[0-9]+]]
107; CHECK-NEXT: [[LAB]]:
108; CHECK:      brcl 0, [[LAB:.Ltmp[0-9]+]]
109; CHECK-NEXT: [[LAB]]:
110; CHECK:      brcl 0, [[LAB:.Ltmp[0-9]+]]
111; CHECK-NEXT: [[LAB]]:
112; CHECK:      brcl 0, [[LAB:.Ltmp[0-9]+]]
113; CHECK-NEXT: [[LAB]]:
114; CHECK:      brcl 0, [[LAB:.Ltmp[0-9]+]]
115; CHECK-NEXT: [[LAB]]:
116
117  tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64  0, i32  0)
118  tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64  2, i32  2)
119  tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64  4, i32  4)
120  tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64  6, i32  6)
121  tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64  8, i32  8)
122  tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 10, i32 10)
123  tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 12, i32 12)
124  tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 14, i32 14)
125  tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 16, i32 16)
126  tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 18, i32 18)
127  tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 20, i32 20)
128  tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 22, i32 22)
129  tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 24, i32 24)
130  tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 26, i32 26)
131  tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 28, i32 28)
132  tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 30, i32 30)
133; Add an extra stackmap with a zero-length shadow to thwart the shadow
134; optimization. This will force all bytes of the previous shadow to be
135; padded with nops.
136  tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 31, i32 0)
137  ret void
138}
139
140declare void @llvm.experimental.stackmap(i64, i32, ...)
141