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 @store0({} %v, {}* %p) {
6 ; COMBINE_PTR_LABEL: @"dfs$store0"
7 ; COMBINE_PTR_LABEL: store
8 ; COMBINE_PTR_LABEL-NOT: store
10 ; NO_COMBINE_PTR_LABEL: @"dfs$store0"
11 ; NO_COMBINE_PTR_LABEL: store
12 ; NO_COMBINE_PTR_LABEL-NOT: store
18 define void @store8(i8 %v, i8* %p) {
19 ; NO_COMBINE_PTR_LABEL: @"dfs$store8"
20 ; NO_COMBINE_PTR_LABEL: load i16* {{.*}} @__dfsan_arg_tls
21 ; NO_COMBINE_PTR_LABEL: ptrtoint i8* {{.*}} i64
22 ; NO_COMBINE_PTR_LABEL: and i64
23 ; NO_COMBINE_PTR_LABEL: mul i64
24 ; NO_COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
25 ; NO_COMBINE_PTR_LABEL: getelementptr i16*
26 ; NO_COMBINE_PTR_LABEL: store i16
27 ; NO_COMBINE_PTR_LABEL: store i8
29 ; COMBINE_PTR_LABEL: @"dfs$store8"
30 ; COMBINE_PTR_LABEL: load i16*
31 ; COMBINE_PTR_LABEL: load i16*
32 ; COMBINE_PTR_LABEL: icmp ne i16
33 ; COMBINE_PTR_LABEL: call {{.*}} @__dfsan_union
34 ; COMBINE_PTR_LABEL: ptrtoint i8* {{.*}} i64
35 ; COMBINE_PTR_LABEL: and i64
36 ; COMBINE_PTR_LABEL: mul i64
37 ; COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
38 ; COMBINE_PTR_LABEL: getelementptr i16*
39 ; COMBINE_PTR_LABEL: store i16
40 ; COMBINE_PTR_LABEL: store i8
46 define void @store16(i16 %v, i16* %p) {
47 ; NO_COMBINE_PTR_LABEL: @"dfs$store16"
48 ; NO_COMBINE_PTR_LABEL: load i16* {{.*}} @__dfsan_arg_tls
49 ; NO_COMBINE_PTR_LABEL: ptrtoint i16* {{.*}} i64
50 ; NO_COMBINE_PTR_LABEL: and i64
51 ; NO_COMBINE_PTR_LABEL: mul i64
52 ; NO_COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
53 ; NO_COMBINE_PTR_LABEL: getelementptr i16*
54 ; NO_COMBINE_PTR_LABEL: store i16
55 ; NO_COMBINE_PTR_LABEL: getelementptr i16*
56 ; NO_COMBINE_PTR_LABEL: store i16
57 ; NO_COMBINE_PTR_LABEL: store i16
59 ; COMBINE_PTR_LABEL: @"dfs$store16"
60 ; COMBINE_PTR_LABEL: load i16* {{.*}} @__dfsan_arg_tls
61 ; COMBINE_PTR_LABEL: load i16* {{.*}} @__dfsan_arg_tls
62 ; COMBINE_PTR_LABEL: icmp ne i16
63 ; COMBINE_PTR_LABEL: call {{.*}} @__dfsan_union
64 ; COMBINE_PTR_LABEL: ptrtoint i16* {{.*}} i64
65 ; COMBINE_PTR_LABEL: and i64
66 ; COMBINE_PTR_LABEL: mul i64
67 ; COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
68 ; COMBINE_PTR_LABEL: getelementptr i16*
69 ; COMBINE_PTR_LABEL: store i16
70 ; COMBINE_PTR_LABEL: getelementptr i16*
71 ; COMBINE_PTR_LABEL: store i16
72 ; COMBINE_PTR_LABEL: store i16
78 define void @store32(i32 %v, i32* %p) {
79 ; NO_COMBINE_PTR_LABEL: @"dfs$store32"
80 ; NO_COMBINE_PTR_LABEL: load i16* {{.*}} @__dfsan_arg_tls
81 ; NO_COMBINE_PTR_LABEL: ptrtoint i32* {{.*}} i64
82 ; NO_COMBINE_PTR_LABEL: and i64
83 ; NO_COMBINE_PTR_LABEL: mul i64
84 ; NO_COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
85 ; NO_COMBINE_PTR_LABEL: getelementptr i16*
86 ; NO_COMBINE_PTR_LABEL: store i16
87 ; NO_COMBINE_PTR_LABEL: getelementptr i16*
88 ; NO_COMBINE_PTR_LABEL: store i16
89 ; NO_COMBINE_PTR_LABEL: getelementptr i16*
90 ; NO_COMBINE_PTR_LABEL: store i16
91 ; NO_COMBINE_PTR_LABEL: getelementptr i16*
92 ; NO_COMBINE_PTR_LABEL: store i16
93 ; NO_COMBINE_PTR_LABEL: store i32
95 ; COMBINE_PTR_LABEL: @"dfs$store32"
96 ; COMBINE_PTR_LABEL: load i16* {{.*}} @__dfsan_arg_tls
97 ; COMBINE_PTR_LABEL: load i16* {{.*}} @__dfsan_arg_tls
98 ; COMBINE_PTR_LABEL: icmp ne i16
99 ; COMBINE_PTR_LABEL: call {{.*}} @__dfsan_union
100 ; COMBINE_PTR_LABEL: ptrtoint i32* {{.*}} i64
101 ; COMBINE_PTR_LABEL: and i64
102 ; COMBINE_PTR_LABEL: mul i64
103 ; COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
104 ; COMBINE_PTR_LABEL: getelementptr i16*
105 ; COMBINE_PTR_LABEL: store i16
106 ; COMBINE_PTR_LABEL: getelementptr i16*
107 ; COMBINE_PTR_LABEL: store i16
108 ; COMBINE_PTR_LABEL: getelementptr i16*
109 ; COMBINE_PTR_LABEL: store i16
110 ; COMBINE_PTR_LABEL: getelementptr i16*
111 ; COMBINE_PTR_LABEL: store i16
112 ; COMBINE_PTR_LABEL: store i32
114 store i32 %v, i32* %p
118 define void @store64(i64 %v, i64* %p) {
119 ; NO_COMBINE_PTR_LABEL: @"dfs$store64"
120 ; NO_COMBINE_PTR_LABEL: load i16* {{.*}} @__dfsan_arg_tls
121 ; NO_COMBINE_PTR_LABEL: ptrtoint i64* {{.*}} i64
122 ; NO_COMBINE_PTR_LABEL: and i64
123 ; NO_COMBINE_PTR_LABEL: mul i64
124 ; NO_COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
125 ; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
126 ; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
127 ; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
128 ; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
129 ; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
130 ; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
131 ; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
132 ; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
133 ; NO_COMBINE_PTR_LABEL: bitcast i16* {{.*}} <8 x i16>*
134 ; NO_COMBINE_PTR_LABEL: store i64
136 ; COMBINE_PTR_LABEL: @"dfs$store64"
137 ; COMBINE_PTR_LABEL: load i16* {{.*}} @__dfsan_arg_tls
138 ; COMBINE_PTR_LABEL: load i16* {{.*}} @__dfsan_arg_tls
139 ; COMBINE_PTR_LABEL: icmp ne i16
140 ; COMBINE_PTR_LABEL: call {{.*}} @__dfsan_union
141 ; COMBINE_PTR_LABEL: ptrtoint i64* {{.*}} i64
142 ; COMBINE_PTR_LABEL: and i64
143 ; COMBINE_PTR_LABEL: mul i64
144 ; COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
145 ; COMBINE_PTR_LABEL: insertelement {{.*}} i16
146 ; COMBINE_PTR_LABEL: insertelement {{.*}} i16
147 ; COMBINE_PTR_LABEL: insertelement {{.*}} i16
148 ; COMBINE_PTR_LABEL: insertelement {{.*}} i16
149 ; COMBINE_PTR_LABEL: insertelement {{.*}} i16
150 ; COMBINE_PTR_LABEL: insertelement {{.*}} i16
151 ; COMBINE_PTR_LABEL: insertelement {{.*}} i16
152 ; COMBINE_PTR_LABEL: insertelement {{.*}} i16
153 ; COMBINE_PTR_LABEL: bitcast i16* {{.*}} <8 x i16>*
154 ; COMBINE_PTR_LABEL: store <8 x i16>
155 ; COMBINE_PTR_LABEL: store i64
157 store i64 %v, i64* %p