brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.4 KiB · b0849ac Raw
102 lines · plain
1; RUN: llc -mtriple=x86_64-linux-gnu -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; CHECK: @llvm.stackprotector11 12; CHECK: [[GUARD:%.*]] = load volatile ptr, ptr13; CHECK: [[TOKEN:%.*]] = load volatile ptr, ptr {{%.*}}14; CHECK: [[TST:%.*]] = icmp eq ptr [[GUARD]], [[TOKEN]]15; CHECK: br i1 [[TST]]16 17; CHECK: musttail call void @callee()18; CHECK-NEXT: ret void19  %var = alloca [2 x i64]20  store ptr %var, ptr @var21  musttail call void @callee()22  ret void23}24 25define void @justret() sspreq {26; CHECK-LABEL: define void @justret()27; Prologue:28; CHECK: @llvm.stackprotector29 30; CHECK: [[GUARD:%.*]] = load volatile ptr, ptr31; CHECK: [[TOKEN:%.*]] = load volatile ptr, ptr {{%.*}}32; CHECK: [[TST:%.*]] = icmp eq ptr [[GUARD]], [[TOKEN]]33; CHECK: br i1 [[TST]]34 35; CHECK: ret void36  %var = alloca [2 x i64]37  store ptr %var, ptr @var38  br label %retblock39 40retblock:41  ret void42}43 44 45declare ptr @callee2()46 47define ptr @caller2() sspreq {48; CHECK-LABEL: define ptr @caller2()49; Prologue:50; CHECK: @llvm.stackprotector51 52; CHECK: [[GUARD:%.*]] = load volatile ptr, ptr53; CHECK: [[TOKEN:%.*]] = load volatile ptr, ptr {{%.*}}54; CHECK: [[TST:%.*]] = icmp eq ptr [[GUARD]], [[TOKEN]]55; CHECK: br i1 [[TST]]56 57; CHECK: [[TMP:%.*]] = musttail call ptr @callee2()58; CHECK-NEXT: ret ptr [[TMP]]59 60  %var = alloca [2 x i64]61  store ptr %var, ptr @var62  %tmp = musttail call ptr @callee2()63  ret ptr %tmp64}65 66define void @caller3() sspreq {67; CHECK-LABEL: define void @caller3()68; Prologue:69; CHECK: @llvm.stackprotector70 71; CHECK: [[GUARD:%.*]] = load volatile ptr, ptr72; CHECK: [[TOKEN:%.*]] = load volatile ptr, ptr {{%.*}}73; CHECK: [[TST:%.*]] = icmp eq ptr [[GUARD]], [[TOKEN]]74; CHECK: br i1 [[TST]]75 76; CHECK: tail call void @callee()77; CHECK-NEXT: ret void78  %var = alloca [2 x i64]79  store ptr %var, ptr @var80  tail call void @callee()81  ret void82}83 84define ptr @caller4() sspreq {85; CHECK-LABEL: define ptr @caller4()86; Prologue:87; CHECK: @llvm.stackprotector88 89; CHECK: [[GUARD:%.*]] = load volatile ptr, ptr90; CHECK: [[TOKEN:%.*]] = load volatile ptr, ptr {{%.*}}91; CHECK: [[TST:%.*]] = icmp eq ptr [[GUARD]], [[TOKEN]]92; CHECK: br i1 [[TST]]93 94; CHECK: [[TMP:%.*]] = tail call ptr @callee2()95; CHECK-NEXT: ret ptr [[TMP]]96 97  %var = alloca [2 x i64]98  store ptr %var, ptr @var99  %tmp = tail call ptr @callee2()100  ret ptr %tmp101}102