blob: b16571eb50700002d585f5af228165fe81062f4c [file] [log] [blame]
Chandler Carruth4b611a82017-08-25 22:50:52 +00001; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
Chandler Carruth52a31bf2017-09-07 23:54:24 +00002; RUN: llc < %s -verify-machineinstrs -show-mc-encoding | FileCheck %s
Chandler Carruth4b611a82017-08-25 22:50:52 +00003
4target triple = "x86_64-unknown-unknown"
5
6@g64 = external global i64, align 8
7@g32 = external global i32, align 4
8@g16 = external global i16, align 2
9@g8 = external global i8, align 1
10
11declare void @a()
12declare void @b()
13
Chandler Carruth52a31bf2017-09-07 23:54:24 +000014define void @add64_imm32_br() nounwind {
15; CHECK-LABEL: add64_imm32_br:
Chandler Carruth4b611a82017-08-25 22:50:52 +000016; CHECK: # BB#0: # %entry
Chandler Carruth52a31bf2017-09-07 23:54:24 +000017; CHECK-NEXT: addq $16777214, {{.*}}(%rip) # encoding: [0x48,0x81,0x05,A,A,A,A,0xfe,0xff,0xff,0x00]
18; CHECK-NEXT: # fixup A - offset: 3, value: g64-8, kind: reloc_riprel_4byte
19; CHECK-NEXT: # imm = 0xFFFFFE
20; CHECK-NEXT: js .LBB0_1 # encoding: [0x78,A]
21; CHECK-NEXT: # fixup A - offset: 1, value: .LBB0_1-1, kind: FK_PCRel_1
Chandler Carruth4b611a82017-08-25 22:50:52 +000022; CHECK-NEXT: # BB#2: # %b
23; CHECK-NEXT: jmp b # TAILCALL
Chandler Carruth52a31bf2017-09-07 23:54:24 +000024; CHECK-NEXT: # encoding: [0xeb,A]
25; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
Chandler Carruth4b611a82017-08-25 22:50:52 +000026; CHECK-NEXT: .LBB0_1: # %a
27; CHECK-NEXT: jmp a # TAILCALL
Chandler Carruth52a31bf2017-09-07 23:54:24 +000028; CHECK-NEXT: # encoding: [0xeb,A]
29; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
Chandler Carruth4b611a82017-08-25 22:50:52 +000030entry:
31 %load1 = load i64, i64* @g64
Chandler Carruth52a31bf2017-09-07 23:54:24 +000032 ; Add 0x00FFFFFE, a positive immediate requiring 24-bits.
33 %add = add i64 %load1, 16777214
34 store i64 %add, i64* @g64
35 %cond = icmp slt i64 %add, 0
36 br i1 %cond, label %a, label %b
37
38a:
39 tail call void @a()
40 ret void
41
42b:
43 tail call void @b()
44 ret void
45}
46
47define void @add64_sext_imm32_br() nounwind {
48; CHECK-LABEL: add64_sext_imm32_br:
49; CHECK: # BB#0: # %entry
50; CHECK-NEXT: addq $-2147483648, {{.*}}(%rip) # encoding: [0x48,0x81,0x05,A,A,A,A,0x00,0x00,0x00,0x80]
51; CHECK-NEXT: # fixup A - offset: 3, value: g64-8, kind: reloc_riprel_4byte
52; CHECK-NEXT: # imm = 0x80000000
53; CHECK-NEXT: js .LBB1_1 # encoding: [0x78,A]
54; CHECK-NEXT: # fixup A - offset: 1, value: .LBB1_1-1, kind: FK_PCRel_1
55; CHECK-NEXT: # BB#2: # %b
56; CHECK-NEXT: jmp b # TAILCALL
57; CHECK-NEXT: # encoding: [0xeb,A]
58; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
59; CHECK-NEXT: .LBB1_1: # %a
60; CHECK-NEXT: jmp a # TAILCALL
61; CHECK-NEXT: # encoding: [0xeb,A]
62; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
63entry:
64 %load1 = load i64, i64* @g64
65 ; Add -0x80000000, which requires sign-extended 32 bits.
66 %add = add i64 %load1, -2147483648
67 store i64 %add, i64* @g64
68 %cond = icmp slt i64 %add, 0
69 br i1 %cond, label %a, label %b
70
71a:
72 tail call void @a()
73 ret void
74
75b:
76 tail call void @b()
77 ret void
78}
79
80define void @add64_imm32_via_sub_br() nounwind {
81; CHECK-LABEL: add64_imm32_via_sub_br:
82; CHECK: # BB#0: # %entry
83; CHECK-NEXT: subq $-2147483648, {{.*}}(%rip) # encoding: [0x48,0x81,0x2d,A,A,A,A,0x00,0x00,0x00,0x80]
84; CHECK-NEXT: # fixup A - offset: 3, value: g64-8, kind: reloc_riprel_4byte
85; CHECK-NEXT: # imm = 0x80000000
86; CHECK-NEXT: js .LBB2_1 # encoding: [0x78,A]
87; CHECK-NEXT: # fixup A - offset: 1, value: .LBB2_1-1, kind: FK_PCRel_1
88; CHECK-NEXT: # BB#2: # %b
89; CHECK-NEXT: jmp b # TAILCALL
90; CHECK-NEXT: # encoding: [0xeb,A]
91; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
92; CHECK-NEXT: .LBB2_1: # %a
93; CHECK-NEXT: jmp a # TAILCALL
94; CHECK-NEXT: # encoding: [0xeb,A]
95; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
96entry:
97 %load1 = load i64, i64* @g64
98 ; Add 0x80000000, which cannot fit in a sign extended 32-bit immediate. This
99 ; get's folded because we can instead subtract -0x80000000.
100 %add = add i64 %load1, 2147483648
101 store i64 %add, i64* @g64
102 %cond = icmp slt i64 %add, 0
103 br i1 %cond, label %a, label %b
104
105a:
106 tail call void @a()
107 ret void
108
109b:
110 tail call void @b()
111 ret void
112}
113
114define void @add64_no_imm32_via_sub_due_to_cf_br() nounwind {
115; CHECK-LABEL: add64_no_imm32_via_sub_due_to_cf_br:
116; CHECK: # BB#0: # %entry
117; CHECK-NEXT: movl $2147483648, %eax # encoding: [0xb8,0x00,0x00,0x00,0x80]
118; CHECK-NEXT: # imm = 0x80000000
119; CHECK-NEXT: addq %rax, {{.*}}(%rip) # encoding: [0x48,0x01,0x05,A,A,A,A]
120; CHECK-NEXT: # fixup A - offset: 3, value: g64-4, kind: reloc_riprel_4byte
121; CHECK-NEXT: jae .LBB3_2 # encoding: [0x73,A]
122; CHECK-NEXT: # fixup A - offset: 1, value: .LBB3_2-1, kind: FK_PCRel_1
123; CHECK-NEXT: # BB#1: # %a
124; CHECK-NEXT: jmp a # TAILCALL
125; CHECK-NEXT: # encoding: [0xeb,A]
126; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
127; CHECK-NEXT: .LBB3_2: # %b
128; CHECK-NEXT: jmp b # TAILCALL
129; CHECK-NEXT: # encoding: [0xeb,A]
130; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
131entry:
132 %load1 = load i64, i64* @g64
133 ; Add 0x80000000, which cannot fit in a sign extended 32-bit immediate, but
134 ; could in theory be folded into an immediate operand of a sub. However, we
135 ; use the CF flag here and so shouldn't make that transformation.
136 %add = add i64 %load1, 2147483648
137 store i64 %add, i64* @g64
138 %cond = icmp ult i64 %add, 2147483648
139 br i1 %cond, label %a, label %b
140
141a:
142 tail call void @a()
143 ret void
144
145b:
146 tail call void @b()
147 ret void
148}
149
150define void @add64_too_large_imm32_br() nounwind {
151; CHECK-LABEL: add64_too_large_imm32_br:
152; CHECK: # BB#0: # %entry
153; CHECK-NEXT: movl $2147483649, %eax # encoding: [0xb8,0x01,0x00,0x00,0x80]
154; CHECK-NEXT: # imm = 0x80000001
155; CHECK-NEXT: addq %rax, {{.*}}(%rip) # encoding: [0x48,0x01,0x05,A,A,A,A]
156; CHECK-NEXT: # fixup A - offset: 3, value: g64-4, kind: reloc_riprel_4byte
157; CHECK-NEXT: js .LBB4_1 # encoding: [0x78,A]
158; CHECK-NEXT: # fixup A - offset: 1, value: .LBB4_1-1, kind: FK_PCRel_1
159; CHECK-NEXT: # BB#2: # %b
160; CHECK-NEXT: jmp b # TAILCALL
161; CHECK-NEXT: # encoding: [0xeb,A]
162; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
163; CHECK-NEXT: .LBB4_1: # %a
164; CHECK-NEXT: jmp a # TAILCALL
165; CHECK-NEXT: # encoding: [0xeb,A]
166; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
167entry:
168 %load1 = load i64, i64* @g64
169 ; Add 0x80000001, which cannot fit in a sign extended 32-bit immediate. This
170 ; should not get folded into an immediate.
171 %add = add i64 %load1, 2147483649
172 store i64 %add, i64* @g64
173 %cond = icmp slt i64 %add, 0
174 br i1 %cond, label %a, label %b
175
176a:
177 tail call void @a()
178 ret void
179
180b:
181 tail call void @b()
182 ret void
183}
184
185define void @add64_imm8_via_sub_br() nounwind {
186; CHECK-LABEL: add64_imm8_via_sub_br:
187; CHECK: # BB#0: # %entry
188; CHECK-NEXT: subq $-128, {{.*}}(%rip) # encoding: [0x48,0x83,0x2d,A,A,A,A,0x80]
189; CHECK-NEXT: # fixup A - offset: 3, value: g64-5, kind: reloc_riprel_4byte
190; CHECK-NEXT: js .LBB5_1 # encoding: [0x78,A]
191; CHECK-NEXT: # fixup A - offset: 1, value: .LBB5_1-1, kind: FK_PCRel_1
192; CHECK-NEXT: # BB#2: # %b
193; CHECK-NEXT: jmp b # TAILCALL
194; CHECK-NEXT: # encoding: [0xeb,A]
195; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
196; CHECK-NEXT: .LBB5_1: # %a
197; CHECK-NEXT: jmp a # TAILCALL
198; CHECK-NEXT: # encoding: [0xeb,A]
199; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
200entry:
201 %load1 = load i64, i64* @g64
202 ; Add 0x80 which can't quite fit into an imm8 because it would be sign
203 ; extended, but which can fit if we convert to a sub and negate the value.
204 %add = add i64 %load1, 128
205 store i64 %add, i64* @g64
206 %cond = icmp slt i64 %add, 0
207 br i1 %cond, label %a, label %b
208
209a:
210 tail call void @a()
211 ret void
212
213b:
214 tail call void @b()
215 ret void
216}
217
218define void @add64_imm8_br() nounwind {
219; CHECK-LABEL: add64_imm8_br:
220; CHECK: # BB#0: # %entry
221; CHECK-NEXT: addq $42, {{.*}}(%rip) # encoding: [0x48,0x83,0x05,A,A,A,A,0x2a]
222; CHECK-NEXT: # fixup A - offset: 3, value: g64-5, kind: reloc_riprel_4byte
223; CHECK-NEXT: js .LBB6_1 # encoding: [0x78,A]
224; CHECK-NEXT: # fixup A - offset: 1, value: .LBB6_1-1, kind: FK_PCRel_1
225; CHECK-NEXT: # BB#2: # %b
226; CHECK-NEXT: jmp b # TAILCALL
227; CHECK-NEXT: # encoding: [0xeb,A]
228; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
229; CHECK-NEXT: .LBB6_1: # %a
230; CHECK-NEXT: jmp a # TAILCALL
231; CHECK-NEXT: # encoding: [0xeb,A]
232; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
233entry:
234 %load1 = load i64, i64* @g64
235 %add = add i64 %load1, 42
236 store i64 %add, i64* @g64
237 %cond = icmp slt i64 %add, 0
238 br i1 %cond, label %a, label %b
239
240a:
241 tail call void @a()
242 ret void
243
244b:
245 tail call void @b()
246 ret void
247}
248
249define void @add64_imm8_neg_br() nounwind {
250; CHECK-LABEL: add64_imm8_neg_br:
251; CHECK: # BB#0: # %entry
252; CHECK-NEXT: addq $-42, {{.*}}(%rip) # encoding: [0x48,0x83,0x05,A,A,A,A,0xd6]
253; CHECK-NEXT: # fixup A - offset: 3, value: g64-5, kind: reloc_riprel_4byte
254; CHECK-NEXT: js .LBB7_1 # encoding: [0x78,A]
255; CHECK-NEXT: # fixup A - offset: 1, value: .LBB7_1-1, kind: FK_PCRel_1
256; CHECK-NEXT: # BB#2: # %b
257; CHECK-NEXT: jmp b # TAILCALL
258; CHECK-NEXT: # encoding: [0xeb,A]
259; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
260; CHECK-NEXT: .LBB7_1: # %a
261; CHECK-NEXT: jmp a # TAILCALL
262; CHECK-NEXT: # encoding: [0xeb,A]
263; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
264entry:
265 %load1 = load i64, i64* @g64
266 %add = add i64 %load1, -42
Chandler Carruth4b611a82017-08-25 22:50:52 +0000267 store i64 %add, i64* @g64
268 %cond = icmp slt i64 %add, 0
269 br i1 %cond, label %a, label %b
270
271a:
272 tail call void @a()
273 ret void
274
275b:
276 tail call void @b()
277 ret void
278}
279
280define void @add32_imm_br() nounwind {
281; CHECK-LABEL: add32_imm_br:
282; CHECK: # BB#0: # %entry
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000283; CHECK-NEXT: addl $-2147483648, {{.*}}(%rip) # encoding: [0x81,0x05,A,A,A,A,0x00,0x00,0x00,0x80]
284; CHECK-NEXT: # fixup A - offset: 2, value: g32-8, kind: reloc_riprel_4byte
285; CHECK-NEXT: # imm = 0x80000000
286; CHECK-NEXT: js .LBB8_1 # encoding: [0x78,A]
287; CHECK-NEXT: # fixup A - offset: 1, value: .LBB8_1-1, kind: FK_PCRel_1
Chandler Carruth4b611a82017-08-25 22:50:52 +0000288; CHECK-NEXT: # BB#2: # %b
289; CHECK-NEXT: jmp b # TAILCALL
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000290; CHECK-NEXT: # encoding: [0xeb,A]
291; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
292; CHECK-NEXT: .LBB8_1: # %a
Chandler Carruth4b611a82017-08-25 22:50:52 +0000293; CHECK-NEXT: jmp a # TAILCALL
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000294; CHECK-NEXT: # encoding: [0xeb,A]
295; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
Chandler Carruth4b611a82017-08-25 22:50:52 +0000296entry:
297 %load1 = load i32, i32* @g32
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000298 ; Add 0x80000000, a positive number requiring 32 bits of immediate.
299 %add = add i32 %load1, 2147483648
300 store i32 %add, i32* @g32
301 %cond = icmp slt i32 %add, 0
302 br i1 %cond, label %a, label %b
303
304a:
305 tail call void @a()
306 ret void
307
308b:
309 tail call void @b()
310 ret void
311}
312
313define void @add32_imm8_br() nounwind {
314; CHECK-LABEL: add32_imm8_br:
315; CHECK: # BB#0: # %entry
316; CHECK-NEXT: addl $42, {{.*}}(%rip) # encoding: [0x83,0x05,A,A,A,A,0x2a]
317; CHECK-NEXT: # fixup A - offset: 2, value: g32-5, kind: reloc_riprel_4byte
318; CHECK-NEXT: js .LBB9_1 # encoding: [0x78,A]
319; CHECK-NEXT: # fixup A - offset: 1, value: .LBB9_1-1, kind: FK_PCRel_1
320; CHECK-NEXT: # BB#2: # %b
321; CHECK-NEXT: jmp b # TAILCALL
322; CHECK-NEXT: # encoding: [0xeb,A]
323; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
324; CHECK-NEXT: .LBB9_1: # %a
325; CHECK-NEXT: jmp a # TAILCALL
326; CHECK-NEXT: # encoding: [0xeb,A]
327; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
328entry:
329 %load1 = load i32, i32* @g32
330 %add = add i32 %load1, 42
331 store i32 %add, i32* @g32
332 %cond = icmp slt i32 %add, 0
333 br i1 %cond, label %a, label %b
334
335a:
336 tail call void @a()
337 ret void
338
339b:
340 tail call void @b()
341 ret void
342}
343
344define void @add32_imm8_neg_br() nounwind {
345; CHECK-LABEL: add32_imm8_neg_br:
346; CHECK: # BB#0: # %entry
347; CHECK-NEXT: addl $-42, {{.*}}(%rip) # encoding: [0x83,0x05,A,A,A,A,0xd6]
348; CHECK-NEXT: # fixup A - offset: 2, value: g32-5, kind: reloc_riprel_4byte
349; CHECK-NEXT: js .LBB10_1 # encoding: [0x78,A]
350; CHECK-NEXT: # fixup A - offset: 1, value: .LBB10_1-1, kind: FK_PCRel_1
351; CHECK-NEXT: # BB#2: # %b
352; CHECK-NEXT: jmp b # TAILCALL
353; CHECK-NEXT: # encoding: [0xeb,A]
354; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
355; CHECK-NEXT: .LBB10_1: # %a
356; CHECK-NEXT: jmp a # TAILCALL
357; CHECK-NEXT: # encoding: [0xeb,A]
358; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
359entry:
360 %load1 = load i32, i32* @g32
361 %add = add i32 %load1, -42
Chandler Carruth4b611a82017-08-25 22:50:52 +0000362 store i32 %add, i32* @g32
363 %cond = icmp slt i32 %add, 0
364 br i1 %cond, label %a, label %b
365
366a:
367 tail call void @a()
368 ret void
369
370b:
371 tail call void @b()
372 ret void
373}
374
375define void @add16_imm_br() nounwind {
376; CHECK-LABEL: add16_imm_br:
377; CHECK: # BB#0: # %entry
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000378; CHECK-NEXT: addw $-32768, {{.*}}(%rip) # encoding: [0x66,0x81,0x05,A,A,A,A,0x00,0x80]
379; CHECK-NEXT: # fixup A - offset: 3, value: g16-6, kind: reloc_riprel_4byte
380; CHECK-NEXT: # imm = 0x8000
381; CHECK-NEXT: js .LBB11_1 # encoding: [0x78,A]
382; CHECK-NEXT: # fixup A - offset: 1, value: .LBB11_1-1, kind: FK_PCRel_1
Chandler Carruth4b611a82017-08-25 22:50:52 +0000383; CHECK-NEXT: # BB#2: # %b
384; CHECK-NEXT: jmp b # TAILCALL
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000385; CHECK-NEXT: # encoding: [0xeb,A]
386; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
387; CHECK-NEXT: .LBB11_1: # %a
Chandler Carruth4b611a82017-08-25 22:50:52 +0000388; CHECK-NEXT: jmp a # TAILCALL
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000389; CHECK-NEXT: # encoding: [0xeb,A]
390; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
Chandler Carruth4b611a82017-08-25 22:50:52 +0000391entry:
392 %load1 = load i16, i16* @g16
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000393 ; Add 0x8000, a positive number requiring 16 bits of immediate.
394 %add = add i16 %load1, 32768
395 store i16 %add, i16* @g16
396 %cond = icmp slt i16 %add, 0
397 br i1 %cond, label %a, label %b
398
399a:
400 tail call void @a()
401 ret void
402
403b:
404 tail call void @b()
405 ret void
406}
407
408define void @add16_imm8_br() nounwind {
409; CHECK-LABEL: add16_imm8_br:
410; CHECK: # BB#0: # %entry
411; CHECK-NEXT: addw $42, {{.*}}(%rip) # encoding: [0x66,0x83,0x05,A,A,A,A,0x2a]
412; CHECK-NEXT: # fixup A - offset: 3, value: g16-5, kind: reloc_riprel_4byte
413; CHECK-NEXT: js .LBB12_1 # encoding: [0x78,A]
414; CHECK-NEXT: # fixup A - offset: 1, value: .LBB12_1-1, kind: FK_PCRel_1
415; CHECK-NEXT: # BB#2: # %b
416; CHECK-NEXT: jmp b # TAILCALL
417; CHECK-NEXT: # encoding: [0xeb,A]
418; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
419; CHECK-NEXT: .LBB12_1: # %a
420; CHECK-NEXT: jmp a # TAILCALL
421; CHECK-NEXT: # encoding: [0xeb,A]
422; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
423entry:
424 %load1 = load i16, i16* @g16
425 %add = add i16 %load1, 42
426 store i16 %add, i16* @g16
427 %cond = icmp slt i16 %add, 0
428 br i1 %cond, label %a, label %b
429
430a:
431 tail call void @a()
432 ret void
433
434b:
435 tail call void @b()
436 ret void
437}
438
439define void @add16_imm8_neg_br() nounwind {
440; CHECK-LABEL: add16_imm8_neg_br:
441; CHECK: # BB#0: # %entry
442; CHECK-NEXT: addw $-42, {{.*}}(%rip) # encoding: [0x66,0x83,0x05,A,A,A,A,0xd6]
443; CHECK-NEXT: # fixup A - offset: 3, value: g16-5, kind: reloc_riprel_4byte
444; CHECK-NEXT: js .LBB13_1 # encoding: [0x78,A]
445; CHECK-NEXT: # fixup A - offset: 1, value: .LBB13_1-1, kind: FK_PCRel_1
446; CHECK-NEXT: # BB#2: # %b
447; CHECK-NEXT: jmp b # TAILCALL
448; CHECK-NEXT: # encoding: [0xeb,A]
449; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
450; CHECK-NEXT: .LBB13_1: # %a
451; CHECK-NEXT: jmp a # TAILCALL
452; CHECK-NEXT: # encoding: [0xeb,A]
453; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
454entry:
455 %load1 = load i16, i16* @g16
456 %add = add i16 %load1, -42
Chandler Carruth4b611a82017-08-25 22:50:52 +0000457 store i16 %add, i16* @g16
458 %cond = icmp slt i16 %add, 0
459 br i1 %cond, label %a, label %b
460
461a:
462 tail call void @a()
463 ret void
464
465b:
466 tail call void @b()
467 ret void
468}
469
470define void @add8_imm_br() nounwind {
471; CHECK-LABEL: add8_imm_br:
472; CHECK: # BB#0: # %entry
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000473; CHECK-NEXT: addb $-2, {{.*}}(%rip) # encoding: [0x80,0x05,A,A,A,A,0xfe]
474; CHECK-NEXT: # fixup A - offset: 2, value: g8-5, kind: reloc_riprel_4byte
475; CHECK-NEXT: js .LBB14_1 # encoding: [0x78,A]
476; CHECK-NEXT: # fixup A - offset: 1, value: .LBB14_1-1, kind: FK_PCRel_1
Chandler Carruth4b611a82017-08-25 22:50:52 +0000477; CHECK-NEXT: # BB#2: # %b
478; CHECK-NEXT: jmp b # TAILCALL
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000479; CHECK-NEXT: # encoding: [0xeb,A]
480; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
481; CHECK-NEXT: .LBB14_1: # %a
Chandler Carruth4b611a82017-08-25 22:50:52 +0000482; CHECK-NEXT: jmp a # TAILCALL
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000483; CHECK-NEXT: # encoding: [0xeb,A]
484; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
Chandler Carruth4b611a82017-08-25 22:50:52 +0000485entry:
486 %load1 = load i8, i8* @g8
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000487 %add = add i8 %load1, -2
Chandler Carruth4b611a82017-08-25 22:50:52 +0000488 store i8 %add, i8* @g8
489 %cond = icmp slt i8 %add, 0
490 br i1 %cond, label %a, label %b
491
492a:
493 tail call void @a()
494 ret void
495
496b:
497 tail call void @b()
498 ret void
499}
500
501define void @add64_reg_br(i64 %arg) nounwind {
502; CHECK-LABEL: add64_reg_br:
503; CHECK: # BB#0: # %entry
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000504; CHECK-NEXT: addq %rdi, {{.*}}(%rip) # encoding: [0x48,0x01,0x3d,A,A,A,A]
505; CHECK-NEXT: # fixup A - offset: 3, value: g64-4, kind: reloc_riprel_4byte
506; CHECK-NEXT: js .LBB15_1 # encoding: [0x78,A]
507; CHECK-NEXT: # fixup A - offset: 1, value: .LBB15_1-1, kind: FK_PCRel_1
Chandler Carruth4b611a82017-08-25 22:50:52 +0000508; CHECK-NEXT: # BB#2: # %b
509; CHECK-NEXT: jmp b # TAILCALL
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000510; CHECK-NEXT: # encoding: [0xeb,A]
511; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
512; CHECK-NEXT: .LBB15_1: # %a
Chandler Carruth4b611a82017-08-25 22:50:52 +0000513; CHECK-NEXT: jmp a # TAILCALL
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000514; CHECK-NEXT: # encoding: [0xeb,A]
515; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
Chandler Carruth4b611a82017-08-25 22:50:52 +0000516entry:
517 %load1 = load i64, i64* @g64
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000518 %add = add i64 %load1, %arg
Chandler Carruth4b611a82017-08-25 22:50:52 +0000519 store i64 %add, i64* @g64
520 %cond = icmp slt i64 %add, 0
521 br i1 %cond, label %a, label %b
522
523a:
524 tail call void @a()
525 ret void
526
527b:
528 tail call void @b()
529 ret void
530}
531
532define void @add32_reg_br(i32 %arg) nounwind {
533; CHECK-LABEL: add32_reg_br:
534; CHECK: # BB#0: # %entry
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000535; CHECK-NEXT: addl %edi, {{.*}}(%rip) # encoding: [0x01,0x3d,A,A,A,A]
536; CHECK-NEXT: # fixup A - offset: 2, value: g32-4, kind: reloc_riprel_4byte
537; CHECK-NEXT: js .LBB16_1 # encoding: [0x78,A]
538; CHECK-NEXT: # fixup A - offset: 1, value: .LBB16_1-1, kind: FK_PCRel_1
Chandler Carruth4b611a82017-08-25 22:50:52 +0000539; CHECK-NEXT: # BB#2: # %b
540; CHECK-NEXT: jmp b # TAILCALL
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000541; CHECK-NEXT: # encoding: [0xeb,A]
542; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
543; CHECK-NEXT: .LBB16_1: # %a
Chandler Carruth4b611a82017-08-25 22:50:52 +0000544; CHECK-NEXT: jmp a # TAILCALL
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000545; CHECK-NEXT: # encoding: [0xeb,A]
546; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
Chandler Carruth4b611a82017-08-25 22:50:52 +0000547entry:
548 %load1 = load i32, i32* @g32
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000549 %add = add i32 %load1, %arg
Chandler Carruth4b611a82017-08-25 22:50:52 +0000550 store i32 %add, i32* @g32
551 %cond = icmp slt i32 %add, 0
552 br i1 %cond, label %a, label %b
553
554a:
555 tail call void @a()
556 ret void
557
558b:
559 tail call void @b()
560 ret void
561}
562
563define void @add16_reg_br(i16 %arg) nounwind {
564; CHECK-LABEL: add16_reg_br:
565; CHECK: # BB#0: # %entry
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000566; CHECK-NEXT: addw %di, {{.*}}(%rip) # encoding: [0x66,0x01,0x3d,A,A,A,A]
567; CHECK-NEXT: # fixup A - offset: 3, value: g16-4, kind: reloc_riprel_4byte
568; CHECK-NEXT: js .LBB17_1 # encoding: [0x78,A]
569; CHECK-NEXT: # fixup A - offset: 1, value: .LBB17_1-1, kind: FK_PCRel_1
Chandler Carruth4b611a82017-08-25 22:50:52 +0000570; CHECK-NEXT: # BB#2: # %b
571; CHECK-NEXT: jmp b # TAILCALL
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000572; CHECK-NEXT: # encoding: [0xeb,A]
573; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
574; CHECK-NEXT: .LBB17_1: # %a
Chandler Carruth4b611a82017-08-25 22:50:52 +0000575; CHECK-NEXT: jmp a # TAILCALL
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000576; CHECK-NEXT: # encoding: [0xeb,A]
577; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
Chandler Carruth4b611a82017-08-25 22:50:52 +0000578entry:
579 %load1 = load i16, i16* @g16
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000580 %add = add i16 %load1, %arg
Chandler Carruth4b611a82017-08-25 22:50:52 +0000581 store i16 %add, i16* @g16
582 %cond = icmp slt i16 %add, 0
583 br i1 %cond, label %a, label %b
584
585a:
586 tail call void @a()
587 ret void
588
589b:
590 tail call void @b()
591 ret void
592}
593
594define void @add8_reg_br(i8 %arg) nounwind {
595; CHECK-LABEL: add8_reg_br:
596; CHECK: # BB#0: # %entry
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000597; CHECK-NEXT: addb %dil, {{.*}}(%rip) # encoding: [0x40,0x00,0x3d,A,A,A,A]
598; CHECK-NEXT: # fixup A - offset: 3, value: g8-4, kind: reloc_riprel_4byte
599; CHECK-NEXT: js .LBB18_1 # encoding: [0x78,A]
600; CHECK-NEXT: # fixup A - offset: 1, value: .LBB18_1-1, kind: FK_PCRel_1
Chandler Carruth4b611a82017-08-25 22:50:52 +0000601; CHECK-NEXT: # BB#2: # %b
602; CHECK-NEXT: jmp b # TAILCALL
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000603; CHECK-NEXT: # encoding: [0xeb,A]
604; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
605; CHECK-NEXT: .LBB18_1: # %a
Chandler Carruth4b611a82017-08-25 22:50:52 +0000606; CHECK-NEXT: jmp a # TAILCALL
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000607; CHECK-NEXT: # encoding: [0xeb,A]
608; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
Chandler Carruth4b611a82017-08-25 22:50:52 +0000609entry:
610 %load1 = load i8, i8* @g8
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000611 %add = add i8 %load1, %arg
Chandler Carruth4b611a82017-08-25 22:50:52 +0000612 store i8 %add, i8* @g8
613 %cond = icmp slt i8 %add, 0
614 br i1 %cond, label %a, label %b
615
616a:
617 tail call void @a()
618 ret void
619
620b:
621 tail call void @b()
622 ret void
623}
624
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000625define void @sub64_imm32_br() nounwind {
626; CHECK-LABEL: sub64_imm32_br:
Chandler Carruth4b611a82017-08-25 22:50:52 +0000627; CHECK: # BB#0: # %entry
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000628; CHECK-NEXT: subq $-2147483648, {{.*}}(%rip) # encoding: [0x48,0x81,0x2d,A,A,A,A,0x00,0x00,0x00,0x80]
629; CHECK-NEXT: # fixup A - offset: 3, value: g64-8, kind: reloc_riprel_4byte
630; CHECK-NEXT: # imm = 0x80000000
631; CHECK-NEXT: js .LBB19_1 # encoding: [0x78,A]
632; CHECK-NEXT: # fixup A - offset: 1, value: .LBB19_1-1, kind: FK_PCRel_1
Chandler Carruth4b611a82017-08-25 22:50:52 +0000633; CHECK-NEXT: # BB#2: # %b
634; CHECK-NEXT: jmp b # TAILCALL
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000635; CHECK-NEXT: # encoding: [0xeb,A]
636; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
637; CHECK-NEXT: .LBB19_1: # %a
Chandler Carruth4b611a82017-08-25 22:50:52 +0000638; CHECK-NEXT: jmp a # TAILCALL
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000639; CHECK-NEXT: # encoding: [0xeb,A]
640; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
Chandler Carruth4b611a82017-08-25 22:50:52 +0000641entry:
642 %load1 = load i64, i64* @g64
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000643 ; Subtract -0x80000000, which can't be negated into a sign-extended 32-bit
644 ; immediate, so that we have to select sub here.
645 %sub = sub i64 %load1, -2147483648
646 store i64 %sub, i64* @g64
647 %cond = icmp slt i64 %sub, 0
648 br i1 %cond, label %a, label %b
649
650a:
651 tail call void @a()
652 ret void
653
654b:
655 tail call void @b()
656 ret void
657}
658
659define void @sub64_too_large_imm32_br() nounwind {
660; CHECK-LABEL: sub64_too_large_imm32_br:
661; CHECK: # BB#0: # %entry
662; CHECK-NEXT: movabsq $-4294967295, %rax # encoding: [0x48,0xb8,0x01,0x00,0x00,0x00,0xff,0xff,0xff,0xff]
663; CHECK-NEXT: # imm = 0xFFFFFFFF00000001
664; CHECK-NEXT: addq %rax, {{.*}}(%rip) # encoding: [0x48,0x01,0x05,A,A,A,A]
665; CHECK-NEXT: # fixup A - offset: 3, value: g64-4, kind: reloc_riprel_4byte
666; CHECK-NEXT: js .LBB20_1 # encoding: [0x78,A]
667; CHECK-NEXT: # fixup A - offset: 1, value: .LBB20_1-1, kind: FK_PCRel_1
668; CHECK-NEXT: # BB#2: # %b
669; CHECK-NEXT: jmp b # TAILCALL
670; CHECK-NEXT: # encoding: [0xeb,A]
671; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
672; CHECK-NEXT: .LBB20_1: # %a
673; CHECK-NEXT: jmp a # TAILCALL
674; CHECK-NEXT: # encoding: [0xeb,A]
675; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
676entry:
677 %load1 = load i64, i64* @g64
678 ; Subtract 0xFFFFFFFF, which cannot fit in a sign extended 32-bit immediate,
679 ; even if negated and sign extended as an add.
680 %sub = sub i64 %load1, 4294967295
681 store i64 %sub, i64* @g64
682 %cond = icmp slt i64 %sub, 0
683 br i1 %cond, label %a, label %b
684
685a:
686 tail call void @a()
687 ret void
688
689b:
690 tail call void @b()
691 ret void
692}
693
694define void @sub64_imm8_br() nounwind {
695; CHECK-LABEL: sub64_imm8_br:
696; CHECK: # BB#0: # %entry
697; CHECK-NEXT: subq $-128, {{.*}}(%rip) # encoding: [0x48,0x83,0x2d,A,A,A,A,0x80]
698; CHECK-NEXT: # fixup A - offset: 3, value: g64-5, kind: reloc_riprel_4byte
699; CHECK-NEXT: js .LBB21_1 # encoding: [0x78,A]
700; CHECK-NEXT: # fixup A - offset: 1, value: .LBB21_1-1, kind: FK_PCRel_1
701; CHECK-NEXT: # BB#2: # %b
702; CHECK-NEXT: jmp b # TAILCALL
703; CHECK-NEXT: # encoding: [0xeb,A]
704; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
705; CHECK-NEXT: .LBB21_1: # %a
706; CHECK-NEXT: jmp a # TAILCALL
707; CHECK-NEXT: # encoding: [0xeb,A]
708; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
709entry:
710 %load1 = load i64, i64* @g64
711 ; Subtract -0x80, which can be done with an 8-bit immediate but only as
712 ; a subtract where that immediate can be negative.
713 %sub = sub i64 %load1, -128
Chandler Carruth4b611a82017-08-25 22:50:52 +0000714 store i64 %sub, i64* @g64
715 %cond = icmp slt i64 %sub, 0
716 br i1 %cond, label %a, label %b
717
718a:
719 tail call void @a()
720 ret void
721
722b:
723 tail call void @b()
724 ret void
725}
726
727define void @sub32_imm_br() nounwind {
728; CHECK-LABEL: sub32_imm_br:
729; CHECK: # BB#0: # %entry
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000730; CHECK-NEXT: addl $-2147483648, {{.*}}(%rip) # encoding: [0x81,0x05,A,A,A,A,0x00,0x00,0x00,0x80]
731; CHECK-NEXT: # fixup A - offset: 2, value: g32-8, kind: reloc_riprel_4byte
732; CHECK-NEXT: # imm = 0x80000000
733; CHECK-NEXT: js .LBB22_1 # encoding: [0x78,A]
734; CHECK-NEXT: # fixup A - offset: 1, value: .LBB22_1-1, kind: FK_PCRel_1
Chandler Carruth4b611a82017-08-25 22:50:52 +0000735; CHECK-NEXT: # BB#2: # %b
736; CHECK-NEXT: jmp b # TAILCALL
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000737; CHECK-NEXT: # encoding: [0xeb,A]
738; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
739; CHECK-NEXT: .LBB22_1: # %a
Chandler Carruth4b611a82017-08-25 22:50:52 +0000740; CHECK-NEXT: jmp a # TAILCALL
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000741; CHECK-NEXT: # encoding: [0xeb,A]
742; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
Chandler Carruth4b611a82017-08-25 22:50:52 +0000743entry:
744 %load1 = load i32, i32* @g32
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000745 ; Subtract -0x80000000, which requires 32 bits of immediate but still gets
746 ; lowered as an add.
747 %sub = sub i32 %load1, -2147483648
748 store i32 %sub, i32* @g32
749 %cond = icmp slt i32 %sub, 0
750 br i1 %cond, label %a, label %b
751
752a:
753 tail call void @a()
754 ret void
755
756b:
757 tail call void @b()
758 ret void
759}
760
761define void @sub32_imm8_br() nounwind {
762; CHECK-LABEL: sub32_imm8_br:
763; CHECK: # BB#0: # %entry
764; CHECK-NEXT: subl $-128, {{.*}}(%rip) # encoding: [0x83,0x2d,A,A,A,A,0x80]
765; CHECK-NEXT: # fixup A - offset: 2, value: g32-5, kind: reloc_riprel_4byte
766; CHECK-NEXT: js .LBB23_1 # encoding: [0x78,A]
767; CHECK-NEXT: # fixup A - offset: 1, value: .LBB23_1-1, kind: FK_PCRel_1
768; CHECK-NEXT: # BB#2: # %b
769; CHECK-NEXT: jmp b # TAILCALL
770; CHECK-NEXT: # encoding: [0xeb,A]
771; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
772; CHECK-NEXT: .LBB23_1: # %a
773; CHECK-NEXT: jmp a # TAILCALL
774; CHECK-NEXT: # encoding: [0xeb,A]
775; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
776entry:
777 %load1 = load i32, i32* @g32
778 ; Subtract -0x80, which can be done with an 8-bit immediate but only as
779 ; a subtract where that immediate can be negative.
780 %sub = sub i32 %load1, -128
Chandler Carruth4b611a82017-08-25 22:50:52 +0000781 store i32 %sub, i32* @g32
782 %cond = icmp slt i32 %sub, 0
783 br i1 %cond, label %a, label %b
784
785a:
786 tail call void @a()
787 ret void
788
789b:
790 tail call void @b()
791 ret void
792}
793
794define void @sub16_imm_br() nounwind {
795; CHECK-LABEL: sub16_imm_br:
796; CHECK: # BB#0: # %entry
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000797; CHECK-NEXT: addw $-32768, {{.*}}(%rip) # encoding: [0x66,0x81,0x05,A,A,A,A,0x00,0x80]
798; CHECK-NEXT: # fixup A - offset: 3, value: g16-6, kind: reloc_riprel_4byte
799; CHECK-NEXT: # imm = 0x8000
800; CHECK-NEXT: js .LBB24_1 # encoding: [0x78,A]
801; CHECK-NEXT: # fixup A - offset: 1, value: .LBB24_1-1, kind: FK_PCRel_1
Chandler Carruth4b611a82017-08-25 22:50:52 +0000802; CHECK-NEXT: # BB#2: # %b
803; CHECK-NEXT: jmp b # TAILCALL
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000804; CHECK-NEXT: # encoding: [0xeb,A]
805; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
806; CHECK-NEXT: .LBB24_1: # %a
Chandler Carruth4b611a82017-08-25 22:50:52 +0000807; CHECK-NEXT: jmp a # TAILCALL
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000808; CHECK-NEXT: # encoding: [0xeb,A]
809; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
Chandler Carruth4b611a82017-08-25 22:50:52 +0000810entry:
811 %load1 = load i16, i16* @g16
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000812 ; Subtract -0x8000, which requires a 16 bits of immediate but still gets
813 ; lowered as an add.
814 %sub = sub i16 %load1, -32768
815 store i16 %sub, i16* @g16
816 %cond = icmp slt i16 %sub, 0
817 br i1 %cond, label %a, label %b
818
819a:
820 tail call void @a()
821 ret void
822
823b:
824 tail call void @b()
825 ret void
826}
827
828define void @sub16_imm8_br() nounwind {
829; CHECK-LABEL: sub16_imm8_br:
830; CHECK: # BB#0: # %entry
831; CHECK-NEXT: subw $-128, {{.*}}(%rip) # encoding: [0x66,0x83,0x2d,A,A,A,A,0x80]
832; CHECK-NEXT: # fixup A - offset: 3, value: g16-5, kind: reloc_riprel_4byte
833; CHECK-NEXT: js .LBB25_1 # encoding: [0x78,A]
834; CHECK-NEXT: # fixup A - offset: 1, value: .LBB25_1-1, kind: FK_PCRel_1
835; CHECK-NEXT: # BB#2: # %b
836; CHECK-NEXT: jmp b # TAILCALL
837; CHECK-NEXT: # encoding: [0xeb,A]
838; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
839; CHECK-NEXT: .LBB25_1: # %a
840; CHECK-NEXT: jmp a # TAILCALL
841; CHECK-NEXT: # encoding: [0xeb,A]
842; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
843entry:
844 %load1 = load i16, i16* @g16
845 ; Subtract -0x80, which can be done with an 8-bit immediate but only as
846 ; a subtract where that immediate can be negative.
847 %sub = sub i16 %load1, -128
Chandler Carruth4b611a82017-08-25 22:50:52 +0000848 store i16 %sub, i16* @g16
849 %cond = icmp slt i16 %sub, 0
850 br i1 %cond, label %a, label %b
851
852a:
853 tail call void @a()
854 ret void
855
856b:
857 tail call void @b()
858 ret void
859}
860
861define void @sub8_imm_br() nounwind {
862; CHECK-LABEL: sub8_imm_br:
863; CHECK: # BB#0: # %entry
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000864; CHECK-NEXT: addb $-128, {{.*}}(%rip) # encoding: [0x80,0x05,A,A,A,A,0x80]
865; CHECK-NEXT: # fixup A - offset: 2, value: g8-5, kind: reloc_riprel_4byte
866; CHECK-NEXT: js .LBB26_1 # encoding: [0x78,A]
867; CHECK-NEXT: # fixup A - offset: 1, value: .LBB26_1-1, kind: FK_PCRel_1
Chandler Carruth4b611a82017-08-25 22:50:52 +0000868; CHECK-NEXT: # BB#2: # %b
869; CHECK-NEXT: jmp b # TAILCALL
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000870; CHECK-NEXT: # encoding: [0xeb,A]
871; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
872; CHECK-NEXT: .LBB26_1: # %a
Chandler Carruth4b611a82017-08-25 22:50:52 +0000873; CHECK-NEXT: jmp a # TAILCALL
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000874; CHECK-NEXT: # encoding: [0xeb,A]
875; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
Chandler Carruth4b611a82017-08-25 22:50:52 +0000876entry:
877 %load1 = load i8, i8* @g8
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000878 ; Subtract -0x80, which requires an 8-bit immediate but still gets lowered as
879 ; an add.
880 %sub = sub i8 %load1, -128
Chandler Carruth4b611a82017-08-25 22:50:52 +0000881 store i8 %sub, i8* @g8
882 %cond = icmp slt i8 %sub, 0
883 br i1 %cond, label %a, label %b
884
885a:
886 tail call void @a()
887 ret void
888
889b:
890 tail call void @b()
891 ret void
892}
893
894define void @sub64_reg_br(i64 %arg) nounwind {
895; CHECK-LABEL: sub64_reg_br:
896; CHECK: # BB#0: # %entry
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000897; CHECK-NEXT: subq %rdi, {{.*}}(%rip) # encoding: [0x48,0x29,0x3d,A,A,A,A]
898; CHECK-NEXT: # fixup A - offset: 3, value: g64-4, kind: reloc_riprel_4byte
899; CHECK-NEXT: js .LBB27_1 # encoding: [0x78,A]
900; CHECK-NEXT: # fixup A - offset: 1, value: .LBB27_1-1, kind: FK_PCRel_1
Chandler Carruth4b611a82017-08-25 22:50:52 +0000901; CHECK-NEXT: # BB#2: # %b
902; CHECK-NEXT: jmp b # TAILCALL
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000903; CHECK-NEXT: # encoding: [0xeb,A]
904; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
905; CHECK-NEXT: .LBB27_1: # %a
Chandler Carruth4b611a82017-08-25 22:50:52 +0000906; CHECK-NEXT: jmp a # TAILCALL
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000907; CHECK-NEXT: # encoding: [0xeb,A]
908; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
Chandler Carruth4b611a82017-08-25 22:50:52 +0000909entry:
910 %load1 = load i64, i64* @g64
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000911 %sub = sub i64 %load1, %arg
Chandler Carruth4b611a82017-08-25 22:50:52 +0000912 store i64 %sub, i64* @g64
913 %cond = icmp slt i64 %sub, 0
914 br i1 %cond, label %a, label %b
915
916a:
917 tail call void @a()
918 ret void
919
920b:
921 tail call void @b()
922 ret void
923}
924
925define void @sub32_reg_br(i32 %arg) nounwind {
926; CHECK-LABEL: sub32_reg_br:
927; CHECK: # BB#0: # %entry
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000928; CHECK-NEXT: subl %edi, {{.*}}(%rip) # encoding: [0x29,0x3d,A,A,A,A]
929; CHECK-NEXT: # fixup A - offset: 2, value: g32-4, kind: reloc_riprel_4byte
930; CHECK-NEXT: js .LBB28_1 # encoding: [0x78,A]
931; CHECK-NEXT: # fixup A - offset: 1, value: .LBB28_1-1, kind: FK_PCRel_1
Chandler Carruth4b611a82017-08-25 22:50:52 +0000932; CHECK-NEXT: # BB#2: # %b
933; CHECK-NEXT: jmp b # TAILCALL
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000934; CHECK-NEXT: # encoding: [0xeb,A]
935; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
936; CHECK-NEXT: .LBB28_1: # %a
Chandler Carruth4b611a82017-08-25 22:50:52 +0000937; CHECK-NEXT: jmp a # TAILCALL
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000938; CHECK-NEXT: # encoding: [0xeb,A]
939; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
Chandler Carruth4b611a82017-08-25 22:50:52 +0000940entry:
941 %load1 = load i32, i32* @g32
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000942 %sub = sub i32 %load1, %arg
Chandler Carruth4b611a82017-08-25 22:50:52 +0000943 store i32 %sub, i32* @g32
944 %cond = icmp slt i32 %sub, 0
945 br i1 %cond, label %a, label %b
946
947a:
948 tail call void @a()
949 ret void
950
951b:
952 tail call void @b()
953 ret void
954}
955
956define void @sub16_reg_br(i16 %arg) nounwind {
957; CHECK-LABEL: sub16_reg_br:
958; CHECK: # BB#0: # %entry
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000959; CHECK-NEXT: subw %di, {{.*}}(%rip) # encoding: [0x66,0x29,0x3d,A,A,A,A]
960; CHECK-NEXT: # fixup A - offset: 3, value: g16-4, kind: reloc_riprel_4byte
961; CHECK-NEXT: js .LBB29_1 # encoding: [0x78,A]
962; CHECK-NEXT: # fixup A - offset: 1, value: .LBB29_1-1, kind: FK_PCRel_1
Chandler Carruth4b611a82017-08-25 22:50:52 +0000963; CHECK-NEXT: # BB#2: # %b
964; CHECK-NEXT: jmp b # TAILCALL
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000965; CHECK-NEXT: # encoding: [0xeb,A]
966; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
967; CHECK-NEXT: .LBB29_1: # %a
Chandler Carruth4b611a82017-08-25 22:50:52 +0000968; CHECK-NEXT: jmp a # TAILCALL
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000969; CHECK-NEXT: # encoding: [0xeb,A]
970; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
Chandler Carruth4b611a82017-08-25 22:50:52 +0000971entry:
972 %load1 = load i16, i16* @g16
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000973 %sub = sub i16 %load1, %arg
Chandler Carruth4b611a82017-08-25 22:50:52 +0000974 store i16 %sub, i16* @g16
975 %cond = icmp slt i16 %sub, 0
976 br i1 %cond, label %a, label %b
977
978a:
979 tail call void @a()
980 ret void
981
982b:
983 tail call void @b()
984 ret void
985}
986
987define void @sub8_reg_br(i8 %arg) nounwind {
988; CHECK-LABEL: sub8_reg_br:
989; CHECK: # BB#0: # %entry
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000990; CHECK-NEXT: subb %dil, {{.*}}(%rip) # encoding: [0x40,0x28,0x3d,A,A,A,A]
991; CHECK-NEXT: # fixup A - offset: 3, value: g8-4, kind: reloc_riprel_4byte
992; CHECK-NEXT: js .LBB30_1 # encoding: [0x78,A]
993; CHECK-NEXT: # fixup A - offset: 1, value: .LBB30_1-1, kind: FK_PCRel_1
Chandler Carruth4b611a82017-08-25 22:50:52 +0000994; CHECK-NEXT: # BB#2: # %b
995; CHECK-NEXT: jmp b # TAILCALL
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000996; CHECK-NEXT: # encoding: [0xeb,A]
997; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
998; CHECK-NEXT: .LBB30_1: # %a
Chandler Carruth4b611a82017-08-25 22:50:52 +0000999; CHECK-NEXT: jmp a # TAILCALL
Chandler Carruth52a31bf2017-09-07 23:54:24 +00001000; CHECK-NEXT: # encoding: [0xeb,A]
1001; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
Chandler Carruth4b611a82017-08-25 22:50:52 +00001002entry:
1003 %load1 = load i8, i8* @g8
Chandler Carruth52a31bf2017-09-07 23:54:24 +00001004 %sub = sub i8 %load1, %arg
Chandler Carruth4b611a82017-08-25 22:50:52 +00001005 store i8 %sub, i8* @g8
1006 %cond = icmp slt i8 %sub, 0
1007 br i1 %cond, label %a, label %b
1008
1009a:
1010 tail call void @a()
1011 ret void
1012
1013b:
1014 tail call void @b()
1015 ret void
1016}
Chandler Carruthacbcf062017-09-08 00:17:12 +00001017
1018define void @and64_imm32_br() nounwind {
1019; CHECK-LABEL: and64_imm32_br:
1020; CHECK: # BB#0: # %entry
1021; CHECK-NEXT: andq $16777215, {{.*}}(%rip) # encoding: [0x48,0x81,0x25,A,A,A,A,0xff,0xff,0xff,0x00]
1022; CHECK-NEXT: # fixup A - offset: 3, value: g64-8, kind: reloc_riprel_4byte
1023; CHECK-NEXT: # imm = 0xFFFFFF
1024; CHECK-NEXT: je .LBB31_1 # encoding: [0x74,A]
1025; CHECK-NEXT: # fixup A - offset: 1, value: .LBB31_1-1, kind: FK_PCRel_1
1026; CHECK-NEXT: # BB#2: # %b
1027; CHECK-NEXT: jmp b # TAILCALL
1028; CHECK-NEXT: # encoding: [0xeb,A]
1029; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1030; CHECK-NEXT: .LBB31_1: # %a
1031; CHECK-NEXT: jmp a # TAILCALL
1032; CHECK-NEXT: # encoding: [0xeb,A]
1033; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1034entry:
1035 %load1 = load i64, i64* @g64
1036 ; And 0x00FFFFFF, a positive immediate requiring 24-bits.
1037 %and = and i64 %load1, 16777215
1038 store i64 %and, i64* @g64
1039 %cond = icmp eq i64 %and, 0
1040 br i1 %cond, label %a, label %b
1041
1042a:
1043 tail call void @a()
1044 ret void
1045
1046b:
1047 tail call void @b()
1048 ret void
1049}
1050
1051define void @and64_sext_imm32_br() nounwind {
1052; CHECK-LABEL: and64_sext_imm32_br:
1053; CHECK: # BB#0: # %entry
1054; CHECK-NEXT: andq $-2147483648, {{.*}}(%rip) # encoding: [0x48,0x81,0x25,A,A,A,A,0x00,0x00,0x00,0x80]
1055; CHECK-NEXT: # fixup A - offset: 3, value: g64-8, kind: reloc_riprel_4byte
1056; CHECK-NEXT: # imm = 0x80000000
1057; CHECK-NEXT: je .LBB32_1 # encoding: [0x74,A]
1058; CHECK-NEXT: # fixup A - offset: 1, value: .LBB32_1-1, kind: FK_PCRel_1
1059; CHECK-NEXT: # BB#2: # %b
1060; CHECK-NEXT: jmp b # TAILCALL
1061; CHECK-NEXT: # encoding: [0xeb,A]
1062; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1063; CHECK-NEXT: .LBB32_1: # %a
1064; CHECK-NEXT: jmp a # TAILCALL
1065; CHECK-NEXT: # encoding: [0xeb,A]
1066; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1067entry:
1068 %load1 = load i64, i64* @g64
1069 ; And -0x80000000, which requires sign-extended 32 bits.
1070 %and = and i64 %load1, -2147483648
1071 store i64 %and, i64* @g64
1072 %cond = icmp eq i64 %and, 0
1073 br i1 %cond, label %a, label %b
1074
1075a:
1076 tail call void @a()
1077 ret void
1078
1079b:
1080 tail call void @b()
1081 ret void
1082}
1083
1084define void @and64_imm8_br() nounwind {
1085; CHECK-LABEL: and64_imm8_br:
1086; CHECK: # BB#0: # %entry
1087; CHECK-NEXT: andq $15, {{.*}}(%rip) # encoding: [0x48,0x83,0x25,A,A,A,A,0x0f]
1088; CHECK-NEXT: # fixup A - offset: 3, value: g64-5, kind: reloc_riprel_4byte
1089; CHECK-NEXT: je .LBB33_1 # encoding: [0x74,A]
1090; CHECK-NEXT: # fixup A - offset: 1, value: .LBB33_1-1, kind: FK_PCRel_1
1091; CHECK-NEXT: # BB#2: # %b
1092; CHECK-NEXT: jmp b # TAILCALL
1093; CHECK-NEXT: # encoding: [0xeb,A]
1094; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1095; CHECK-NEXT: .LBB33_1: # %a
1096; CHECK-NEXT: jmp a # TAILCALL
1097; CHECK-NEXT: # encoding: [0xeb,A]
1098; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1099entry:
1100 %load1 = load i64, i64* @g64
1101 %and = and i64 %load1, 15
1102 store i64 %and, i64* @g64
1103 %cond = icmp eq i64 %and, 0
1104 br i1 %cond, label %a, label %b
1105
1106a:
1107 tail call void @a()
1108 ret void
1109
1110b:
1111 tail call void @b()
1112 ret void
1113}
1114
1115define void @and64_imm8_neg_br() nounwind {
1116; CHECK-LABEL: and64_imm8_neg_br:
1117; CHECK: # BB#0: # %entry
1118; CHECK-NEXT: andq $-4, {{.*}}(%rip) # encoding: [0x48,0x83,0x25,A,A,A,A,0xfc]
1119; CHECK-NEXT: # fixup A - offset: 3, value: g64-5, kind: reloc_riprel_4byte
1120; CHECK-NEXT: je .LBB34_1 # encoding: [0x74,A]
1121; CHECK-NEXT: # fixup A - offset: 1, value: .LBB34_1-1, kind: FK_PCRel_1
1122; CHECK-NEXT: # BB#2: # %b
1123; CHECK-NEXT: jmp b # TAILCALL
1124; CHECK-NEXT: # encoding: [0xeb,A]
1125; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1126; CHECK-NEXT: .LBB34_1: # %a
1127; CHECK-NEXT: jmp a # TAILCALL
1128; CHECK-NEXT: # encoding: [0xeb,A]
1129; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1130entry:
1131 %load1 = load i64, i64* @g64
1132 %and = and i64 %load1, -4
1133 store i64 %and, i64* @g64
1134 %cond = icmp eq i64 %and, 0
1135 br i1 %cond, label %a, label %b
1136
1137a:
1138 tail call void @a()
1139 ret void
1140
1141b:
1142 tail call void @b()
1143 ret void
1144}
1145
1146define void @and32_imm_br() nounwind {
1147; CHECK-LABEL: and32_imm_br:
1148; CHECK: # BB#0: # %entry
1149; CHECK-NEXT: movl $-2147483648, %eax # encoding: [0xb8,0x00,0x00,0x00,0x80]
1150; CHECK-NEXT: # imm = 0x80000000
1151; CHECK-NEXT: andl {{.*}}(%rip), %eax # encoding: [0x23,0x05,A,A,A,A]
1152; CHECK-NEXT: # fixup A - offset: 2, value: g32-4, kind: reloc_riprel_4byte
1153; CHECK-NEXT: movl %eax, {{.*}}(%rip) # encoding: [0x89,0x05,A,A,A,A]
1154; CHECK-NEXT: # fixup A - offset: 2, value: g32-4, kind: reloc_riprel_4byte
1155; CHECK-NEXT: jne .LBB35_2 # encoding: [0x75,A]
1156; CHECK-NEXT: # fixup A - offset: 1, value: .LBB35_2-1, kind: FK_PCRel_1
1157; CHECK-NEXT: # BB#1: # %a
1158; CHECK-NEXT: jmp a # TAILCALL
1159; CHECK-NEXT: # encoding: [0xeb,A]
1160; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1161; CHECK-NEXT: .LBB35_2: # %b
1162; CHECK-NEXT: jmp b # TAILCALL
1163; CHECK-NEXT: # encoding: [0xeb,A]
1164; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1165entry:
1166 %load1 = load i32, i32* @g32
1167 ; And 0x80000000, a positive number requiring 32 bits of immediate.
1168 %and = and i32 %load1, 2147483648
1169 store i32 %and, i32* @g32
1170 %cond = icmp eq i32 %and, 0
1171 br i1 %cond, label %a, label %b
1172
1173a:
1174 tail call void @a()
1175 ret void
1176
1177b:
1178 tail call void @b()
1179 ret void
1180}
1181
1182define void @and32_imm8_br() nounwind {
1183; CHECK-LABEL: and32_imm8_br:
1184; CHECK: # BB#0: # %entry
1185; CHECK-NEXT: andl $15, {{.*}}(%rip) # encoding: [0x83,0x25,A,A,A,A,0x0f]
1186; CHECK-NEXT: # fixup A - offset: 2, value: g32-5, kind: reloc_riprel_4byte
1187; CHECK-NEXT: je .LBB36_1 # encoding: [0x74,A]
1188; CHECK-NEXT: # fixup A - offset: 1, value: .LBB36_1-1, kind: FK_PCRel_1
1189; CHECK-NEXT: # BB#2: # %b
1190; CHECK-NEXT: jmp b # TAILCALL
1191; CHECK-NEXT: # encoding: [0xeb,A]
1192; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1193; CHECK-NEXT: .LBB36_1: # %a
1194; CHECK-NEXT: jmp a # TAILCALL
1195; CHECK-NEXT: # encoding: [0xeb,A]
1196; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1197entry:
1198 %load1 = load i32, i32* @g32
1199 %and = and i32 %load1, 15
1200 store i32 %and, i32* @g32
1201 %cond = icmp eq i32 %and, 0
1202 br i1 %cond, label %a, label %b
1203
1204a:
1205 tail call void @a()
1206 ret void
1207
1208b:
1209 tail call void @b()
1210 ret void
1211}
1212
1213define void @and32_imm8_neg_br() nounwind {
1214; CHECK-LABEL: and32_imm8_neg_br:
1215; CHECK: # BB#0: # %entry
1216; CHECK-NEXT: andl $-4, {{.*}}(%rip) # encoding: [0x83,0x25,A,A,A,A,0xfc]
1217; CHECK-NEXT: # fixup A - offset: 2, value: g32-5, kind: reloc_riprel_4byte
1218; CHECK-NEXT: je .LBB37_1 # encoding: [0x74,A]
1219; CHECK-NEXT: # fixup A - offset: 1, value: .LBB37_1-1, kind: FK_PCRel_1
1220; CHECK-NEXT: # BB#2: # %b
1221; CHECK-NEXT: jmp b # TAILCALL
1222; CHECK-NEXT: # encoding: [0xeb,A]
1223; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1224; CHECK-NEXT: .LBB37_1: # %a
1225; CHECK-NEXT: jmp a # TAILCALL
1226; CHECK-NEXT: # encoding: [0xeb,A]
1227; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1228entry:
1229 %load1 = load i32, i32* @g32
1230 %and = and i32 %load1, -4
1231 store i32 %and, i32* @g32
1232 %cond = icmp eq i32 %and, 0
1233 br i1 %cond, label %a, label %b
1234
1235a:
1236 tail call void @a()
1237 ret void
1238
1239b:
1240 tail call void @b()
1241 ret void
1242}
1243
1244define void @and16_imm_br() nounwind {
1245; CHECK-LABEL: and16_imm_br:
1246; CHECK: # BB#0: # %entry
1247; CHECK-NEXT: movzwl {{.*}}(%rip), %eax # encoding: [0x0f,0xb7,0x05,A,A,A,A]
1248; CHECK-NEXT: # fixup A - offset: 3, value: g16-4, kind: reloc_riprel_4byte
1249; CHECK-NEXT: andl $32768, %eax # encoding: [0x25,0x00,0x80,0x00,0x00]
1250; CHECK-NEXT: # imm = 0x8000
1251; CHECK-NEXT: movw %ax, {{.*}}(%rip) # encoding: [0x66,0x89,0x05,A,A,A,A]
1252; CHECK-NEXT: # fixup A - offset: 3, value: g16-4, kind: reloc_riprel_4byte
1253; CHECK-NEXT: testw %ax, %ax # encoding: [0x66,0x85,0xc0]
1254; CHECK-NEXT: jne .LBB38_2 # encoding: [0x75,A]
1255; CHECK-NEXT: # fixup A - offset: 1, value: .LBB38_2-1, kind: FK_PCRel_1
1256; CHECK-NEXT: # BB#1: # %a
1257; CHECK-NEXT: jmp a # TAILCALL
1258; CHECK-NEXT: # encoding: [0xeb,A]
1259; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1260; CHECK-NEXT: .LBB38_2: # %b
1261; CHECK-NEXT: jmp b # TAILCALL
1262; CHECK-NEXT: # encoding: [0xeb,A]
1263; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1264entry:
1265 %load1 = load i16, i16* @g16
1266 %and = and i16 %load1, 32768
1267 store i16 %and, i16* @g16
1268 %cond = icmp eq i16 %and, 0
1269 br i1 %cond, label %a, label %b
1270
1271a:
1272 tail call void @a()
1273 ret void
1274
1275b:
1276 tail call void @b()
1277 ret void
1278}
1279
1280define void @and16_imm8_br() nounwind {
1281; CHECK-LABEL: and16_imm8_br:
1282; CHECK: # BB#0: # %entry
1283; CHECK-NEXT: andw $15, {{.*}}(%rip) # encoding: [0x66,0x83,0x25,A,A,A,A,0x0f]
1284; CHECK-NEXT: # fixup A - offset: 3, value: g16-5, kind: reloc_riprel_4byte
1285; CHECK-NEXT: je .LBB39_1 # encoding: [0x74,A]
1286; CHECK-NEXT: # fixup A - offset: 1, value: .LBB39_1-1, kind: FK_PCRel_1
1287; CHECK-NEXT: # BB#2: # %b
1288; CHECK-NEXT: jmp b # TAILCALL
1289; CHECK-NEXT: # encoding: [0xeb,A]
1290; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1291; CHECK-NEXT: .LBB39_1: # %a
1292; CHECK-NEXT: jmp a # TAILCALL
1293; CHECK-NEXT: # encoding: [0xeb,A]
1294; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1295entry:
1296 %load1 = load i16, i16* @g16
1297 %and = and i16 %load1, 15
1298 store i16 %and, i16* @g16
1299 %cond = icmp eq i16 %and, 0
1300 br i1 %cond, label %a, label %b
1301
1302a:
1303 tail call void @a()
1304 ret void
1305
1306b:
1307 tail call void @b()
1308 ret void
1309}
1310
1311define void @and16_imm8_neg_br() nounwind {
1312; CHECK-LABEL: and16_imm8_neg_br:
1313; CHECK: # BB#0: # %entry
1314; CHECK-NEXT: andw $-4, {{.*}}(%rip) # encoding: [0x66,0x83,0x25,A,A,A,A,0xfc]
1315; CHECK-NEXT: # fixup A - offset: 3, value: g16-5, kind: reloc_riprel_4byte
1316; CHECK-NEXT: je .LBB40_1 # encoding: [0x74,A]
1317; CHECK-NEXT: # fixup A - offset: 1, value: .LBB40_1-1, kind: FK_PCRel_1
1318; CHECK-NEXT: # BB#2: # %b
1319; CHECK-NEXT: jmp b # TAILCALL
1320; CHECK-NEXT: # encoding: [0xeb,A]
1321; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1322; CHECK-NEXT: .LBB40_1: # %a
1323; CHECK-NEXT: jmp a # TAILCALL
1324; CHECK-NEXT: # encoding: [0xeb,A]
1325; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1326entry:
1327 %load1 = load i16, i16* @g16
1328 %and = and i16 %load1, -4
1329 store i16 %and, i16* @g16
1330 %cond = icmp eq i16 %and, 0
1331 br i1 %cond, label %a, label %b
1332
1333a:
1334 tail call void @a()
1335 ret void
1336
1337b:
1338 tail call void @b()
1339 ret void
1340}
1341
1342define void @and8_imm_br() nounwind {
1343; CHECK-LABEL: and8_imm_br:
1344; CHECK: # BB#0: # %entry
1345; CHECK-NEXT: andb $-4, {{.*}}(%rip) # encoding: [0x80,0x25,A,A,A,A,0xfc]
1346; CHECK-NEXT: # fixup A - offset: 2, value: g8-5, kind: reloc_riprel_4byte
1347; CHECK-NEXT: je .LBB41_1 # encoding: [0x74,A]
1348; CHECK-NEXT: # fixup A - offset: 1, value: .LBB41_1-1, kind: FK_PCRel_1
1349; CHECK-NEXT: # BB#2: # %b
1350; CHECK-NEXT: jmp b # TAILCALL
1351; CHECK-NEXT: # encoding: [0xeb,A]
1352; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1353; CHECK-NEXT: .LBB41_1: # %a
1354; CHECK-NEXT: jmp a # TAILCALL
1355; CHECK-NEXT: # encoding: [0xeb,A]
1356; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1357entry:
1358 %load1 = load i8, i8* @g8
1359 %and = and i8 %load1, -4
1360 store i8 %and, i8* @g8
1361 %cond = icmp eq i8 %and, 0
1362 br i1 %cond, label %a, label %b
1363
1364a:
1365 tail call void @a()
1366 ret void
1367
1368b:
1369 tail call void @b()
1370 ret void
1371}
1372
1373define void @and64_reg_br(i64 %arg) nounwind {
1374; CHECK-LABEL: and64_reg_br:
1375; CHECK: # BB#0: # %entry
1376; CHECK-NEXT: andq %rdi, {{.*}}(%rip) # encoding: [0x48,0x21,0x3d,A,A,A,A]
1377; CHECK-NEXT: # fixup A - offset: 3, value: g64-4, kind: reloc_riprel_4byte
1378; CHECK-NEXT: je .LBB42_1 # encoding: [0x74,A]
1379; CHECK-NEXT: # fixup A - offset: 1, value: .LBB42_1-1, kind: FK_PCRel_1
1380; CHECK-NEXT: # BB#2: # %b
1381; CHECK-NEXT: jmp b # TAILCALL
1382; CHECK-NEXT: # encoding: [0xeb,A]
1383; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1384; CHECK-NEXT: .LBB42_1: # %a
1385; CHECK-NEXT: jmp a # TAILCALL
1386; CHECK-NEXT: # encoding: [0xeb,A]
1387; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1388entry:
1389 %load1 = load i64, i64* @g64
1390 %and = and i64 %load1, %arg
1391 store i64 %and, i64* @g64
1392 %cond = icmp eq i64 %and, 0
1393 br i1 %cond, label %a, label %b
1394
1395a:
1396 tail call void @a()
1397 ret void
1398
1399b:
1400 tail call void @b()
1401 ret void
1402}
1403
1404define void @and32_reg_br(i32 %arg) nounwind {
1405; CHECK-LABEL: and32_reg_br:
1406; CHECK: # BB#0: # %entry
1407; CHECK-NEXT: andl %edi, {{.*}}(%rip) # encoding: [0x21,0x3d,A,A,A,A]
1408; CHECK-NEXT: # fixup A - offset: 2, value: g32-4, kind: reloc_riprel_4byte
1409; CHECK-NEXT: je .LBB43_1 # encoding: [0x74,A]
1410; CHECK-NEXT: # fixup A - offset: 1, value: .LBB43_1-1, kind: FK_PCRel_1
1411; CHECK-NEXT: # BB#2: # %b
1412; CHECK-NEXT: jmp b # TAILCALL
1413; CHECK-NEXT: # encoding: [0xeb,A]
1414; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1415; CHECK-NEXT: .LBB43_1: # %a
1416; CHECK-NEXT: jmp a # TAILCALL
1417; CHECK-NEXT: # encoding: [0xeb,A]
1418; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1419entry:
1420 %load1 = load i32, i32* @g32
1421 %and = and i32 %load1, %arg
1422 store i32 %and, i32* @g32
1423 %cond = icmp eq i32 %and, 0
1424 br i1 %cond, label %a, label %b
1425
1426a:
1427 tail call void @a()
1428 ret void
1429
1430b:
1431 tail call void @b()
1432 ret void
1433}
1434
1435define void @and16_reg_br(i16 %arg) nounwind {
1436; CHECK-LABEL: and16_reg_br:
1437; CHECK: # BB#0: # %entry
1438; CHECK-NEXT: andw %di, {{.*}}(%rip) # encoding: [0x66,0x21,0x3d,A,A,A,A]
1439; CHECK-NEXT: # fixup A - offset: 3, value: g16-4, kind: reloc_riprel_4byte
1440; CHECK-NEXT: je .LBB44_1 # encoding: [0x74,A]
1441; CHECK-NEXT: # fixup A - offset: 1, value: .LBB44_1-1, kind: FK_PCRel_1
1442; CHECK-NEXT: # BB#2: # %b
1443; CHECK-NEXT: jmp b # TAILCALL
1444; CHECK-NEXT: # encoding: [0xeb,A]
1445; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1446; CHECK-NEXT: .LBB44_1: # %a
1447; CHECK-NEXT: jmp a # TAILCALL
1448; CHECK-NEXT: # encoding: [0xeb,A]
1449; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1450entry:
1451 %load1 = load i16, i16* @g16
1452 %and = and i16 %load1, %arg
1453 store i16 %and, i16* @g16
1454 %cond = icmp eq i16 %and, 0
1455 br i1 %cond, label %a, label %b
1456
1457a:
1458 tail call void @a()
1459 ret void
1460
1461b:
1462 tail call void @b()
1463 ret void
1464}
1465
1466define void @and8_reg_br(i8 %arg) nounwind {
1467; CHECK-LABEL: and8_reg_br:
1468; CHECK: # BB#0: # %entry
1469; CHECK-NEXT: andb %dil, {{.*}}(%rip) # encoding: [0x40,0x20,0x3d,A,A,A,A]
1470; CHECK-NEXT: # fixup A - offset: 3, value: g8-4, kind: reloc_riprel_4byte
1471; CHECK-NEXT: je .LBB45_1 # encoding: [0x74,A]
1472; CHECK-NEXT: # fixup A - offset: 1, value: .LBB45_1-1, kind: FK_PCRel_1
1473; CHECK-NEXT: # BB#2: # %b
1474; CHECK-NEXT: jmp b # TAILCALL
1475; CHECK-NEXT: # encoding: [0xeb,A]
1476; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1477; CHECK-NEXT: .LBB45_1: # %a
1478; CHECK-NEXT: jmp a # TAILCALL
1479; CHECK-NEXT: # encoding: [0xeb,A]
1480; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1481entry:
1482 %load1 = load i8, i8* @g8
1483 %and = and i8 %load1, %arg
1484 store i8 %and, i8* @g8
1485 %cond = icmp eq i8 %and, 0
1486 br i1 %cond, label %a, label %b
1487
1488a:
1489 tail call void @a()
1490 ret void
1491
1492b:
1493 tail call void @b()
1494 ret void
1495}
1496
1497define void @or64_imm32_br() nounwind {
1498; CHECK-LABEL: or64_imm32_br:
1499; CHECK: # BB#0: # %entry
1500; CHECK-NEXT: orq $16777215, {{.*}}(%rip) # encoding: [0x48,0x81,0x0d,A,A,A,A,0xff,0xff,0xff,0x00]
1501; CHECK-NEXT: # fixup A - offset: 3, value: g64-8, kind: reloc_riprel_4byte
1502; CHECK-NEXT: # imm = 0xFFFFFF
1503; CHECK-NEXT: je .LBB46_1 # encoding: [0x74,A]
1504; CHECK-NEXT: # fixup A - offset: 1, value: .LBB46_1-1, kind: FK_PCRel_1
1505; CHECK-NEXT: # BB#2: # %b
1506; CHECK-NEXT: jmp b # TAILCALL
1507; CHECK-NEXT: # encoding: [0xeb,A]
1508; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1509; CHECK-NEXT: .LBB46_1: # %a
1510; CHECK-NEXT: jmp a # TAILCALL
1511; CHECK-NEXT: # encoding: [0xeb,A]
1512; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1513entry:
1514 %load1 = load i64, i64* @g64
1515 ; Or 0x00FFFFFF, a positive immediate requiring 24-bits.
1516 %or = or i64 %load1, 16777215
1517 store i64 %or, i64* @g64
1518 %cond = icmp eq i64 %or, 0
1519 br i1 %cond, label %a, label %b
1520
1521a:
1522 tail call void @a()
1523 ret void
1524
1525b:
1526 tail call void @b()
1527 ret void
1528}
1529
1530define void @or64_sext_imm32_br() nounwind {
1531; CHECK-LABEL: or64_sext_imm32_br:
1532; CHECK: # BB#0: # %entry
1533; CHECK-NEXT: orq $-2147483648, {{.*}}(%rip) # encoding: [0x48,0x81,0x0d,A,A,A,A,0x00,0x00,0x00,0x80]
1534; CHECK-NEXT: # fixup A - offset: 3, value: g64-8, kind: reloc_riprel_4byte
1535; CHECK-NEXT: # imm = 0x80000000
1536; CHECK-NEXT: je .LBB47_1 # encoding: [0x74,A]
1537; CHECK-NEXT: # fixup A - offset: 1, value: .LBB47_1-1, kind: FK_PCRel_1
1538; CHECK-NEXT: # BB#2: # %b
1539; CHECK-NEXT: jmp b # TAILCALL
1540; CHECK-NEXT: # encoding: [0xeb,A]
1541; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1542; CHECK-NEXT: .LBB47_1: # %a
1543; CHECK-NEXT: jmp a # TAILCALL
1544; CHECK-NEXT: # encoding: [0xeb,A]
1545; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1546entry:
1547 %load1 = load i64, i64* @g64
1548 ; Or -0x80000000, which requires sign-extended 32 bits.
1549 %or = or i64 %load1, -2147483648
1550 store i64 %or, i64* @g64
1551 %cond = icmp eq i64 %or, 0
1552 br i1 %cond, label %a, label %b
1553
1554a:
1555 tail call void @a()
1556 ret void
1557
1558b:
1559 tail call void @b()
1560 ret void
1561}
1562
1563define void @or64_imm8_br() nounwind {
1564; CHECK-LABEL: or64_imm8_br:
1565; CHECK: # BB#0: # %entry
1566; CHECK-NEXT: orq $15, {{.*}}(%rip) # encoding: [0x48,0x83,0x0d,A,A,A,A,0x0f]
1567; CHECK-NEXT: # fixup A - offset: 3, value: g64-5, kind: reloc_riprel_4byte
1568; CHECK-NEXT: je .LBB48_1 # encoding: [0x74,A]
1569; CHECK-NEXT: # fixup A - offset: 1, value: .LBB48_1-1, kind: FK_PCRel_1
1570; CHECK-NEXT: # BB#2: # %b
1571; CHECK-NEXT: jmp b # TAILCALL
1572; CHECK-NEXT: # encoding: [0xeb,A]
1573; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1574; CHECK-NEXT: .LBB48_1: # %a
1575; CHECK-NEXT: jmp a # TAILCALL
1576; CHECK-NEXT: # encoding: [0xeb,A]
1577; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1578entry:
1579 %load1 = load i64, i64* @g64
1580 %or = or i64 %load1, 15
1581 store i64 %or, i64* @g64
1582 %cond = icmp eq i64 %or, 0
1583 br i1 %cond, label %a, label %b
1584
1585a:
1586 tail call void @a()
1587 ret void
1588
1589b:
1590 tail call void @b()
1591 ret void
1592}
1593
1594define void @or64_imm8_neg_br() nounwind {
1595; CHECK-LABEL: or64_imm8_neg_br:
1596; CHECK: # BB#0: # %entry
1597; CHECK-NEXT: orq $-4, {{.*}}(%rip) # encoding: [0x48,0x83,0x0d,A,A,A,A,0xfc]
1598; CHECK-NEXT: # fixup A - offset: 3, value: g64-5, kind: reloc_riprel_4byte
1599; CHECK-NEXT: je .LBB49_1 # encoding: [0x74,A]
1600; CHECK-NEXT: # fixup A - offset: 1, value: .LBB49_1-1, kind: FK_PCRel_1
1601; CHECK-NEXT: # BB#2: # %b
1602; CHECK-NEXT: jmp b # TAILCALL
1603; CHECK-NEXT: # encoding: [0xeb,A]
1604; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1605; CHECK-NEXT: .LBB49_1: # %a
1606; CHECK-NEXT: jmp a # TAILCALL
1607; CHECK-NEXT: # encoding: [0xeb,A]
1608; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1609entry:
1610 %load1 = load i64, i64* @g64
1611 %or = or i64 %load1, -4
1612 store i64 %or, i64* @g64
1613 %cond = icmp eq i64 %or, 0
1614 br i1 %cond, label %a, label %b
1615
1616a:
1617 tail call void @a()
1618 ret void
1619
1620b:
1621 tail call void @b()
1622 ret void
1623}
1624
1625define void @or32_imm_br() nounwind {
1626; CHECK-LABEL: or32_imm_br:
1627; CHECK: # BB#0: # %entry
1628; CHECK-NEXT: orl $-2147483648, {{.*}}(%rip) # encoding: [0x81,0x0d,A,A,A,A,0x00,0x00,0x00,0x80]
1629; CHECK-NEXT: # fixup A - offset: 2, value: g32-8, kind: reloc_riprel_4byte
1630; CHECK-NEXT: # imm = 0x80000000
1631; CHECK-NEXT: je .LBB50_1 # encoding: [0x74,A]
1632; CHECK-NEXT: # fixup A - offset: 1, value: .LBB50_1-1, kind: FK_PCRel_1
1633; CHECK-NEXT: # BB#2: # %b
1634; CHECK-NEXT: jmp b # TAILCALL
1635; CHECK-NEXT: # encoding: [0xeb,A]
1636; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1637; CHECK-NEXT: .LBB50_1: # %a
1638; CHECK-NEXT: jmp a # TAILCALL
1639; CHECK-NEXT: # encoding: [0xeb,A]
1640; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1641entry:
1642 %load1 = load i32, i32* @g32
1643 ; Or 0x80000000, a positive number requiring 32 bits of immediate.
1644 %or = or i32 %load1, 2147483648
1645 store i32 %or, i32* @g32
1646 %cond = icmp eq i32 %or, 0
1647 br i1 %cond, label %a, label %b
1648
1649a:
1650 tail call void @a()
1651 ret void
1652
1653b:
1654 tail call void @b()
1655 ret void
1656}
1657
1658define void @or32_imm8_br() nounwind {
1659; CHECK-LABEL: or32_imm8_br:
1660; CHECK: # BB#0: # %entry
1661; CHECK-NEXT: orl $15, {{.*}}(%rip) # encoding: [0x83,0x0d,A,A,A,A,0x0f]
1662; CHECK-NEXT: # fixup A - offset: 2, value: g32-5, kind: reloc_riprel_4byte
1663; CHECK-NEXT: je .LBB51_1 # encoding: [0x74,A]
1664; CHECK-NEXT: # fixup A - offset: 1, value: .LBB51_1-1, kind: FK_PCRel_1
1665; CHECK-NEXT: # BB#2: # %b
1666; CHECK-NEXT: jmp b # TAILCALL
1667; CHECK-NEXT: # encoding: [0xeb,A]
1668; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1669; CHECK-NEXT: .LBB51_1: # %a
1670; CHECK-NEXT: jmp a # TAILCALL
1671; CHECK-NEXT: # encoding: [0xeb,A]
1672; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1673entry:
1674 %load1 = load i32, i32* @g32
1675 %or = or i32 %load1, 15
1676 store i32 %or, i32* @g32
1677 %cond = icmp eq i32 %or, 0
1678 br i1 %cond, label %a, label %b
1679
1680a:
1681 tail call void @a()
1682 ret void
1683
1684b:
1685 tail call void @b()
1686 ret void
1687}
1688
1689define void @or32_imm8_neg_br() nounwind {
1690; CHECK-LABEL: or32_imm8_neg_br:
1691; CHECK: # BB#0: # %entry
1692; CHECK-NEXT: orl $-4, {{.*}}(%rip) # encoding: [0x83,0x0d,A,A,A,A,0xfc]
1693; CHECK-NEXT: # fixup A - offset: 2, value: g32-5, kind: reloc_riprel_4byte
1694; CHECK-NEXT: je .LBB52_1 # encoding: [0x74,A]
1695; CHECK-NEXT: # fixup A - offset: 1, value: .LBB52_1-1, kind: FK_PCRel_1
1696; CHECK-NEXT: # BB#2: # %b
1697; CHECK-NEXT: jmp b # TAILCALL
1698; CHECK-NEXT: # encoding: [0xeb,A]
1699; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1700; CHECK-NEXT: .LBB52_1: # %a
1701; CHECK-NEXT: jmp a # TAILCALL
1702; CHECK-NEXT: # encoding: [0xeb,A]
1703; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1704entry:
1705 %load1 = load i32, i32* @g32
1706 %or = or i32 %load1, -4
1707 store i32 %or, i32* @g32
1708 %cond = icmp eq i32 %or, 0
1709 br i1 %cond, label %a, label %b
1710
1711a:
1712 tail call void @a()
1713 ret void
1714
1715b:
1716 tail call void @b()
1717 ret void
1718}
1719
1720define void @or16_imm_br() nounwind {
1721; CHECK-LABEL: or16_imm_br:
1722; CHECK: # BB#0: # %entry
1723; CHECK-NEXT: orw $-32768, {{.*}}(%rip) # encoding: [0x66,0x81,0x0d,A,A,A,A,0x00,0x80]
1724; CHECK-NEXT: # fixup A - offset: 3, value: g16-6, kind: reloc_riprel_4byte
1725; CHECK-NEXT: # imm = 0x8000
1726; CHECK-NEXT: je .LBB53_1 # encoding: [0x74,A]
1727; CHECK-NEXT: # fixup A - offset: 1, value: .LBB53_1-1, kind: FK_PCRel_1
1728; CHECK-NEXT: # BB#2: # %b
1729; CHECK-NEXT: jmp b # TAILCALL
1730; CHECK-NEXT: # encoding: [0xeb,A]
1731; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1732; CHECK-NEXT: .LBB53_1: # %a
1733; CHECK-NEXT: jmp a # TAILCALL
1734; CHECK-NEXT: # encoding: [0xeb,A]
1735; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1736entry:
1737 %load1 = load i16, i16* @g16
1738 %or = or i16 %load1, 32768
1739 store i16 %or, i16* @g16
1740 %cond = icmp eq i16 %or, 0
1741 br i1 %cond, label %a, label %b
1742
1743a:
1744 tail call void @a()
1745 ret void
1746
1747b:
1748 tail call void @b()
1749 ret void
1750}
1751
1752define void @or16_imm8_br() nounwind {
1753; CHECK-LABEL: or16_imm8_br:
1754; CHECK: # BB#0: # %entry
1755; CHECK-NEXT: orw $15, {{.*}}(%rip) # encoding: [0x66,0x83,0x0d,A,A,A,A,0x0f]
1756; CHECK-NEXT: # fixup A - offset: 3, value: g16-5, kind: reloc_riprel_4byte
1757; CHECK-NEXT: je .LBB54_1 # encoding: [0x74,A]
1758; CHECK-NEXT: # fixup A - offset: 1, value: .LBB54_1-1, kind: FK_PCRel_1
1759; CHECK-NEXT: # BB#2: # %b
1760; CHECK-NEXT: jmp b # TAILCALL
1761; CHECK-NEXT: # encoding: [0xeb,A]
1762; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1763; CHECK-NEXT: .LBB54_1: # %a
1764; CHECK-NEXT: jmp a # TAILCALL
1765; CHECK-NEXT: # encoding: [0xeb,A]
1766; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1767entry:
1768 %load1 = load i16, i16* @g16
1769 %or = or i16 %load1, 15
1770 store i16 %or, i16* @g16
1771 %cond = icmp eq i16 %or, 0
1772 br i1 %cond, label %a, label %b
1773
1774a:
1775 tail call void @a()
1776 ret void
1777
1778b:
1779 tail call void @b()
1780 ret void
1781}
1782
1783define void @or16_imm8_neg_br() nounwind {
1784; CHECK-LABEL: or16_imm8_neg_br:
1785; CHECK: # BB#0: # %entry
1786; CHECK-NEXT: orw $-4, {{.*}}(%rip) # encoding: [0x66,0x83,0x0d,A,A,A,A,0xfc]
1787; CHECK-NEXT: # fixup A - offset: 3, value: g16-5, kind: reloc_riprel_4byte
1788; CHECK-NEXT: je .LBB55_1 # encoding: [0x74,A]
1789; CHECK-NEXT: # fixup A - offset: 1, value: .LBB55_1-1, kind: FK_PCRel_1
1790; CHECK-NEXT: # BB#2: # %b
1791; CHECK-NEXT: jmp b # TAILCALL
1792; CHECK-NEXT: # encoding: [0xeb,A]
1793; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1794; CHECK-NEXT: .LBB55_1: # %a
1795; CHECK-NEXT: jmp a # TAILCALL
1796; CHECK-NEXT: # encoding: [0xeb,A]
1797; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1798entry:
1799 %load1 = load i16, i16* @g16
1800 %or = or i16 %load1, -4
1801 store i16 %or, i16* @g16
1802 %cond = icmp eq i16 %or, 0
1803 br i1 %cond, label %a, label %b
1804
1805a:
1806 tail call void @a()
1807 ret void
1808
1809b:
1810 tail call void @b()
1811 ret void
1812}
1813
1814define void @or8_imm_br() nounwind {
1815; CHECK-LABEL: or8_imm_br:
1816; CHECK: # BB#0: # %entry
1817; CHECK-NEXT: orb $-4, {{.*}}(%rip) # encoding: [0x80,0x0d,A,A,A,A,0xfc]
1818; CHECK-NEXT: # fixup A - offset: 2, value: g8-5, kind: reloc_riprel_4byte
1819; CHECK-NEXT: je .LBB56_1 # encoding: [0x74,A]
1820; CHECK-NEXT: # fixup A - offset: 1, value: .LBB56_1-1, kind: FK_PCRel_1
1821; CHECK-NEXT: # BB#2: # %b
1822; CHECK-NEXT: jmp b # TAILCALL
1823; CHECK-NEXT: # encoding: [0xeb,A]
1824; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1825; CHECK-NEXT: .LBB56_1: # %a
1826; CHECK-NEXT: jmp a # TAILCALL
1827; CHECK-NEXT: # encoding: [0xeb,A]
1828; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1829entry:
1830 %load1 = load i8, i8* @g8
1831 %or = or i8 %load1, -4
1832 store i8 %or, i8* @g8
1833 %cond = icmp eq i8 %or, 0
1834 br i1 %cond, label %a, label %b
1835
1836a:
1837 tail call void @a()
1838 ret void
1839
1840b:
1841 tail call void @b()
1842 ret void
1843}
1844
1845define void @or64_reg_br(i64 %arg) nounwind {
1846; CHECK-LABEL: or64_reg_br:
1847; CHECK: # BB#0: # %entry
1848; CHECK-NEXT: orq %rdi, {{.*}}(%rip) # encoding: [0x48,0x09,0x3d,A,A,A,A]
1849; CHECK-NEXT: # fixup A - offset: 3, value: g64-4, kind: reloc_riprel_4byte
1850; CHECK-NEXT: je .LBB57_1 # encoding: [0x74,A]
1851; CHECK-NEXT: # fixup A - offset: 1, value: .LBB57_1-1, kind: FK_PCRel_1
1852; CHECK-NEXT: # BB#2: # %b
1853; CHECK-NEXT: jmp b # TAILCALL
1854; CHECK-NEXT: # encoding: [0xeb,A]
1855; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1856; CHECK-NEXT: .LBB57_1: # %a
1857; CHECK-NEXT: jmp a # TAILCALL
1858; CHECK-NEXT: # encoding: [0xeb,A]
1859; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1860entry:
1861 %load1 = load i64, i64* @g64
1862 %or = or i64 %load1, %arg
1863 store i64 %or, i64* @g64
1864 %cond = icmp eq i64 %or, 0
1865 br i1 %cond, label %a, label %b
1866
1867a:
1868 tail call void @a()
1869 ret void
1870
1871b:
1872 tail call void @b()
1873 ret void
1874}
1875
1876define void @or32_reg_br(i32 %arg) nounwind {
1877; CHECK-LABEL: or32_reg_br:
1878; CHECK: # BB#0: # %entry
1879; CHECK-NEXT: orl %edi, {{.*}}(%rip) # encoding: [0x09,0x3d,A,A,A,A]
1880; CHECK-NEXT: # fixup A - offset: 2, value: g32-4, kind: reloc_riprel_4byte
1881; CHECK-NEXT: je .LBB58_1 # encoding: [0x74,A]
1882; CHECK-NEXT: # fixup A - offset: 1, value: .LBB58_1-1, kind: FK_PCRel_1
1883; CHECK-NEXT: # BB#2: # %b
1884; CHECK-NEXT: jmp b # TAILCALL
1885; CHECK-NEXT: # encoding: [0xeb,A]
1886; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1887; CHECK-NEXT: .LBB58_1: # %a
1888; CHECK-NEXT: jmp a # TAILCALL
1889; CHECK-NEXT: # encoding: [0xeb,A]
1890; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1891entry:
1892 %load1 = load i32, i32* @g32
1893 %or = or i32 %load1, %arg
1894 store i32 %or, i32* @g32
1895 %cond = icmp eq i32 %or, 0
1896 br i1 %cond, label %a, label %b
1897
1898a:
1899 tail call void @a()
1900 ret void
1901
1902b:
1903 tail call void @b()
1904 ret void
1905}
1906
1907define void @or16_reg_br(i16 %arg) nounwind {
1908; CHECK-LABEL: or16_reg_br:
1909; CHECK: # BB#0: # %entry
1910; CHECK-NEXT: orw %di, {{.*}}(%rip) # encoding: [0x66,0x09,0x3d,A,A,A,A]
1911; CHECK-NEXT: # fixup A - offset: 3, value: g16-4, kind: reloc_riprel_4byte
1912; CHECK-NEXT: je .LBB59_1 # encoding: [0x74,A]
1913; CHECK-NEXT: # fixup A - offset: 1, value: .LBB59_1-1, kind: FK_PCRel_1
1914; CHECK-NEXT: # BB#2: # %b
1915; CHECK-NEXT: jmp b # TAILCALL
1916; CHECK-NEXT: # encoding: [0xeb,A]
1917; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1918; CHECK-NEXT: .LBB59_1: # %a
1919; CHECK-NEXT: jmp a # TAILCALL
1920; CHECK-NEXT: # encoding: [0xeb,A]
1921; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1922entry:
1923 %load1 = load i16, i16* @g16
1924 %or = or i16 %load1, %arg
1925 store i16 %or, i16* @g16
1926 %cond = icmp eq i16 %or, 0
1927 br i1 %cond, label %a, label %b
1928
1929a:
1930 tail call void @a()
1931 ret void
1932
1933b:
1934 tail call void @b()
1935 ret void
1936}
1937
1938define void @or8_reg_br(i8 %arg) nounwind {
1939; CHECK-LABEL: or8_reg_br:
1940; CHECK: # BB#0: # %entry
1941; CHECK-NEXT: orb %dil, {{.*}}(%rip) # encoding: [0x40,0x08,0x3d,A,A,A,A]
1942; CHECK-NEXT: # fixup A - offset: 3, value: g8-4, kind: reloc_riprel_4byte
1943; CHECK-NEXT: je .LBB60_1 # encoding: [0x74,A]
1944; CHECK-NEXT: # fixup A - offset: 1, value: .LBB60_1-1, kind: FK_PCRel_1
1945; CHECK-NEXT: # BB#2: # %b
1946; CHECK-NEXT: jmp b # TAILCALL
1947; CHECK-NEXT: # encoding: [0xeb,A]
1948; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1949; CHECK-NEXT: .LBB60_1: # %a
1950; CHECK-NEXT: jmp a # TAILCALL
1951; CHECK-NEXT: # encoding: [0xeb,A]
1952; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1953entry:
1954 %load1 = load i8, i8* @g8
1955 %or = or i8 %load1, %arg
1956 store i8 %or, i8* @g8
1957 %cond = icmp eq i8 %or, 0
1958 br i1 %cond, label %a, label %b
1959
1960a:
1961 tail call void @a()
1962 ret void
1963
1964b:
1965 tail call void @b()
1966 ret void
1967}
1968
1969define void @xor64_imm32_br() nounwind {
1970; CHECK-LABEL: xor64_imm32_br:
1971; CHECK: # BB#0: # %entry
1972; CHECK-NEXT: xorq $16777215, {{.*}}(%rip) # encoding: [0x48,0x81,0x35,A,A,A,A,0xff,0xff,0xff,0x00]
1973; CHECK-NEXT: # fixup A - offset: 3, value: g64-8, kind: reloc_riprel_4byte
1974; CHECK-NEXT: # imm = 0xFFFFFF
1975; CHECK-NEXT: je .LBB61_1 # encoding: [0x74,A]
1976; CHECK-NEXT: # fixup A - offset: 1, value: .LBB61_1-1, kind: FK_PCRel_1
1977; CHECK-NEXT: # BB#2: # %b
1978; CHECK-NEXT: jmp b # TAILCALL
1979; CHECK-NEXT: # encoding: [0xeb,A]
1980; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1981; CHECK-NEXT: .LBB61_1: # %a
1982; CHECK-NEXT: jmp a # TAILCALL
1983; CHECK-NEXT: # encoding: [0xeb,A]
1984; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1985entry:
1986 %load1 = load i64, i64* @g64
1987 ; Xor 0x00FFFFFF, a positive immediate requiring 24-bits.
1988 %xor = xor i64 %load1, 16777215
1989 store i64 %xor, i64* @g64
1990 %cond = icmp eq i64 %xor, 0
1991 br i1 %cond, label %a, label %b
1992
1993a:
1994 tail call void @a()
1995 ret void
1996
1997b:
1998 tail call void @b()
1999 ret void
2000}
2001
2002define void @xor64_sext_imm32_br() nounwind {
2003; CHECK-LABEL: xor64_sext_imm32_br:
2004; CHECK: # BB#0: # %entry
2005; CHECK-NEXT: xorq $-2147483648, {{.*}}(%rip) # encoding: [0x48,0x81,0x35,A,A,A,A,0x00,0x00,0x00,0x80]
2006; CHECK-NEXT: # fixup A - offset: 3, value: g64-8, kind: reloc_riprel_4byte
2007; CHECK-NEXT: # imm = 0x80000000
2008; CHECK-NEXT: je .LBB62_1 # encoding: [0x74,A]
2009; CHECK-NEXT: # fixup A - offset: 1, value: .LBB62_1-1, kind: FK_PCRel_1
2010; CHECK-NEXT: # BB#2: # %b
2011; CHECK-NEXT: jmp b # TAILCALL
2012; CHECK-NEXT: # encoding: [0xeb,A]
2013; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2014; CHECK-NEXT: .LBB62_1: # %a
2015; CHECK-NEXT: jmp a # TAILCALL
2016; CHECK-NEXT: # encoding: [0xeb,A]
2017; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2018entry:
2019 %load1 = load i64, i64* @g64
2020 ; Xor -0x80000000, which requires sign-extended 32 bits.
2021 %xor = xor i64 %load1, -2147483648
2022 store i64 %xor, i64* @g64
2023 %cond = icmp eq i64 %xor, 0
2024 br i1 %cond, label %a, label %b
2025
2026a:
2027 tail call void @a()
2028 ret void
2029
2030b:
2031 tail call void @b()
2032 ret void
2033}
2034
2035define void @xor64_imm8_br() nounwind {
2036; CHECK-LABEL: xor64_imm8_br:
2037; CHECK: # BB#0: # %entry
2038; CHECK-NEXT: xorq $15, {{.*}}(%rip) # encoding: [0x48,0x83,0x35,A,A,A,A,0x0f]
2039; CHECK-NEXT: # fixup A - offset: 3, value: g64-5, kind: reloc_riprel_4byte
2040; CHECK-NEXT: je .LBB63_1 # encoding: [0x74,A]
2041; CHECK-NEXT: # fixup A - offset: 1, value: .LBB63_1-1, kind: FK_PCRel_1
2042; CHECK-NEXT: # BB#2: # %b
2043; CHECK-NEXT: jmp b # TAILCALL
2044; CHECK-NEXT: # encoding: [0xeb,A]
2045; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2046; CHECK-NEXT: .LBB63_1: # %a
2047; CHECK-NEXT: jmp a # TAILCALL
2048; CHECK-NEXT: # encoding: [0xeb,A]
2049; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2050entry:
2051 %load1 = load i64, i64* @g64
2052 %xor = xor i64 %load1, 15
2053 store i64 %xor, i64* @g64
2054 %cond = icmp eq i64 %xor, 0
2055 br i1 %cond, label %a, label %b
2056
2057a:
2058 tail call void @a()
2059 ret void
2060
2061b:
2062 tail call void @b()
2063 ret void
2064}
2065
2066define void @xor64_imm8_neg_br() nounwind {
2067; CHECK-LABEL: xor64_imm8_neg_br:
2068; CHECK: # BB#0: # %entry
2069; CHECK-NEXT: xorq $-4, {{.*}}(%rip) # encoding: [0x48,0x83,0x35,A,A,A,A,0xfc]
2070; CHECK-NEXT: # fixup A - offset: 3, value: g64-5, kind: reloc_riprel_4byte
2071; CHECK-NEXT: je .LBB64_1 # encoding: [0x74,A]
2072; CHECK-NEXT: # fixup A - offset: 1, value: .LBB64_1-1, kind: FK_PCRel_1
2073; CHECK-NEXT: # BB#2: # %b
2074; CHECK-NEXT: jmp b # TAILCALL
2075; CHECK-NEXT: # encoding: [0xeb,A]
2076; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2077; CHECK-NEXT: .LBB64_1: # %a
2078; CHECK-NEXT: jmp a # TAILCALL
2079; CHECK-NEXT: # encoding: [0xeb,A]
2080; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2081entry:
2082 %load1 = load i64, i64* @g64
2083 %xor = xor i64 %load1, -4
2084 store i64 %xor, i64* @g64
2085 %cond = icmp eq i64 %xor, 0
2086 br i1 %cond, label %a, label %b
2087
2088a:
2089 tail call void @a()
2090 ret void
2091
2092b:
2093 tail call void @b()
2094 ret void
2095}
2096
2097define void @xor32_imm_br() nounwind {
2098; CHECK-LABEL: xor32_imm_br:
2099; CHECK: # BB#0: # %entry
2100; CHECK-NEXT: xorl $-2147483648, {{.*}}(%rip) # encoding: [0x81,0x35,A,A,A,A,0x00,0x00,0x00,0x80]
2101; CHECK-NEXT: # fixup A - offset: 2, value: g32-8, kind: reloc_riprel_4byte
2102; CHECK-NEXT: # imm = 0x80000000
2103; CHECK-NEXT: je .LBB65_1 # encoding: [0x74,A]
2104; CHECK-NEXT: # fixup A - offset: 1, value: .LBB65_1-1, kind: FK_PCRel_1
2105; CHECK-NEXT: # BB#2: # %b
2106; CHECK-NEXT: jmp b # TAILCALL
2107; CHECK-NEXT: # encoding: [0xeb,A]
2108; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2109; CHECK-NEXT: .LBB65_1: # %a
2110; CHECK-NEXT: jmp a # TAILCALL
2111; CHECK-NEXT: # encoding: [0xeb,A]
2112; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2113entry:
2114 %load1 = load i32, i32* @g32
2115 ; Xor 0x80000000, a positive number requiring 32 bits of immediate.
2116 %xor = xor i32 %load1, 2147483648
2117 store i32 %xor, i32* @g32
2118 %cond = icmp eq i32 %xor, 0
2119 br i1 %cond, label %a, label %b
2120
2121a:
2122 tail call void @a()
2123 ret void
2124
2125b:
2126 tail call void @b()
2127 ret void
2128}
2129
2130define void @xor32_imm8_br() nounwind {
2131; CHECK-LABEL: xor32_imm8_br:
2132; CHECK: # BB#0: # %entry
2133; CHECK-NEXT: xorl $15, {{.*}}(%rip) # encoding: [0x83,0x35,A,A,A,A,0x0f]
2134; CHECK-NEXT: # fixup A - offset: 2, value: g32-5, kind: reloc_riprel_4byte
2135; CHECK-NEXT: je .LBB66_1 # encoding: [0x74,A]
2136; CHECK-NEXT: # fixup A - offset: 1, value: .LBB66_1-1, kind: FK_PCRel_1
2137; CHECK-NEXT: # BB#2: # %b
2138; CHECK-NEXT: jmp b # TAILCALL
2139; CHECK-NEXT: # encoding: [0xeb,A]
2140; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2141; CHECK-NEXT: .LBB66_1: # %a
2142; CHECK-NEXT: jmp a # TAILCALL
2143; CHECK-NEXT: # encoding: [0xeb,A]
2144; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2145entry:
2146 %load1 = load i32, i32* @g32
2147 %xor = xor i32 %load1, 15
2148 store i32 %xor, i32* @g32
2149 %cond = icmp eq i32 %xor, 0
2150 br i1 %cond, label %a, label %b
2151
2152a:
2153 tail call void @a()
2154 ret void
2155
2156b:
2157 tail call void @b()
2158 ret void
2159}
2160
2161define void @xor32_imm8_neg_br() nounwind {
2162; CHECK-LABEL: xor32_imm8_neg_br:
2163; CHECK: # BB#0: # %entry
2164; CHECK-NEXT: xorl $-4, {{.*}}(%rip) # encoding: [0x83,0x35,A,A,A,A,0xfc]
2165; CHECK-NEXT: # fixup A - offset: 2, value: g32-5, kind: reloc_riprel_4byte
2166; CHECK-NEXT: je .LBB67_1 # encoding: [0x74,A]
2167; CHECK-NEXT: # fixup A - offset: 1, value: .LBB67_1-1, kind: FK_PCRel_1
2168; CHECK-NEXT: # BB#2: # %b
2169; CHECK-NEXT: jmp b # TAILCALL
2170; CHECK-NEXT: # encoding: [0xeb,A]
2171; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2172; CHECK-NEXT: .LBB67_1: # %a
2173; CHECK-NEXT: jmp a # TAILCALL
2174; CHECK-NEXT: # encoding: [0xeb,A]
2175; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2176entry:
2177 %load1 = load i32, i32* @g32
2178 %xor = xor i32 %load1, -4
2179 store i32 %xor, i32* @g32
2180 %cond = icmp eq i32 %xor, 0
2181 br i1 %cond, label %a, label %b
2182
2183a:
2184 tail call void @a()
2185 ret void
2186
2187b:
2188 tail call void @b()
2189 ret void
2190}
2191
2192define void @xor16_imm_br() nounwind {
2193; CHECK-LABEL: xor16_imm_br:
2194; CHECK: # BB#0: # %entry
2195; CHECK-NEXT: xorw $-32768, {{.*}}(%rip) # encoding: [0x66,0x81,0x35,A,A,A,A,0x00,0x80]
2196; CHECK-NEXT: # fixup A - offset: 3, value: g16-6, kind: reloc_riprel_4byte
2197; CHECK-NEXT: # imm = 0x8000
2198; CHECK-NEXT: je .LBB68_1 # encoding: [0x74,A]
2199; CHECK-NEXT: # fixup A - offset: 1, value: .LBB68_1-1, kind: FK_PCRel_1
2200; CHECK-NEXT: # BB#2: # %b
2201; CHECK-NEXT: jmp b # TAILCALL
2202; CHECK-NEXT: # encoding: [0xeb,A]
2203; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2204; CHECK-NEXT: .LBB68_1: # %a
2205; CHECK-NEXT: jmp a # TAILCALL
2206; CHECK-NEXT: # encoding: [0xeb,A]
2207; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2208entry:
2209 %load1 = load i16, i16* @g16
2210 %xor = xor i16 %load1, 32768
2211 store i16 %xor, i16* @g16
2212 %cond = icmp eq i16 %xor, 0
2213 br i1 %cond, label %a, label %b
2214
2215a:
2216 tail call void @a()
2217 ret void
2218
2219b:
2220 tail call void @b()
2221 ret void
2222}
2223
2224define void @xor16_imm8_br() nounwind {
2225; CHECK-LABEL: xor16_imm8_br:
2226; CHECK: # BB#0: # %entry
2227; CHECK-NEXT: xorw $15, {{.*}}(%rip) # encoding: [0x66,0x83,0x35,A,A,A,A,0x0f]
2228; CHECK-NEXT: # fixup A - offset: 3, value: g16-5, kind: reloc_riprel_4byte
2229; CHECK-NEXT: je .LBB69_1 # encoding: [0x74,A]
2230; CHECK-NEXT: # fixup A - offset: 1, value: .LBB69_1-1, kind: FK_PCRel_1
2231; CHECK-NEXT: # BB#2: # %b
2232; CHECK-NEXT: jmp b # TAILCALL
2233; CHECK-NEXT: # encoding: [0xeb,A]
2234; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2235; CHECK-NEXT: .LBB69_1: # %a
2236; CHECK-NEXT: jmp a # TAILCALL
2237; CHECK-NEXT: # encoding: [0xeb,A]
2238; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2239entry:
2240 %load1 = load i16, i16* @g16
2241 %xor = xor i16 %load1, 15
2242 store i16 %xor, i16* @g16
2243 %cond = icmp eq i16 %xor, 0
2244 br i1 %cond, label %a, label %b
2245
2246a:
2247 tail call void @a()
2248 ret void
2249
2250b:
2251 tail call void @b()
2252 ret void
2253}
2254
2255define void @xor16_imm8_neg_br() nounwind {
2256; CHECK-LABEL: xor16_imm8_neg_br:
2257; CHECK: # BB#0: # %entry
2258; CHECK-NEXT: xorw $-4, {{.*}}(%rip) # encoding: [0x66,0x83,0x35,A,A,A,A,0xfc]
2259; CHECK-NEXT: # fixup A - offset: 3, value: g16-5, kind: reloc_riprel_4byte
2260; CHECK-NEXT: je .LBB70_1 # encoding: [0x74,A]
2261; CHECK-NEXT: # fixup A - offset: 1, value: .LBB70_1-1, kind: FK_PCRel_1
2262; CHECK-NEXT: # BB#2: # %b
2263; CHECK-NEXT: jmp b # TAILCALL
2264; CHECK-NEXT: # encoding: [0xeb,A]
2265; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2266; CHECK-NEXT: .LBB70_1: # %a
2267; CHECK-NEXT: jmp a # TAILCALL
2268; CHECK-NEXT: # encoding: [0xeb,A]
2269; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2270entry:
2271 %load1 = load i16, i16* @g16
2272 %xor = xor i16 %load1, -4
2273 store i16 %xor, i16* @g16
2274 %cond = icmp eq i16 %xor, 0
2275 br i1 %cond, label %a, label %b
2276
2277a:
2278 tail call void @a()
2279 ret void
2280
2281b:
2282 tail call void @b()
2283 ret void
2284}
2285
2286define void @xor8_imm_br() nounwind {
2287; CHECK-LABEL: xor8_imm_br:
2288; CHECK: # BB#0: # %entry
2289; CHECK-NEXT: xorb $-4, {{.*}}(%rip) # encoding: [0x80,0x35,A,A,A,A,0xfc]
2290; CHECK-NEXT: # fixup A - offset: 2, value: g8-5, kind: reloc_riprel_4byte
2291; CHECK-NEXT: je .LBB71_1 # encoding: [0x74,A]
2292; CHECK-NEXT: # fixup A - offset: 1, value: .LBB71_1-1, kind: FK_PCRel_1
2293; CHECK-NEXT: # BB#2: # %b
2294; CHECK-NEXT: jmp b # TAILCALL
2295; CHECK-NEXT: # encoding: [0xeb,A]
2296; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2297; CHECK-NEXT: .LBB71_1: # %a
2298; CHECK-NEXT: jmp a # TAILCALL
2299; CHECK-NEXT: # encoding: [0xeb,A]
2300; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2301entry:
2302 %load1 = load i8, i8* @g8
2303 %xor = xor i8 %load1, -4
2304 store i8 %xor, i8* @g8
2305 %cond = icmp eq i8 %xor, 0
2306 br i1 %cond, label %a, label %b
2307
2308a:
2309 tail call void @a()
2310 ret void
2311
2312b:
2313 tail call void @b()
2314 ret void
2315}
2316
2317define void @xor64_reg_br(i64 %arg) nounwind {
2318; CHECK-LABEL: xor64_reg_br:
2319; CHECK: # BB#0: # %entry
2320; CHECK-NEXT: xorq %rdi, {{.*}}(%rip) # encoding: [0x48,0x31,0x3d,A,A,A,A]
2321; CHECK-NEXT: # fixup A - offset: 3, value: g64-4, kind: reloc_riprel_4byte
2322; CHECK-NEXT: je .LBB72_1 # encoding: [0x74,A]
2323; CHECK-NEXT: # fixup A - offset: 1, value: .LBB72_1-1, kind: FK_PCRel_1
2324; CHECK-NEXT: # BB#2: # %b
2325; CHECK-NEXT: jmp b # TAILCALL
2326; CHECK-NEXT: # encoding: [0xeb,A]
2327; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2328; CHECK-NEXT: .LBB72_1: # %a
2329; CHECK-NEXT: jmp a # TAILCALL
2330; CHECK-NEXT: # encoding: [0xeb,A]
2331; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2332entry:
2333 %load1 = load i64, i64* @g64
2334 %xor = xor i64 %load1, %arg
2335 store i64 %xor, i64* @g64
2336 %cond = icmp eq i64 %xor, 0
2337 br i1 %cond, label %a, label %b
2338
2339a:
2340 tail call void @a()
2341 ret void
2342
2343b:
2344 tail call void @b()
2345 ret void
2346}
2347
2348define void @xor32_reg_br(i32 %arg) nounwind {
2349; CHECK-LABEL: xor32_reg_br:
2350; CHECK: # BB#0: # %entry
2351; CHECK-NEXT: xorl %edi, {{.*}}(%rip) # encoding: [0x31,0x3d,A,A,A,A]
2352; CHECK-NEXT: # fixup A - offset: 2, value: g32-4, kind: reloc_riprel_4byte
2353; CHECK-NEXT: je .LBB73_1 # encoding: [0x74,A]
2354; CHECK-NEXT: # fixup A - offset: 1, value: .LBB73_1-1, kind: FK_PCRel_1
2355; CHECK-NEXT: # BB#2: # %b
2356; CHECK-NEXT: jmp b # TAILCALL
2357; CHECK-NEXT: # encoding: [0xeb,A]
2358; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2359; CHECK-NEXT: .LBB73_1: # %a
2360; CHECK-NEXT: jmp a # TAILCALL
2361; CHECK-NEXT: # encoding: [0xeb,A]
2362; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2363entry:
2364 %load1 = load i32, i32* @g32
2365 %xor = xor i32 %load1, %arg
2366 store i32 %xor, i32* @g32
2367 %cond = icmp eq i32 %xor, 0
2368 br i1 %cond, label %a, label %b
2369
2370a:
2371 tail call void @a()
2372 ret void
2373
2374b:
2375 tail call void @b()
2376 ret void
2377}
2378
2379define void @xor16_reg_br(i16 %arg) nounwind {
2380; CHECK-LABEL: xor16_reg_br:
2381; CHECK: # BB#0: # %entry
2382; CHECK-NEXT: xorw %di, {{.*}}(%rip) # encoding: [0x66,0x31,0x3d,A,A,A,A]
2383; CHECK-NEXT: # fixup A - offset: 3, value: g16-4, kind: reloc_riprel_4byte
2384; CHECK-NEXT: je .LBB74_1 # encoding: [0x74,A]
2385; CHECK-NEXT: # fixup A - offset: 1, value: .LBB74_1-1, kind: FK_PCRel_1
2386; CHECK-NEXT: # BB#2: # %b
2387; CHECK-NEXT: jmp b # TAILCALL
2388; CHECK-NEXT: # encoding: [0xeb,A]
2389; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2390; CHECK-NEXT: .LBB74_1: # %a
2391; CHECK-NEXT: jmp a # TAILCALL
2392; CHECK-NEXT: # encoding: [0xeb,A]
2393; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2394entry:
2395 %load1 = load i16, i16* @g16
2396 %xor = xor i16 %load1, %arg
2397 store i16 %xor, i16* @g16
2398 %cond = icmp eq i16 %xor, 0
2399 br i1 %cond, label %a, label %b
2400
2401a:
2402 tail call void @a()
2403 ret void
2404
2405b:
2406 tail call void @b()
2407 ret void
2408}
2409
2410define void @xor8_reg_br(i8 %arg) nounwind {
2411; CHECK-LABEL: xor8_reg_br:
2412; CHECK: # BB#0: # %entry
2413; CHECK-NEXT: xorb %dil, {{.*}}(%rip) # encoding: [0x40,0x30,0x3d,A,A,A,A]
2414; CHECK-NEXT: # fixup A - offset: 3, value: g8-4, kind: reloc_riprel_4byte
2415; CHECK-NEXT: je .LBB75_1 # encoding: [0x74,A]
2416; CHECK-NEXT: # fixup A - offset: 1, value: .LBB75_1-1, kind: FK_PCRel_1
2417; CHECK-NEXT: # BB#2: # %b
2418; CHECK-NEXT: jmp b # TAILCALL
2419; CHECK-NEXT: # encoding: [0xeb,A]
2420; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2421; CHECK-NEXT: .LBB75_1: # %a
2422; CHECK-NEXT: jmp a # TAILCALL
2423; CHECK-NEXT: # encoding: [0xeb,A]
2424; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2425entry:
2426 %load1 = load i8, i8* @g8
2427 %xor = xor i8 %load1, %arg
2428 store i8 %xor, i8* @g8
2429 %cond = icmp eq i8 %xor, 0
2430 br i1 %cond, label %a, label %b
2431
2432a:
2433 tail call void @a()
2434 ret void
2435
2436b:
2437 tail call void @b()
2438 ret void
2439}