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 [2 x i64]* 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 [2 x i64]* %var, [2 x i64]** @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 [2 x i64]* %var, [2 x i64]** @var
31  br label %retblock
32
33retblock:
34  ret void
35}
36
37
38declare i64* @callee2()
39
40define i8* @caller2() sspreq {
41; CHECK-LABEL: define i8* @caller2()
42; Prologue:
43; CHECK: @llvm.stackguard
44
45; CHECK: call void @__security_check_cookie
46
47; CHECK: [[TMP:%.*]] = musttail call i64* @callee2()
48; CHECK-NEXT: [[RES:%.*]] = bitcast i64* [[TMP]] to i8*
49; CHECK-NEXT: ret i8* [[RES]]
50
51  %var = alloca [2 x i64]
52  store [2 x i64]* %var, [2 x i64]** @var
53  %tmp = musttail call i64* @callee2()
54  %res = bitcast i64* %tmp to i8*
55  ret i8* %res
56}
57