84 lines · plain
1; RUN: llc -mtriple=thumbv7-windows-msvc -fast-isel %s -o - -start-before=stack-protector -stop-after=stack-protector | FileCheck %s2 3@var = global ptr null4 5declare void @callee()6 7define void @caller1() sspreq {8; CHECK-LABEL: define void @caller1()9; Prologue:10 11; CHECK: call void @__security_check_cookie12 13; CHECK: musttail call void @callee()14; CHECK-NEXT: ret void15 %var = alloca [2 x i64]16 store ptr %var, ptr @var17 musttail call void @callee()18 ret void19}20 21define void @justret() sspreq {22; CHECK-LABEL: define void @justret()23; Prologue:24; CHECK: @llvm.stackguard25 26; CHECK: call void @__security_check_cookie27 28; CHECK: ret void29 %var = alloca [2 x i64]30 store ptr %var, ptr @var31 br label %retblock32 33retblock:34 ret void35}36 37declare ptr @callee2()38 39define ptr @caller2() sspreq {40; CHECK-LABEL: define ptr @caller2()41; Prologue:42; CHECK: @llvm.stackguard43 44; CHECK: call void @__security_check_cookie45 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 @var51 %tmp = musttail call ptr @callee2()52 ret ptr %tmp53}54 55define void @caller3() sspreq {56; CHECK-LABEL: define void @caller3()57; Prologue:58 59; CHECK: call void @__security_check_cookie60 61; CHECK: tail call void @callee()62; CHECK-NEXT: ret void63 %var = alloca [2 x i64]64 store ptr %var, ptr @var65 tail call void @callee()66 ret void67}68 69define ptr @caller4() sspreq {70; CHECK-LABEL: define ptr @caller4()71; Prologue:72; CHECK: @llvm.stackguard73 74; CHECK: call void @__security_check_cookie75 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 @var81 %tmp = tail call ptr @callee2()82 ret ptr %tmp83}84