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