Index: test/Transforms/NaCl/strip-tbaa-metadata.ll |
diff --git a/test/Transforms/NaCl/strip-tbaa-metadata.ll b/test/Transforms/NaCl/strip-tbaa-metadata.ll |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c555af67122b35ea6ebb1f011983090f3003d117 |
--- /dev/null |
+++ b/test/Transforms/NaCl/strip-tbaa-metadata.ll |
@@ -0,0 +1,36 @@ |
+; RUN: opt -S -strip-metadata %s | FileCheck %s |
+ |
+; Test that !tbaa is removed from loads/stores. |
+; CHECK: @foo |
+; CHECK-NOT: !tbaa |
+define double @foo(i32* nocapture %ptr1, double* nocapture %ptr2) nounwind readonly { |
+ store i32 99999, i32* %ptr1, align 1, !tbaa !0 |
+ %1 = load double* %ptr2, align 8, !tbaa !3 |
+ ret double %1 |
+} |
+ |
+declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i32, i1) nounwind |
+ |
+; Test that !tbaa is removed from calls. |
+; CHECK: @bar |
+; CHECK-NOT: !tbaa |
+define void @bar(i8* nocapture %p, i8* nocapture %q, |
+ i8* nocapture %s) nounwind { |
+ tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* %p, i8* %q, |
+ i64 16, i32 1, i1 false), !tbaa !4 |
+ store i8 2, i8* %s, align 1, !tbaa !5 |
+ tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* %q, i8* %p, |
+ i64 16, i32 1, i1 false), !tbaa !4 |
+; CHECK ret void |
+ ret void |
+} |
+ |
+; Test that the metadata nodes aren't left over. |
+; CHECK-NOT: !0 = |
+ |
+!0 = metadata !{metadata !"int", metadata !1} |
+!1 = metadata !{metadata !"omnipotent char", metadata !2} |
+!2 = metadata !{metadata !"Simple C/C++ TBAA"} |
+!3 = metadata !{metadata !"double", metadata !1} |
+!4 = metadata !{metadata !"A", metadata !1} |
+!5 = metadata !{metadata !"B", metadata !1} |