xref: /llvm-project/llvm/test/CodeGen/ARM/Windows/stack-protector-musttail.ll (revision bed1c7f061aa12417aa081e334afdba45767b938)
1; RUN: llc -mtriple=thumbv7-windows-msvc -fast-isel %s -o - -start-before=stack-protector -stop-after=stack-protector  | FileCheck %s
2
3@var = global ptr null
4
5declare void @callee()
6
7define void @caller1() sspreq {
8; CHECK-LABEL: define void @caller1()
9; Prologue:
10
11; CHECK: call void @__security_check_cookie
12
13; CHECK: musttail call void @callee()
14; CHECK-NEXT: ret void
15  %var = alloca [2 x i64]
16  store ptr %var, ptr @var
17  musttail call void @callee()
18  ret void
19}
20
21define void @justret() sspreq {
22; CHECK-LABEL: define void @justret()
23; Prologue:
24; CHECK: @llvm.stackguard
25
26; CHECK: call void @__security_check_cookie
27
28; CHECK: ret void
29  %var = alloca [2 x i64]
30  store ptr %var, ptr @var
31  br label %retblock
32
33retblock:
34  ret void
35}
36
37declare ptr @callee2()
38
39define ptr @caller2() sspreq {
40; CHECK-LABEL: define ptr @caller2()
41; Prologue:
42; CHECK: @llvm.stackguard
43
44; CHECK: call void @__security_check_cookie
45
46; CHECK: [[TMP:%.*]] = musttail call ptr @callee2()
47; CHECK-NEXT: ret ptr [[TMP]]
48
49  %var = alloca [2 x i64]
50  store ptr %var, ptr @var
51  %tmp = musttail call ptr @callee2()
52  ret ptr %tmp
53}
54
55define void @caller3() sspreq {
56; CHECK-LABEL: define void @caller3()
57; Prologue:
58
59; CHECK: call void @__security_check_cookie
60
61; CHECK: tail call void @callee()
62; CHECK-NEXT: ret void
63  %var = alloca [2 x i64]
64  store ptr %var, ptr @var
65  tail call void @callee()
66  ret void
67}
68
69define ptr @caller4() sspreq {
70; CHECK-LABEL: define ptr @caller4()
71; Prologue:
72; CHECK: @llvm.stackguard
73
74; CHECK: call void @__security_check_cookie
75
76; CHECK: [[TMP:%.*]] = tail call ptr @callee2()
77; CHECK-NEXT: ret ptr [[TMP]]
78
79  %var = alloca [2 x i64]
80  store ptr %var, ptr @var
81  %tmp = tail call ptr @callee2()
82  ret ptr %tmp
83}
84