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