blob: c524486d2c76e9f391d0b33a382dabb8731cf2d4 [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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +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
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000022; CHECK-NEXT: # %bb.2: # %b
Chandler Carruth4b611a82017-08-25 22:50:52 +000023; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000049; CHECK: # %bb.0: # %entry
Chandler Carruth52a31bf2017-09-07 23:54:24 +000050; 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
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000055; CHECK-NEXT: # %bb.2: # %b
Chandler Carruth52a31bf2017-09-07 23:54:24 +000056; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000082; CHECK: # %bb.0: # %entry
Chandler Carruth52a31bf2017-09-07 23:54:24 +000083; 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
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000088; CHECK-NEXT: # %bb.2: # %b
Chandler Carruth52a31bf2017-09-07 23:54:24 +000089; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000116; CHECK: # %bb.0: # %entry
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000117; 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
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000123; CHECK-NEXT: # %bb.1: # %a
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000124; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000152; CHECK: # %bb.0: # %entry
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000153; 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
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000159; CHECK-NEXT: # %bb.2: # %b
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000160; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000187; CHECK: # %bb.0: # %entry
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000188; 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
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000192; CHECK-NEXT: # %bb.2: # %b
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000193; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000220; CHECK: # %bb.0: # %entry
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000221; 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
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000225; CHECK-NEXT: # %bb.2: # %b
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000226; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000251; CHECK: # %bb.0: # %entry
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000252; 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
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000256; CHECK-NEXT: # %bb.2: # %b
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000257; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000282; 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
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000288; CHECK-NEXT: # %bb.2: # %b
Chandler Carruth4b611a82017-08-25 22:50:52 +0000289; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000315; CHECK: # %bb.0: # %entry
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000316; 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
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000320; CHECK-NEXT: # %bb.2: # %b
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000321; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000346; CHECK: # %bb.0: # %entry
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000347; 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
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000351; CHECK-NEXT: # %bb.2: # %b
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000352; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000377; 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
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000383; CHECK-NEXT: # %bb.2: # %b
Chandler Carruth4b611a82017-08-25 22:50:52 +0000384; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000410; CHECK: # %bb.0: # %entry
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000411; 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
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000415; CHECK-NEXT: # %bb.2: # %b
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000416; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000441; CHECK: # %bb.0: # %entry
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000442; 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
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000446; CHECK-NEXT: # %bb.2: # %b
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000447; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000472; 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
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000477; CHECK-NEXT: # %bb.2: # %b
Chandler Carruth4b611a82017-08-25 22:50:52 +0000478; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000503; 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
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000508; CHECK-NEXT: # %bb.2: # %b
Chandler Carruth4b611a82017-08-25 22:50:52 +0000509; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000534; 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
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000539; CHECK-NEXT: # %bb.2: # %b
Chandler Carruth4b611a82017-08-25 22:50:52 +0000540; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000565; 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
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000570; CHECK-NEXT: # %bb.2: # %b
Chandler Carruth4b611a82017-08-25 22:50:52 +0000571; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000596; 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
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000601; CHECK-NEXT: # %bb.2: # %b
Chandler Carruth4b611a82017-08-25 22:50:52 +0000602; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +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
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000633; CHECK-NEXT: # %bb.2: # %b
Chandler Carruth4b611a82017-08-25 22:50:52 +0000634; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000661; CHECK: # %bb.0: # %entry
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000662; 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
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000668; CHECK-NEXT: # %bb.2: # %b
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000669; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000696; CHECK: # %bb.0: # %entry
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000697; 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
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000701; CHECK-NEXT: # %bb.2: # %b
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000702; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000729; 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
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000735; CHECK-NEXT: # %bb.2: # %b
Chandler Carruth4b611a82017-08-25 22:50:52 +0000736; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000763; CHECK: # %bb.0: # %entry
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000764; 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
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000768; CHECK-NEXT: # %bb.2: # %b
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000769; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000796; 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
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000802; CHECK-NEXT: # %bb.2: # %b
Chandler Carruth4b611a82017-08-25 22:50:52 +0000803; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000830; CHECK: # %bb.0: # %entry
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000831; 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
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000835; CHECK-NEXT: # %bb.2: # %b
Chandler Carruth52a31bf2017-09-07 23:54:24 +0000836; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000863; 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
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000868; CHECK-NEXT: # %bb.2: # %b
Chandler Carruth4b611a82017-08-25 22:50:52 +0000869; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000896; 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
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000901; CHECK-NEXT: # %bb.2: # %b
Chandler Carruth4b611a82017-08-25 22:50:52 +0000902; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000927; 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
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000932; CHECK-NEXT: # %bb.2: # %b
Chandler Carruth4b611a82017-08-25 22:50:52 +0000933; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000958; 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
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000963; CHECK-NEXT: # %bb.2: # %b
Chandler Carruth4b611a82017-08-25 22:50:52 +0000964; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000989; 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
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000994; CHECK-NEXT: # %bb.2: # %b
Chandler Carruth4b611a82017-08-25 22:50:52 +0000995; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001020; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00001021; 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
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001026; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00001027; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001053; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00001054; 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
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001059; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00001060; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001086; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00001087; 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
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001091; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00001092; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001117; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00001118; 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
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001122; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00001123; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001148; CHECK: # %bb.0: # %entry
Amaury Sechet893a6b82018-02-23 11:50:42 +00001149; CHECK-NEXT: andl $-2147483648, {{.*}}(%rip) # encoding: [0x81,0x25,A,A,A,A,0x00,0x00,0x00,0x80]
1150; CHECK-NEXT: # fixup A - offset: 2, value: g32-8, kind: reloc_riprel_4byte
Chandler Carruthacbcf062017-09-08 00:17:12 +00001151; CHECK-NEXT: # imm = 0x80000000
Chandler Carruthacbcf062017-09-08 00:17:12 +00001152; CHECK-NEXT: jne .LBB35_2 # encoding: [0x75,A]
1153; CHECK-NEXT: # fixup A - offset: 1, value: .LBB35_2-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001154; CHECK-NEXT: # %bb.1: # %a
Chandler Carruthacbcf062017-09-08 00:17:12 +00001155; CHECK-NEXT: jmp a # TAILCALL
1156; CHECK-NEXT: # encoding: [0xeb,A]
1157; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1158; CHECK-NEXT: .LBB35_2: # %b
1159; CHECK-NEXT: jmp b # TAILCALL
1160; CHECK-NEXT: # encoding: [0xeb,A]
1161; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1162entry:
1163 %load1 = load i32, i32* @g32
1164 ; And 0x80000000, a positive number requiring 32 bits of immediate.
1165 %and = and i32 %load1, 2147483648
1166 store i32 %and, i32* @g32
1167 %cond = icmp eq i32 %and, 0
1168 br i1 %cond, label %a, label %b
1169
1170a:
1171 tail call void @a()
1172 ret void
1173
1174b:
1175 tail call void @b()
1176 ret void
1177}
1178
1179define void @and32_imm8_br() nounwind {
1180; CHECK-LABEL: and32_imm8_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001181; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00001182; CHECK-NEXT: andl $15, {{.*}}(%rip) # encoding: [0x83,0x25,A,A,A,A,0x0f]
1183; CHECK-NEXT: # fixup A - offset: 2, value: g32-5, kind: reloc_riprel_4byte
1184; CHECK-NEXT: je .LBB36_1 # encoding: [0x74,A]
1185; CHECK-NEXT: # fixup A - offset: 1, value: .LBB36_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001186; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00001187; CHECK-NEXT: jmp b # TAILCALL
1188; CHECK-NEXT: # encoding: [0xeb,A]
1189; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1190; CHECK-NEXT: .LBB36_1: # %a
1191; CHECK-NEXT: jmp a # TAILCALL
1192; CHECK-NEXT: # encoding: [0xeb,A]
1193; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1194entry:
1195 %load1 = load i32, i32* @g32
1196 %and = and i32 %load1, 15
1197 store i32 %and, i32* @g32
1198 %cond = icmp eq i32 %and, 0
1199 br i1 %cond, label %a, label %b
1200
1201a:
1202 tail call void @a()
1203 ret void
1204
1205b:
1206 tail call void @b()
1207 ret void
1208}
1209
1210define void @and32_imm8_neg_br() nounwind {
1211; CHECK-LABEL: and32_imm8_neg_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001212; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00001213; CHECK-NEXT: andl $-4, {{.*}}(%rip) # encoding: [0x83,0x25,A,A,A,A,0xfc]
1214; CHECK-NEXT: # fixup A - offset: 2, value: g32-5, kind: reloc_riprel_4byte
1215; CHECK-NEXT: je .LBB37_1 # encoding: [0x74,A]
1216; CHECK-NEXT: # fixup A - offset: 1, value: .LBB37_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001217; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00001218; CHECK-NEXT: jmp b # TAILCALL
1219; CHECK-NEXT: # encoding: [0xeb,A]
1220; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1221; CHECK-NEXT: .LBB37_1: # %a
1222; CHECK-NEXT: jmp a # TAILCALL
1223; CHECK-NEXT: # encoding: [0xeb,A]
1224; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1225entry:
1226 %load1 = load i32, i32* @g32
1227 %and = and i32 %load1, -4
1228 store i32 %and, i32* @g32
1229 %cond = icmp eq i32 %and, 0
1230 br i1 %cond, label %a, label %b
1231
1232a:
1233 tail call void @a()
1234 ret void
1235
1236b:
1237 tail call void @b()
1238 ret void
1239}
1240
1241define void @and16_imm_br() nounwind {
1242; CHECK-LABEL: and16_imm_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001243; CHECK: # %bb.0: # %entry
Amaury Sechet893a6b82018-02-23 11:50:42 +00001244; CHECK-NEXT: andw $-32768, {{.*}}(%rip) # encoding: [0x66,0x81,0x25,A,A,A,A,0x00,0x80]
1245; CHECK-NEXT: # fixup A - offset: 3, value: g16-6, kind: reloc_riprel_4byte
Chandler Carruthacbcf062017-09-08 00:17:12 +00001246; CHECK-NEXT: # imm = 0x8000
Chandler Carruthacbcf062017-09-08 00:17:12 +00001247; CHECK-NEXT: jne .LBB38_2 # encoding: [0x75,A]
1248; CHECK-NEXT: # fixup A - offset: 1, value: .LBB38_2-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001249; CHECK-NEXT: # %bb.1: # %a
Chandler Carruthacbcf062017-09-08 00:17:12 +00001250; CHECK-NEXT: jmp a # TAILCALL
1251; CHECK-NEXT: # encoding: [0xeb,A]
1252; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1253; CHECK-NEXT: .LBB38_2: # %b
1254; CHECK-NEXT: jmp b # TAILCALL
1255; CHECK-NEXT: # encoding: [0xeb,A]
1256; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1257entry:
1258 %load1 = load i16, i16* @g16
1259 %and = and i16 %load1, 32768
1260 store i16 %and, i16* @g16
1261 %cond = icmp eq i16 %and, 0
1262 br i1 %cond, label %a, label %b
1263
1264a:
1265 tail call void @a()
1266 ret void
1267
1268b:
1269 tail call void @b()
1270 ret void
1271}
1272
1273define void @and16_imm8_br() nounwind {
1274; CHECK-LABEL: and16_imm8_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001275; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00001276; CHECK-NEXT: andw $15, {{.*}}(%rip) # encoding: [0x66,0x83,0x25,A,A,A,A,0x0f]
1277; CHECK-NEXT: # fixup A - offset: 3, value: g16-5, kind: reloc_riprel_4byte
1278; CHECK-NEXT: je .LBB39_1 # encoding: [0x74,A]
1279; CHECK-NEXT: # fixup A - offset: 1, value: .LBB39_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001280; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00001281; CHECK-NEXT: jmp b # TAILCALL
1282; CHECK-NEXT: # encoding: [0xeb,A]
1283; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1284; CHECK-NEXT: .LBB39_1: # %a
1285; CHECK-NEXT: jmp a # TAILCALL
1286; CHECK-NEXT: # encoding: [0xeb,A]
1287; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1288entry:
1289 %load1 = load i16, i16* @g16
1290 %and = and i16 %load1, 15
1291 store i16 %and, i16* @g16
1292 %cond = icmp eq i16 %and, 0
1293 br i1 %cond, label %a, label %b
1294
1295a:
1296 tail call void @a()
1297 ret void
1298
1299b:
1300 tail call void @b()
1301 ret void
1302}
1303
1304define void @and16_imm8_neg_br() nounwind {
1305; CHECK-LABEL: and16_imm8_neg_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001306; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00001307; CHECK-NEXT: andw $-4, {{.*}}(%rip) # encoding: [0x66,0x83,0x25,A,A,A,A,0xfc]
1308; CHECK-NEXT: # fixup A - offset: 3, value: g16-5, kind: reloc_riprel_4byte
1309; CHECK-NEXT: je .LBB40_1 # encoding: [0x74,A]
1310; CHECK-NEXT: # fixup A - offset: 1, value: .LBB40_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001311; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00001312; CHECK-NEXT: jmp b # TAILCALL
1313; CHECK-NEXT: # encoding: [0xeb,A]
1314; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1315; CHECK-NEXT: .LBB40_1: # %a
1316; CHECK-NEXT: jmp a # TAILCALL
1317; CHECK-NEXT: # encoding: [0xeb,A]
1318; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1319entry:
1320 %load1 = load i16, i16* @g16
1321 %and = and i16 %load1, -4
1322 store i16 %and, i16* @g16
1323 %cond = icmp eq i16 %and, 0
1324 br i1 %cond, label %a, label %b
1325
1326a:
1327 tail call void @a()
1328 ret void
1329
1330b:
1331 tail call void @b()
1332 ret void
1333}
1334
1335define void @and8_imm_br() nounwind {
1336; CHECK-LABEL: and8_imm_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001337; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00001338; CHECK-NEXT: andb $-4, {{.*}}(%rip) # encoding: [0x80,0x25,A,A,A,A,0xfc]
1339; CHECK-NEXT: # fixup A - offset: 2, value: g8-5, kind: reloc_riprel_4byte
1340; CHECK-NEXT: je .LBB41_1 # encoding: [0x74,A]
1341; CHECK-NEXT: # fixup A - offset: 1, value: .LBB41_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001342; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00001343; CHECK-NEXT: jmp b # TAILCALL
1344; CHECK-NEXT: # encoding: [0xeb,A]
1345; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1346; CHECK-NEXT: .LBB41_1: # %a
1347; CHECK-NEXT: jmp a # TAILCALL
1348; CHECK-NEXT: # encoding: [0xeb,A]
1349; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1350entry:
1351 %load1 = load i8, i8* @g8
1352 %and = and i8 %load1, -4
1353 store i8 %and, i8* @g8
1354 %cond = icmp eq i8 %and, 0
1355 br i1 %cond, label %a, label %b
1356
1357a:
1358 tail call void @a()
1359 ret void
1360
1361b:
1362 tail call void @b()
1363 ret void
1364}
1365
1366define void @and64_reg_br(i64 %arg) nounwind {
1367; CHECK-LABEL: and64_reg_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001368; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00001369; CHECK-NEXT: andq %rdi, {{.*}}(%rip) # encoding: [0x48,0x21,0x3d,A,A,A,A]
1370; CHECK-NEXT: # fixup A - offset: 3, value: g64-4, kind: reloc_riprel_4byte
1371; CHECK-NEXT: je .LBB42_1 # encoding: [0x74,A]
1372; CHECK-NEXT: # fixup A - offset: 1, value: .LBB42_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001373; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00001374; CHECK-NEXT: jmp b # TAILCALL
1375; CHECK-NEXT: # encoding: [0xeb,A]
1376; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1377; CHECK-NEXT: .LBB42_1: # %a
1378; CHECK-NEXT: jmp a # TAILCALL
1379; CHECK-NEXT: # encoding: [0xeb,A]
1380; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1381entry:
1382 %load1 = load i64, i64* @g64
1383 %and = and i64 %load1, %arg
1384 store i64 %and, i64* @g64
1385 %cond = icmp eq i64 %and, 0
1386 br i1 %cond, label %a, label %b
1387
1388a:
1389 tail call void @a()
1390 ret void
1391
1392b:
1393 tail call void @b()
1394 ret void
1395}
1396
1397define void @and32_reg_br(i32 %arg) nounwind {
1398; CHECK-LABEL: and32_reg_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001399; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00001400; CHECK-NEXT: andl %edi, {{.*}}(%rip) # encoding: [0x21,0x3d,A,A,A,A]
1401; CHECK-NEXT: # fixup A - offset: 2, value: g32-4, kind: reloc_riprel_4byte
1402; CHECK-NEXT: je .LBB43_1 # encoding: [0x74,A]
1403; CHECK-NEXT: # fixup A - offset: 1, value: .LBB43_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001404; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00001405; CHECK-NEXT: jmp b # TAILCALL
1406; CHECK-NEXT: # encoding: [0xeb,A]
1407; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1408; CHECK-NEXT: .LBB43_1: # %a
1409; CHECK-NEXT: jmp a # TAILCALL
1410; CHECK-NEXT: # encoding: [0xeb,A]
1411; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1412entry:
1413 %load1 = load i32, i32* @g32
1414 %and = and i32 %load1, %arg
1415 store i32 %and, i32* @g32
1416 %cond = icmp eq i32 %and, 0
1417 br i1 %cond, label %a, label %b
1418
1419a:
1420 tail call void @a()
1421 ret void
1422
1423b:
1424 tail call void @b()
1425 ret void
1426}
1427
1428define void @and16_reg_br(i16 %arg) nounwind {
1429; CHECK-LABEL: and16_reg_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001430; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00001431; CHECK-NEXT: andw %di, {{.*}}(%rip) # encoding: [0x66,0x21,0x3d,A,A,A,A]
1432; CHECK-NEXT: # fixup A - offset: 3, value: g16-4, kind: reloc_riprel_4byte
1433; CHECK-NEXT: je .LBB44_1 # encoding: [0x74,A]
1434; CHECK-NEXT: # fixup A - offset: 1, value: .LBB44_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001435; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00001436; CHECK-NEXT: jmp b # TAILCALL
1437; CHECK-NEXT: # encoding: [0xeb,A]
1438; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1439; CHECK-NEXT: .LBB44_1: # %a
1440; CHECK-NEXT: jmp a # TAILCALL
1441; CHECK-NEXT: # encoding: [0xeb,A]
1442; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1443entry:
1444 %load1 = load i16, i16* @g16
1445 %and = and i16 %load1, %arg
1446 store i16 %and, i16* @g16
1447 %cond = icmp eq i16 %and, 0
1448 br i1 %cond, label %a, label %b
1449
1450a:
1451 tail call void @a()
1452 ret void
1453
1454b:
1455 tail call void @b()
1456 ret void
1457}
1458
1459define void @and8_reg_br(i8 %arg) nounwind {
1460; CHECK-LABEL: and8_reg_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001461; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00001462; CHECK-NEXT: andb %dil, {{.*}}(%rip) # encoding: [0x40,0x20,0x3d,A,A,A,A]
1463; CHECK-NEXT: # fixup A - offset: 3, value: g8-4, kind: reloc_riprel_4byte
1464; CHECK-NEXT: je .LBB45_1 # encoding: [0x74,A]
1465; CHECK-NEXT: # fixup A - offset: 1, value: .LBB45_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001466; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00001467; CHECK-NEXT: jmp b # TAILCALL
1468; CHECK-NEXT: # encoding: [0xeb,A]
1469; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1470; CHECK-NEXT: .LBB45_1: # %a
1471; CHECK-NEXT: jmp a # TAILCALL
1472; CHECK-NEXT: # encoding: [0xeb,A]
1473; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1474entry:
1475 %load1 = load i8, i8* @g8
1476 %and = and i8 %load1, %arg
1477 store i8 %and, i8* @g8
1478 %cond = icmp eq i8 %and, 0
1479 br i1 %cond, label %a, label %b
1480
1481a:
1482 tail call void @a()
1483 ret void
1484
1485b:
1486 tail call void @b()
1487 ret void
1488}
1489
1490define void @or64_imm32_br() nounwind {
1491; CHECK-LABEL: or64_imm32_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001492; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00001493; CHECK-NEXT: orq $16777215, {{.*}}(%rip) # encoding: [0x48,0x81,0x0d,A,A,A,A,0xff,0xff,0xff,0x00]
1494; CHECK-NEXT: # fixup A - offset: 3, value: g64-8, kind: reloc_riprel_4byte
1495; CHECK-NEXT: # imm = 0xFFFFFF
1496; CHECK-NEXT: je .LBB46_1 # encoding: [0x74,A]
1497; CHECK-NEXT: # fixup A - offset: 1, value: .LBB46_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001498; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00001499; CHECK-NEXT: jmp b # TAILCALL
1500; CHECK-NEXT: # encoding: [0xeb,A]
1501; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1502; CHECK-NEXT: .LBB46_1: # %a
1503; CHECK-NEXT: jmp a # TAILCALL
1504; CHECK-NEXT: # encoding: [0xeb,A]
1505; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1506entry:
1507 %load1 = load i64, i64* @g64
1508 ; Or 0x00FFFFFF, a positive immediate requiring 24-bits.
1509 %or = or i64 %load1, 16777215
1510 store i64 %or, i64* @g64
1511 %cond = icmp eq i64 %or, 0
1512 br i1 %cond, label %a, label %b
1513
1514a:
1515 tail call void @a()
1516 ret void
1517
1518b:
1519 tail call void @b()
1520 ret void
1521}
1522
1523define void @or64_sext_imm32_br() nounwind {
1524; CHECK-LABEL: or64_sext_imm32_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001525; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00001526; CHECK-NEXT: orq $-2147483648, {{.*}}(%rip) # encoding: [0x48,0x81,0x0d,A,A,A,A,0x00,0x00,0x00,0x80]
1527; CHECK-NEXT: # fixup A - offset: 3, value: g64-8, kind: reloc_riprel_4byte
1528; CHECK-NEXT: # imm = 0x80000000
1529; CHECK-NEXT: je .LBB47_1 # encoding: [0x74,A]
1530; CHECK-NEXT: # fixup A - offset: 1, value: .LBB47_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001531; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00001532; CHECK-NEXT: jmp b # TAILCALL
1533; CHECK-NEXT: # encoding: [0xeb,A]
1534; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1535; CHECK-NEXT: .LBB47_1: # %a
1536; CHECK-NEXT: jmp a # TAILCALL
1537; CHECK-NEXT: # encoding: [0xeb,A]
1538; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1539entry:
1540 %load1 = load i64, i64* @g64
1541 ; Or -0x80000000, which requires sign-extended 32 bits.
1542 %or = or i64 %load1, -2147483648
1543 store i64 %or, i64* @g64
1544 %cond = icmp eq i64 %or, 0
1545 br i1 %cond, label %a, label %b
1546
1547a:
1548 tail call void @a()
1549 ret void
1550
1551b:
1552 tail call void @b()
1553 ret void
1554}
1555
1556define void @or64_imm8_br() nounwind {
1557; CHECK-LABEL: or64_imm8_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001558; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00001559; CHECK-NEXT: orq $15, {{.*}}(%rip) # encoding: [0x48,0x83,0x0d,A,A,A,A,0x0f]
1560; CHECK-NEXT: # fixup A - offset: 3, value: g64-5, kind: reloc_riprel_4byte
1561; CHECK-NEXT: je .LBB48_1 # encoding: [0x74,A]
1562; CHECK-NEXT: # fixup A - offset: 1, value: .LBB48_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001563; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00001564; CHECK-NEXT: jmp b # TAILCALL
1565; CHECK-NEXT: # encoding: [0xeb,A]
1566; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1567; CHECK-NEXT: .LBB48_1: # %a
1568; CHECK-NEXT: jmp a # TAILCALL
1569; CHECK-NEXT: # encoding: [0xeb,A]
1570; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1571entry:
1572 %load1 = load i64, i64* @g64
1573 %or = or i64 %load1, 15
1574 store i64 %or, i64* @g64
1575 %cond = icmp eq i64 %or, 0
1576 br i1 %cond, label %a, label %b
1577
1578a:
1579 tail call void @a()
1580 ret void
1581
1582b:
1583 tail call void @b()
1584 ret void
1585}
1586
1587define void @or64_imm8_neg_br() nounwind {
1588; CHECK-LABEL: or64_imm8_neg_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001589; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00001590; CHECK-NEXT: orq $-4, {{.*}}(%rip) # encoding: [0x48,0x83,0x0d,A,A,A,A,0xfc]
1591; CHECK-NEXT: # fixup A - offset: 3, value: g64-5, kind: reloc_riprel_4byte
1592; CHECK-NEXT: je .LBB49_1 # encoding: [0x74,A]
1593; CHECK-NEXT: # fixup A - offset: 1, value: .LBB49_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001594; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00001595; CHECK-NEXT: jmp b # TAILCALL
1596; CHECK-NEXT: # encoding: [0xeb,A]
1597; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1598; CHECK-NEXT: .LBB49_1: # %a
1599; CHECK-NEXT: jmp a # TAILCALL
1600; CHECK-NEXT: # encoding: [0xeb,A]
1601; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1602entry:
1603 %load1 = load i64, i64* @g64
1604 %or = or i64 %load1, -4
1605 store i64 %or, i64* @g64
1606 %cond = icmp eq i64 %or, 0
1607 br i1 %cond, label %a, label %b
1608
1609a:
1610 tail call void @a()
1611 ret void
1612
1613b:
1614 tail call void @b()
1615 ret void
1616}
1617
1618define void @or32_imm_br() nounwind {
1619; CHECK-LABEL: or32_imm_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001620; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00001621; CHECK-NEXT: orl $-2147483648, {{.*}}(%rip) # encoding: [0x81,0x0d,A,A,A,A,0x00,0x00,0x00,0x80]
1622; CHECK-NEXT: # fixup A - offset: 2, value: g32-8, kind: reloc_riprel_4byte
1623; CHECK-NEXT: # imm = 0x80000000
1624; CHECK-NEXT: je .LBB50_1 # encoding: [0x74,A]
1625; CHECK-NEXT: # fixup A - offset: 1, value: .LBB50_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001626; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00001627; CHECK-NEXT: jmp b # TAILCALL
1628; CHECK-NEXT: # encoding: [0xeb,A]
1629; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1630; CHECK-NEXT: .LBB50_1: # %a
1631; CHECK-NEXT: jmp a # TAILCALL
1632; CHECK-NEXT: # encoding: [0xeb,A]
1633; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1634entry:
1635 %load1 = load i32, i32* @g32
1636 ; Or 0x80000000, a positive number requiring 32 bits of immediate.
1637 %or = or i32 %load1, 2147483648
1638 store i32 %or, i32* @g32
1639 %cond = icmp eq i32 %or, 0
1640 br i1 %cond, label %a, label %b
1641
1642a:
1643 tail call void @a()
1644 ret void
1645
1646b:
1647 tail call void @b()
1648 ret void
1649}
1650
1651define void @or32_imm8_br() nounwind {
1652; CHECK-LABEL: or32_imm8_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001653; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00001654; CHECK-NEXT: orl $15, {{.*}}(%rip) # encoding: [0x83,0x0d,A,A,A,A,0x0f]
1655; CHECK-NEXT: # fixup A - offset: 2, value: g32-5, kind: reloc_riprel_4byte
1656; CHECK-NEXT: je .LBB51_1 # encoding: [0x74,A]
1657; CHECK-NEXT: # fixup A - offset: 1, value: .LBB51_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001658; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00001659; CHECK-NEXT: jmp b # TAILCALL
1660; CHECK-NEXT: # encoding: [0xeb,A]
1661; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1662; CHECK-NEXT: .LBB51_1: # %a
1663; CHECK-NEXT: jmp a # TAILCALL
1664; CHECK-NEXT: # encoding: [0xeb,A]
1665; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1666entry:
1667 %load1 = load i32, i32* @g32
1668 %or = or i32 %load1, 15
1669 store i32 %or, i32* @g32
1670 %cond = icmp eq i32 %or, 0
1671 br i1 %cond, label %a, label %b
1672
1673a:
1674 tail call void @a()
1675 ret void
1676
1677b:
1678 tail call void @b()
1679 ret void
1680}
1681
1682define void @or32_imm8_neg_br() nounwind {
1683; CHECK-LABEL: or32_imm8_neg_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001684; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00001685; CHECK-NEXT: orl $-4, {{.*}}(%rip) # encoding: [0x83,0x0d,A,A,A,A,0xfc]
1686; CHECK-NEXT: # fixup A - offset: 2, value: g32-5, kind: reloc_riprel_4byte
1687; CHECK-NEXT: je .LBB52_1 # encoding: [0x74,A]
1688; CHECK-NEXT: # fixup A - offset: 1, value: .LBB52_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001689; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00001690; CHECK-NEXT: jmp b # TAILCALL
1691; CHECK-NEXT: # encoding: [0xeb,A]
1692; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1693; CHECK-NEXT: .LBB52_1: # %a
1694; CHECK-NEXT: jmp a # TAILCALL
1695; CHECK-NEXT: # encoding: [0xeb,A]
1696; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1697entry:
1698 %load1 = load i32, i32* @g32
1699 %or = or i32 %load1, -4
1700 store i32 %or, i32* @g32
1701 %cond = icmp eq i32 %or, 0
1702 br i1 %cond, label %a, label %b
1703
1704a:
1705 tail call void @a()
1706 ret void
1707
1708b:
1709 tail call void @b()
1710 ret void
1711}
1712
1713define void @or16_imm_br() nounwind {
1714; CHECK-LABEL: or16_imm_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001715; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00001716; CHECK-NEXT: orw $-32768, {{.*}}(%rip) # encoding: [0x66,0x81,0x0d,A,A,A,A,0x00,0x80]
1717; CHECK-NEXT: # fixup A - offset: 3, value: g16-6, kind: reloc_riprel_4byte
1718; CHECK-NEXT: # imm = 0x8000
1719; CHECK-NEXT: je .LBB53_1 # encoding: [0x74,A]
1720; CHECK-NEXT: # fixup A - offset: 1, value: .LBB53_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001721; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00001722; CHECK-NEXT: jmp b # TAILCALL
1723; CHECK-NEXT: # encoding: [0xeb,A]
1724; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1725; CHECK-NEXT: .LBB53_1: # %a
1726; CHECK-NEXT: jmp a # TAILCALL
1727; CHECK-NEXT: # encoding: [0xeb,A]
1728; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1729entry:
1730 %load1 = load i16, i16* @g16
1731 %or = or i16 %load1, 32768
1732 store i16 %or, i16* @g16
1733 %cond = icmp eq i16 %or, 0
1734 br i1 %cond, label %a, label %b
1735
1736a:
1737 tail call void @a()
1738 ret void
1739
1740b:
1741 tail call void @b()
1742 ret void
1743}
1744
1745define void @or16_imm8_br() nounwind {
1746; CHECK-LABEL: or16_imm8_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001747; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00001748; CHECK-NEXT: orw $15, {{.*}}(%rip) # encoding: [0x66,0x83,0x0d,A,A,A,A,0x0f]
1749; CHECK-NEXT: # fixup A - offset: 3, value: g16-5, kind: reloc_riprel_4byte
1750; CHECK-NEXT: je .LBB54_1 # encoding: [0x74,A]
1751; CHECK-NEXT: # fixup A - offset: 1, value: .LBB54_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001752; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00001753; CHECK-NEXT: jmp b # TAILCALL
1754; CHECK-NEXT: # encoding: [0xeb,A]
1755; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1756; CHECK-NEXT: .LBB54_1: # %a
1757; CHECK-NEXT: jmp a # TAILCALL
1758; CHECK-NEXT: # encoding: [0xeb,A]
1759; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1760entry:
1761 %load1 = load i16, i16* @g16
1762 %or = or i16 %load1, 15
1763 store i16 %or, i16* @g16
1764 %cond = icmp eq i16 %or, 0
1765 br i1 %cond, label %a, label %b
1766
1767a:
1768 tail call void @a()
1769 ret void
1770
1771b:
1772 tail call void @b()
1773 ret void
1774}
1775
1776define void @or16_imm8_neg_br() nounwind {
1777; CHECK-LABEL: or16_imm8_neg_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001778; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00001779; CHECK-NEXT: orw $-4, {{.*}}(%rip) # encoding: [0x66,0x83,0x0d,A,A,A,A,0xfc]
1780; CHECK-NEXT: # fixup A - offset: 3, value: g16-5, kind: reloc_riprel_4byte
1781; CHECK-NEXT: je .LBB55_1 # encoding: [0x74,A]
1782; CHECK-NEXT: # fixup A - offset: 1, value: .LBB55_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001783; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00001784; CHECK-NEXT: jmp b # TAILCALL
1785; CHECK-NEXT: # encoding: [0xeb,A]
1786; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1787; CHECK-NEXT: .LBB55_1: # %a
1788; CHECK-NEXT: jmp a # TAILCALL
1789; CHECK-NEXT: # encoding: [0xeb,A]
1790; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1791entry:
1792 %load1 = load i16, i16* @g16
1793 %or = or i16 %load1, -4
1794 store i16 %or, i16* @g16
1795 %cond = icmp eq i16 %or, 0
1796 br i1 %cond, label %a, label %b
1797
1798a:
1799 tail call void @a()
1800 ret void
1801
1802b:
1803 tail call void @b()
1804 ret void
1805}
1806
1807define void @or8_imm_br() nounwind {
1808; CHECK-LABEL: or8_imm_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001809; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00001810; CHECK-NEXT: orb $-4, {{.*}}(%rip) # encoding: [0x80,0x0d,A,A,A,A,0xfc]
1811; CHECK-NEXT: # fixup A - offset: 2, value: g8-5, kind: reloc_riprel_4byte
1812; CHECK-NEXT: je .LBB56_1 # encoding: [0x74,A]
1813; CHECK-NEXT: # fixup A - offset: 1, value: .LBB56_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001814; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00001815; CHECK-NEXT: jmp b # TAILCALL
1816; CHECK-NEXT: # encoding: [0xeb,A]
1817; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1818; CHECK-NEXT: .LBB56_1: # %a
1819; CHECK-NEXT: jmp a # TAILCALL
1820; CHECK-NEXT: # encoding: [0xeb,A]
1821; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1822entry:
1823 %load1 = load i8, i8* @g8
1824 %or = or i8 %load1, -4
1825 store i8 %or, i8* @g8
1826 %cond = icmp eq i8 %or, 0
1827 br i1 %cond, label %a, label %b
1828
1829a:
1830 tail call void @a()
1831 ret void
1832
1833b:
1834 tail call void @b()
1835 ret void
1836}
1837
1838define void @or64_reg_br(i64 %arg) nounwind {
1839; CHECK-LABEL: or64_reg_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001840; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00001841; CHECK-NEXT: orq %rdi, {{.*}}(%rip) # encoding: [0x48,0x09,0x3d,A,A,A,A]
1842; CHECK-NEXT: # fixup A - offset: 3, value: g64-4, kind: reloc_riprel_4byte
1843; CHECK-NEXT: je .LBB57_1 # encoding: [0x74,A]
1844; CHECK-NEXT: # fixup A - offset: 1, value: .LBB57_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001845; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00001846; CHECK-NEXT: jmp b # TAILCALL
1847; CHECK-NEXT: # encoding: [0xeb,A]
1848; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1849; CHECK-NEXT: .LBB57_1: # %a
1850; CHECK-NEXT: jmp a # TAILCALL
1851; CHECK-NEXT: # encoding: [0xeb,A]
1852; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1853entry:
1854 %load1 = load i64, i64* @g64
1855 %or = or i64 %load1, %arg
1856 store i64 %or, i64* @g64
1857 %cond = icmp eq i64 %or, 0
1858 br i1 %cond, label %a, label %b
1859
1860a:
1861 tail call void @a()
1862 ret void
1863
1864b:
1865 tail call void @b()
1866 ret void
1867}
1868
1869define void @or32_reg_br(i32 %arg) nounwind {
1870; CHECK-LABEL: or32_reg_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001871; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00001872; CHECK-NEXT: orl %edi, {{.*}}(%rip) # encoding: [0x09,0x3d,A,A,A,A]
1873; CHECK-NEXT: # fixup A - offset: 2, value: g32-4, kind: reloc_riprel_4byte
1874; CHECK-NEXT: je .LBB58_1 # encoding: [0x74,A]
1875; CHECK-NEXT: # fixup A - offset: 1, value: .LBB58_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001876; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00001877; CHECK-NEXT: jmp b # TAILCALL
1878; CHECK-NEXT: # encoding: [0xeb,A]
1879; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1880; CHECK-NEXT: .LBB58_1: # %a
1881; CHECK-NEXT: jmp a # TAILCALL
1882; CHECK-NEXT: # encoding: [0xeb,A]
1883; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1884entry:
1885 %load1 = load i32, i32* @g32
1886 %or = or i32 %load1, %arg
1887 store i32 %or, i32* @g32
1888 %cond = icmp eq i32 %or, 0
1889 br i1 %cond, label %a, label %b
1890
1891a:
1892 tail call void @a()
1893 ret void
1894
1895b:
1896 tail call void @b()
1897 ret void
1898}
1899
1900define void @or16_reg_br(i16 %arg) nounwind {
1901; CHECK-LABEL: or16_reg_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001902; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00001903; CHECK-NEXT: orw %di, {{.*}}(%rip) # encoding: [0x66,0x09,0x3d,A,A,A,A]
1904; CHECK-NEXT: # fixup A - offset: 3, value: g16-4, kind: reloc_riprel_4byte
1905; CHECK-NEXT: je .LBB59_1 # encoding: [0x74,A]
1906; CHECK-NEXT: # fixup A - offset: 1, value: .LBB59_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001907; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00001908; CHECK-NEXT: jmp b # TAILCALL
1909; CHECK-NEXT: # encoding: [0xeb,A]
1910; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1911; CHECK-NEXT: .LBB59_1: # %a
1912; CHECK-NEXT: jmp a # TAILCALL
1913; CHECK-NEXT: # encoding: [0xeb,A]
1914; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1915entry:
1916 %load1 = load i16, i16* @g16
1917 %or = or i16 %load1, %arg
1918 store i16 %or, i16* @g16
1919 %cond = icmp eq i16 %or, 0
1920 br i1 %cond, label %a, label %b
1921
1922a:
1923 tail call void @a()
1924 ret void
1925
1926b:
1927 tail call void @b()
1928 ret void
1929}
1930
1931define void @or8_reg_br(i8 %arg) nounwind {
1932; CHECK-LABEL: or8_reg_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001933; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00001934; CHECK-NEXT: orb %dil, {{.*}}(%rip) # encoding: [0x40,0x08,0x3d,A,A,A,A]
1935; CHECK-NEXT: # fixup A - offset: 3, value: g8-4, kind: reloc_riprel_4byte
1936; CHECK-NEXT: je .LBB60_1 # encoding: [0x74,A]
1937; CHECK-NEXT: # fixup A - offset: 1, value: .LBB60_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001938; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00001939; CHECK-NEXT: jmp b # TAILCALL
1940; CHECK-NEXT: # encoding: [0xeb,A]
1941; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1942; CHECK-NEXT: .LBB60_1: # %a
1943; CHECK-NEXT: jmp a # TAILCALL
1944; CHECK-NEXT: # encoding: [0xeb,A]
1945; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1946entry:
1947 %load1 = load i8, i8* @g8
1948 %or = or i8 %load1, %arg
1949 store i8 %or, i8* @g8
1950 %cond = icmp eq i8 %or, 0
1951 br i1 %cond, label %a, label %b
1952
1953a:
1954 tail call void @a()
1955 ret void
1956
1957b:
1958 tail call void @b()
1959 ret void
1960}
1961
1962define void @xor64_imm32_br() nounwind {
1963; CHECK-LABEL: xor64_imm32_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001964; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00001965; CHECK-NEXT: xorq $16777215, {{.*}}(%rip) # encoding: [0x48,0x81,0x35,A,A,A,A,0xff,0xff,0xff,0x00]
1966; CHECK-NEXT: # fixup A - offset: 3, value: g64-8, kind: reloc_riprel_4byte
1967; CHECK-NEXT: # imm = 0xFFFFFF
1968; CHECK-NEXT: je .LBB61_1 # encoding: [0x74,A]
1969; CHECK-NEXT: # fixup A - offset: 1, value: .LBB61_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001970; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00001971; CHECK-NEXT: jmp b # TAILCALL
1972; CHECK-NEXT: # encoding: [0xeb,A]
1973; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1974; CHECK-NEXT: .LBB61_1: # %a
1975; CHECK-NEXT: jmp a # TAILCALL
1976; CHECK-NEXT: # encoding: [0xeb,A]
1977; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1978entry:
1979 %load1 = load i64, i64* @g64
1980 ; Xor 0x00FFFFFF, a positive immediate requiring 24-bits.
1981 %xor = xor i64 %load1, 16777215
1982 store i64 %xor, i64* @g64
1983 %cond = icmp eq i64 %xor, 0
1984 br i1 %cond, label %a, label %b
1985
1986a:
1987 tail call void @a()
1988 ret void
1989
1990b:
1991 tail call void @b()
1992 ret void
1993}
1994
1995define void @xor64_sext_imm32_br() nounwind {
1996; CHECK-LABEL: xor64_sext_imm32_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001997; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00001998; CHECK-NEXT: xorq $-2147483648, {{.*}}(%rip) # encoding: [0x48,0x81,0x35,A,A,A,A,0x00,0x00,0x00,0x80]
1999; CHECK-NEXT: # fixup A - offset: 3, value: g64-8, kind: reloc_riprel_4byte
2000; CHECK-NEXT: # imm = 0x80000000
2001; CHECK-NEXT: je .LBB62_1 # encoding: [0x74,A]
2002; CHECK-NEXT: # fixup A - offset: 1, value: .LBB62_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002003; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00002004; CHECK-NEXT: jmp b # TAILCALL
2005; CHECK-NEXT: # encoding: [0xeb,A]
2006; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2007; CHECK-NEXT: .LBB62_1: # %a
2008; CHECK-NEXT: jmp a # TAILCALL
2009; CHECK-NEXT: # encoding: [0xeb,A]
2010; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2011entry:
2012 %load1 = load i64, i64* @g64
2013 ; Xor -0x80000000, which requires sign-extended 32 bits.
2014 %xor = xor i64 %load1, -2147483648
2015 store i64 %xor, i64* @g64
2016 %cond = icmp eq i64 %xor, 0
2017 br i1 %cond, label %a, label %b
2018
2019a:
2020 tail call void @a()
2021 ret void
2022
2023b:
2024 tail call void @b()
2025 ret void
2026}
2027
2028define void @xor64_imm8_br() nounwind {
2029; CHECK-LABEL: xor64_imm8_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002030; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00002031; CHECK-NEXT: xorq $15, {{.*}}(%rip) # encoding: [0x48,0x83,0x35,A,A,A,A,0x0f]
2032; CHECK-NEXT: # fixup A - offset: 3, value: g64-5, kind: reloc_riprel_4byte
2033; CHECK-NEXT: je .LBB63_1 # encoding: [0x74,A]
2034; CHECK-NEXT: # fixup A - offset: 1, value: .LBB63_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002035; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00002036; CHECK-NEXT: jmp b # TAILCALL
2037; CHECK-NEXT: # encoding: [0xeb,A]
2038; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2039; CHECK-NEXT: .LBB63_1: # %a
2040; CHECK-NEXT: jmp a # TAILCALL
2041; CHECK-NEXT: # encoding: [0xeb,A]
2042; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2043entry:
2044 %load1 = load i64, i64* @g64
2045 %xor = xor i64 %load1, 15
2046 store i64 %xor, i64* @g64
2047 %cond = icmp eq i64 %xor, 0
2048 br i1 %cond, label %a, label %b
2049
2050a:
2051 tail call void @a()
2052 ret void
2053
2054b:
2055 tail call void @b()
2056 ret void
2057}
2058
2059define void @xor64_imm8_neg_br() nounwind {
2060; CHECK-LABEL: xor64_imm8_neg_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002061; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00002062; CHECK-NEXT: xorq $-4, {{.*}}(%rip) # encoding: [0x48,0x83,0x35,A,A,A,A,0xfc]
2063; CHECK-NEXT: # fixup A - offset: 3, value: g64-5, kind: reloc_riprel_4byte
2064; CHECK-NEXT: je .LBB64_1 # encoding: [0x74,A]
2065; CHECK-NEXT: # fixup A - offset: 1, value: .LBB64_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002066; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00002067; CHECK-NEXT: jmp b # TAILCALL
2068; CHECK-NEXT: # encoding: [0xeb,A]
2069; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2070; CHECK-NEXT: .LBB64_1: # %a
2071; CHECK-NEXT: jmp a # TAILCALL
2072; CHECK-NEXT: # encoding: [0xeb,A]
2073; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2074entry:
2075 %load1 = load i64, i64* @g64
2076 %xor = xor i64 %load1, -4
2077 store i64 %xor, i64* @g64
2078 %cond = icmp eq i64 %xor, 0
2079 br i1 %cond, label %a, label %b
2080
2081a:
2082 tail call void @a()
2083 ret void
2084
2085b:
2086 tail call void @b()
2087 ret void
2088}
2089
2090define void @xor32_imm_br() nounwind {
2091; CHECK-LABEL: xor32_imm_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002092; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00002093; CHECK-NEXT: xorl $-2147483648, {{.*}}(%rip) # encoding: [0x81,0x35,A,A,A,A,0x00,0x00,0x00,0x80]
2094; CHECK-NEXT: # fixup A - offset: 2, value: g32-8, kind: reloc_riprel_4byte
2095; CHECK-NEXT: # imm = 0x80000000
2096; CHECK-NEXT: je .LBB65_1 # encoding: [0x74,A]
2097; CHECK-NEXT: # fixup A - offset: 1, value: .LBB65_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002098; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00002099; CHECK-NEXT: jmp b # TAILCALL
2100; CHECK-NEXT: # encoding: [0xeb,A]
2101; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2102; CHECK-NEXT: .LBB65_1: # %a
2103; CHECK-NEXT: jmp a # TAILCALL
2104; CHECK-NEXT: # encoding: [0xeb,A]
2105; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2106entry:
2107 %load1 = load i32, i32* @g32
2108 ; Xor 0x80000000, a positive number requiring 32 bits of immediate.
2109 %xor = xor i32 %load1, 2147483648
2110 store i32 %xor, i32* @g32
2111 %cond = icmp eq i32 %xor, 0
2112 br i1 %cond, label %a, label %b
2113
2114a:
2115 tail call void @a()
2116 ret void
2117
2118b:
2119 tail call void @b()
2120 ret void
2121}
2122
2123define void @xor32_imm8_br() nounwind {
2124; CHECK-LABEL: xor32_imm8_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002125; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00002126; CHECK-NEXT: xorl $15, {{.*}}(%rip) # encoding: [0x83,0x35,A,A,A,A,0x0f]
2127; CHECK-NEXT: # fixup A - offset: 2, value: g32-5, kind: reloc_riprel_4byte
2128; CHECK-NEXT: je .LBB66_1 # encoding: [0x74,A]
2129; CHECK-NEXT: # fixup A - offset: 1, value: .LBB66_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002130; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00002131; CHECK-NEXT: jmp b # TAILCALL
2132; CHECK-NEXT: # encoding: [0xeb,A]
2133; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2134; CHECK-NEXT: .LBB66_1: # %a
2135; CHECK-NEXT: jmp a # TAILCALL
2136; CHECK-NEXT: # encoding: [0xeb,A]
2137; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2138entry:
2139 %load1 = load i32, i32* @g32
2140 %xor = xor i32 %load1, 15
2141 store i32 %xor, i32* @g32
2142 %cond = icmp eq i32 %xor, 0
2143 br i1 %cond, label %a, label %b
2144
2145a:
2146 tail call void @a()
2147 ret void
2148
2149b:
2150 tail call void @b()
2151 ret void
2152}
2153
2154define void @xor32_imm8_neg_br() nounwind {
2155; CHECK-LABEL: xor32_imm8_neg_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002156; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00002157; CHECK-NEXT: xorl $-4, {{.*}}(%rip) # encoding: [0x83,0x35,A,A,A,A,0xfc]
2158; CHECK-NEXT: # fixup A - offset: 2, value: g32-5, kind: reloc_riprel_4byte
2159; CHECK-NEXT: je .LBB67_1 # encoding: [0x74,A]
2160; CHECK-NEXT: # fixup A - offset: 1, value: .LBB67_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002161; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00002162; CHECK-NEXT: jmp b # TAILCALL
2163; CHECK-NEXT: # encoding: [0xeb,A]
2164; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2165; CHECK-NEXT: .LBB67_1: # %a
2166; CHECK-NEXT: jmp a # TAILCALL
2167; CHECK-NEXT: # encoding: [0xeb,A]
2168; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2169entry:
2170 %load1 = load i32, i32* @g32
2171 %xor = xor i32 %load1, -4
2172 store i32 %xor, i32* @g32
2173 %cond = icmp eq i32 %xor, 0
2174 br i1 %cond, label %a, label %b
2175
2176a:
2177 tail call void @a()
2178 ret void
2179
2180b:
2181 tail call void @b()
2182 ret void
2183}
2184
2185define void @xor16_imm_br() nounwind {
2186; CHECK-LABEL: xor16_imm_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002187; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00002188; CHECK-NEXT: xorw $-32768, {{.*}}(%rip) # encoding: [0x66,0x81,0x35,A,A,A,A,0x00,0x80]
2189; CHECK-NEXT: # fixup A - offset: 3, value: g16-6, kind: reloc_riprel_4byte
2190; CHECK-NEXT: # imm = 0x8000
2191; CHECK-NEXT: je .LBB68_1 # encoding: [0x74,A]
2192; CHECK-NEXT: # fixup A - offset: 1, value: .LBB68_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002193; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00002194; CHECK-NEXT: jmp b # TAILCALL
2195; CHECK-NEXT: # encoding: [0xeb,A]
2196; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2197; CHECK-NEXT: .LBB68_1: # %a
2198; CHECK-NEXT: jmp a # TAILCALL
2199; CHECK-NEXT: # encoding: [0xeb,A]
2200; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2201entry:
2202 %load1 = load i16, i16* @g16
2203 %xor = xor i16 %load1, 32768
2204 store i16 %xor, i16* @g16
2205 %cond = icmp eq i16 %xor, 0
2206 br i1 %cond, label %a, label %b
2207
2208a:
2209 tail call void @a()
2210 ret void
2211
2212b:
2213 tail call void @b()
2214 ret void
2215}
2216
2217define void @xor16_imm8_br() nounwind {
2218; CHECK-LABEL: xor16_imm8_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002219; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00002220; CHECK-NEXT: xorw $15, {{.*}}(%rip) # encoding: [0x66,0x83,0x35,A,A,A,A,0x0f]
2221; CHECK-NEXT: # fixup A - offset: 3, value: g16-5, kind: reloc_riprel_4byte
2222; CHECK-NEXT: je .LBB69_1 # encoding: [0x74,A]
2223; CHECK-NEXT: # fixup A - offset: 1, value: .LBB69_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002224; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00002225; CHECK-NEXT: jmp b # TAILCALL
2226; CHECK-NEXT: # encoding: [0xeb,A]
2227; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2228; CHECK-NEXT: .LBB69_1: # %a
2229; CHECK-NEXT: jmp a # TAILCALL
2230; CHECK-NEXT: # encoding: [0xeb,A]
2231; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2232entry:
2233 %load1 = load i16, i16* @g16
2234 %xor = xor i16 %load1, 15
2235 store i16 %xor, i16* @g16
2236 %cond = icmp eq i16 %xor, 0
2237 br i1 %cond, label %a, label %b
2238
2239a:
2240 tail call void @a()
2241 ret void
2242
2243b:
2244 tail call void @b()
2245 ret void
2246}
2247
2248define void @xor16_imm8_neg_br() nounwind {
2249; CHECK-LABEL: xor16_imm8_neg_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002250; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00002251; CHECK-NEXT: xorw $-4, {{.*}}(%rip) # encoding: [0x66,0x83,0x35,A,A,A,A,0xfc]
2252; CHECK-NEXT: # fixup A - offset: 3, value: g16-5, kind: reloc_riprel_4byte
2253; CHECK-NEXT: je .LBB70_1 # encoding: [0x74,A]
2254; CHECK-NEXT: # fixup A - offset: 1, value: .LBB70_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002255; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00002256; CHECK-NEXT: jmp b # TAILCALL
2257; CHECK-NEXT: # encoding: [0xeb,A]
2258; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2259; CHECK-NEXT: .LBB70_1: # %a
2260; CHECK-NEXT: jmp a # TAILCALL
2261; CHECK-NEXT: # encoding: [0xeb,A]
2262; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2263entry:
2264 %load1 = load i16, i16* @g16
2265 %xor = xor i16 %load1, -4
2266 store i16 %xor, i16* @g16
2267 %cond = icmp eq i16 %xor, 0
2268 br i1 %cond, label %a, label %b
2269
2270a:
2271 tail call void @a()
2272 ret void
2273
2274b:
2275 tail call void @b()
2276 ret void
2277}
2278
2279define void @xor8_imm_br() nounwind {
2280; CHECK-LABEL: xor8_imm_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002281; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00002282; CHECK-NEXT: xorb $-4, {{.*}}(%rip) # encoding: [0x80,0x35,A,A,A,A,0xfc]
2283; CHECK-NEXT: # fixup A - offset: 2, value: g8-5, kind: reloc_riprel_4byte
2284; CHECK-NEXT: je .LBB71_1 # encoding: [0x74,A]
2285; CHECK-NEXT: # fixup A - offset: 1, value: .LBB71_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002286; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00002287; CHECK-NEXT: jmp b # TAILCALL
2288; CHECK-NEXT: # encoding: [0xeb,A]
2289; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2290; CHECK-NEXT: .LBB71_1: # %a
2291; CHECK-NEXT: jmp a # TAILCALL
2292; CHECK-NEXT: # encoding: [0xeb,A]
2293; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2294entry:
2295 %load1 = load i8, i8* @g8
2296 %xor = xor i8 %load1, -4
2297 store i8 %xor, i8* @g8
2298 %cond = icmp eq i8 %xor, 0
2299 br i1 %cond, label %a, label %b
2300
2301a:
2302 tail call void @a()
2303 ret void
2304
2305b:
2306 tail call void @b()
2307 ret void
2308}
2309
2310define void @xor64_reg_br(i64 %arg) nounwind {
2311; CHECK-LABEL: xor64_reg_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002312; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00002313; CHECK-NEXT: xorq %rdi, {{.*}}(%rip) # encoding: [0x48,0x31,0x3d,A,A,A,A]
2314; CHECK-NEXT: # fixup A - offset: 3, value: g64-4, kind: reloc_riprel_4byte
2315; CHECK-NEXT: je .LBB72_1 # encoding: [0x74,A]
2316; CHECK-NEXT: # fixup A - offset: 1, value: .LBB72_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002317; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00002318; CHECK-NEXT: jmp b # TAILCALL
2319; CHECK-NEXT: # encoding: [0xeb,A]
2320; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2321; CHECK-NEXT: .LBB72_1: # %a
2322; CHECK-NEXT: jmp a # TAILCALL
2323; CHECK-NEXT: # encoding: [0xeb,A]
2324; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2325entry:
2326 %load1 = load i64, i64* @g64
2327 %xor = xor i64 %load1, %arg
2328 store i64 %xor, i64* @g64
2329 %cond = icmp eq i64 %xor, 0
2330 br i1 %cond, label %a, label %b
2331
2332a:
2333 tail call void @a()
2334 ret void
2335
2336b:
2337 tail call void @b()
2338 ret void
2339}
2340
2341define void @xor32_reg_br(i32 %arg) nounwind {
2342; CHECK-LABEL: xor32_reg_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002343; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00002344; CHECK-NEXT: xorl %edi, {{.*}}(%rip) # encoding: [0x31,0x3d,A,A,A,A]
2345; CHECK-NEXT: # fixup A - offset: 2, value: g32-4, kind: reloc_riprel_4byte
2346; CHECK-NEXT: je .LBB73_1 # encoding: [0x74,A]
2347; CHECK-NEXT: # fixup A - offset: 1, value: .LBB73_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002348; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00002349; CHECK-NEXT: jmp b # TAILCALL
2350; CHECK-NEXT: # encoding: [0xeb,A]
2351; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2352; CHECK-NEXT: .LBB73_1: # %a
2353; CHECK-NEXT: jmp a # TAILCALL
2354; CHECK-NEXT: # encoding: [0xeb,A]
2355; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2356entry:
2357 %load1 = load i32, i32* @g32
2358 %xor = xor i32 %load1, %arg
2359 store i32 %xor, i32* @g32
2360 %cond = icmp eq i32 %xor, 0
2361 br i1 %cond, label %a, label %b
2362
2363a:
2364 tail call void @a()
2365 ret void
2366
2367b:
2368 tail call void @b()
2369 ret void
2370}
2371
2372define void @xor16_reg_br(i16 %arg) nounwind {
2373; CHECK-LABEL: xor16_reg_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002374; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00002375; CHECK-NEXT: xorw %di, {{.*}}(%rip) # encoding: [0x66,0x31,0x3d,A,A,A,A]
2376; CHECK-NEXT: # fixup A - offset: 3, value: g16-4, kind: reloc_riprel_4byte
2377; CHECK-NEXT: je .LBB74_1 # encoding: [0x74,A]
2378; CHECK-NEXT: # fixup A - offset: 1, value: .LBB74_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002379; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00002380; CHECK-NEXT: jmp b # TAILCALL
2381; CHECK-NEXT: # encoding: [0xeb,A]
2382; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2383; CHECK-NEXT: .LBB74_1: # %a
2384; CHECK-NEXT: jmp a # TAILCALL
2385; CHECK-NEXT: # encoding: [0xeb,A]
2386; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2387entry:
2388 %load1 = load i16, i16* @g16
2389 %xor = xor i16 %load1, %arg
2390 store i16 %xor, i16* @g16
2391 %cond = icmp eq i16 %xor, 0
2392 br i1 %cond, label %a, label %b
2393
2394a:
2395 tail call void @a()
2396 ret void
2397
2398b:
2399 tail call void @b()
2400 ret void
2401}
2402
2403define void @xor8_reg_br(i8 %arg) nounwind {
2404; CHECK-LABEL: xor8_reg_br:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002405; CHECK: # %bb.0: # %entry
Chandler Carruthacbcf062017-09-08 00:17:12 +00002406; CHECK-NEXT: xorb %dil, {{.*}}(%rip) # encoding: [0x40,0x30,0x3d,A,A,A,A]
2407; CHECK-NEXT: # fixup A - offset: 3, value: g8-4, kind: reloc_riprel_4byte
2408; CHECK-NEXT: je .LBB75_1 # encoding: [0x74,A]
2409; CHECK-NEXT: # fixup A - offset: 1, value: .LBB75_1-1, kind: FK_PCRel_1
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002410; CHECK-NEXT: # %bb.2: # %b
Chandler Carruthacbcf062017-09-08 00:17:12 +00002411; CHECK-NEXT: jmp b # TAILCALL
2412; CHECK-NEXT: # encoding: [0xeb,A]
2413; CHECK-NEXT: # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2414; CHECK-NEXT: .LBB75_1: # %a
2415; CHECK-NEXT: jmp a # TAILCALL
2416; CHECK-NEXT: # encoding: [0xeb,A]
2417; CHECK-NEXT: # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2418entry:
2419 %load1 = load i8, i8* @g8
2420 %xor = xor i8 %load1, %arg
2421 store i8 %xor, i8* @g8
2422 %cond = icmp eq i8 %xor, 0
2423 br i1 %cond, label %a, label %b
2424
2425a:
2426 tail call void @a()
2427 ret void
2428
2429b:
2430 tail call void @b()
2431 ret void
2432}