1;; RUN: opt -S -stack-tagging %s -o - | FileCheck %s 2target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128" 3target triple = "aarch64-arm-unknown-eabi" 4 5define void @f() local_unnamed_addr #0 { 6S0: 7; CHECK-LABEL: S0: 8; CHECK: %basetag = call i8* @llvm.aarch64.irg.sp(i64 0) 9 %v = alloca i8, i32 48, align 8 10; CHECK: %v.tag = call i8* @llvm.aarch64.tagp.p0i8(i8* %v, i8* %basetag, i64 0) 11 %w = alloca i8, i32 48, align 16 12; CHECK: %w.tag = call i8* @llvm.aarch64.tagp.p0i8(i8* %w, i8* %basetag, i64 1) 13 14 %t0 = call i32 @g0() #1 15 %b0 = icmp eq i32 %t0, 0 16 br i1 %b0, label %S1, label %exit3 17 18S1: 19; CHECK-LABEL: S1: 20 call void @llvm.lifetime.start.p0i8(i64 48, i8 * nonnull %v) #1 21; CHECK: call void @llvm.aarch64.settag(i8* %v.tag, i64 48) 22 call void @llvm.lifetime.start.p0i8(i64 48, i8 * nonnull %w) #1 23; CHECK: call void @llvm.aarch64.settag(i8* %w.tag, i64 48) 24 %t1 = call i32 @g1(i8 * nonnull %v, i8 * nonnull %w) #1 25; CHECK: call i32 @g1 26; CHECK-NOT: settag{{.*}}%v 27; CHECK: call void @llvm.aarch64.settag(i8* %w, i64 48) 28; CHECK-NOT: settag{{.*}}%v 29 call void @llvm.lifetime.end.p0i8(i64 48, i8 * nonnull %w) #1 30; CHECK: call void @llvm.lifetime.end.p0i8(i64 48, i8* nonnull %w.tag) 31 %b1 = icmp eq i32 %t1, 0 32 br i1 %b1, label %S2, label %S3 33; CHECK-NOT: settag 34 35S2: 36; CHECK-LABEL: S2: 37 call void @z0() #1 38 br label %exit1 39; CHECK-NOT: settag 40 41S3: 42; CHECK-LABEL: S3: 43 call void @llvm.lifetime.end.p0i8(i64 48, i8 * nonnull %v) #1 44 tail call void @z1() #1 45 br label %exit2 46; CHECK-NOT: settag 47 48exit1: 49; CHECK-LABEL: exit1: 50; CHECK: call void @llvm.aarch64.settag(i8* %v, i64 48) 51 ret void 52 53exit2: 54; CHECK-LABEL: exit2: 55; CHECK: call void @llvm.aarch64.settag(i8* %v, i64 48) 56 ret void 57 58exit3: 59; CHECK-LABEL: exit3: 60 call void @z2() #1 61; CHECK-NOT: settag 62 ret void 63; CHECK: ret void 64} 65 66declare i32 @g0() #0 67 68declare i32 @g1(i8 *, i8 *) #0 69 70declare void @z0() #0 71 72declare void @z1() #0 73 74declare void @z2() #0 75 76declare void @llvm.lifetime.start.p0i8(i64 immarg, i8 * nocapture) #1 77 78declare void @llvm.lifetime.end.p0i8(i64 immarg, i8 * nocapture) #1 79 80attributes #0 = { sanitize_memtag "correctly-rounded-divide-sqrt-fp-math"="false" "denormal-fp-math"="preserve-sign" "disable-tail-calls"="false" "frame-pointer"="none" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "no-infs-fp-math"="true" "no-jump-tables"="false" "no-nans-fp-math"="true" "no-signed-zeros-fp-math"="true" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="generic" "target-features"="+mte,+neon,+v8.5a" "unsafe-fp-math"="false" "use-soft-float"="false" } 81attributes #1 = { nounwind } 82 83