1; RUN: opt < %s -dfsan -S | FileCheck %s 2target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128" 3 4define i8 @load8(i8* %p) { 5 ; CHECK: @"dfs$load8" 6 ; CHECK: ptrtoint 7 ; CHECK: and 8 ; CHECK: mul 9 ; CHECK: inttoptr 10 ; CHECK: load 11 ; CHECK: store{{.*}}__dfsan_retval_tls 12 ; CHECK: ret i8 13 %a = load i8* %p 14 ret i8 %a 15} 16 17define i16 @load16(i16* %p) { 18 ; CHECK: @"dfs$load16" 19 ; CHECK: ptrtoint 20 ; CHECK: and 21 ; CHECK: mul 22 ; CHECK: inttoptr 23 ; CHECK: load 24 ; CHECK: load 25 ; CHECK: icmp ne 26 ; CHECK: call{{.*}}__dfsan_union 27 ; CHECK: store{{.*}}__dfsan_retval_tls 28 ; CHECK: ret i16 29 %a = load i16* %p 30 ret i16 %a 31} 32 33define i32 @load32(i32* %p) { 34 ; CHECK: @"dfs$load32" 35 ; CHECK: ptrtoint 36 ; CHECK: and 37 ; CHECK: mul 38 ; CHECK: inttoptr 39 ; CHECK: bitcast 40 ; CHECK: load 41 ; CHECK: trunc 42 ; CHECK: shl 43 ; CHECK: lshr 44 ; CHECK: or 45 ; CHECK: icmp eq 46 47 ; CHECK: store{{.*}}__dfsan_retval_tls 48 ; CHECK: ret i32 49 50 ; CHECK: call{{.*}}__dfsan_union_load 51 52 %a = load i32* %p 53 ret i32 %a 54} 55 56define i64 @load64(i64* %p) { 57 ; CHECK: @"dfs$load64" 58 ; CHECK: ptrtoint 59 ; CHECK: and 60 ; CHECK: mul 61 ; CHECK: inttoptr 62 ; CHECK: bitcast 63 ; CHECK: load 64 ; CHECK: trunc 65 ; CHECK: shl 66 ; CHECK: lshr 67 ; CHECK: or 68 ; CHECK: icmp eq 69 70 ; CHECK: store{{.*}}__dfsan_retval_tls 71 ; CHECK: ret i64 72 73 ; CHECK: call{{.*}}__dfsan_union_load 74 75 ; CHECK: getelementptr 76 ; CHECK: load 77 ; CHECK: icmp eq 78 79 %a = load i64* %p 80 ret i64 %a 81} 82