Index: test/Transforms/MinSFI/sandbox-memory-accesses.ll |
diff --git a/test/Transforms/MinSFI/sandbox-memory-accesses.ll b/test/Transforms/MinSFI/sandbox-memory-accesses.ll |
index b6c47855ccad0d8ab4fd2fc583b8125448bd9725..f9082b0be04d929e6e33767204de9110b38da3ad 100644 |
--- a/test/Transforms/MinSFI/sandbox-memory-accesses.ll |
+++ b/test/Transforms/MinSFI/sandbox-memory-accesses.ll |
@@ -1,9 +1,9 @@ |
; RUN: opt %s -minsfi-sandbox-memory-accesses -S | FileCheck %s |
-; RUN: opt %s -minsfi-ptrsize=20 -minsfi-sandbox-memory-accesses -S \ |
-; RUN: | FileCheck %s -check-prefix=CHECK-MASK |
+; RUN: opt %s -minsfi-ptrsize=20 -minsfi-sandbox-memory-accesses -S \ |
+; RUN: | FileCheck %s -check-prefix=CHECK-MASK |
!llvm.module.flags = !{!0} |
-!0 = metadata !{i32 1, metadata !"Debug Info Version", i32 2} |
+!0 = !{i32 1, !"Debug Info Version", i32 3} |
target datalayout = "p:32:32:32" |
target triple = "le32-unknown-nacl" |
@@ -42,28 +42,28 @@ define i32 @test_no_sandbox(i32 %x, i32 %y) { |
; CHECK-NEXT: } |
define i32 @test_load(i32* %ptr) { |
- %val = load i32* %ptr |
+ %val = load i32, i32* %ptr |
ret i32 %val |
} |
; CHECK-LABEL: define i32 @test_load(i32* %ptr) { |
-; CHECK-NEXT: %mem_base = load i64* @__sfi_memory_base |
+; CHECK-NEXT: %mem_base = load i64, i64* @__sfi_memory_base |
; CHECK-NEXT: %1 = ptrtoint i32* %ptr to i32 |
; CHECK-NEXT: %2 = zext i32 %1 to i64 |
; CHECK-NEXT: %3 = add i64 %mem_base, %2 |
; CHECK-NEXT: %4 = inttoptr i64 %3 to i32* |
-; CHECK-NEXT: %val = load i32* %4 |
+; CHECK-NEXT: %val = load i32, i32* %4 |
; CHECK-NEXT: ret i32 %val |
; CHECK-NEXT: } |
; CHECK-MASK-LABEL: define i32 @test_load(i32* %ptr) { |
-; CHECK-MASK-NEXT: %mem_base = load i64* @__sfi_memory_base |
+; CHECK-MASK-NEXT: %mem_base = load i64, i64* @__sfi_memory_base |
; CHECK-MASK-NEXT: %1 = ptrtoint i32* %ptr to i32 |
; CHECK-MASK-NEXT: %2 = and i32 %1, 1048575 |
; CHECK-MASK-NEXT: %3 = zext i32 %2 to i64 |
; CHECK-MASK-NEXT: %4 = add i64 %mem_base, %3 |
; CHECK-MASK-NEXT: %5 = inttoptr i64 %4 to i32* |
-; CHECK-MASK-NEXT: %val = load i32* %5 |
+; CHECK-MASK-NEXT: %val = load i32, i32* %5 |
; CHECK-MASK-NEXT: ret i32 %val |
; CHECK-MASK-NEXT: } |
@@ -73,7 +73,7 @@ define void @test_store(i32* %ptr) { |
} |
; CHECK-LABEL: define void @test_store(i32* %ptr) { |
-; CHECK-NEXT: %mem_base = load i64* @__sfi_memory_base |
+; CHECK-NEXT: %mem_base = load i64, i64* @__sfi_memory_base |
; CHECK-NEXT: %1 = ptrtoint i32* %ptr to i32 |
; CHECK-NEXT: %2 = zext i32 %1 to i64 |
; CHECK-NEXT: %3 = add i64 %mem_base, %2 |
@@ -83,7 +83,7 @@ define void @test_store(i32* %ptr) { |
; CHECK-NEXT: } |
; CHECK-MASK-LABEL: define void @test_store(i32* %ptr) { |
-; CHECK-MASK-NEXT: %mem_base = load i64* @__sfi_memory_base |
+; CHECK-MASK-NEXT: %mem_base = load i64, i64* @__sfi_memory_base |
; CHECK-MASK-NEXT: %1 = ptrtoint i32* %ptr to i32 |
; CHECK-MASK-NEXT: %2 = and i32 %1, 1048575 |
; CHECK-MASK-NEXT: %3 = zext i32 %2 to i64 |
@@ -99,7 +99,7 @@ define void @test_memcpy_32(i8* %dest, i8* %src, i32 %len) { |
} |
; CHECK-LABEL: define void @test_memcpy_32(i8* %dest, i8* %src, i32 %len) { |
-; CHECK-NEXT: %mem_base = load i64* @__sfi_memory_base |
+; CHECK-NEXT: %mem_base = load i64, i64* @__sfi_memory_base |
; CHECK-NEXT: %1 = ptrtoint i8* %dest to i32 |
; CHECK-NEXT: %2 = zext i32 %1 to i64 |
; CHECK-NEXT: %3 = add i64 %mem_base, %2 |
@@ -122,7 +122,7 @@ define void @test_memmove_32(i8* %dest, i8* %src, i32 %len) { |
} |
; CHECK-LABEL: define void @test_memmove_32(i8* %dest, i8* %src, i32 %len) { |
-; CHECK-NEXT: %mem_base = load i64* @__sfi_memory_base |
+; CHECK-NEXT: %mem_base = load i64, i64* @__sfi_memory_base |
; CHECK-NEXT: %1 = ptrtoint i8* %dest to i32 |
; CHECK-NEXT: %2 = zext i32 %1 to i64 |
; CHECK-NEXT: %3 = add i64 %mem_base, %2 |
@@ -145,7 +145,7 @@ define void @test_memset_32(i8* %dest, i32 %len) { |
} |
; CHECK-LABEL: define void @test_memset_32(i8* %dest, i32 %len) { |
-; CHECK-NEXT: %mem_base = load i64* @__sfi_memory_base |
+; CHECK-NEXT: %mem_base = load i64, i64* @__sfi_memory_base |
; CHECK-NEXT: %1 = ptrtoint i8* %dest to i32 |
; CHECK-NEXT: %2 = zext i32 %1 to i64 |
; CHECK-NEXT: %3 = add i64 %mem_base, %2 |
@@ -164,7 +164,7 @@ define i32 @test_atomic_load_32(i32* %ptr) { |
} |
; CHECK-LABEL: define i32 @test_atomic_load_32(i32* %ptr) { |
-; CHECK-NEXT: %mem_base = load i64* @__sfi_memory_base |
+; CHECK-NEXT: %mem_base = load i64, i64* @__sfi_memory_base |
; CHECK-NEXT: %1 = ptrtoint i32* %ptr to i32 |
; CHECK-NEXT: %2 = zext i32 %1 to i64 |
; CHECK-NEXT: %3 = add i64 %mem_base, %2 |
@@ -182,7 +182,7 @@ define i64 @test_atomic_load_64(i64* %ptr) { |
} |
; CHECK-LABEL: define i64 @test_atomic_load_64(i64* %ptr) { |
-; CHECK-NEXT: %mem_base = load i64* @__sfi_memory_base |
+; CHECK-NEXT: %mem_base = load i64, i64* @__sfi_memory_base |
; CHECK-NEXT: %1 = ptrtoint i64* %ptr to i32 |
; CHECK-NEXT: %2 = zext i32 %1 to i64 |
; CHECK-NEXT: %3 = add i64 %mem_base, %2 |
@@ -200,7 +200,7 @@ define void @test_atomic_store_32(i32* %ptr) { |
} |
; CHECK-LABEL: define void @test_atomic_store_32(i32* %ptr) { |
-; CHECK-NEXT: %mem_base = load i64* @__sfi_memory_base |
+; CHECK-NEXT: %mem_base = load i64, i64* @__sfi_memory_base |
; CHECK-NEXT: %1 = ptrtoint i32* %ptr to i32 |
; CHECK-NEXT: %2 = zext i32 %1 to i64 |
; CHECK-NEXT: %3 = add i64 %mem_base, %2 |
@@ -218,7 +218,7 @@ define void @test_atomic_store_64(i64* %ptr) { |
} |
; CHECK-LABEL: define void @test_atomic_store_64(i64* %ptr) { |
-; CHECK-NEXT: %mem_base = load i64* @__sfi_memory_base |
+; CHECK-NEXT: %mem_base = load i64, i64* @__sfi_memory_base |
; CHECK-NEXT: %1 = ptrtoint i64* %ptr to i32 |
; CHECK-NEXT: %2 = zext i32 %1 to i64 |
; CHECK-NEXT: %3 = add i64 %mem_base, %2 |
@@ -236,7 +236,7 @@ define i32 @test_atomic_rmw_32(i32* %ptr) { |
} |
; CHECK-LABEL: define i32 @test_atomic_rmw_32(i32* %ptr) { |
-; CHECK-NEXT: %mem_base = load i64* @__sfi_memory_base |
+; CHECK-NEXT: %mem_base = load i64, i64* @__sfi_memory_base |
; CHECK-NEXT: %1 = ptrtoint i32* %ptr to i32 |
; CHECK-NEXT: %2 = zext i32 %1 to i64 |
; CHECK-NEXT: %3 = add i64 %mem_base, %2 |
@@ -254,7 +254,7 @@ define i64 @test_atomic_rmw_64(i64* %ptr) { |
} |
; CHECK-LABEL: define i64 @test_atomic_rmw_64(i64* %ptr) { |
-; CHECK-NEXT: %mem_base = load i64* @__sfi_memory_base |
+; CHECK-NEXT: %mem_base = load i64, i64* @__sfi_memory_base |
; CHECK-NEXT: %1 = ptrtoint i64* %ptr to i32 |
; CHECK-NEXT: %2 = zext i32 %1 to i64 |
; CHECK-NEXT: %3 = add i64 %mem_base, %2 |
@@ -272,7 +272,7 @@ define i32 @test_atomic_cmpxchg_32(i32* %ptr) { |
} |
; CHECK-LABEL: define i32 @test_atomic_cmpxchg_32(i32* %ptr) { |
-; CHECK-NEXT: %mem_base = load i64* @__sfi_memory_base |
+; CHECK-NEXT: %mem_base = load i64, i64* @__sfi_memory_base |
; CHECK-NEXT: %1 = ptrtoint i32* %ptr to i32 |
; CHECK-NEXT: %2 = zext i32 %1 to i64 |
; CHECK-NEXT: %3 = add i64 %mem_base, %2 |
@@ -290,7 +290,7 @@ define i64 @test_atomic_cmpxchg_64(i64* %ptr) { |
} |
; CHECK-LABEL: define i64 @test_atomic_cmpxchg_64(i64* %ptr) { |
-; CHECK-NEXT: %mem_base = load i64* @__sfi_memory_base |
+; CHECK-NEXT: %mem_base = load i64, i64* @__sfi_memory_base |
; CHECK-NEXT: %1 = ptrtoint i64* %ptr to i32 |
; CHECK-NEXT: %2 = zext i32 %1 to i64 |
; CHECK-NEXT: %3 = add i64 %mem_base, %2 |
@@ -328,7 +328,7 @@ define i1 @test_atomic_is_lock_free(i8* %ptr) { |
} |
; CHECK-LABEL: define i1 @test_atomic_is_lock_free(i8* %ptr) { |
-; CHECK-NEXT: %mem_base = load i64* @__sfi_memory_base |
+; CHECK-NEXT: %mem_base = load i64, i64* @__sfi_memory_base |
; CHECK-NEXT: %1 = ptrtoint i8* %ptr to i32 |
; CHECK-NEXT: %2 = zext i32 %1 to i64 |
; CHECK-NEXT: %3 = add i64 %mem_base, %2 |
@@ -356,18 +356,18 @@ define void @test_bitcast_whitelisted(i32 %val) { |
; this won't get optimized because IntToPtr is not casting a result of an Add |
define i32 @test_no_opt__cast_not_add(i32 %ptr_int) { |
%ptr = inttoptr i32 %ptr_int to i32* |
- %val = load i32* %ptr |
+ %val = load i32, i32* %ptr |
ret i32 %val |
} |
; CHECK-LABEL: define i32 @test_no_opt__cast_not_add(i32 %ptr_int) { |
-; CHECK-NEXT: %mem_base = load i64* @__sfi_memory_base |
+; CHECK-NEXT: %mem_base = load i64, i64* @__sfi_memory_base |
; CHECK-NEXT: %ptr = inttoptr i32 %ptr_int to i32* |
; CHECK-NEXT: %1 = ptrtoint i32* %ptr to i32 |
; CHECK-NEXT: %2 = zext i32 %1 to i64 |
; CHECK-NEXT: %3 = add i64 %mem_base, %2 |
; CHECK-NEXT: %4 = inttoptr i64 %3 to i32* |
-; CHECK-NEXT: %val = load i32* %4 |
+; CHECK-NEXT: %val = load i32, i32* %4 |
; CHECK-NEXT: ret i32 %val |
; CHECK-NEXT: } |
@@ -375,19 +375,19 @@ define i32 @test_no_opt__cast_not_add(i32 %ptr_int) { |
define i32 @test_no_opt__cast_not_32(i64 %ptr_int1) { |
%ptr_sum = add i64 %ptr_int1, 5 |
%ptr = inttoptr i64 %ptr_sum to i32* |
- %val = load i32* %ptr |
+ %val = load i32, i32* %ptr |
ret i32 %val |
} |
; CHECK-LABEL: define i32 @test_no_opt__cast_not_32(i64 %ptr_int1) { |
-; CHECK-NEXT: %mem_base = load i64* @__sfi_memory_base |
+; CHECK-NEXT: %mem_base = load i64, i64* @__sfi_memory_base |
; CHECK-NEXT: %ptr_sum = add i64 %ptr_int1, 5 |
; CHECK-NEXT: %ptr = inttoptr i64 %ptr_sum to i32* |
; CHECK-NEXT: %1 = ptrtoint i32* %ptr to i32 |
; CHECK-NEXT: %2 = zext i32 %1 to i64 |
; CHECK-NEXT: %3 = add i64 %mem_base, %2 |
; CHECK-NEXT: %4 = inttoptr i64 %3 to i32* |
-; CHECK-NEXT: %val = load i32* %4 |
+; CHECK-NEXT: %val = load i32, i32* %4 |
; CHECK-NEXT: ret i32 %val |
; CHECK-NEXT: } |
@@ -395,19 +395,19 @@ define i32 @test_no_opt__cast_not_32(i64 %ptr_int1) { |
define i32 @test_no_opt__add_not_constant(i32 %ptr_int1, i32 %ptr_int2) { |
%ptr_sum = add i32 %ptr_int1, %ptr_int2 |
%ptr = inttoptr i32 %ptr_sum to i32* |
- %val = load i32* %ptr |
+ %val = load i32, i32* %ptr |
ret i32 %val |
} |
; CHECK-LABEL: define i32 @test_no_opt__add_not_constant(i32 %ptr_int1, i32 %ptr_int2) { |
-; CHECK-NEXT: %mem_base = load i64* @__sfi_memory_base |
+; CHECK-NEXT: %mem_base = load i64, i64* @__sfi_memory_base |
; CHECK-NEXT: %ptr_sum = add i32 %ptr_int1, %ptr_int2 |
; CHECK-NEXT: %ptr = inttoptr i32 %ptr_sum to i32* |
; CHECK-NEXT: %1 = ptrtoint i32* %ptr to i32 |
; CHECK-NEXT: %2 = zext i32 %1 to i64 |
; CHECK-NEXT: %3 = add i64 %mem_base, %2 |
; CHECK-NEXT: %4 = inttoptr i64 %3 to i32* |
-; CHECK-NEXT: %val = load i32* %4 |
+; CHECK-NEXT: %val = load i32, i32* %4 |
; CHECK-NEXT: ret i32 %val |
; CHECK-NEXT: } |
@@ -415,37 +415,37 @@ define i32 @test_no_opt__add_not_constant(i32 %ptr_int1, i32 %ptr_int2) { |
define i32 @test_no_opt__add_not_positive(i32 %ptr_int) { |
%ptr_sum = add i32 %ptr_int, -5 |
%ptr = inttoptr i32 %ptr_sum to i32* |
- %val = load i32* %ptr |
+ %val = load i32, i32* %ptr |
ret i32 %val |
} |
; CHECK-LABEL: define i32 @test_no_opt__add_not_positive(i32 %ptr_int) { |
-; CHECK-NEXT: %mem_base = load i64* @__sfi_memory_base |
+; CHECK-NEXT: %mem_base = load i64, i64* @__sfi_memory_base |
; CHECK-NEXT: %ptr_sum = add i32 %ptr_int, -5 |
; CHECK-NEXT: %ptr = inttoptr i32 %ptr_sum to i32* |
; CHECK-NEXT: %1 = ptrtoint i32* %ptr to i32 |
; CHECK-NEXT: %2 = zext i32 %1 to i64 |
; CHECK-NEXT: %3 = add i64 %mem_base, %2 |
; CHECK-NEXT: %4 = inttoptr i64 %3 to i32* |
-; CHECK-NEXT: %val = load i32* %4 |
+; CHECK-NEXT: %val = load i32, i32* %4 |
; CHECK-NEXT: ret i32 %val |
; CHECK-NEXT: } |
define i32 @test_opt_dont_remove_cast_if_used(i32 %ptr_int, i32 %replace) { |
%ptr_sum = add i32 %ptr_int, 5 |
%ptr = inttoptr i32 %ptr_sum to i32* |
- %val = load i32* %ptr ; %ptr is used later => keep cast |
+ %val = load i32, i32* %ptr ; %ptr is used later => keep cast |
store i32 %replace, i32* %ptr ; %ptr not used any more => remove cast |
ret i32 %val |
} |
; CHECK-LABEL: define i32 @test_opt_dont_remove_cast_if_used(i32 %ptr_int, i32 %replace) { |
-; CHECK-NEXT: %mem_base = load i64* @__sfi_memory_base |
+; CHECK-NEXT: %mem_base = load i64, i64* @__sfi_memory_base |
; CHECK-NEXT: %1 = zext i32 %ptr_int to i64 |
; CHECK-NEXT: %2 = add i64 %mem_base, %1 |
; CHECK-NEXT: %3 = add i64 %2, 5 |
; CHECK-NEXT: %4 = inttoptr i64 %3 to i32* |
-; CHECK-NEXT: %val = load i32* %4 |
+; CHECK-NEXT: %val = load i32, i32* %4 |
; CHECK-NEXT: %5 = zext i32 %ptr_int to i64 |
; CHECK-NEXT: %6 = add i64 %mem_base, %5 |
; CHECK-NEXT: %7 = add i64 %6, 5 |
@@ -462,7 +462,7 @@ define i32 @test_opt_dont_remove_add_if_used(i32 %ptr_int, i32 %replace) { |
} |
; CHECK-LABEL: define i32 @test_opt_dont_remove_add_if_used(i32 %ptr_int, i32 %replace) { |
-; CHECK-NEXT: %mem_base = load i64* @__sfi_memory_base |
+; CHECK-NEXT: %mem_base = load i64, i64* @__sfi_memory_base |
; CHECK-NEXT: %ptr_sum = add i32 %ptr_int, 5 |
; CHECK-NEXT: %1 = zext i32 %ptr_int to i64 |
; CHECK-NEXT: %2 = add i64 %mem_base, %1 |
@@ -482,7 +482,7 @@ define void @test_len_dbg(i8* %dest, i8* %src, i32 %len) { |
} |
; CHECK-LABEL: define void @test_len_dbg(i8* %dest, i8* %src, i32 %len) { |
-; CHECK-NEXT: %mem_base = load i64* @__sfi_memory_base |
+; CHECK-NEXT: %mem_base = load i64, i64* @__sfi_memory_base |
; CHECK-NEXT: %1 = ptrtoint i8* %dest to i32 |
; CHECK-NEXT: %2 = zext i32 %1 to i64 |
; CHECK-NEXT: %3 = add i64 %mem_base, %2 |
@@ -497,22 +497,24 @@ define void @test_len_dbg(i8* %dest, i8* %src, i32 %len) { |
define void @test_opt_dbg(i32 %ptr_int, i32 %replace) { |
%ptr_sum = add i32 %ptr_int, 5, !dbg !1 |
- %ptr = inttoptr i32 %ptr_sum to i32*, !dbg !2 |
- store i32 %replace, i32* %ptr, !dbg !3 |
- ret void, !dbg !4 |
+ %ptr = inttoptr i32 %ptr_sum to i32*, !dbg !3 |
+ store i32 %replace, i32* %ptr, !dbg !4 |
+ ret void, !dbg !5 |
} |
; CHECK-LABEL: define void @test_opt_dbg(i32 %ptr_int, i32 %replace) { |
-; CHECK-NEXT: %mem_base = load i64* @__sfi_memory_base |
+; CHECK-NEXT: %mem_base = load i64, i64* @__sfi_memory_base |
; CHECK-NEXT: %1 = zext i32 %ptr_int to i64 |
; CHECK-NEXT: %2 = add i64 %mem_base, %1 |
; CHECK-NEXT: %3 = add i64 %2, 5, !dbg !1 |
-; CHECK-NEXT: %4 = inttoptr i64 %3 to i32*, !dbg !2 |
-; CHECK-NEXT: store i32 %replace, i32* %4, !dbg !3 |
-; CHECK-NEXT: ret void, !dbg !4 |
+; CHECK-NEXT: %4 = inttoptr i64 %3 to i32*, !dbg !3 |
+; CHECK-NEXT: store i32 %replace, i32* %4, !dbg !4 |
+; CHECK-NEXT: ret void, !dbg !5 |
; CHECK-NEXT: } |
-!1 = metadata !{i32 138, i32 0, metadata !1, null} |
-!2 = metadata !{i32 142, i32 0, metadata !2, null} |
-!3 = metadata !{i32 144, i32 0, metadata !3, null} |
-!4 = metadata !{i32 144, i32 0, metadata !4, null} |
+ |
+!1 = !MDLocation(line: 1, column: 13, scope: !2) |
+!2 = !MDSubprogram(name: "foo") |
+!3 = !MDLocation(line: 2, column: 10, scope: !2) |
+!4 = !MDLocation(line: 2, column: 3, scope: !2) |
+!5 = !MDLocation(line: 23, column: 3, scope: !2) |