[𝘀𝗽𝗿] initial version

Created using spr 1.3.4
diff --git a/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp b/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
index bfc8bd5..5a9ea42 100644
--- a/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
+++ b/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
@@ -760,6 +760,8 @@
 bool isNoopIntrinsic(Instruction *I) {
   if (const IntrinsicInst *II = dyn_cast<IntrinsicInst>(I)) {
     switch (II->getIntrinsicID()) {
+    case Intrinsic::allow_runtime_check:
+    case Intrinsic::allow_ubsan_check:
     case Intrinsic::lifetime_start:
     case Intrinsic::lifetime_end:
     case Intrinsic::invariant_end:
diff --git a/llvm/test/Transforms/DeadStoreElimination/libcalls.ll b/llvm/test/Transforms/DeadStoreElimination/libcalls.ll
index 4d9a767..7a4908d 100644
--- a/llvm/test/Transforms/DeadStoreElimination/libcalls.ll
+++ b/llvm/test/Transforms/DeadStoreElimination/libcalls.ll
@@ -487,3 +487,20 @@
   %call = tail call ptr @strncpy(ptr %out2, ptr %in, i64 100)
   ret void
 }
+
+define i32 @test_strcat_with_allow_check(ptr %src) {
+; CHECK-LABEL: @test_strcat_with_allow_check(
+; CHECK-NEXT:    [[ALLOW1:%.*]] = call i1 @llvm.allow.runtime.check(metadata !"test_check")
+; CHECK-NEXT:    [[ALLOW2:%.*]] = call i1 @llvm.allow.ubsan.check(i8 7)
+; CHECK-NEXT:    tail call void @llvm.memset.p0.i64(ptr [[B:%.*]], i8 44, i64 16, i1 false)
+; CHECK-NEXT:    [[RET:%.*]] = load i32, ptr [[B]], align 4
+; CHECK-NEXT:    ret i32 [[RET]]
+;
+  tail call void @llvm.memset.p0.i64(ptr %src, i8 42, i64 16, i1 false)
+  %allow1 = call i1 @llvm.allow.runtime.check(metadata !"test_check")
+  tail call void @llvm.memset.p0.i64(ptr %src, i8 43, i64 16, i1 false)
+  %allow2 = call i1 @llvm.allow.ubsan.check(i8 7)
+  tail call void @llvm.memset.p0.i64(ptr %src, i8 44, i64 16, i1 false)
+  %ret = load i32, ptr %src, align 4
+  ret i32 %ret
+}