summaryrefslogtreecommitdiffstats
path: root/llvm/test/Instrumentation/AddressSanitizer/scale-offset.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/Instrumentation/AddressSanitizer/scale-offset.ll')
-rw-r--r--llvm/test/Instrumentation/AddressSanitizer/scale-offset.ll39
1 files changed, 39 insertions, 0 deletions
diff --git a/llvm/test/Instrumentation/AddressSanitizer/scale-offset.ll b/llvm/test/Instrumentation/AddressSanitizer/scale-offset.ll
new file mode 100644
index 00000000000..8345586fec4
--- /dev/null
+++ b/llvm/test/Instrumentation/AddressSanitizer/scale-offset.ll
@@ -0,0 +1,39 @@
+; Test that the scale (-asan-mapping-scale) and offset (-asan-mapping-offset) command-line options work as expected
+;
+; RUN: opt < %s -asan -asan-module -asan-mapping-offset 0xdeadbeef -S | FileCheck --check-prefix=CHECK-OFFSET %s
+; RUN: opt < %s -asan -asan-module -asan-mapping-scale 1 -S | FileCheck --check-prefix=CHECK-SCALE %s
+; RUN: opt < %s -asan -asan-module -asan-mapping-offset 0xc0ffee -asan-mapping-scale 0 -S | FileCheck --check-prefix=CHECK-BOTH %s
+target triple = "x86_64-unknown-linux-gnu"
+
+define i32 @read_offset(i32* %a) sanitize_address {
+entry:
+ %tmp1 = load i32, i32* %a, align 4
+ ret i32 %tmp1
+}
+; CHECK-OFFSET-LABEL: @read_offset
+; CHECK-OFFSET-NOT: ret
+; CHECK-OFFSET: lshr {{.*}} 3
+; CHECK-OFFSET-NEXT: add{{.*}}3735928559
+; CHECK-OFFSET: ret
+
+define i32 @read_scale(i32* %a) sanitize_address {
+entry:
+ %tmp1 = load i32, i32* %a, align 4
+ ret i32 %tmp1
+}
+; CHECK-SCALE-LABEL: @read_scale
+; CHECK-SCALE-NOT: ret
+; CHECK-SCALE: lshr {{.*}} 1
+; CHECK-SCALE-NEXT: add{{.*}}
+; CHECK-SCALE: ret
+
+define i32 @read_both(i32* %a) sanitize_address {
+entry:
+ %tmp1 = load i32, i32* %a, align 4
+ ret i32 %tmp1
+}
+; CHECK-BOTH-LABEL: @read_both
+; CHECK-BOTH-NOT: ret
+; CHECK-BOTH: lshr {{.*}} 0
+; CHECK-BOTH-NEXT: add{{.*}}12648430
+; CHECK-BOTH: ret
OpenPOWER on IntegriCloud