1*9880d681SAndroid Build Coastguard Worker; Test that the scale (-asan-mapping-scale) and offset (-asan-mapping-offset) command-line options work as expected 2*9880d681SAndroid Build Coastguard Worker; 3*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -asan -asan-module -asan-mapping-offset 0xdeadbeef -S | FileCheck --check-prefix=CHECK-OFFSET %s 4*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -asan -asan-module -asan-mapping-scale 1 -S | FileCheck --check-prefix=CHECK-SCALE %s 5*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -asan -asan-module -asan-mapping-offset 0xc0ffee -asan-mapping-scale 0 -S | FileCheck --check-prefix=CHECK-BOTH %s 6*9880d681SAndroid Build Coastguard Workertarget triple = "x86_64-unknown-linux-gnu" 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Workerdefine i32 @read_offset(i32* %a) sanitize_address { 9*9880d681SAndroid Build Coastguard Workerentry: 10*9880d681SAndroid Build Coastguard Worker %tmp1 = load i32, i32* %a, align 4 11*9880d681SAndroid Build Coastguard Worker ret i32 %tmp1 12*9880d681SAndroid Build Coastguard Worker} 13*9880d681SAndroid Build Coastguard Worker; CHECK-OFFSET-LABEL: @read_offset 14*9880d681SAndroid Build Coastguard Worker; CHECK-OFFSET-NOT: ret 15*9880d681SAndroid Build Coastguard Worker; CHECK-OFFSET: lshr {{.*}} 3 16*9880d681SAndroid Build Coastguard Worker; CHECK-OFFSET-NEXT: add{{.*}}3735928559 17*9880d681SAndroid Build Coastguard Worker; CHECK-OFFSET: ret 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Workerdefine i32 @read_scale(i32* %a) sanitize_address { 20*9880d681SAndroid Build Coastguard Workerentry: 21*9880d681SAndroid Build Coastguard Worker %tmp1 = load i32, i32* %a, align 4 22*9880d681SAndroid Build Coastguard Worker ret i32 %tmp1 23*9880d681SAndroid Build Coastguard Worker} 24*9880d681SAndroid Build Coastguard Worker; CHECK-SCALE-LABEL: @read_scale 25*9880d681SAndroid Build Coastguard Worker; CHECK-SCALE-NOT: ret 26*9880d681SAndroid Build Coastguard Worker; CHECK-SCALE: lshr {{.*}} 1 27*9880d681SAndroid Build Coastguard Worker; CHECK-SCALE-NEXT: add{{.*}} 28*9880d681SAndroid Build Coastguard Worker; CHECK-SCALE: ret 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Workerdefine i32 @read_both(i32* %a) sanitize_address { 31*9880d681SAndroid Build Coastguard Workerentry: 32*9880d681SAndroid Build Coastguard Worker %tmp1 = load i32, i32* %a, align 4 33*9880d681SAndroid Build Coastguard Worker ret i32 %tmp1 34*9880d681SAndroid Build Coastguard Worker} 35*9880d681SAndroid Build Coastguard Worker; CHECK-BOTH-LABEL: @read_both 36*9880d681SAndroid Build Coastguard Worker; CHECK-BOTH-NOT: ret 37*9880d681SAndroid Build Coastguard Worker; CHECK-BOTH: lshr {{.*}} 0 38*9880d681SAndroid Build Coastguard Worker; CHECK-BOTH-NEXT: add{{.*}}12648430 39*9880d681SAndroid Build Coastguard Worker; CHECK-BOTH: ret 40