[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / stack-tagging-split-lifetime.ll
blobe2c41cad29452937366ed0eb5a254dd92d6051ab
1 ; RUN: opt -S -aarch64-stack-tagging -stack-tagging-use-stack-safety=0 %s -o - | FileCheck %s
3 target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
4 target triple = "aarch64"
6 declare void @use8(ptr)
8 define  void @f(i1 %cond) local_unnamed_addr sanitize_memtag {
9 start:
10 ; CHECK-LABEL: start:
11   %a = alloca i8, i32 48, align 8
12   call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %a)
13   call void @use8(ptr %a)
14 ; CHECK: call void @llvm.aarch64.settag(ptr %a.tag, i64 48)
15   br i1 %cond, label %next0, label %next1
17 next0:
18 ; CHECK-LABEL: next0:
19 ; CHECK: call void @llvm.aarch64.settag
20   call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %a)
21   br label %exit0
23 exit0:
24 ; CHECK-LABEL: exit0:
25 ; CHECK-NOT: call void @llvm.aarch64.settag
26   ret void
28 next1:
29 ; CHECK-LABEL: next1:
30 ; CHECK: call void @llvm.aarch64.settag
31   call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %a)
32   br label %exit1
34 exit1:
35 ; CHECK-LABEL: exit1:
36 ; CHECK-NOT: call void @llvm.aarch64.settag
37   ret void
40 define  void @diamond(i1 %cond) local_unnamed_addr sanitize_memtag {
41 start:
42 ; CHECK-LABEL: start:
43   %a = alloca i8, i32 48, align 8
44   call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %a)
45   call void @use8(ptr %a)
46 ; CHECK: call void @llvm.aarch64.settag(ptr %a.tag, i64 48)
47   br i1 %cond, label %next0, label %next1
49 next0:
50 ; CHECK-LABEL: next0:
51 ; CHECK: call void @llvm.aarch64.settag
52   call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %a)
53   br label %exit1
55 next1:
56 ; CHECK-LABEL: next1:
57 ; CHECK: call void @llvm.aarch64.settag
58   call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %a)
59   br label %exit1
61 exit1:
62 ; CHECK-LABEL: exit1:
63 ; CHECK-NOT: call void @llvm.aarch64.settag
64   ret void
67 define  void @diamond_nocover(i1 %cond) local_unnamed_addr sanitize_memtag {
68 start:
69 ; CHECK-LABEL: start:
70   %a = alloca i8, i32 48, align 8
71   call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %a)
72   call void @use8(ptr %a)
73 ; CHECK: call void @llvm.aarch64.settag(ptr %a.tag, i64 48)
74   br i1 %cond, label %next0, label %next1
76 next0:
77 ; CHECK-LABEL: next0:
78 ; CHECK-NOT: llvm.lifetime.end
79   call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %a)
80   br label %exit1
82 next1:
83 ; CHECK-LABEL: next1:
84 ; CHECK-NOT: llvm.lifetime.end
85   br label %exit1
87 exit1:
88 ; CHECK-LABEL: exit1:
89 ; CHECK: call void @llvm.aarch64.settag
90   ret void
93 define  void @diamond3(i1 %cond, i1 %cond1) local_unnamed_addr sanitize_memtag {
94 start:
95 ; CHECK-LABEL: start:
96   %a = alloca i8, i32 48, align 8
97   call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %a)
98   call void @use8(ptr %a)
99 ; CHECK: call void @llvm.aarch64.settag(ptr %a.tag, i64 48)
100   br i1 %cond, label %next0, label %start1
102 start1:
103   br i1 %cond1, label %next1, label %next2
105 next0:
106 ; CHECK-LABEL: next0:
107 ; CHECK: call void @llvm.aarch64.settag
108   call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %a)
109   br label %exit1
111 next1:
112 ; CHECK-LABEL: next1:
113 ; CHECK: call void @llvm.aarch64.settag
114   call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %a)
115   br label %exit1
117 next2:
118 ; CHECK-LABEL: next2:
119 ; CHECK: call void @llvm.aarch64.settag
120   call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %a)
121   br label %exit1
123 exit1:
124 ; CHECK-LABEL: exit1:
125 ; CHECK-NOT: call void @llvm.aarch64.settag
126   ret void
129 define  void @diamond3_nocover(i1 %cond, i1 %cond1) local_unnamed_addr sanitize_memtag {
130 start:
131 ; CHECK-LABEL: start:
132   %a = alloca i8, i32 48, align 8
133   call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %a)
134   call void @use8(ptr %a)
135 ; CHECK: call void @llvm.aarch64.settag(ptr %a.tag, i64 48)
136   br i1 %cond, label %next0, label %start1
138 start1:
139   br i1 %cond1, label %next1, label %next2
141 next0:
142 ; CHECK-LABEL: next0:
143 ; CHECK-NOT: call void @llvm.aarch64.settag
144   call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %a)
145   br label %exit1
147 next1:
148 ; CHECK-LABEL: next1:
149 ; CHECK-NOT: call void @llvm.aarch64.settag
150   call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %a)
151   br label %exit1
153 next2:
154 ; CHECK-LABEL: next2:
155 ; CHECK-NOT: call void @llvm.aarch64.settag
156   br label %exit1
158 exit1:
159 ; CHECK-LABEL: exit1:
160 ; CHECK: call void @llvm.aarch64.settag
161   ret void
164 declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture)
165 declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture)