]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/Instrumentation/DataFlowSanitizer/store.ll
Vendor import of llvm RELEASE_350/final tag r216957 (effectively, 3.5.0 release):
[FreeBSD/FreeBSD.git] / test / Instrumentation / DataFlowSanitizer / store.ll
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"
4
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
15
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
28
29   store i8 %v, i8* %p
30   ret void
31 }
32
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
45
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
60
61   store i16 %v, i16* %p
62   ret void
63 }
64
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
81
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
100
101   store i32 %v, i32* %p
102   ret void
103 }
104
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
122
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
143
144   store i64 %v, i64* %p
145   ret void
146 }