2317 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -verify-machineinstrs -show-mc-encoding | FileCheck %s3 4target triple = "x86_64-unknown-unknown"5 6@g64 = external dso_local global i64, align 87@g32 = external dso_local global i32, align 48@g16 = external dso_local global i16, align 29@g8 = external dso_local global i8, align 110 11declare dso_local void @a()12declare dso_local void @b()13 14define void @add64_imm32_br() nounwind {15; CHECK-LABEL: add64_imm32_br:16; CHECK: # %bb.0: # %entry17; CHECK-NEXT: addq $16777214, g64(%rip) # encoding: [0x48,0x81,0x05,A,A,A,A,0xfe,0xff,0xff,0x00]18; CHECK-NEXT: # fixup A - offset: 3, value: g64-4, kind: reloc_riprel_4byte19; CHECK-NEXT: # imm = 0xFFFFFE20; CHECK-NEXT: jns b # TAILCALL21; CHECK-NEXT: # encoding: [0x79,A]22; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_123; CHECK-NEXT: # %bb.1: # %a24; CHECK-NEXT: jmp a # TAILCALL25; CHECK-NEXT: # encoding: [0xeb,A]26; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_127entry:28 %load1 = load i64, ptr @g6429 ; Add 0x00FFFFFE, a positive immediate requiring 24-bits.30 %add = add i64 %load1, 1677721431 store i64 %add, ptr @g6432 %cond = icmp slt i64 %add, 033 br i1 %cond, label %a, label %b34 35a:36 tail call void @a()37 ret void38 39b:40 tail call void @b()41 ret void42}43 44define void @add64_sext_imm32_br() nounwind {45; CHECK-LABEL: add64_sext_imm32_br:46; CHECK: # %bb.0: # %entry47; CHECK-NEXT: addq $-2147483648, g64(%rip) # encoding: [0x48,0x81,0x05,A,A,A,A,0x00,0x00,0x00,0x80]48; CHECK-NEXT: # fixup A - offset: 3, value: g64-4, kind: reloc_riprel_4byte49; CHECK-NEXT: # imm = 0x8000000050; CHECK-NEXT: jns b # TAILCALL51; CHECK-NEXT: # encoding: [0x79,A]52; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_153; CHECK-NEXT: # %bb.1: # %a54; CHECK-NEXT: jmp a # TAILCALL55; CHECK-NEXT: # encoding: [0xeb,A]56; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_157entry:58 %load1 = load i64, ptr @g6459 ; Add -0x80000000, which requires sign-extended 32 bits.60 %add = add i64 %load1, -214748364861 store i64 %add, ptr @g6462 %cond = icmp slt i64 %add, 063 br i1 %cond, label %a, label %b64 65a:66 tail call void @a()67 ret void68 69b:70 tail call void @b()71 ret void72}73 74define void @add64_imm32_via_sub_br() nounwind {75; CHECK-LABEL: add64_imm32_via_sub_br:76; CHECK: # %bb.0: # %entry77; CHECK-NEXT: subq $-2147483648, g64(%rip) # encoding: [0x48,0x81,0x2d,A,A,A,A,0x00,0x00,0x00,0x80]78; CHECK-NEXT: # fixup A - offset: 3, value: g64-4, kind: reloc_riprel_4byte79; CHECK-NEXT: # imm = 0x8000000080; CHECK-NEXT: jns b # TAILCALL81; CHECK-NEXT: # encoding: [0x79,A]82; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_183; CHECK-NEXT: # %bb.1: # %a84; CHECK-NEXT: jmp a # TAILCALL85; CHECK-NEXT: # encoding: [0xeb,A]86; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_187entry:88 %load1 = load i64, ptr @g6489 ; Add 0x80000000, which cannot fit in a sign extended 32-bit immediate. This90 ; get's folded because we can instead subtract -0x80000000.91 %add = add i64 %load1, 214748364892 store i64 %add, ptr @g6493 %cond = icmp slt i64 %add, 094 br i1 %cond, label %a, label %b95 96a:97 tail call void @a()98 ret void99 100b:101 tail call void @b()102 ret void103}104 105define void @add64_no_imm32_via_sub_due_to_cf_br() nounwind {106; CHECK-LABEL: add64_no_imm32_via_sub_due_to_cf_br:107; CHECK: # %bb.0: # %entry108; CHECK-NEXT: movl $2147483648, %eax # encoding: [0xb8,0x00,0x00,0x00,0x80]109; CHECK-NEXT: # imm = 0x80000000110; CHECK-NEXT: addq %rax, g64(%rip) # encoding: [0x48,0x01,0x05,A,A,A,A]111; CHECK-NEXT: # fixup A - offset: 3, value: g64, kind: reloc_riprel_4byte112; CHECK-NEXT: jae b # TAILCALL113; CHECK-NEXT: # encoding: [0x73,A]114; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_1115; CHECK-NEXT: # %bb.1: # %a116; CHECK-NEXT: jmp a # TAILCALL117; CHECK-NEXT: # encoding: [0xeb,A]118; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_1119entry:120 %load1 = load i64, ptr @g64121 ; Add 0x80000000, which cannot fit in a sign extended 32-bit immediate, but122 ; could in theory be folded into an immediate operand of a sub. However, we123 ; use the CF flag here and so shouldn't make that transformation.124 %add = add i64 %load1, 2147483648125 store i64 %add, ptr @g64126 %cond = icmp ult i64 %add, 2147483648127 br i1 %cond, label %a, label %b128 129a:130 tail call void @a()131 ret void132 133b:134 tail call void @b()135 ret void136}137 138define void @add64_too_large_imm32_br() nounwind {139; CHECK-LABEL: add64_too_large_imm32_br:140; CHECK: # %bb.0: # %entry141; CHECK-NEXT: movl $2147483649, %eax # encoding: [0xb8,0x01,0x00,0x00,0x80]142; CHECK-NEXT: # imm = 0x80000001143; CHECK-NEXT: addq %rax, g64(%rip) # encoding: [0x48,0x01,0x05,A,A,A,A]144; CHECK-NEXT: # fixup A - offset: 3, value: g64, kind: reloc_riprel_4byte145; CHECK-NEXT: jns b # TAILCALL146; CHECK-NEXT: # encoding: [0x79,A]147; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_1148; CHECK-NEXT: # %bb.1: # %a149; CHECK-NEXT: jmp a # TAILCALL150; CHECK-NEXT: # encoding: [0xeb,A]151; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_1152entry:153 %load1 = load i64, ptr @g64154 ; Add 0x80000001, which cannot fit in a sign extended 32-bit immediate. This155 ; should not get folded into an immediate.156 %add = add i64 %load1, 2147483649157 store i64 %add, ptr @g64158 %cond = icmp slt i64 %add, 0159 br i1 %cond, label %a, label %b160 161a:162 tail call void @a()163 ret void164 165b:166 tail call void @b()167 ret void168}169 170define void @add64_imm8_via_sub_br() nounwind {171; CHECK-LABEL: add64_imm8_via_sub_br:172; CHECK: # %bb.0: # %entry173; CHECK-NEXT: subq $-128, g64(%rip) # encoding: [0x48,0x83,0x2d,A,A,A,A,0x80]174; CHECK-NEXT: # fixup A - offset: 3, value: g64-1, kind: reloc_riprel_4byte175; CHECK-NEXT: jns b # TAILCALL176; CHECK-NEXT: # encoding: [0x79,A]177; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_1178; CHECK-NEXT: # %bb.1: # %a179; CHECK-NEXT: jmp a # TAILCALL180; CHECK-NEXT: # encoding: [0xeb,A]181; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_1182entry:183 %load1 = load i64, ptr @g64184 ; Add 0x80 which can't quite fit into an imm8 because it would be sign185 ; extended, but which can fit if we convert to a sub and negate the value.186 %add = add i64 %load1, 128187 store i64 %add, ptr @g64188 %cond = icmp slt i64 %add, 0189 br i1 %cond, label %a, label %b190 191a:192 tail call void @a()193 ret void194 195b:196 tail call void @b()197 ret void198}199 200define void @add64_imm8_br() nounwind {201; CHECK-LABEL: add64_imm8_br:202; CHECK: # %bb.0: # %entry203; CHECK-NEXT: addq $42, g64(%rip) # encoding: [0x48,0x83,0x05,A,A,A,A,0x2a]204; CHECK-NEXT: # fixup A - offset: 3, value: g64-1, kind: reloc_riprel_4byte205; CHECK-NEXT: jns b # TAILCALL206; CHECK-NEXT: # encoding: [0x79,A]207; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_1208; CHECK-NEXT: # %bb.1: # %a209; CHECK-NEXT: jmp a # TAILCALL210; CHECK-NEXT: # encoding: [0xeb,A]211; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_1212entry:213 %load1 = load i64, ptr @g64214 %add = add i64 %load1, 42215 store i64 %add, ptr @g64216 %cond = icmp slt i64 %add, 0217 br i1 %cond, label %a, label %b218 219a:220 tail call void @a()221 ret void222 223b:224 tail call void @b()225 ret void226}227 228define void @add64_imm8_neg_br() nounwind {229; CHECK-LABEL: add64_imm8_neg_br:230; CHECK: # %bb.0: # %entry231; CHECK-NEXT: addq $-42, g64(%rip) # encoding: [0x48,0x83,0x05,A,A,A,A,0xd6]232; CHECK-NEXT: # fixup A - offset: 3, value: g64-1, kind: reloc_riprel_4byte233; CHECK-NEXT: jns b # TAILCALL234; CHECK-NEXT: # encoding: [0x79,A]235; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_1236; CHECK-NEXT: # %bb.1: # %a237; CHECK-NEXT: jmp a # TAILCALL238; CHECK-NEXT: # encoding: [0xeb,A]239; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_1240entry:241 %load1 = load i64, ptr @g64242 %add = add i64 %load1, -42243 store i64 %add, ptr @g64244 %cond = icmp slt i64 %add, 0245 br i1 %cond, label %a, label %b246 247a:248 tail call void @a()249 ret void250 251b:252 tail call void @b()253 ret void254}255 256define void @add32_imm_br() nounwind {257; CHECK-LABEL: add32_imm_br:258; CHECK: # %bb.0: # %entry259; CHECK-NEXT: addl $-2147483648, g32(%rip) # encoding: [0x81,0x05,A,A,A,A,0x00,0x00,0x00,0x80]260; CHECK-NEXT: # fixup A - offset: 2, value: g32-4, kind: reloc_riprel_4byte261; CHECK-NEXT: # imm = 0x80000000262; CHECK-NEXT: jns b # TAILCALL263; CHECK-NEXT: # encoding: [0x79,A]264; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_1265; CHECK-NEXT: # %bb.1: # %a266; CHECK-NEXT: jmp a # TAILCALL267; CHECK-NEXT: # encoding: [0xeb,A]268; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_1269entry:270 %load1 = load i32, ptr @g32271 ; Add 0x80000000, a positive number requiring 32 bits of immediate.272 %add = add i32 %load1, 2147483648273 store i32 %add, ptr @g32274 %cond = icmp slt i32 %add, 0275 br i1 %cond, label %a, label %b276 277a:278 tail call void @a()279 ret void280 281b:282 tail call void @b()283 ret void284}285 286define void @add32_imm8_br() nounwind {287; CHECK-LABEL: add32_imm8_br:288; CHECK: # %bb.0: # %entry289; CHECK-NEXT: addl $42, g32(%rip) # encoding: [0x83,0x05,A,A,A,A,0x2a]290; CHECK-NEXT: # fixup A - offset: 2, value: g32-1, kind: reloc_riprel_4byte291; CHECK-NEXT: jns b # TAILCALL292; CHECK-NEXT: # encoding: [0x79,A]293; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_1294; CHECK-NEXT: # %bb.1: # %a295; CHECK-NEXT: jmp a # TAILCALL296; CHECK-NEXT: # encoding: [0xeb,A]297; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_1298entry:299 %load1 = load i32, ptr @g32300 %add = add i32 %load1, 42301 store i32 %add, ptr @g32302 %cond = icmp slt i32 %add, 0303 br i1 %cond, label %a, label %b304 305a:306 tail call void @a()307 ret void308 309b:310 tail call void @b()311 ret void312}313 314define void @add32_imm8_neg_br() nounwind {315; CHECK-LABEL: add32_imm8_neg_br:316; CHECK: # %bb.0: # %entry317; CHECK-NEXT: addl $-42, g32(%rip) # encoding: [0x83,0x05,A,A,A,A,0xd6]318; CHECK-NEXT: # fixup A - offset: 2, value: g32-1, kind: reloc_riprel_4byte319; CHECK-NEXT: jns b # TAILCALL320; CHECK-NEXT: # encoding: [0x79,A]321; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_1322; CHECK-NEXT: # %bb.1: # %a323; CHECK-NEXT: jmp a # TAILCALL324; CHECK-NEXT: # encoding: [0xeb,A]325; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_1326entry:327 %load1 = load i32, ptr @g32328 %add = add i32 %load1, -42329 store i32 %add, ptr @g32330 %cond = icmp slt i32 %add, 0331 br i1 %cond, label %a, label %b332 333a:334 tail call void @a()335 ret void336 337b:338 tail call void @b()339 ret void340}341 342define void @add16_imm_br() nounwind {343; CHECK-LABEL: add16_imm_br:344; CHECK: # %bb.0: # %entry345; CHECK-NEXT: addw $-32768, g16(%rip) # encoding: [0x66,0x81,0x05,A,A,A,A,0x00,0x80]346; CHECK-NEXT: # fixup A - offset: 3, value: g16-2, kind: reloc_riprel_4byte347; CHECK-NEXT: # imm = 0x8000348; CHECK-NEXT: jns b # TAILCALL349; CHECK-NEXT: # encoding: [0x79,A]350; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_1351; CHECK-NEXT: # %bb.1: # %a352; CHECK-NEXT: jmp a # TAILCALL353; CHECK-NEXT: # encoding: [0xeb,A]354; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_1355entry:356 %load1 = load i16, ptr @g16357 ; Add 0x8000, a positive number requiring 16 bits of immediate.358 %add = add i16 %load1, 32768359 store i16 %add, ptr @g16360 %cond = icmp slt i16 %add, 0361 br i1 %cond, label %a, label %b362 363a:364 tail call void @a()365 ret void366 367b:368 tail call void @b()369 ret void370}371 372define void @add16_imm8_br() nounwind {373; CHECK-LABEL: add16_imm8_br:374; CHECK: # %bb.0: # %entry375; CHECK-NEXT: addw $42, g16(%rip) # encoding: [0x66,0x83,0x05,A,A,A,A,0x2a]376; CHECK-NEXT: # fixup A - offset: 3, value: g16-1, kind: reloc_riprel_4byte377; CHECK-NEXT: jns b # TAILCALL378; CHECK-NEXT: # encoding: [0x79,A]379; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_1380; CHECK-NEXT: # %bb.1: # %a381; CHECK-NEXT: jmp a # TAILCALL382; CHECK-NEXT: # encoding: [0xeb,A]383; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_1384entry:385 %load1 = load i16, ptr @g16386 %add = add i16 %load1, 42387 store i16 %add, ptr @g16388 %cond = icmp slt i16 %add, 0389 br i1 %cond, label %a, label %b390 391a:392 tail call void @a()393 ret void394 395b:396 tail call void @b()397 ret void398}399 400define void @add16_imm8_neg_br() nounwind {401; CHECK-LABEL: add16_imm8_neg_br:402; CHECK: # %bb.0: # %entry403; CHECK-NEXT: addw $-42, g16(%rip) # encoding: [0x66,0x83,0x05,A,A,A,A,0xd6]404; CHECK-NEXT: # fixup A - offset: 3, value: g16-1, kind: reloc_riprel_4byte405; CHECK-NEXT: jns b # TAILCALL406; CHECK-NEXT: # encoding: [0x79,A]407; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_1408; CHECK-NEXT: # %bb.1: # %a409; CHECK-NEXT: jmp a # TAILCALL410; CHECK-NEXT: # encoding: [0xeb,A]411; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_1412entry:413 %load1 = load i16, ptr @g16414 %add = add i16 %load1, -42415 store i16 %add, ptr @g16416 %cond = icmp slt i16 %add, 0417 br i1 %cond, label %a, label %b418 419a:420 tail call void @a()421 ret void422 423b:424 tail call void @b()425 ret void426}427 428define void @add8_imm_br() nounwind {429; CHECK-LABEL: add8_imm_br:430; CHECK: # %bb.0: # %entry431; CHECK-NEXT: addb $-2, g8(%rip) # encoding: [0x80,0x05,A,A,A,A,0xfe]432; CHECK-NEXT: # fixup A - offset: 2, value: g8-1, kind: reloc_riprel_4byte433; CHECK-NEXT: jns b # TAILCALL434; CHECK-NEXT: # encoding: [0x79,A]435; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_1436; CHECK-NEXT: # %bb.1: # %a437; CHECK-NEXT: jmp a # TAILCALL438; CHECK-NEXT: # encoding: [0xeb,A]439; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_1440entry:441 %load1 = load i8, ptr @g8442 %add = add i8 %load1, -2443 store i8 %add, ptr @g8444 %cond = icmp slt i8 %add, 0445 br i1 %cond, label %a, label %b446 447a:448 tail call void @a()449 ret void450 451b:452 tail call void @b()453 ret void454}455 456define void @add64_reg_br(i64 %arg) nounwind {457; CHECK-LABEL: add64_reg_br:458; CHECK: # %bb.0: # %entry459; CHECK-NEXT: addq %rdi, g64(%rip) # encoding: [0x48,0x01,0x3d,A,A,A,A]460; CHECK-NEXT: # fixup A - offset: 3, value: g64, kind: reloc_riprel_4byte461; CHECK-NEXT: jns b # TAILCALL462; CHECK-NEXT: # encoding: [0x79,A]463; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_1464; CHECK-NEXT: # %bb.1: # %a465; CHECK-NEXT: jmp a # TAILCALL466; CHECK-NEXT: # encoding: [0xeb,A]467; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_1468entry:469 %load1 = load i64, ptr @g64470 %add = add i64 %load1, %arg471 store i64 %add, ptr @g64472 %cond = icmp slt i64 %add, 0473 br i1 %cond, label %a, label %b474 475a:476 tail call void @a()477 ret void478 479b:480 tail call void @b()481 ret void482}483 484define void @add32_reg_br(i32 %arg) nounwind {485; CHECK-LABEL: add32_reg_br:486; CHECK: # %bb.0: # %entry487; CHECK-NEXT: addl %edi, g32(%rip) # encoding: [0x01,0x3d,A,A,A,A]488; CHECK-NEXT: # fixup A - offset: 2, value: g32, kind: reloc_riprel_4byte489; CHECK-NEXT: jns b # TAILCALL490; CHECK-NEXT: # encoding: [0x79,A]491; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_1492; CHECK-NEXT: # %bb.1: # %a493; CHECK-NEXT: jmp a # TAILCALL494; CHECK-NEXT: # encoding: [0xeb,A]495; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_1496entry:497 %load1 = load i32, ptr @g32498 %add = add i32 %load1, %arg499 store i32 %add, ptr @g32500 %cond = icmp slt i32 %add, 0501 br i1 %cond, label %a, label %b502 503a:504 tail call void @a()505 ret void506 507b:508 tail call void @b()509 ret void510}511 512define void @add16_reg_br(i16 %arg) nounwind {513; CHECK-LABEL: add16_reg_br:514; CHECK: # %bb.0: # %entry515; CHECK-NEXT: addw %di, g16(%rip) # encoding: [0x66,0x01,0x3d,A,A,A,A]516; CHECK-NEXT: # fixup A - offset: 3, value: g16, kind: reloc_riprel_4byte517; CHECK-NEXT: jns b # TAILCALL518; CHECK-NEXT: # encoding: [0x79,A]519; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_1520; CHECK-NEXT: # %bb.1: # %a521; CHECK-NEXT: jmp a # TAILCALL522; CHECK-NEXT: # encoding: [0xeb,A]523; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_1524entry:525 %load1 = load i16, ptr @g16526 %add = add i16 %load1, %arg527 store i16 %add, ptr @g16528 %cond = icmp slt i16 %add, 0529 br i1 %cond, label %a, label %b530 531a:532 tail call void @a()533 ret void534 535b:536 tail call void @b()537 ret void538}539 540define void @add8_reg_br(i8 %arg) nounwind {541; CHECK-LABEL: add8_reg_br:542; CHECK: # %bb.0: # %entry543; CHECK-NEXT: addb %dil, g8(%rip) # encoding: [0x40,0x00,0x3d,A,A,A,A]544; CHECK-NEXT: # fixup A - offset: 3, value: g8, kind: reloc_riprel_4byte545; CHECK-NEXT: jns b # TAILCALL546; CHECK-NEXT: # encoding: [0x79,A]547; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_1548; CHECK-NEXT: # %bb.1: # %a549; CHECK-NEXT: jmp a # TAILCALL550; CHECK-NEXT: # encoding: [0xeb,A]551; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_1552entry:553 %load1 = load i8, ptr @g8554 %add = add i8 %load1, %arg555 store i8 %add, ptr @g8556 %cond = icmp slt i8 %add, 0557 br i1 %cond, label %a, label %b558 559a:560 tail call void @a()561 ret void562 563b:564 tail call void @b()565 ret void566}567 568define void @sub64_imm32_br() nounwind {569; CHECK-LABEL: sub64_imm32_br:570; CHECK: # %bb.0: # %entry571; CHECK-NEXT: subq $-2147483648, g64(%rip) # encoding: [0x48,0x81,0x2d,A,A,A,A,0x00,0x00,0x00,0x80]572; CHECK-NEXT: # fixup A - offset: 3, value: g64-4, kind: reloc_riprel_4byte573; CHECK-NEXT: # imm = 0x80000000574; CHECK-NEXT: jns b # TAILCALL575; CHECK-NEXT: # encoding: [0x79,A]576; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_1577; CHECK-NEXT: # %bb.1: # %a578; CHECK-NEXT: jmp a # TAILCALL579; CHECK-NEXT: # encoding: [0xeb,A]580; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_1581entry:582 %load1 = load i64, ptr @g64583 ; Subtract -0x80000000, which can't be negated into a sign-extended 32-bit584 ; immediate, so that we have to select sub here.585 %sub = sub i64 %load1, -2147483648586 store i64 %sub, ptr @g64587 %cond = icmp slt i64 %sub, 0588 br i1 %cond, label %a, label %b589 590a:591 tail call void @a()592 ret void593 594b:595 tail call void @b()596 ret void597}598 599define void @sub64_too_large_imm32_br() nounwind {600; CHECK-LABEL: sub64_too_large_imm32_br:601; CHECK: # %bb.0: # %entry602; CHECK-NEXT: movabsq $-4294967295, %rax # encoding: [0x48,0xb8,0x01,0x00,0x00,0x00,0xff,0xff,0xff,0xff]603; CHECK-NEXT: # imm = 0xFFFFFFFF00000001604; CHECK-NEXT: addq %rax, g64(%rip) # encoding: [0x48,0x01,0x05,A,A,A,A]605; CHECK-NEXT: # fixup A - offset: 3, value: g64, kind: reloc_riprel_4byte606; CHECK-NEXT: jns b # TAILCALL607; CHECK-NEXT: # encoding: [0x79,A]608; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_1609; CHECK-NEXT: # %bb.1: # %a610; CHECK-NEXT: jmp a # TAILCALL611; CHECK-NEXT: # encoding: [0xeb,A]612; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_1613entry:614 %load1 = load i64, ptr @g64615 ; Subtract 0xFFFFFFFF, which cannot fit in a sign extended 32-bit immediate,616 ; even if negated and sign extended as an add.617 %sub = sub i64 %load1, 4294967295618 store i64 %sub, ptr @g64619 %cond = icmp slt i64 %sub, 0620 br i1 %cond, label %a, label %b621 622a:623 tail call void @a()624 ret void625 626b:627 tail call void @b()628 ret void629}630 631define void @sub64_imm8_br() nounwind {632; CHECK-LABEL: sub64_imm8_br:633; CHECK: # %bb.0: # %entry634; CHECK-NEXT: subq $-128, g64(%rip) # encoding: [0x48,0x83,0x2d,A,A,A,A,0x80]635; CHECK-NEXT: # fixup A - offset: 3, value: g64-1, kind: reloc_riprel_4byte636; CHECK-NEXT: jns b # TAILCALL637; CHECK-NEXT: # encoding: [0x79,A]638; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_1639; CHECK-NEXT: # %bb.1: # %a640; CHECK-NEXT: jmp a # TAILCALL641; CHECK-NEXT: # encoding: [0xeb,A]642; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_1643entry:644 %load1 = load i64, ptr @g64645 ; Subtract -0x80, which can be done with an 8-bit immediate but only as646 ; a subtract where that immediate can be negative.647 %sub = sub i64 %load1, -128648 store i64 %sub, ptr @g64649 %cond = icmp slt i64 %sub, 0650 br i1 %cond, label %a, label %b651 652a:653 tail call void @a()654 ret void655 656b:657 tail call void @b()658 ret void659}660 661define void @sub32_imm_br() nounwind {662; CHECK-LABEL: sub32_imm_br:663; CHECK: # %bb.0: # %entry664; CHECK-NEXT: addl $-2147483648, g32(%rip) # encoding: [0x81,0x05,A,A,A,A,0x00,0x00,0x00,0x80]665; CHECK-NEXT: # fixup A - offset: 2, value: g32-4, kind: reloc_riprel_4byte666; CHECK-NEXT: # imm = 0x80000000667; CHECK-NEXT: jns b # TAILCALL668; CHECK-NEXT: # encoding: [0x79,A]669; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_1670; CHECK-NEXT: # %bb.1: # %a671; CHECK-NEXT: jmp a # TAILCALL672; CHECK-NEXT: # encoding: [0xeb,A]673; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_1674entry:675 %load1 = load i32, ptr @g32676 ; Subtract -0x80000000, which requires 32 bits of immediate but still gets677 ; lowered as an add.678 %sub = sub i32 %load1, -2147483648679 store i32 %sub, ptr @g32680 %cond = icmp slt i32 %sub, 0681 br i1 %cond, label %a, label %b682 683a:684 tail call void @a()685 ret void686 687b:688 tail call void @b()689 ret void690}691 692define void @sub32_imm8_br() nounwind {693; CHECK-LABEL: sub32_imm8_br:694; CHECK: # %bb.0: # %entry695; CHECK-NEXT: subl $-128, g32(%rip) # encoding: [0x83,0x2d,A,A,A,A,0x80]696; CHECK-NEXT: # fixup A - offset: 2, value: g32-1, kind: reloc_riprel_4byte697; CHECK-NEXT: jns b # TAILCALL698; CHECK-NEXT: # encoding: [0x79,A]699; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_1700; CHECK-NEXT: # %bb.1: # %a701; CHECK-NEXT: jmp a # TAILCALL702; CHECK-NEXT: # encoding: [0xeb,A]703; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_1704entry:705 %load1 = load i32, ptr @g32706 ; Subtract -0x80, which can be done with an 8-bit immediate but only as707 ; a subtract where that immediate can be negative.708 %sub = sub i32 %load1, -128709 store i32 %sub, ptr @g32710 %cond = icmp slt i32 %sub, 0711 br i1 %cond, label %a, label %b712 713a:714 tail call void @a()715 ret void716 717b:718 tail call void @b()719 ret void720}721 722define void @sub16_imm_br() nounwind {723; CHECK-LABEL: sub16_imm_br:724; CHECK: # %bb.0: # %entry725; CHECK-NEXT: addw $-32768, g16(%rip) # encoding: [0x66,0x81,0x05,A,A,A,A,0x00,0x80]726; CHECK-NEXT: # fixup A - offset: 3, value: g16-2, kind: reloc_riprel_4byte727; CHECK-NEXT: # imm = 0x8000728; CHECK-NEXT: jns b # TAILCALL729; CHECK-NEXT: # encoding: [0x79,A]730; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_1731; CHECK-NEXT: # %bb.1: # %a732; CHECK-NEXT: jmp a # TAILCALL733; CHECK-NEXT: # encoding: [0xeb,A]734; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_1735entry:736 %load1 = load i16, ptr @g16737 ; Subtract -0x8000, which requires a 16 bits of immediate but still gets738 ; lowered as an add.739 %sub = sub i16 %load1, -32768740 store i16 %sub, ptr @g16741 %cond = icmp slt i16 %sub, 0742 br i1 %cond, label %a, label %b743 744a:745 tail call void @a()746 ret void747 748b:749 tail call void @b()750 ret void751}752 753define void @sub16_imm8_br() nounwind {754; CHECK-LABEL: sub16_imm8_br:755; CHECK: # %bb.0: # %entry756; CHECK-NEXT: subw $-128, g16(%rip) # encoding: [0x66,0x83,0x2d,A,A,A,A,0x80]757; CHECK-NEXT: # fixup A - offset: 3, value: g16-1, kind: reloc_riprel_4byte758; CHECK-NEXT: jns b # TAILCALL759; CHECK-NEXT: # encoding: [0x79,A]760; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_1761; CHECK-NEXT: # %bb.1: # %a762; CHECK-NEXT: jmp a # TAILCALL763; CHECK-NEXT: # encoding: [0xeb,A]764; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_1765entry:766 %load1 = load i16, ptr @g16767 ; Subtract -0x80, which can be done with an 8-bit immediate but only as768 ; a subtract where that immediate can be negative.769 %sub = sub i16 %load1, -128770 store i16 %sub, ptr @g16771 %cond = icmp slt i16 %sub, 0772 br i1 %cond, label %a, label %b773 774a:775 tail call void @a()776 ret void777 778b:779 tail call void @b()780 ret void781}782 783define void @sub8_imm_br() nounwind {784; CHECK-LABEL: sub8_imm_br:785; CHECK: # %bb.0: # %entry786; CHECK-NEXT: addb $-128, g8(%rip) # encoding: [0x80,0x05,A,A,A,A,0x80]787; CHECK-NEXT: # fixup A - offset: 2, value: g8-1, kind: reloc_riprel_4byte788; CHECK-NEXT: jns b # TAILCALL789; CHECK-NEXT: # encoding: [0x79,A]790; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_1791; CHECK-NEXT: # %bb.1: # %a792; CHECK-NEXT: jmp a # TAILCALL793; CHECK-NEXT: # encoding: [0xeb,A]794; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_1795entry:796 %load1 = load i8, ptr @g8797 ; Subtract -0x80, which requires an 8-bit immediate but still gets lowered as798 ; an add.799 %sub = sub i8 %load1, -128800 store i8 %sub, ptr @g8801 %cond = icmp slt i8 %sub, 0802 br i1 %cond, label %a, label %b803 804a:805 tail call void @a()806 ret void807 808b:809 tail call void @b()810 ret void811}812 813define void @sub64_reg_br(i64 %arg) nounwind {814; CHECK-LABEL: sub64_reg_br:815; CHECK: # %bb.0: # %entry816; CHECK-NEXT: subq %rdi, g64(%rip) # encoding: [0x48,0x29,0x3d,A,A,A,A]817; CHECK-NEXT: # fixup A - offset: 3, value: g64, kind: reloc_riprel_4byte818; CHECK-NEXT: jns b # TAILCALL819; CHECK-NEXT: # encoding: [0x79,A]820; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_1821; CHECK-NEXT: # %bb.1: # %a822; CHECK-NEXT: jmp a # TAILCALL823; CHECK-NEXT: # encoding: [0xeb,A]824; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_1825entry:826 %load1 = load i64, ptr @g64827 %sub = sub i64 %load1, %arg828 store i64 %sub, ptr @g64829 %cond = icmp slt i64 %sub, 0830 br i1 %cond, label %a, label %b831 832a:833 tail call void @a()834 ret void835 836b:837 tail call void @b()838 ret void839}840 841define void @sub32_reg_br(i32 %arg) nounwind {842; CHECK-LABEL: sub32_reg_br:843; CHECK: # %bb.0: # %entry844; CHECK-NEXT: subl %edi, g32(%rip) # encoding: [0x29,0x3d,A,A,A,A]845; CHECK-NEXT: # fixup A - offset: 2, value: g32, kind: reloc_riprel_4byte846; CHECK-NEXT: jns b # TAILCALL847; CHECK-NEXT: # encoding: [0x79,A]848; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_1849; CHECK-NEXT: # %bb.1: # %a850; CHECK-NEXT: jmp a # TAILCALL851; CHECK-NEXT: # encoding: [0xeb,A]852; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_1853entry:854 %load1 = load i32, ptr @g32855 %sub = sub i32 %load1, %arg856 store i32 %sub, ptr @g32857 %cond = icmp slt i32 %sub, 0858 br i1 %cond, label %a, label %b859 860a:861 tail call void @a()862 ret void863 864b:865 tail call void @b()866 ret void867}868 869define void @sub16_reg_br(i16 %arg) nounwind {870; CHECK-LABEL: sub16_reg_br:871; CHECK: # %bb.0: # %entry872; CHECK-NEXT: subw %di, g16(%rip) # encoding: [0x66,0x29,0x3d,A,A,A,A]873; CHECK-NEXT: # fixup A - offset: 3, value: g16, kind: reloc_riprel_4byte874; CHECK-NEXT: jns b # TAILCALL875; CHECK-NEXT: # encoding: [0x79,A]876; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_1877; CHECK-NEXT: # %bb.1: # %a878; CHECK-NEXT: jmp a # TAILCALL879; CHECK-NEXT: # encoding: [0xeb,A]880; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_1881entry:882 %load1 = load i16, ptr @g16883 %sub = sub i16 %load1, %arg884 store i16 %sub, ptr @g16885 %cond = icmp slt i16 %sub, 0886 br i1 %cond, label %a, label %b887 888a:889 tail call void @a()890 ret void891 892b:893 tail call void @b()894 ret void895}896 897define void @sub8_reg_br(i8 %arg) nounwind {898; CHECK-LABEL: sub8_reg_br:899; CHECK: # %bb.0: # %entry900; CHECK-NEXT: subb %dil, g8(%rip) # encoding: [0x40,0x28,0x3d,A,A,A,A]901; CHECK-NEXT: # fixup A - offset: 3, value: g8, kind: reloc_riprel_4byte902; CHECK-NEXT: jns b # TAILCALL903; CHECK-NEXT: # encoding: [0x79,A]904; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_1905; CHECK-NEXT: # %bb.1: # %a906; CHECK-NEXT: jmp a # TAILCALL907; CHECK-NEXT: # encoding: [0xeb,A]908; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_1909entry:910 %load1 = load i8, ptr @g8911 %sub = sub i8 %load1, %arg912 store i8 %sub, ptr @g8913 %cond = icmp slt i8 %sub, 0914 br i1 %cond, label %a, label %b915 916a:917 tail call void @a()918 ret void919 920b:921 tail call void @b()922 ret void923}924 925define void @and64_imm32_br() nounwind {926; CHECK-LABEL: and64_imm32_br:927; CHECK: # %bb.0: # %entry928; CHECK-NEXT: andq $16777215, g64(%rip) # encoding: [0x48,0x81,0x25,A,A,A,A,0xff,0xff,0xff,0x00]929; CHECK-NEXT: # fixup A - offset: 3, value: g64-4, kind: reloc_riprel_4byte930; CHECK-NEXT: # imm = 0xFFFFFF931; CHECK-NEXT: jne b # TAILCALL932; CHECK-NEXT: # encoding: [0x75,A]933; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_1934; CHECK-NEXT: # %bb.1: # %a935; CHECK-NEXT: jmp a # TAILCALL936; CHECK-NEXT: # encoding: [0xeb,A]937; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_1938entry:939 %load1 = load i64, ptr @g64940 ; And 0x00FFFFFF, a positive immediate requiring 24-bits.941 %and = and i64 %load1, 16777215942 store i64 %and, ptr @g64943 %cond = icmp eq i64 %and, 0944 br i1 %cond, label %a, label %b945 946a:947 tail call void @a()948 ret void949 950b:951 tail call void @b()952 ret void953}954 955define void @and64_sext_imm32_br() nounwind {956; CHECK-LABEL: and64_sext_imm32_br:957; CHECK: # %bb.0: # %entry958; CHECK-NEXT: andq $-2147483648, g64(%rip) # encoding: [0x48,0x81,0x25,A,A,A,A,0x00,0x00,0x00,0x80]959; CHECK-NEXT: # fixup A - offset: 3, value: g64-4, kind: reloc_riprel_4byte960; CHECK-NEXT: # imm = 0x80000000961; CHECK-NEXT: jne b # TAILCALL962; CHECK-NEXT: # encoding: [0x75,A]963; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_1964; CHECK-NEXT: # %bb.1: # %a965; CHECK-NEXT: jmp a # TAILCALL966; CHECK-NEXT: # encoding: [0xeb,A]967; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_1968entry:969 %load1 = load i64, ptr @g64970 ; And -0x80000000, which requires sign-extended 32 bits.971 %and = and i64 %load1, -2147483648972 store i64 %and, ptr @g64973 %cond = icmp eq i64 %and, 0974 br i1 %cond, label %a, label %b975 976a:977 tail call void @a()978 ret void979 980b:981 tail call void @b()982 ret void983}984 985define void @and64_imm8_br() nounwind {986; CHECK-LABEL: and64_imm8_br:987; CHECK: # %bb.0: # %entry988; CHECK-NEXT: andq $15, g64(%rip) # encoding: [0x48,0x83,0x25,A,A,A,A,0x0f]989; CHECK-NEXT: # fixup A - offset: 3, value: g64-1, kind: reloc_riprel_4byte990; CHECK-NEXT: jne b # TAILCALL991; CHECK-NEXT: # encoding: [0x75,A]992; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_1993; CHECK-NEXT: # %bb.1: # %a994; CHECK-NEXT: jmp a # TAILCALL995; CHECK-NEXT: # encoding: [0xeb,A]996; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_1997entry:998 %load1 = load i64, ptr @g64999 %and = and i64 %load1, 151000 store i64 %and, ptr @g641001 %cond = icmp eq i64 %and, 01002 br i1 %cond, label %a, label %b1003 1004a:1005 tail call void @a()1006 ret void1007 1008b:1009 tail call void @b()1010 ret void1011}1012 1013define void @and64_imm8_neg_br() nounwind {1014; CHECK-LABEL: and64_imm8_neg_br:1015; CHECK: # %bb.0: # %entry1016; CHECK-NEXT: andq $-4, g64(%rip) # encoding: [0x48,0x83,0x25,A,A,A,A,0xfc]1017; CHECK-NEXT: # fixup A - offset: 3, value: g64-1, kind: reloc_riprel_4byte1018; CHECK-NEXT: jne b # TAILCALL1019; CHECK-NEXT: # encoding: [0x75,A]1020; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_11021; CHECK-NEXT: # %bb.1: # %a1022; CHECK-NEXT: jmp a # TAILCALL1023; CHECK-NEXT: # encoding: [0xeb,A]1024; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_11025entry:1026 %load1 = load i64, ptr @g641027 %and = and i64 %load1, -41028 store i64 %and, ptr @g641029 %cond = icmp eq i64 %and, 01030 br i1 %cond, label %a, label %b1031 1032a:1033 tail call void @a()1034 ret void1035 1036b:1037 tail call void @b()1038 ret void1039}1040 1041define void @and32_imm_br() nounwind {1042; CHECK-LABEL: and32_imm_br:1043; CHECK: # %bb.0: # %entry1044; CHECK-NEXT: andl $-2147483648, g32(%rip) # encoding: [0x81,0x25,A,A,A,A,0x00,0x00,0x00,0x80]1045; CHECK-NEXT: # fixup A - offset: 2, value: g32-4, kind: reloc_riprel_4byte1046; CHECK-NEXT: # imm = 0x800000001047; CHECK-NEXT: jne b # TAILCALL1048; CHECK-NEXT: # encoding: [0x75,A]1049; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_11050; CHECK-NEXT: # %bb.1: # %a1051; CHECK-NEXT: jmp a # TAILCALL1052; CHECK-NEXT: # encoding: [0xeb,A]1053; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_11054entry:1055 %load1 = load i32, ptr @g321056 ; And 0x80000000, a positive number requiring 32 bits of immediate.1057 %and = and i32 %load1, 21474836481058 store i32 %and, ptr @g321059 %cond = icmp eq i32 %and, 01060 br i1 %cond, label %a, label %b1061 1062a:1063 tail call void @a()1064 ret void1065 1066b:1067 tail call void @b()1068 ret void1069}1070 1071define void @and32_imm8_br() nounwind {1072; CHECK-LABEL: and32_imm8_br:1073; CHECK: # %bb.0: # %entry1074; CHECK-NEXT: andl $15, g32(%rip) # encoding: [0x83,0x25,A,A,A,A,0x0f]1075; CHECK-NEXT: # fixup A - offset: 2, value: g32-1, kind: reloc_riprel_4byte1076; CHECK-NEXT: jne b # TAILCALL1077; CHECK-NEXT: # encoding: [0x75,A]1078; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_11079; CHECK-NEXT: # %bb.1: # %a1080; CHECK-NEXT: jmp a # TAILCALL1081; CHECK-NEXT: # encoding: [0xeb,A]1082; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_11083entry:1084 %load1 = load i32, ptr @g321085 %and = and i32 %load1, 151086 store i32 %and, ptr @g321087 %cond = icmp eq i32 %and, 01088 br i1 %cond, label %a, label %b1089 1090a:1091 tail call void @a()1092 ret void1093 1094b:1095 tail call void @b()1096 ret void1097}1098 1099define void @and32_imm8_neg_br() nounwind {1100; CHECK-LABEL: and32_imm8_neg_br:1101; CHECK: # %bb.0: # %entry1102; CHECK-NEXT: andl $-4, g32(%rip) # encoding: [0x83,0x25,A,A,A,A,0xfc]1103; CHECK-NEXT: # fixup A - offset: 2, value: g32-1, kind: reloc_riprel_4byte1104; CHECK-NEXT: jne b # TAILCALL1105; CHECK-NEXT: # encoding: [0x75,A]1106; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_11107; CHECK-NEXT: # %bb.1: # %a1108; CHECK-NEXT: jmp a # TAILCALL1109; CHECK-NEXT: # encoding: [0xeb,A]1110; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_11111entry:1112 %load1 = load i32, ptr @g321113 %and = and i32 %load1, -41114 store i32 %and, ptr @g321115 %cond = icmp eq i32 %and, 01116 br i1 %cond, label %a, label %b1117 1118a:1119 tail call void @a()1120 ret void1121 1122b:1123 tail call void @b()1124 ret void1125}1126 1127define void @and16_imm_br() nounwind {1128; CHECK-LABEL: and16_imm_br:1129; CHECK: # %bb.0: # %entry1130; CHECK-NEXT: andw $-32768, g16(%rip) # encoding: [0x66,0x81,0x25,A,A,A,A,0x00,0x80]1131; CHECK-NEXT: # fixup A - offset: 3, value: g16-2, kind: reloc_riprel_4byte1132; CHECK-NEXT: # imm = 0x80001133; CHECK-NEXT: jne b # TAILCALL1134; CHECK-NEXT: # encoding: [0x75,A]1135; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_11136; CHECK-NEXT: # %bb.1: # %a1137; CHECK-NEXT: jmp a # TAILCALL1138; CHECK-NEXT: # encoding: [0xeb,A]1139; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_11140entry:1141 %load1 = load i16, ptr @g161142 %and = and i16 %load1, 327681143 store i16 %and, ptr @g161144 %cond = icmp eq i16 %and, 01145 br i1 %cond, label %a, label %b1146 1147a:1148 tail call void @a()1149 ret void1150 1151b:1152 tail call void @b()1153 ret void1154}1155 1156define void @and16_imm8_br() nounwind {1157; CHECK-LABEL: and16_imm8_br:1158; CHECK: # %bb.0: # %entry1159; CHECK-NEXT: andw $15, g16(%rip) # encoding: [0x66,0x83,0x25,A,A,A,A,0x0f]1160; CHECK-NEXT: # fixup A - offset: 3, value: g16-1, kind: reloc_riprel_4byte1161; CHECK-NEXT: jne b # TAILCALL1162; CHECK-NEXT: # encoding: [0x75,A]1163; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_11164; CHECK-NEXT: # %bb.1: # %a1165; CHECK-NEXT: jmp a # TAILCALL1166; CHECK-NEXT: # encoding: [0xeb,A]1167; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_11168entry:1169 %load1 = load i16, ptr @g161170 %and = and i16 %load1, 151171 store i16 %and, ptr @g161172 %cond = icmp eq i16 %and, 01173 br i1 %cond, label %a, label %b1174 1175a:1176 tail call void @a()1177 ret void1178 1179b:1180 tail call void @b()1181 ret void1182}1183 1184define void @and16_imm8_neg_br() nounwind {1185; CHECK-LABEL: and16_imm8_neg_br:1186; CHECK: # %bb.0: # %entry1187; CHECK-NEXT: andw $-4, g16(%rip) # encoding: [0x66,0x83,0x25,A,A,A,A,0xfc]1188; CHECK-NEXT: # fixup A - offset: 3, value: g16-1, kind: reloc_riprel_4byte1189; CHECK-NEXT: jne b # TAILCALL1190; CHECK-NEXT: # encoding: [0x75,A]1191; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_11192; CHECK-NEXT: # %bb.1: # %a1193; CHECK-NEXT: jmp a # TAILCALL1194; CHECK-NEXT: # encoding: [0xeb,A]1195; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_11196entry:1197 %load1 = load i16, ptr @g161198 %and = and i16 %load1, -41199 store i16 %and, ptr @g161200 %cond = icmp eq i16 %and, 01201 br i1 %cond, label %a, label %b1202 1203a:1204 tail call void @a()1205 ret void1206 1207b:1208 tail call void @b()1209 ret void1210}1211 1212define void @and8_imm_br() nounwind {1213; CHECK-LABEL: and8_imm_br:1214; CHECK: # %bb.0: # %entry1215; CHECK-NEXT: andb $-4, g8(%rip) # encoding: [0x80,0x25,A,A,A,A,0xfc]1216; CHECK-NEXT: # fixup A - offset: 2, value: g8-1, kind: reloc_riprel_4byte1217; CHECK-NEXT: jne b # TAILCALL1218; CHECK-NEXT: # encoding: [0x75,A]1219; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_11220; CHECK-NEXT: # %bb.1: # %a1221; CHECK-NEXT: jmp a # TAILCALL1222; CHECK-NEXT: # encoding: [0xeb,A]1223; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_11224entry:1225 %load1 = load i8, ptr @g81226 %and = and i8 %load1, -41227 store i8 %and, ptr @g81228 %cond = icmp eq i8 %and, 01229 br i1 %cond, label %a, label %b1230 1231a:1232 tail call void @a()1233 ret void1234 1235b:1236 tail call void @b()1237 ret void1238}1239 1240define void @and64_reg_br(i64 %arg) nounwind {1241; CHECK-LABEL: and64_reg_br:1242; CHECK: # %bb.0: # %entry1243; CHECK-NEXT: andq %rdi, g64(%rip) # encoding: [0x48,0x21,0x3d,A,A,A,A]1244; CHECK-NEXT: # fixup A - offset: 3, value: g64, kind: reloc_riprel_4byte1245; CHECK-NEXT: jne b # TAILCALL1246; CHECK-NEXT: # encoding: [0x75,A]1247; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_11248; CHECK-NEXT: # %bb.1: # %a1249; CHECK-NEXT: jmp a # TAILCALL1250; CHECK-NEXT: # encoding: [0xeb,A]1251; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_11252entry:1253 %load1 = load i64, ptr @g641254 %and = and i64 %load1, %arg1255 store i64 %and, ptr @g641256 %cond = icmp eq i64 %and, 01257 br i1 %cond, label %a, label %b1258 1259a:1260 tail call void @a()1261 ret void1262 1263b:1264 tail call void @b()1265 ret void1266}1267 1268define void @and32_reg_br(i32 %arg) nounwind {1269; CHECK-LABEL: and32_reg_br:1270; CHECK: # %bb.0: # %entry1271; CHECK-NEXT: andl %edi, g32(%rip) # encoding: [0x21,0x3d,A,A,A,A]1272; CHECK-NEXT: # fixup A - offset: 2, value: g32, kind: reloc_riprel_4byte1273; CHECK-NEXT: jne b # TAILCALL1274; CHECK-NEXT: # encoding: [0x75,A]1275; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_11276; CHECK-NEXT: # %bb.1: # %a1277; CHECK-NEXT: jmp a # TAILCALL1278; CHECK-NEXT: # encoding: [0xeb,A]1279; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_11280entry:1281 %load1 = load i32, ptr @g321282 %and = and i32 %load1, %arg1283 store i32 %and, ptr @g321284 %cond = icmp eq i32 %and, 01285 br i1 %cond, label %a, label %b1286 1287a:1288 tail call void @a()1289 ret void1290 1291b:1292 tail call void @b()1293 ret void1294}1295 1296define void @and16_reg_br(i16 %arg) nounwind {1297; CHECK-LABEL: and16_reg_br:1298; CHECK: # %bb.0: # %entry1299; CHECK-NEXT: andw %di, g16(%rip) # encoding: [0x66,0x21,0x3d,A,A,A,A]1300; CHECK-NEXT: # fixup A - offset: 3, value: g16, kind: reloc_riprel_4byte1301; CHECK-NEXT: jne b # TAILCALL1302; CHECK-NEXT: # encoding: [0x75,A]1303; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_11304; CHECK-NEXT: # %bb.1: # %a1305; CHECK-NEXT: jmp a # TAILCALL1306; CHECK-NEXT: # encoding: [0xeb,A]1307; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_11308entry:1309 %load1 = load i16, ptr @g161310 %and = and i16 %load1, %arg1311 store i16 %and, ptr @g161312 %cond = icmp eq i16 %and, 01313 br i1 %cond, label %a, label %b1314 1315a:1316 tail call void @a()1317 ret void1318 1319b:1320 tail call void @b()1321 ret void1322}1323 1324define void @and8_reg_br(i8 %arg) nounwind {1325; CHECK-LABEL: and8_reg_br:1326; CHECK: # %bb.0: # %entry1327; CHECK-NEXT: andb %dil, g8(%rip) # encoding: [0x40,0x20,0x3d,A,A,A,A]1328; CHECK-NEXT: # fixup A - offset: 3, value: g8, kind: reloc_riprel_4byte1329; CHECK-NEXT: jne b # TAILCALL1330; CHECK-NEXT: # encoding: [0x75,A]1331; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_11332; CHECK-NEXT: # %bb.1: # %a1333; CHECK-NEXT: jmp a # TAILCALL1334; CHECK-NEXT: # encoding: [0xeb,A]1335; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_11336entry:1337 %load1 = load i8, ptr @g81338 %and = and i8 %load1, %arg1339 store i8 %and, ptr @g81340 %cond = icmp eq i8 %and, 01341 br i1 %cond, label %a, label %b1342 1343a:1344 tail call void @a()1345 ret void1346 1347b:1348 tail call void @b()1349 ret void1350}1351 1352define void @or64_imm32_br() nounwind {1353; CHECK-LABEL: or64_imm32_br:1354; CHECK: # %bb.0: # %entry1355; CHECK-NEXT: orq $16777215, g64(%rip) # encoding: [0x48,0x81,0x0d,A,A,A,A,0xff,0xff,0xff,0x00]1356; CHECK-NEXT: # fixup A - offset: 3, value: g64-4, kind: reloc_riprel_4byte1357; CHECK-NEXT: # imm = 0xFFFFFF1358; CHECK-NEXT: jne b # TAILCALL1359; CHECK-NEXT: # encoding: [0x75,A]1360; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_11361; CHECK-NEXT: # %bb.1: # %a1362; CHECK-NEXT: jmp a # TAILCALL1363; CHECK-NEXT: # encoding: [0xeb,A]1364; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_11365entry:1366 %load1 = load i64, ptr @g641367 ; Or 0x00FFFFFF, a positive immediate requiring 24-bits.1368 %or = or i64 %load1, 167772151369 store i64 %or, ptr @g641370 %cond = icmp eq i64 %or, 01371 br i1 %cond, label %a, label %b1372 1373a:1374 tail call void @a()1375 ret void1376 1377b:1378 tail call void @b()1379 ret void1380}1381 1382define void @or64_sext_imm32_br() nounwind {1383; CHECK-LABEL: or64_sext_imm32_br:1384; CHECK: # %bb.0: # %entry1385; CHECK-NEXT: orq $-2147483648, g64(%rip) # encoding: [0x48,0x81,0x0d,A,A,A,A,0x00,0x00,0x00,0x80]1386; CHECK-NEXT: # fixup A - offset: 3, value: g64-4, kind: reloc_riprel_4byte1387; CHECK-NEXT: # imm = 0x800000001388; CHECK-NEXT: jne b # TAILCALL1389; CHECK-NEXT: # encoding: [0x75,A]1390; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_11391; CHECK-NEXT: # %bb.1: # %a1392; CHECK-NEXT: jmp a # TAILCALL1393; CHECK-NEXT: # encoding: [0xeb,A]1394; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_11395entry:1396 %load1 = load i64, ptr @g641397 ; Or -0x80000000, which requires sign-extended 32 bits.1398 %or = or i64 %load1, -21474836481399 store i64 %or, ptr @g641400 %cond = icmp eq i64 %or, 01401 br i1 %cond, label %a, label %b1402 1403a:1404 tail call void @a()1405 ret void1406 1407b:1408 tail call void @b()1409 ret void1410}1411 1412define void @or64_imm8_br() nounwind {1413; CHECK-LABEL: or64_imm8_br:1414; CHECK: # %bb.0: # %entry1415; CHECK-NEXT: orq $15, g64(%rip) # encoding: [0x48,0x83,0x0d,A,A,A,A,0x0f]1416; CHECK-NEXT: # fixup A - offset: 3, value: g64-1, kind: reloc_riprel_4byte1417; CHECK-NEXT: jne b # TAILCALL1418; CHECK-NEXT: # encoding: [0x75,A]1419; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_11420; CHECK-NEXT: # %bb.1: # %a1421; CHECK-NEXT: jmp a # TAILCALL1422; CHECK-NEXT: # encoding: [0xeb,A]1423; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_11424entry:1425 %load1 = load i64, ptr @g641426 %or = or i64 %load1, 151427 store i64 %or, ptr @g641428 %cond = icmp eq i64 %or, 01429 br i1 %cond, label %a, label %b1430 1431a:1432 tail call void @a()1433 ret void1434 1435b:1436 tail call void @b()1437 ret void1438}1439 1440define void @or64_imm8_neg_br() nounwind {1441; CHECK-LABEL: or64_imm8_neg_br:1442; CHECK: # %bb.0: # %entry1443; CHECK-NEXT: orq $-4, g64(%rip) # encoding: [0x48,0x83,0x0d,A,A,A,A,0xfc]1444; CHECK-NEXT: # fixup A - offset: 3, value: g64-1, kind: reloc_riprel_4byte1445; CHECK-NEXT: jne b # TAILCALL1446; CHECK-NEXT: # encoding: [0x75,A]1447; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_11448; CHECK-NEXT: # %bb.1: # %a1449; CHECK-NEXT: jmp a # TAILCALL1450; CHECK-NEXT: # encoding: [0xeb,A]1451; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_11452entry:1453 %load1 = load i64, ptr @g641454 %or = or i64 %load1, -41455 store i64 %or, ptr @g641456 %cond = icmp eq i64 %or, 01457 br i1 %cond, label %a, label %b1458 1459a:1460 tail call void @a()1461 ret void1462 1463b:1464 tail call void @b()1465 ret void1466}1467 1468define void @or32_imm_br() nounwind {1469; CHECK-LABEL: or32_imm_br:1470; CHECK: # %bb.0: # %entry1471; CHECK-NEXT: orl $-2147483648, g32(%rip) # encoding: [0x81,0x0d,A,A,A,A,0x00,0x00,0x00,0x80]1472; CHECK-NEXT: # fixup A - offset: 2, value: g32-4, kind: reloc_riprel_4byte1473; CHECK-NEXT: # imm = 0x800000001474; CHECK-NEXT: jne b # TAILCALL1475; CHECK-NEXT: # encoding: [0x75,A]1476; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_11477; CHECK-NEXT: # %bb.1: # %a1478; CHECK-NEXT: jmp a # TAILCALL1479; CHECK-NEXT: # encoding: [0xeb,A]1480; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_11481entry:1482 %load1 = load i32, ptr @g321483 ; Or 0x80000000, a positive number requiring 32 bits of immediate.1484 %or = or i32 %load1, 21474836481485 store i32 %or, ptr @g321486 %cond = icmp eq i32 %or, 01487 br i1 %cond, label %a, label %b1488 1489a:1490 tail call void @a()1491 ret void1492 1493b:1494 tail call void @b()1495 ret void1496}1497 1498define void @or32_imm8_br() nounwind {1499; CHECK-LABEL: or32_imm8_br:1500; CHECK: # %bb.0: # %entry1501; CHECK-NEXT: orl $15, g32(%rip) # encoding: [0x83,0x0d,A,A,A,A,0x0f]1502; CHECK-NEXT: # fixup A - offset: 2, value: g32-1, kind: reloc_riprel_4byte1503; CHECK-NEXT: jne b # TAILCALL1504; CHECK-NEXT: # encoding: [0x75,A]1505; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_11506; CHECK-NEXT: # %bb.1: # %a1507; CHECK-NEXT: jmp a # TAILCALL1508; CHECK-NEXT: # encoding: [0xeb,A]1509; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_11510entry:1511 %load1 = load i32, ptr @g321512 %or = or i32 %load1, 151513 store i32 %or, ptr @g321514 %cond = icmp eq i32 %or, 01515 br i1 %cond, label %a, label %b1516 1517a:1518 tail call void @a()1519 ret void1520 1521b:1522 tail call void @b()1523 ret void1524}1525 1526define void @or32_imm8_neg_br() nounwind {1527; CHECK-LABEL: or32_imm8_neg_br:1528; CHECK: # %bb.0: # %entry1529; CHECK-NEXT: orl $-4, g32(%rip) # encoding: [0x83,0x0d,A,A,A,A,0xfc]1530; CHECK-NEXT: # fixup A - offset: 2, value: g32-1, kind: reloc_riprel_4byte1531; CHECK-NEXT: jne b # TAILCALL1532; CHECK-NEXT: # encoding: [0x75,A]1533; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_11534; CHECK-NEXT: # %bb.1: # %a1535; CHECK-NEXT: jmp a # TAILCALL1536; CHECK-NEXT: # encoding: [0xeb,A]1537; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_11538entry:1539 %load1 = load i32, ptr @g321540 %or = or i32 %load1, -41541 store i32 %or, ptr @g321542 %cond = icmp eq i32 %or, 01543 br i1 %cond, label %a, label %b1544 1545a:1546 tail call void @a()1547 ret void1548 1549b:1550 tail call void @b()1551 ret void1552}1553 1554define void @or16_imm_br() nounwind {1555; CHECK-LABEL: or16_imm_br:1556; CHECK: # %bb.0: # %entry1557; CHECK-NEXT: orw $-32768, g16(%rip) # encoding: [0x66,0x81,0x0d,A,A,A,A,0x00,0x80]1558; CHECK-NEXT: # fixup A - offset: 3, value: g16-2, kind: reloc_riprel_4byte1559; CHECK-NEXT: # imm = 0x80001560; CHECK-NEXT: jne b # TAILCALL1561; CHECK-NEXT: # encoding: [0x75,A]1562; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_11563; CHECK-NEXT: # %bb.1: # %a1564; CHECK-NEXT: jmp a # TAILCALL1565; CHECK-NEXT: # encoding: [0xeb,A]1566; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_11567entry:1568 %load1 = load i16, ptr @g161569 %or = or i16 %load1, 327681570 store i16 %or, ptr @g161571 %cond = icmp eq i16 %or, 01572 br i1 %cond, label %a, label %b1573 1574a:1575 tail call void @a()1576 ret void1577 1578b:1579 tail call void @b()1580 ret void1581}1582 1583define void @or16_imm8_br() nounwind {1584; CHECK-LABEL: or16_imm8_br:1585; CHECK: # %bb.0: # %entry1586; CHECK-NEXT: orw $15, g16(%rip) # encoding: [0x66,0x83,0x0d,A,A,A,A,0x0f]1587; CHECK-NEXT: # fixup A - offset: 3, value: g16-1, kind: reloc_riprel_4byte1588; CHECK-NEXT: jne b # TAILCALL1589; CHECK-NEXT: # encoding: [0x75,A]1590; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_11591; CHECK-NEXT: # %bb.1: # %a1592; CHECK-NEXT: jmp a # TAILCALL1593; CHECK-NEXT: # encoding: [0xeb,A]1594; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_11595entry:1596 %load1 = load i16, ptr @g161597 %or = or i16 %load1, 151598 store i16 %or, ptr @g161599 %cond = icmp eq i16 %or, 01600 br i1 %cond, label %a, label %b1601 1602a:1603 tail call void @a()1604 ret void1605 1606b:1607 tail call void @b()1608 ret void1609}1610 1611define void @or16_imm8_neg_br() nounwind {1612; CHECK-LABEL: or16_imm8_neg_br:1613; CHECK: # %bb.0: # %entry1614; CHECK-NEXT: orw $-4, g16(%rip) # encoding: [0x66,0x83,0x0d,A,A,A,A,0xfc]1615; CHECK-NEXT: # fixup A - offset: 3, value: g16-1, kind: reloc_riprel_4byte1616; CHECK-NEXT: jne b # TAILCALL1617; CHECK-NEXT: # encoding: [0x75,A]1618; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_11619; CHECK-NEXT: # %bb.1: # %a1620; CHECK-NEXT: jmp a # TAILCALL1621; CHECK-NEXT: # encoding: [0xeb,A]1622; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_11623entry:1624 %load1 = load i16, ptr @g161625 %or = or i16 %load1, -41626 store i16 %or, ptr @g161627 %cond = icmp eq i16 %or, 01628 br i1 %cond, label %a, label %b1629 1630a:1631 tail call void @a()1632 ret void1633 1634b:1635 tail call void @b()1636 ret void1637}1638 1639define void @or8_imm_br() nounwind {1640; CHECK-LABEL: or8_imm_br:1641; CHECK: # %bb.0: # %entry1642; CHECK-NEXT: orb $-4, g8(%rip) # encoding: [0x80,0x0d,A,A,A,A,0xfc]1643; CHECK-NEXT: # fixup A - offset: 2, value: g8-1, kind: reloc_riprel_4byte1644; CHECK-NEXT: jne b # TAILCALL1645; CHECK-NEXT: # encoding: [0x75,A]1646; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_11647; CHECK-NEXT: # %bb.1: # %a1648; CHECK-NEXT: jmp a # TAILCALL1649; CHECK-NEXT: # encoding: [0xeb,A]1650; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_11651entry:1652 %load1 = load i8, ptr @g81653 %or = or i8 %load1, -41654 store i8 %or, ptr @g81655 %cond = icmp eq i8 %or, 01656 br i1 %cond, label %a, label %b1657 1658a:1659 tail call void @a()1660 ret void1661 1662b:1663 tail call void @b()1664 ret void1665}1666 1667define void @or64_reg_br(i64 %arg) nounwind {1668; CHECK-LABEL: or64_reg_br:1669; CHECK: # %bb.0: # %entry1670; CHECK-NEXT: orq %rdi, g64(%rip) # encoding: [0x48,0x09,0x3d,A,A,A,A]1671; CHECK-NEXT: # fixup A - offset: 3, value: g64, kind: reloc_riprel_4byte1672; CHECK-NEXT: jne b # TAILCALL1673; CHECK-NEXT: # encoding: [0x75,A]1674; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_11675; CHECK-NEXT: # %bb.1: # %a1676; CHECK-NEXT: jmp a # TAILCALL1677; CHECK-NEXT: # encoding: [0xeb,A]1678; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_11679entry:1680 %load1 = load i64, ptr @g641681 %or = or i64 %load1, %arg1682 store i64 %or, ptr @g641683 %cond = icmp eq i64 %or, 01684 br i1 %cond, label %a, label %b1685 1686a:1687 tail call void @a()1688 ret void1689 1690b:1691 tail call void @b()1692 ret void1693}1694 1695define void @or32_reg_br(i32 %arg) nounwind {1696; CHECK-LABEL: or32_reg_br:1697; CHECK: # %bb.0: # %entry1698; CHECK-NEXT: orl %edi, g32(%rip) # encoding: [0x09,0x3d,A,A,A,A]1699; CHECK-NEXT: # fixup A - offset: 2, value: g32, kind: reloc_riprel_4byte1700; CHECK-NEXT: jne b # TAILCALL1701; CHECK-NEXT: # encoding: [0x75,A]1702; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_11703; CHECK-NEXT: # %bb.1: # %a1704; CHECK-NEXT: jmp a # TAILCALL1705; CHECK-NEXT: # encoding: [0xeb,A]1706; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_11707entry:1708 %load1 = load i32, ptr @g321709 %or = or i32 %load1, %arg1710 store i32 %or, ptr @g321711 %cond = icmp eq i32 %or, 01712 br i1 %cond, label %a, label %b1713 1714a:1715 tail call void @a()1716 ret void1717 1718b:1719 tail call void @b()1720 ret void1721}1722 1723define void @or16_reg_br(i16 %arg) nounwind {1724; CHECK-LABEL: or16_reg_br:1725; CHECK: # %bb.0: # %entry1726; CHECK-NEXT: orw %di, g16(%rip) # encoding: [0x66,0x09,0x3d,A,A,A,A]1727; CHECK-NEXT: # fixup A - offset: 3, value: g16, kind: reloc_riprel_4byte1728; CHECK-NEXT: jne b # TAILCALL1729; CHECK-NEXT: # encoding: [0x75,A]1730; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_11731; CHECK-NEXT: # %bb.1: # %a1732; CHECK-NEXT: jmp a # TAILCALL1733; CHECK-NEXT: # encoding: [0xeb,A]1734; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_11735entry:1736 %load1 = load i16, ptr @g161737 %or = or i16 %load1, %arg1738 store i16 %or, ptr @g161739 %cond = icmp eq i16 %or, 01740 br i1 %cond, label %a, label %b1741 1742a:1743 tail call void @a()1744 ret void1745 1746b:1747 tail call void @b()1748 ret void1749}1750 1751define void @or8_reg_br(i8 %arg) nounwind {1752; CHECK-LABEL: or8_reg_br:1753; CHECK: # %bb.0: # %entry1754; CHECK-NEXT: orb %dil, g8(%rip) # encoding: [0x40,0x08,0x3d,A,A,A,A]1755; CHECK-NEXT: # fixup A - offset: 3, value: g8, kind: reloc_riprel_4byte1756; CHECK-NEXT: jne b # TAILCALL1757; CHECK-NEXT: # encoding: [0x75,A]1758; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_11759; CHECK-NEXT: # %bb.1: # %a1760; CHECK-NEXT: jmp a # TAILCALL1761; CHECK-NEXT: # encoding: [0xeb,A]1762; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_11763entry:1764 %load1 = load i8, ptr @g81765 %or = or i8 %load1, %arg1766 store i8 %or, ptr @g81767 %cond = icmp eq i8 %or, 01768 br i1 %cond, label %a, label %b1769 1770a:1771 tail call void @a()1772 ret void1773 1774b:1775 tail call void @b()1776 ret void1777}1778 1779define void @xor64_imm32_br() nounwind {1780; CHECK-LABEL: xor64_imm32_br:1781; CHECK: # %bb.0: # %entry1782; CHECK-NEXT: xorq $16777215, g64(%rip) # encoding: [0x48,0x81,0x35,A,A,A,A,0xff,0xff,0xff,0x00]1783; CHECK-NEXT: # fixup A - offset: 3, value: g64-4, kind: reloc_riprel_4byte1784; CHECK-NEXT: # imm = 0xFFFFFF1785; CHECK-NEXT: jne b # TAILCALL1786; CHECK-NEXT: # encoding: [0x75,A]1787; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_11788; CHECK-NEXT: # %bb.1: # %a1789; CHECK-NEXT: jmp a # TAILCALL1790; CHECK-NEXT: # encoding: [0xeb,A]1791; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_11792entry:1793 %load1 = load i64, ptr @g641794 ; Xor 0x00FFFFFF, a positive immediate requiring 24-bits.1795 %xor = xor i64 %load1, 167772151796 store i64 %xor, ptr @g641797 %cond = icmp eq i64 %xor, 01798 br i1 %cond, label %a, label %b1799 1800a:1801 tail call void @a()1802 ret void1803 1804b:1805 tail call void @b()1806 ret void1807}1808 1809define void @xor64_sext_imm32_br() nounwind {1810; CHECK-LABEL: xor64_sext_imm32_br:1811; CHECK: # %bb.0: # %entry1812; CHECK-NEXT: xorq $-2147483648, g64(%rip) # encoding: [0x48,0x81,0x35,A,A,A,A,0x00,0x00,0x00,0x80]1813; CHECK-NEXT: # fixup A - offset: 3, value: g64-4, kind: reloc_riprel_4byte1814; CHECK-NEXT: # imm = 0x800000001815; CHECK-NEXT: jne b # TAILCALL1816; CHECK-NEXT: # encoding: [0x75,A]1817; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_11818; CHECK-NEXT: # %bb.1: # %a1819; CHECK-NEXT: jmp a # TAILCALL1820; CHECK-NEXT: # encoding: [0xeb,A]1821; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_11822entry:1823 %load1 = load i64, ptr @g641824 ; Xor -0x80000000, which requires sign-extended 32 bits.1825 %xor = xor i64 %load1, -21474836481826 store i64 %xor, ptr @g641827 %cond = icmp eq i64 %xor, 01828 br i1 %cond, label %a, label %b1829 1830a:1831 tail call void @a()1832 ret void1833 1834b:1835 tail call void @b()1836 ret void1837}1838 1839define void @xor64_imm8_br() nounwind {1840; CHECK-LABEL: xor64_imm8_br:1841; CHECK: # %bb.0: # %entry1842; CHECK-NEXT: xorq $15, g64(%rip) # encoding: [0x48,0x83,0x35,A,A,A,A,0x0f]1843; CHECK-NEXT: # fixup A - offset: 3, value: g64-1, kind: reloc_riprel_4byte1844; CHECK-NEXT: jne b # TAILCALL1845; CHECK-NEXT: # encoding: [0x75,A]1846; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_11847; CHECK-NEXT: # %bb.1: # %a1848; CHECK-NEXT: jmp a # TAILCALL1849; CHECK-NEXT: # encoding: [0xeb,A]1850; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_11851entry:1852 %load1 = load i64, ptr @g641853 %xor = xor i64 %load1, 151854 store i64 %xor, ptr @g641855 %cond = icmp eq i64 %xor, 01856 br i1 %cond, label %a, label %b1857 1858a:1859 tail call void @a()1860 ret void1861 1862b:1863 tail call void @b()1864 ret void1865}1866 1867define void @xor64_imm8_neg_br() nounwind {1868; CHECK-LABEL: xor64_imm8_neg_br:1869; CHECK: # %bb.0: # %entry1870; CHECK-NEXT: xorq $-4, g64(%rip) # encoding: [0x48,0x83,0x35,A,A,A,A,0xfc]1871; CHECK-NEXT: # fixup A - offset: 3, value: g64-1, kind: reloc_riprel_4byte1872; CHECK-NEXT: jne b # TAILCALL1873; CHECK-NEXT: # encoding: [0x75,A]1874; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_11875; CHECK-NEXT: # %bb.1: # %a1876; CHECK-NEXT: jmp a # TAILCALL1877; CHECK-NEXT: # encoding: [0xeb,A]1878; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_11879entry:1880 %load1 = load i64, ptr @g641881 %xor = xor i64 %load1, -41882 store i64 %xor, ptr @g641883 %cond = icmp eq i64 %xor, 01884 br i1 %cond, label %a, label %b1885 1886a:1887 tail call void @a()1888 ret void1889 1890b:1891 tail call void @b()1892 ret void1893}1894 1895define void @xor32_imm_br() nounwind {1896; CHECK-LABEL: xor32_imm_br:1897; CHECK: # %bb.0: # %entry1898; CHECK-NEXT: xorl $-2147483648, g32(%rip) # encoding: [0x81,0x35,A,A,A,A,0x00,0x00,0x00,0x80]1899; CHECK-NEXT: # fixup A - offset: 2, value: g32-4, kind: reloc_riprel_4byte1900; CHECK-NEXT: # imm = 0x800000001901; CHECK-NEXT: jne b # TAILCALL1902; CHECK-NEXT: # encoding: [0x75,A]1903; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_11904; CHECK-NEXT: # %bb.1: # %a1905; CHECK-NEXT: jmp a # TAILCALL1906; CHECK-NEXT: # encoding: [0xeb,A]1907; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_11908entry:1909 %load1 = load i32, ptr @g321910 ; Xor 0x80000000, a positive number requiring 32 bits of immediate.1911 %xor = xor i32 %load1, 21474836481912 store i32 %xor, ptr @g321913 %cond = icmp eq i32 %xor, 01914 br i1 %cond, label %a, label %b1915 1916a:1917 tail call void @a()1918 ret void1919 1920b:1921 tail call void @b()1922 ret void1923}1924 1925define void @xor32_imm8_br() nounwind {1926; CHECK-LABEL: xor32_imm8_br:1927; CHECK: # %bb.0: # %entry1928; CHECK-NEXT: xorl $15, g32(%rip) # encoding: [0x83,0x35,A,A,A,A,0x0f]1929; CHECK-NEXT: # fixup A - offset: 2, value: g32-1, kind: reloc_riprel_4byte1930; CHECK-NEXT: jne b # TAILCALL1931; CHECK-NEXT: # encoding: [0x75,A]1932; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_11933; CHECK-NEXT: # %bb.1: # %a1934; CHECK-NEXT: jmp a # TAILCALL1935; CHECK-NEXT: # encoding: [0xeb,A]1936; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_11937entry:1938 %load1 = load i32, ptr @g321939 %xor = xor i32 %load1, 151940 store i32 %xor, ptr @g321941 %cond = icmp eq i32 %xor, 01942 br i1 %cond, label %a, label %b1943 1944a:1945 tail call void @a()1946 ret void1947 1948b:1949 tail call void @b()1950 ret void1951}1952 1953define void @xor32_imm8_neg_br() nounwind {1954; CHECK-LABEL: xor32_imm8_neg_br:1955; CHECK: # %bb.0: # %entry1956; CHECK-NEXT: xorl $-4, g32(%rip) # encoding: [0x83,0x35,A,A,A,A,0xfc]1957; CHECK-NEXT: # fixup A - offset: 2, value: g32-1, kind: reloc_riprel_4byte1958; CHECK-NEXT: jne b # TAILCALL1959; CHECK-NEXT: # encoding: [0x75,A]1960; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_11961; CHECK-NEXT: # %bb.1: # %a1962; CHECK-NEXT: jmp a # TAILCALL1963; CHECK-NEXT: # encoding: [0xeb,A]1964; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_11965entry:1966 %load1 = load i32, ptr @g321967 %xor = xor i32 %load1, -41968 store i32 %xor, ptr @g321969 %cond = icmp eq i32 %xor, 01970 br i1 %cond, label %a, label %b1971 1972a:1973 tail call void @a()1974 ret void1975 1976b:1977 tail call void @b()1978 ret void1979}1980 1981define void @xor16_imm_br() nounwind {1982; CHECK-LABEL: xor16_imm_br:1983; CHECK: # %bb.0: # %entry1984; CHECK-NEXT: xorw $-32768, g16(%rip) # encoding: [0x66,0x81,0x35,A,A,A,A,0x00,0x80]1985; CHECK-NEXT: # fixup A - offset: 3, value: g16-2, kind: reloc_riprel_4byte1986; CHECK-NEXT: # imm = 0x80001987; CHECK-NEXT: jne b # TAILCALL1988; CHECK-NEXT: # encoding: [0x75,A]1989; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_11990; CHECK-NEXT: # %bb.1: # %a1991; CHECK-NEXT: jmp a # TAILCALL1992; CHECK-NEXT: # encoding: [0xeb,A]1993; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_11994entry:1995 %load1 = load i16, ptr @g161996 %xor = xor i16 %load1, 327681997 store i16 %xor, ptr @g161998 %cond = icmp eq i16 %xor, 01999 br i1 %cond, label %a, label %b2000 2001a:2002 tail call void @a()2003 ret void2004 2005b:2006 tail call void @b()2007 ret void2008}2009 2010define void @xor16_imm8_br() nounwind {2011; CHECK-LABEL: xor16_imm8_br:2012; CHECK: # %bb.0: # %entry2013; CHECK-NEXT: xorw $15, g16(%rip) # encoding: [0x66,0x83,0x35,A,A,A,A,0x0f]2014; CHECK-NEXT: # fixup A - offset: 3, value: g16-1, kind: reloc_riprel_4byte2015; CHECK-NEXT: jne b # TAILCALL2016; CHECK-NEXT: # encoding: [0x75,A]2017; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_12018; CHECK-NEXT: # %bb.1: # %a2019; CHECK-NEXT: jmp a # TAILCALL2020; CHECK-NEXT: # encoding: [0xeb,A]2021; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_12022entry:2023 %load1 = load i16, ptr @g162024 %xor = xor i16 %load1, 152025 store i16 %xor, ptr @g162026 %cond = icmp eq i16 %xor, 02027 br i1 %cond, label %a, label %b2028 2029a:2030 tail call void @a()2031 ret void2032 2033b:2034 tail call void @b()2035 ret void2036}2037 2038define void @xor16_imm8_neg_br() nounwind {2039; CHECK-LABEL: xor16_imm8_neg_br:2040; CHECK: # %bb.0: # %entry2041; CHECK-NEXT: xorw $-4, g16(%rip) # encoding: [0x66,0x83,0x35,A,A,A,A,0xfc]2042; CHECK-NEXT: # fixup A - offset: 3, value: g16-1, kind: reloc_riprel_4byte2043; CHECK-NEXT: jne b # TAILCALL2044; CHECK-NEXT: # encoding: [0x75,A]2045; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_12046; CHECK-NEXT: # %bb.1: # %a2047; CHECK-NEXT: jmp a # TAILCALL2048; CHECK-NEXT: # encoding: [0xeb,A]2049; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_12050entry:2051 %load1 = load i16, ptr @g162052 %xor = xor i16 %load1, -42053 store i16 %xor, ptr @g162054 %cond = icmp eq i16 %xor, 02055 br i1 %cond, label %a, label %b2056 2057a:2058 tail call void @a()2059 ret void2060 2061b:2062 tail call void @b()2063 ret void2064}2065 2066define void @xor8_imm_br() nounwind {2067; CHECK-LABEL: xor8_imm_br:2068; CHECK: # %bb.0: # %entry2069; CHECK-NEXT: xorb $-4, g8(%rip) # encoding: [0x80,0x35,A,A,A,A,0xfc]2070; CHECK-NEXT: # fixup A - offset: 2, value: g8-1, kind: reloc_riprel_4byte2071; CHECK-NEXT: jne b # TAILCALL2072; CHECK-NEXT: # encoding: [0x75,A]2073; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_12074; CHECK-NEXT: # %bb.1: # %a2075; CHECK-NEXT: jmp a # TAILCALL2076; CHECK-NEXT: # encoding: [0xeb,A]2077; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_12078entry:2079 %load1 = load i8, ptr @g82080 %xor = xor i8 %load1, -42081 store i8 %xor, ptr @g82082 %cond = icmp eq i8 %xor, 02083 br i1 %cond, label %a, label %b2084 2085a:2086 tail call void @a()2087 ret void2088 2089b:2090 tail call void @b()2091 ret void2092}2093 2094define void @xor64_reg_br(i64 %arg) nounwind {2095; CHECK-LABEL: xor64_reg_br:2096; CHECK: # %bb.0: # %entry2097; CHECK-NEXT: xorq %rdi, g64(%rip) # encoding: [0x48,0x31,0x3d,A,A,A,A]2098; CHECK-NEXT: # fixup A - offset: 3, value: g64, kind: reloc_riprel_4byte2099; CHECK-NEXT: jne b # TAILCALL2100; CHECK-NEXT: # encoding: [0x75,A]2101; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_12102; CHECK-NEXT: # %bb.1: # %a2103; CHECK-NEXT: jmp a # TAILCALL2104; CHECK-NEXT: # encoding: [0xeb,A]2105; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_12106entry:2107 %load1 = load i64, ptr @g642108 %xor = xor i64 %load1, %arg2109 store i64 %xor, ptr @g642110 %cond = icmp eq i64 %xor, 02111 br i1 %cond, label %a, label %b2112 2113a:2114 tail call void @a()2115 ret void2116 2117b:2118 tail call void @b()2119 ret void2120}2121 2122define void @xor32_reg_br(i32 %arg) nounwind {2123; CHECK-LABEL: xor32_reg_br:2124; CHECK: # %bb.0: # %entry2125; CHECK-NEXT: xorl %edi, g32(%rip) # encoding: [0x31,0x3d,A,A,A,A]2126; CHECK-NEXT: # fixup A - offset: 2, value: g32, kind: reloc_riprel_4byte2127; CHECK-NEXT: jne b # TAILCALL2128; CHECK-NEXT: # encoding: [0x75,A]2129; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_12130; CHECK-NEXT: # %bb.1: # %a2131; CHECK-NEXT: jmp a # TAILCALL2132; CHECK-NEXT: # encoding: [0xeb,A]2133; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_12134entry:2135 %load1 = load i32, ptr @g322136 %xor = xor i32 %load1, %arg2137 store i32 %xor, ptr @g322138 %cond = icmp eq i32 %xor, 02139 br i1 %cond, label %a, label %b2140 2141a:2142 tail call void @a()2143 ret void2144 2145b:2146 tail call void @b()2147 ret void2148}2149 2150define void @xor16_reg_br(i16 %arg) nounwind {2151; CHECK-LABEL: xor16_reg_br:2152; CHECK: # %bb.0: # %entry2153; CHECK-NEXT: xorw %di, g16(%rip) # encoding: [0x66,0x31,0x3d,A,A,A,A]2154; CHECK-NEXT: # fixup A - offset: 3, value: g16, kind: reloc_riprel_4byte2155; CHECK-NEXT: jne b # TAILCALL2156; CHECK-NEXT: # encoding: [0x75,A]2157; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_12158; CHECK-NEXT: # %bb.1: # %a2159; CHECK-NEXT: jmp a # TAILCALL2160; CHECK-NEXT: # encoding: [0xeb,A]2161; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_12162entry:2163 %load1 = load i16, ptr @g162164 %xor = xor i16 %load1, %arg2165 store i16 %xor, ptr @g162166 %cond = icmp eq i16 %xor, 02167 br i1 %cond, label %a, label %b2168 2169a:2170 tail call void @a()2171 ret void2172 2173b:2174 tail call void @b()2175 ret void2176}2177 2178define void @xor8_reg_br(i8 %arg) nounwind {2179; CHECK-LABEL: xor8_reg_br:2180; CHECK: # %bb.0: # %entry2181; CHECK-NEXT: xorb %dil, g8(%rip) # encoding: [0x40,0x30,0x3d,A,A,A,A]2182; CHECK-NEXT: # fixup A - offset: 3, value: g8, kind: reloc_riprel_4byte2183; CHECK-NEXT: jne b # TAILCALL2184; CHECK-NEXT: # encoding: [0x75,A]2185; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_12186; CHECK-NEXT: # %bb.1: # %a2187; CHECK-NEXT: jmp a # TAILCALL2188; CHECK-NEXT: # encoding: [0xeb,A]2189; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_12190entry:2191 %load1 = load i8, ptr @g82192 %xor = xor i8 %load1, %arg2193 store i8 %xor, ptr @g82194 %cond = icmp eq i8 %xor, 02195 br i1 %cond, label %a, label %b2196 2197a:2198 tail call void @a()2199 ret void2200 2201b:2202 tail call void @b()2203 ret void2204}2205 2206define void @neg64_br() nounwind {2207; CHECK-LABEL: neg64_br:2208; CHECK: # %bb.0: # %entry2209; CHECK-NEXT: negq g64(%rip) # encoding: [0x48,0xf7,0x1d,A,A,A,A]2210; CHECK-NEXT: # fixup A - offset: 3, value: g64, kind: reloc_riprel_4byte2211; CHECK-NEXT: jns b # TAILCALL2212; CHECK-NEXT: # encoding: [0x79,A]2213; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_12214; CHECK-NEXT: # %bb.1: # %a2215; CHECK-NEXT: jmp a # TAILCALL2216; CHECK-NEXT: # encoding: [0xeb,A]2217; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_12218entry:2219 %load1 = load i64, ptr @g642220 %sub = sub i64 0, %load12221 store i64 %sub, ptr @g642222 %cond = icmp slt i64 %sub, 02223 br i1 %cond, label %a, label %b2224 2225a:2226 tail call void @a()2227 ret void2228 2229b:2230 tail call void @b()2231 ret void2232}2233 2234define void @neg32_br() nounwind {2235; CHECK-LABEL: neg32_br:2236; CHECK: # %bb.0: # %entry2237; CHECK-NEXT: negl g32(%rip) # encoding: [0xf7,0x1d,A,A,A,A]2238; CHECK-NEXT: # fixup A - offset: 2, value: g32, kind: reloc_riprel_4byte2239; CHECK-NEXT: jns b # TAILCALL2240; CHECK-NEXT: # encoding: [0x79,A]2241; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_12242; CHECK-NEXT: # %bb.1: # %a2243; CHECK-NEXT: jmp a # TAILCALL2244; CHECK-NEXT: # encoding: [0xeb,A]2245; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_12246entry:2247 %load1 = load i32, ptr @g322248 %sub = sub i32 0, %load12249 store i32 %sub, ptr @g322250 %cond = icmp slt i32 %sub, 02251 br i1 %cond, label %a, label %b2252 2253a:2254 tail call void @a()2255 ret void2256 2257b:2258 tail call void @b()2259 ret void2260}2261 2262define void @neg16_br() nounwind {2263; CHECK-LABEL: neg16_br:2264; CHECK: # %bb.0: # %entry2265; CHECK-NEXT: negw g16(%rip) # encoding: [0x66,0xf7,0x1d,A,A,A,A]2266; CHECK-NEXT: # fixup A - offset: 3, value: g16, kind: reloc_riprel_4byte2267; CHECK-NEXT: jns b # TAILCALL2268; CHECK-NEXT: # encoding: [0x79,A]2269; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_12270; CHECK-NEXT: # %bb.1: # %a2271; CHECK-NEXT: jmp a # TAILCALL2272; CHECK-NEXT: # encoding: [0xeb,A]2273; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_12274entry:2275 %load1 = load i16, ptr @g162276 %sub = sub i16 0, %load12277 store i16 %sub, ptr @g162278 %cond = icmp slt i16 %sub, 02279 br i1 %cond, label %a, label %b2280 2281a:2282 tail call void @a()2283 ret void2284 2285b:2286 tail call void @b()2287 ret void2288}2289 2290define void @neg8_br() nounwind {2291; CHECK-LABEL: neg8_br:2292; CHECK: # %bb.0: # %entry2293; CHECK-NEXT: negb g8(%rip) # encoding: [0xf6,0x1d,A,A,A,A]2294; CHECK-NEXT: # fixup A - offset: 2, value: g8, kind: reloc_riprel_4byte2295; CHECK-NEXT: jns b # TAILCALL2296; CHECK-NEXT: # encoding: [0x79,A]2297; CHECK-NEXT: # fixup A - offset: 1, value: b, kind: FK_PCRel_12298; CHECK-NEXT: # %bb.1: # %a2299; CHECK-NEXT: jmp a # TAILCALL2300; CHECK-NEXT: # encoding: [0xeb,A]2301; CHECK-NEXT: # fixup A - offset: 1, value: a, kind: FK_PCRel_12302entry:2303 %load1 = load i8, ptr @g82304 %sub = sub i8 0, %load12305 store i8 %sub, ptr @g82306 %cond = icmp slt i8 %sub, 02307 br i1 %cond, label %a, label %b2308 2309a:2310 tail call void @a()2311 ret void2312 2313b:2314 tail call void @b()2315 ret void2316}2317