6431213f8be5e8a51eb3818dec8f8adca00065d3
[oota-llvm.git] / test / Instrumentation / DataFlowSanitizer / load.ll
1 ; RUN: opt < %s -dfsan -S | FileCheck %s
2 target 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
4 define 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
17 define 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
33 define 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
56 define 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 }