1 ; RUN: opt < %s -dfsan -dfsan-combine-pointer-labels-on-store=1 -S | FileCheck %s --check-prefix=COMBINE_PTR_LABEL
2 ; RUN: opt < %s -dfsan -dfsan-combine-pointer-labels-on-store=0 -S | FileCheck %s --check-prefix=NO_COMBINE_PTR_LABEL
3 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"
5 define void @store8(i8 %v, i8* %p) {
6 ; NO_COMBINE_PTR_LABEL: @"dfs$store8"
7 ; NO_COMBINE_PTR_LABEL: load i16* {{.*}} @__dfsan_arg_tls
8 ; NO_COMBINE_PTR_LABEL: ptrtoint i8* {{.*}} i64
9 ; NO_COMBINE_PTR_LABEL: and i64
10 ; NO_COMBINE_PTR_LABEL: mul i64
11 ; NO_COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
12 ; NO_COMBINE_PTR_LABEL: getelementptr i16*
13 ; NO_COMBINE_PTR_LABEL: store i16
14 ; NO_COMBINE_PTR_LABEL: store i8
16 ; COMBINE_PTR_LABEL: @"dfs$store8"
17 ; COMBINE_PTR_LABEL: load i16*
18 ; COMBINE_PTR_LABEL: load i16*
19 ; COMBINE_PTR_LABEL: icmp ne i16
20 ; COMBINE_PTR_LABEL: call {{.*}} @__dfsan_union
21 ; COMBINE_PTR_LABEL: ptrtoint i8* {{.*}} i64
22 ; COMBINE_PTR_LABEL: and i64
23 ; COMBINE_PTR_LABEL: mul i64
24 ; COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
25 ; COMBINE_PTR_LABEL: getelementptr i16*
26 ; COMBINE_PTR_LABEL: store i16
27 ; COMBINE_PTR_LABEL: store i8
33 define void @store16(i16 %v, i16* %p) {
34 ; NO_COMBINE_PTR_LABEL: @"dfs$store16"
35 ; NO_COMBINE_PTR_LABEL: load i16* {{.*}} @__dfsan_arg_tls
36 ; NO_COMBINE_PTR_LABEL: ptrtoint i16* {{.*}} i64
37 ; NO_COMBINE_PTR_LABEL: and i64
38 ; NO_COMBINE_PTR_LABEL: mul i64
39 ; NO_COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
40 ; NO_COMBINE_PTR_LABEL: getelementptr i16*
41 ; NO_COMBINE_PTR_LABEL: store i16
42 ; NO_COMBINE_PTR_LABEL: getelementptr i16*
43 ; NO_COMBINE_PTR_LABEL: store i16
44 ; NO_COMBINE_PTR_LABEL: store i16
46 ; COMBINE_PTR_LABEL: @"dfs$store16"
47 ; COMBINE_PTR_LABEL: load i16* {{.*}} @__dfsan_arg_tls
48 ; COMBINE_PTR_LABEL: load i16* {{.*}} @__dfsan_arg_tls
49 ; COMBINE_PTR_LABEL: icmp ne i16
50 ; COMBINE_PTR_LABEL: call {{.*}} @__dfsan_union
51 ; COMBINE_PTR_LABEL: ptrtoint i16* {{.*}} i64
52 ; COMBINE_PTR_LABEL: and i64
53 ; COMBINE_PTR_LABEL: mul i64
54 ; COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
55 ; COMBINE_PTR_LABEL: getelementptr i16*
56 ; COMBINE_PTR_LABEL: store i16
57 ; COMBINE_PTR_LABEL: getelementptr i16*
58 ; COMBINE_PTR_LABEL: store i16
59 ; COMBINE_PTR_LABEL: store i16
65 define void @store32(i32 %v, i32* %p) {
66 ; NO_COMBINE_PTR_LABEL: @"dfs$store32"
67 ; NO_COMBINE_PTR_LABEL: load i16* {{.*}} @__dfsan_arg_tls
68 ; NO_COMBINE_PTR_LABEL: ptrtoint i32* {{.*}} i64
69 ; NO_COMBINE_PTR_LABEL: and i64
70 ; NO_COMBINE_PTR_LABEL: mul i64
71 ; NO_COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
72 ; NO_COMBINE_PTR_LABEL: getelementptr i16*
73 ; NO_COMBINE_PTR_LABEL: store i16
74 ; NO_COMBINE_PTR_LABEL: getelementptr i16*
75 ; NO_COMBINE_PTR_LABEL: store i16
76 ; NO_COMBINE_PTR_LABEL: getelementptr i16*
77 ; NO_COMBINE_PTR_LABEL: store i16
78 ; NO_COMBINE_PTR_LABEL: getelementptr i16*
79 ; NO_COMBINE_PTR_LABEL: store i16
80 ; NO_COMBINE_PTR_LABEL: store i32
82 ; COMBINE_PTR_LABEL: @"dfs$store32"
83 ; COMBINE_PTR_LABEL: load i16* {{.*}} @__dfsan_arg_tls
84 ; COMBINE_PTR_LABEL: load i16* {{.*}} @__dfsan_arg_tls
85 ; COMBINE_PTR_LABEL: icmp ne i16
86 ; COMBINE_PTR_LABEL: call {{.*}} @__dfsan_union
87 ; COMBINE_PTR_LABEL: ptrtoint i32* {{.*}} i64
88 ; COMBINE_PTR_LABEL: and i64
89 ; COMBINE_PTR_LABEL: mul i64
90 ; COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
91 ; COMBINE_PTR_LABEL: getelementptr i16*
92 ; COMBINE_PTR_LABEL: store i16
93 ; COMBINE_PTR_LABEL: getelementptr i16*
94 ; COMBINE_PTR_LABEL: store i16
95 ; COMBINE_PTR_LABEL: getelementptr i16*
96 ; COMBINE_PTR_LABEL: store i16
97 ; COMBINE_PTR_LABEL: getelementptr i16*
98 ; COMBINE_PTR_LABEL: store i16
99 ; COMBINE_PTR_LABEL: store i32
101 store i32 %v, i32* %p
105 define void @store64(i64 %v, i64* %p) {
106 ; NO_COMBINE_PTR_LABEL: @"dfs$store64"
107 ; NO_COMBINE_PTR_LABEL: load i16* {{.*}} @__dfsan_arg_tls
108 ; NO_COMBINE_PTR_LABEL: ptrtoint i64* {{.*}} i64
109 ; NO_COMBINE_PTR_LABEL: and i64
110 ; NO_COMBINE_PTR_LABEL: mul i64
111 ; NO_COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
112 ; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
113 ; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
114 ; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
115 ; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
116 ; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
117 ; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
118 ; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
119 ; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
120 ; NO_COMBINE_PTR_LABEL: bitcast i16* {{.*}} <8 x i16>*
121 ; NO_COMBINE_PTR_LABEL: store i64
123 ; COMBINE_PTR_LABEL: @"dfs$store64"
124 ; COMBINE_PTR_LABEL: load i16* {{.*}} @__dfsan_arg_tls
125 ; COMBINE_PTR_LABEL: load i16* {{.*}} @__dfsan_arg_tls
126 ; COMBINE_PTR_LABEL: icmp ne i16
127 ; COMBINE_PTR_LABEL: call {{.*}} @__dfsan_union
128 ; COMBINE_PTR_LABEL: ptrtoint i64* {{.*}} i64
129 ; COMBINE_PTR_LABEL: and i64
130 ; COMBINE_PTR_LABEL: mul i64
131 ; COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
132 ; COMBINE_PTR_LABEL: insertelement {{.*}} i16
133 ; COMBINE_PTR_LABEL: insertelement {{.*}} i16
134 ; COMBINE_PTR_LABEL: insertelement {{.*}} i16
135 ; COMBINE_PTR_LABEL: insertelement {{.*}} i16
136 ; COMBINE_PTR_LABEL: insertelement {{.*}} i16
137 ; COMBINE_PTR_LABEL: insertelement {{.*}} i16
138 ; COMBINE_PTR_LABEL: insertelement {{.*}} i16
139 ; COMBINE_PTR_LABEL: insertelement {{.*}} i16
140 ; COMBINE_PTR_LABEL: bitcast i16* {{.*}} <8 x i16>*
141 ; COMBINE_PTR_LABEL: store <8 x i16>
142 ; COMBINE_PTR_LABEL: store i64
144 store i64 %v, i64* %p