xref: /illumos-gate/usr/src/tools/smatch/src/validation/linear/logical.c (revision b531f6d16eb39863e7bbc34773fb7ef7a282a0a2)
1 struct S {
2 	         int  :1;
3 	  signed int s:2;
4 	unsigned int u:3;
5 	        long l;
6 	      double d;
7 };
8 
9 int os(int i, struct S *b) { return i || b->s; }
10 int ou(int i, struct S *b) { return i || b->u; }
11 int ol(int i, struct S *b) { return i || b->l; }
12 int od(int i, struct S *b) { return i || b->d; }
13 
14 int as(int i, struct S *b) { return i && b->s; }
15 int au(int i, struct S *b) { return i && b->u; }
16 int al(int i, struct S *b) { return i && b->l; }
17 int ad(int i, struct S *b) { return i && b->d; }
18 
19 /*
20  * check-name: logical
21  * check-command: test-linearize -m64 -fdump-ir -Wno-decl $file
22  * check-assert: sizeof(void *) == 8 && sizeof(long) == 8 && sizeof(double) == 8
23  *
24  * check-output-start
25 os:
26 .L0:
27 	<entry-point>
28 	store.32    %arg1 -> 0[i]
29 	store.64    %arg2 -> 0[b]
30 	load.32     %r2 <- 0[i]
31 	setne.1     %r3 <- %r2, $0
32 	phisrc.32   %phi1 <- $1
33 	cbr         %r3, .L3, .L2
34 
35 .L2:
36 	load.64     %r4 <- 0[b]
37 	load.32     %r5 <- 0[%r4]
38 	lsr.32      %r6 <- %r5, $1
39 	trunc.2     %r7 <- (32) %r6
40 	setne.1     %r8 <- %r7, $0
41 	zext.32     %r9 <- (1) %r8
42 	phisrc.32   %phi2 <- %r9
43 	br          .L3
44 
45 .L3:
46 	phi.32      %r1 <- %phi1, %phi2
47 	phisrc.32   %phi3(return) <- %r1
48 	br          .L1
49 
50 .L1:
51 	phi.32      %r10 <- %phi3(return)
52 	ret.32      %r10
53 
54 
55 ou:
56 .L4:
57 	<entry-point>
58 	store.32    %arg1 -> 0[i]
59 	store.64    %arg2 -> 0[b]
60 	load.32     %r12 <- 0[i]
61 	setne.1     %r13 <- %r12, $0
62 	phisrc.32   %phi4 <- $1
63 	cbr         %r13, .L7, .L6
64 
65 .L6:
66 	load.64     %r14 <- 0[b]
67 	load.32     %r15 <- 0[%r14]
68 	lsr.32      %r16 <- %r15, $3
69 	trunc.3     %r17 <- (32) %r16
70 	setne.1     %r18 <- %r17, $0
71 	zext.32     %r19 <- (1) %r18
72 	phisrc.32   %phi5 <- %r19
73 	br          .L7
74 
75 .L7:
76 	phi.32      %r11 <- %phi4, %phi5
77 	phisrc.32   %phi6(return) <- %r11
78 	br          .L5
79 
80 .L5:
81 	phi.32      %r20 <- %phi6(return)
82 	ret.32      %r20
83 
84 
85 ol:
86 .L8:
87 	<entry-point>
88 	store.32    %arg1 -> 0[i]
89 	store.64    %arg2 -> 0[b]
90 	load.32     %r22 <- 0[i]
91 	setne.1     %r23 <- %r22, $0
92 	phisrc.32   %phi7 <- $1
93 	cbr         %r23, .L11, .L10
94 
95 .L10:
96 	load.64     %r24 <- 0[b]
97 	load.64     %r25 <- 8[%r24]
98 	setne.1     %r26 <- %r25, $0
99 	zext.32     %r27 <- (1) %r26
100 	phisrc.32   %phi8 <- %r27
101 	br          .L11
102 
103 .L11:
104 	phi.32      %r21 <- %phi7, %phi8
105 	phisrc.32   %phi9(return) <- %r21
106 	br          .L9
107 
108 .L9:
109 	phi.32      %r28 <- %phi9(return)
110 	ret.32      %r28
111 
112 
113 od:
114 .L12:
115 	<entry-point>
116 	store.32    %arg1 -> 0[i]
117 	store.64    %arg2 -> 0[b]
118 	load.32     %r30 <- 0[i]
119 	setne.1     %r31 <- %r30, $0
120 	phisrc.32   %phi10 <- $1
121 	cbr         %r31, .L15, .L14
122 
123 .L14:
124 	load.64     %r32 <- 0[b]
125 	load.64     %r33 <- 16[%r32]
126 	setfval.64  %r34 <- 0.000000e+00
127 	fcmpune.1   %r35 <- %r33, %r34
128 	zext.32     %r36 <- (1) %r35
129 	phisrc.32   %phi11 <- %r36
130 	br          .L15
131 
132 .L15:
133 	phi.32      %r29 <- %phi10, %phi11
134 	phisrc.32   %phi12(return) <- %r29
135 	br          .L13
136 
137 .L13:
138 	phi.32      %r37 <- %phi12(return)
139 	ret.32      %r37
140 
141 
142 as:
143 .L16:
144 	<entry-point>
145 	store.32    %arg1 -> 0[i]
146 	store.64    %arg2 -> 0[b]
147 	load.32     %r39 <- 0[i]
148 	setne.1     %r40 <- %r39, $0
149 	phisrc.32   %phi13 <- $0
150 	cbr         %r40, .L18, .L19
151 
152 .L18:
153 	load.64     %r41 <- 0[b]
154 	load.32     %r42 <- 0[%r41]
155 	lsr.32      %r43 <- %r42, $1
156 	trunc.2     %r44 <- (32) %r43
157 	setne.1     %r45 <- %r44, $0
158 	zext.32     %r46 <- (1) %r45
159 	phisrc.32   %phi14 <- %r46
160 	br          .L19
161 
162 .L19:
163 	phi.32      %r38 <- %phi13, %phi14
164 	phisrc.32   %phi15(return) <- %r38
165 	br          .L17
166 
167 .L17:
168 	phi.32      %r47 <- %phi15(return)
169 	ret.32      %r47
170 
171 
172 au:
173 .L20:
174 	<entry-point>
175 	store.32    %arg1 -> 0[i]
176 	store.64    %arg2 -> 0[b]
177 	load.32     %r49 <- 0[i]
178 	setne.1     %r50 <- %r49, $0
179 	phisrc.32   %phi16 <- $0
180 	cbr         %r50, .L22, .L23
181 
182 .L22:
183 	load.64     %r51 <- 0[b]
184 	load.32     %r52 <- 0[%r51]
185 	lsr.32      %r53 <- %r52, $3
186 	trunc.3     %r54 <- (32) %r53
187 	setne.1     %r55 <- %r54, $0
188 	zext.32     %r56 <- (1) %r55
189 	phisrc.32   %phi17 <- %r56
190 	br          .L23
191 
192 .L23:
193 	phi.32      %r48 <- %phi16, %phi17
194 	phisrc.32   %phi18(return) <- %r48
195 	br          .L21
196 
197 .L21:
198 	phi.32      %r57 <- %phi18(return)
199 	ret.32      %r57
200 
201 
202 al:
203 .L24:
204 	<entry-point>
205 	store.32    %arg1 -> 0[i]
206 	store.64    %arg2 -> 0[b]
207 	load.32     %r59 <- 0[i]
208 	setne.1     %r60 <- %r59, $0
209 	phisrc.32   %phi19 <- $0
210 	cbr         %r60, .L26, .L27
211 
212 .L26:
213 	load.64     %r61 <- 0[b]
214 	load.64     %r62 <- 8[%r61]
215 	setne.1     %r63 <- %r62, $0
216 	zext.32     %r64 <- (1) %r63
217 	phisrc.32   %phi20 <- %r64
218 	br          .L27
219 
220 .L27:
221 	phi.32      %r58 <- %phi19, %phi20
222 	phisrc.32   %phi21(return) <- %r58
223 	br          .L25
224 
225 .L25:
226 	phi.32      %r65 <- %phi21(return)
227 	ret.32      %r65
228 
229 
230 ad:
231 .L28:
232 	<entry-point>
233 	store.32    %arg1 -> 0[i]
234 	store.64    %arg2 -> 0[b]
235 	load.32     %r67 <- 0[i]
236 	setne.1     %r68 <- %r67, $0
237 	phisrc.32   %phi22 <- $0
238 	cbr         %r68, .L30, .L31
239 
240 .L30:
241 	load.64     %r69 <- 0[b]
242 	load.64     %r70 <- 16[%r69]
243 	setfval.64  %r71 <- 0.000000e+00
244 	fcmpune.1   %r72 <- %r70, %r71
245 	zext.32     %r73 <- (1) %r72
246 	phisrc.32   %phi23 <- %r73
247 	br          .L31
248 
249 .L31:
250 	phi.32      %r66 <- %phi22, %phi23
251 	phisrc.32   %phi24(return) <- %r66
252 	br          .L29
253 
254 .L29:
255 	phi.32      %r74 <- %phi24(return)
256 	ret.32      %r74
257 
258 
259  * check-output-end
260  */
261