550 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -O0 -mtriple=x86_64-unknown -mcpu=skx -o - %s | FileCheck %s --check-prefix=X64-O03; RUN: llc -mtriple=x86_64-unknown -mcpu=skx -o - %s | FileCheck %s --check-prefix=X644; RUN: llc -O0 -mtriple=i686-unknown -mcpu=skx -o - %s | FileCheck %s --check-prefix=X86-O05; RUN: llc -mtriple=i686-unknown -mcpu=skx -o - %s | FileCheck %s --check-prefix=X866 7@c = external dso_local constant i8, align 18 9define void @foo() {10; X64-O0-LABEL: foo:11; X64-O0: # %bb.0: # %entry12; X64-O0-NEXT: movzbl c, %ecx13; X64-O0-NEXT: xorl %eax, %eax14; X64-O0-NEXT: subl %ecx, %eax15; X64-O0-NEXT: movslq %eax, %rcx16; X64-O0-NEXT: xorl %eax, %eax17; X64-O0-NEXT: # kill: def $rax killed $eax18; X64-O0-NEXT: subq %rcx, %rax19; X64-O0-NEXT: # kill: def $al killed $al killed $rax20; X64-O0-NEXT: cmpb $0, %al21; X64-O0-NEXT: setne %al22; X64-O0-NEXT: andb $1, %al23; X64-O0-NEXT: movb %al, -{{[0-9]+}}(%rsp)24; X64-O0-NEXT: cmpb $0, c25; X64-O0-NEXT: setne %al26; X64-O0-NEXT: xorb $-1, %al27; X64-O0-NEXT: xorb $-1, %al28; X64-O0-NEXT: andb $1, %al29; X64-O0-NEXT: movzbl %al, %eax30; X64-O0-NEXT: movzbl c, %ecx31; X64-O0-NEXT: cmpl %ecx, %eax32; X64-O0-NEXT: setle %al33; X64-O0-NEXT: andb $1, %al34; X64-O0-NEXT: movzbl %al, %eax35; X64-O0-NEXT: movl %eax, -{{[0-9]+}}(%rsp)36; X64-O0-NEXT: retq37;38; X64-LABEL: foo:39; X64: # %bb.0: # %entry40; X64-NEXT: movzbl c(%rip), %eax41; X64-NEXT: xorl %ecx, %ecx42; X64-NEXT: testl %eax, %eax43; X64-NEXT: setne -{{[0-9]+}}(%rsp)44; X64-NEXT: setne %cl45; X64-NEXT: xorl %edx, %edx46; X64-NEXT: cmpl %eax, %ecx47; X64-NEXT: setle %dl48; X64-NEXT: movl %edx, -{{[0-9]+}}(%rsp)49; X64-NEXT: retq50;51; X86-O0-LABEL: foo:52; X86-O0: # %bb.0: # %entry53; X86-O0-NEXT: subl $8, %esp54; X86-O0-NEXT: .cfi_def_cfa_offset 1255; X86-O0-NEXT: movb c, %al56; X86-O0-NEXT: cmpb $0, %al57; X86-O0-NEXT: setne %al58; X86-O0-NEXT: andb $1, %al59; X86-O0-NEXT: movb %al, {{[0-9]+}}(%esp)60; X86-O0-NEXT: cmpb $0, c61; X86-O0-NEXT: setne %al62; X86-O0-NEXT: xorb $-1, %al63; X86-O0-NEXT: xorb $-1, %al64; X86-O0-NEXT: andb $1, %al65; X86-O0-NEXT: movzbl %al, %eax66; X86-O0-NEXT: movzbl c, %ecx67; X86-O0-NEXT: cmpl %ecx, %eax68; X86-O0-NEXT: setle %al69; X86-O0-NEXT: andb $1, %al70; X86-O0-NEXT: movzbl %al, %eax71; X86-O0-NEXT: movl %eax, (%esp)72; X86-O0-NEXT: addl $8, %esp73; X86-O0-NEXT: .cfi_def_cfa_offset 474; X86-O0-NEXT: retl75;76; X86-LABEL: foo:77; X86: # %bb.0: # %entry78; X86-NEXT: subl $8, %esp79; X86-NEXT: .cfi_def_cfa_offset 1280; X86-NEXT: movzbl c, %eax81; X86-NEXT: xorl %ecx, %ecx82; X86-NEXT: testl %eax, %eax83; X86-NEXT: setne {{[0-9]+}}(%esp)84; X86-NEXT: setne %cl85; X86-NEXT: xorl %edx, %edx86; X86-NEXT: cmpl %eax, %ecx87; X86-NEXT: setle %dl88; X86-NEXT: movl %edx, {{[0-9]+}}(%esp)89; X86-NEXT: addl $8, %esp90; X86-NEXT: .cfi_def_cfa_offset 491; X86-NEXT: retl92entry:93 %a = alloca i8, align 194 %b = alloca i32, align 495 %0 = load i8, ptr @c, align 196 %conv = zext i8 %0 to i3297 %sub = sub nsw i32 0, %conv98 %conv1 = sext i32 %sub to i6499 %sub2 = sub nsw i64 0, %conv1100 %conv3 = trunc i64 %sub2 to i8101 %tobool = icmp ne i8 %conv3, 0102 %frombool = zext i1 %tobool to i8103 store i8 %frombool, ptr %a, align 1104 %1 = load i8, ptr @c, align 1105 %tobool4 = icmp ne i8 %1, 0106 %lnot = xor i1 %tobool4, true107 %lnot5 = xor i1 %lnot, true108 %conv6 = zext i1 %lnot5 to i32109 %2 = load i8, ptr @c, align 1110 %conv7 = zext i8 %2 to i32111 %cmp = icmp sle i32 %conv6, %conv7112 %conv8 = zext i1 %cmp to i32113 store i32 %conv8, ptr %b, align 4114 ret void115}116 117@var_5 = external dso_local global i32, align 4118@var_57 = external dso_local global i64, align 8119@_ZN8struct_210member_2_0E = external dso_local global i64, align 8120 121define void @f1() {122; X64-O0-LABEL: f1:123; X64-O0: # %bb.0: # %entry124; X64-O0-NEXT: movslq var_5, %rax125; X64-O0-NEXT: movabsq $8381627093, %rcx # imm = 0x1F3957AD5126; X64-O0-NEXT: addq %rcx, %rax127; X64-O0-NEXT: cmpq $0, %rax128; X64-O0-NEXT: setne %al129; X64-O0-NEXT: andb $1, %al130; X64-O0-NEXT: movb %al, -{{[0-9]+}}(%rsp)131; X64-O0-NEXT: movl var_5, %eax132; X64-O0-NEXT: xorl $-1, %eax133; X64-O0-NEXT: cmpl $0, %eax134; X64-O0-NEXT: setne %al135; X64-O0-NEXT: xorb $-1, %al136; X64-O0-NEXT: andb $1, %al137; X64-O0-NEXT: movzbl %al, %eax138; X64-O0-NEXT: # kill: def $rax killed $eax139; X64-O0-NEXT: movslq var_5, %rcx140; X64-O0-NEXT: addq $7093, %rcx # imm = 0x1BB5141; X64-O0-NEXT: cmpq %rcx, %rax142; X64-O0-NEXT: setg %al143; X64-O0-NEXT: andb $1, %al144; X64-O0-NEXT: movzbl %al, %eax145; X64-O0-NEXT: # kill: def $rax killed $eax146; X64-O0-NEXT: movq %rax, var_57147; X64-O0-NEXT: movl var_5, %eax148; X64-O0-NEXT: xorl $-1, %eax149; X64-O0-NEXT: cmpl $0, %eax150; X64-O0-NEXT: setne %al151; X64-O0-NEXT: xorb $-1, %al152; X64-O0-NEXT: andb $1, %al153; X64-O0-NEXT: movzbl %al, %eax154; X64-O0-NEXT: # kill: def $rax killed $eax155; X64-O0-NEXT: movq %rax, _ZN8struct_210member_2_0E156; X64-O0-NEXT: retq157;158; X64-LABEL: f1:159; X64: # %bb.0: # %entry160; X64-NEXT: movslq var_5(%rip), %rax161; X64-NEXT: movabsq $-8381627093, %rcx # imm = 0xFFFFFFFE0C6A852B162; X64-NEXT: cmpq %rcx, %rax163; X64-NEXT: setne -{{[0-9]+}}(%rsp)164; X64-NEXT: xorl %ecx, %ecx165; X64-NEXT: cmpq $-1, %rax166; X64-NEXT: sete %cl167; X64-NEXT: xorl %edx, %edx168; X64-NEXT: cmpl $-1, %eax169; X64-NEXT: sete %dl170; X64-NEXT: addq $7093, %rax # imm = 0x1BB5171; X64-NEXT: xorl %esi, %esi172; X64-NEXT: cmpq %rax, %rdx173; X64-NEXT: setg %sil174; X64-NEXT: movq %rsi, var_57(%rip)175; X64-NEXT: movq %rcx, _ZN8struct_210member_2_0E(%rip)176; X64-NEXT: retq177;178; X86-O0-LABEL: f1:179; X86-O0: # %bb.0: # %entry180; X86-O0-NEXT: subl $1, %esp181; X86-O0-NEXT: .cfi_def_cfa_offset 5182; X86-O0-NEXT: movl var_5, %eax183; X86-O0-NEXT: movl %eax, %ecx184; X86-O0-NEXT: sarl $31, %ecx185; X86-O0-NEXT: xorl $208307499, %eax # imm = 0xC6A852B186; X86-O0-NEXT: xorl $-2, %ecx187; X86-O0-NEXT: orl %ecx, %eax188; X86-O0-NEXT: setne (%esp)189; X86-O0-NEXT: movl var_5, %ecx190; X86-O0-NEXT: movl %ecx, %eax191; X86-O0-NEXT: sarl $31, %eax192; X86-O0-NEXT: movl %ecx, %edx193; X86-O0-NEXT: subl $-1, %edx194; X86-O0-NEXT: sete %dl195; X86-O0-NEXT: movzbl %dl, %edx196; X86-O0-NEXT: addl $7093, %ecx # imm = 0x1BB5197; X86-O0-NEXT: adcl $0, %eax198; X86-O0-NEXT: subl %edx, %ecx199; X86-O0-NEXT: sbbl $0, %eax200; X86-O0-NEXT: setl %al201; X86-O0-NEXT: movzbl %al, %eax202; X86-O0-NEXT: movl %eax, var_57203; X86-O0-NEXT: movl $0, var_57+4204; X86-O0-NEXT: movl var_5, %eax205; X86-O0-NEXT: subl $-1, %eax206; X86-O0-NEXT: sete %al207; X86-O0-NEXT: movzbl %al, %eax208; X86-O0-NEXT: movl %eax, _ZN8struct_210member_2_0E209; X86-O0-NEXT: movl $0, _ZN8struct_210member_2_0E+4210; X86-O0-NEXT: addl $1, %esp211; X86-O0-NEXT: .cfi_def_cfa_offset 4212; X86-O0-NEXT: retl213;214; X86-LABEL: f1:215; X86: # %bb.0: # %entry216; X86-NEXT: pushl %ebx217; X86-NEXT: .cfi_def_cfa_offset 8218; X86-NEXT: pushl %esi219; X86-NEXT: .cfi_def_cfa_offset 12220; X86-NEXT: subl $1, %esp221; X86-NEXT: .cfi_def_cfa_offset 13222; X86-NEXT: .cfi_offset %esi, -12223; X86-NEXT: .cfi_offset %ebx, -8224; X86-NEXT: movl var_5, %eax225; X86-NEXT: movl %eax, %edx226; X86-NEXT: xorl $208307499, %edx # imm = 0xC6A852B227; X86-NEXT: movl %eax, %ecx228; X86-NEXT: sarl $31, %ecx229; X86-NEXT: movl %ecx, %esi230; X86-NEXT: xorl $-2, %esi231; X86-NEXT: orl %edx, %esi232; X86-NEXT: setne (%esp)233; X86-NEXT: movl %eax, %esi234; X86-NEXT: andl %ecx, %esi235; X86-NEXT: xorl %edx, %edx236; X86-NEXT: cmpl $-1, %esi237; X86-NEXT: sete %dl238; X86-NEXT: xorl %ebx, %ebx239; X86-NEXT: cmpl $-1, %eax240; X86-NEXT: sete %bl241; X86-NEXT: addl $7093, %eax # imm = 0x1BB5242; X86-NEXT: adcl $0, %ecx243; X86-NEXT: cmpl %ebx, %eax244; X86-NEXT: sbbl $0, %ecx245; X86-NEXT: setl %al246; X86-NEXT: movzbl %al, %eax247; X86-NEXT: movl %eax, var_57248; X86-NEXT: movl $0, var_57+4249; X86-NEXT: movl %edx, _ZN8struct_210member_2_0E250; X86-NEXT: movl $0, _ZN8struct_210member_2_0E+4251; X86-NEXT: addl $1, %esp252; X86-NEXT: .cfi_def_cfa_offset 12253; X86-NEXT: popl %esi254; X86-NEXT: .cfi_def_cfa_offset 8255; X86-NEXT: popl %ebx256; X86-NEXT: .cfi_def_cfa_offset 4257; X86-NEXT: retl258entry:259 %a = alloca i8, align 1260 %0 = load i32, ptr @var_5, align 4261 %conv = sext i32 %0 to i64262 %add = add nsw i64 %conv, 8381627093263 %tobool = icmp ne i64 %add, 0264 %frombool = zext i1 %tobool to i8265 store i8 %frombool, ptr %a, align 1266 %1 = load i32, ptr @var_5, align 4267 %neg = xor i32 %1, -1268 %tobool1 = icmp ne i32 %neg, 0269 %lnot = xor i1 %tobool1, true270 %conv2 = zext i1 %lnot to i64271 %2 = load i32, ptr @var_5, align 4272 %conv3 = sext i32 %2 to i64273 %add4 = add nsw i64 %conv3, 7093274 %cmp = icmp sgt i64 %conv2, %add4275 %conv5 = zext i1 %cmp to i64276 store i64 %conv5, ptr @var_57, align 8277 %3 = load i32, ptr @var_5, align 4278 %neg6 = xor i32 %3, -1279 %tobool7 = icmp ne i32 %neg6, 0280 %lnot8 = xor i1 %tobool7, true281 %conv9 = zext i1 %lnot8 to i64282 store i64 %conv9, ptr @_ZN8struct_210member_2_0E, align 8283 ret void284}285 286 287@var_7 = external dso_local global i8, align 1288 289define void @f2() {290; X64-O0-LABEL: f2:291; X64-O0: # %bb.0: # %entry292; X64-O0-NEXT: movzbl var_7, %eax293; X64-O0-NEXT: cmpb $0, var_7294; X64-O0-NEXT: setne %cl295; X64-O0-NEXT: xorb $-1, %cl296; X64-O0-NEXT: andb $1, %cl297; X64-O0-NEXT: movzbl %cl, %ecx298; X64-O0-NEXT: xorl %ecx, %eax299; X64-O0-NEXT: # kill: def $ax killed $ax killed $eax300; X64-O0-NEXT: movw %ax, -{{[0-9]+}}(%rsp)301; X64-O0-NEXT: movzbl var_7, %eax302; X64-O0-NEXT: # kill: def $ax killed $ax killed $eax303; X64-O0-NEXT: cmpw $0, %ax304; X64-O0-NEXT: setne %al305; X64-O0-NEXT: xorb $-1, %al306; X64-O0-NEXT: andb $1, %al307; X64-O0-NEXT: movzbl %al, %eax308; X64-O0-NEXT: movzbl var_7, %ecx309; X64-O0-NEXT: cmpl %ecx, %eax310; X64-O0-NEXT: sete %al311; X64-O0-NEXT: andb $1, %al312; X64-O0-NEXT: movzbl %al, %eax313; X64-O0-NEXT: movw %ax, %cx314; X64-O0-NEXT: # implicit-def: $rax315; X64-O0-NEXT: movw %cx, (%rax)316; X64-O0-NEXT: retq317;318; X64-LABEL: f2:319; X64: # %bb.0: # %entry320; X64-NEXT: movzbl var_7(%rip), %eax321; X64-NEXT: xorl %ecx, %ecx322; X64-NEXT: testl %eax, %eax323; X64-NEXT: sete %cl324; X64-NEXT: xorl %edx, %edx325; X64-NEXT: xorl %eax, %ecx326; X64-NEXT: movw %cx, -{{[0-9]+}}(%rsp)327; X64-NEXT: sete %dl328; X64-NEXT: movw %dx, (%rax)329; X64-NEXT: retq330;331; X86-O0-LABEL: f2:332; X86-O0: # %bb.0: # %entry333; X86-O0-NEXT: subl $2, %esp334; X86-O0-NEXT: .cfi_def_cfa_offset 6335; X86-O0-NEXT: movzbl var_7, %eax336; X86-O0-NEXT: cmpb $0, var_7337; X86-O0-NEXT: setne %cl338; X86-O0-NEXT: xorb $-1, %cl339; X86-O0-NEXT: andb $1, %cl340; X86-O0-NEXT: movzbl %cl, %ecx341; X86-O0-NEXT: xorl %ecx, %eax342; X86-O0-NEXT: # kill: def $ax killed $ax killed $eax343; X86-O0-NEXT: movw %ax, (%esp)344; X86-O0-NEXT: movzbl var_7, %eax345; X86-O0-NEXT: # kill: def $ax killed $ax killed $eax346; X86-O0-NEXT: cmpw $0, %ax347; X86-O0-NEXT: setne %al348; X86-O0-NEXT: xorb $-1, %al349; X86-O0-NEXT: andb $1, %al350; X86-O0-NEXT: movzbl %al, %eax351; X86-O0-NEXT: movzbl var_7, %ecx352; X86-O0-NEXT: cmpl %ecx, %eax353; X86-O0-NEXT: sete %al354; X86-O0-NEXT: andb $1, %al355; X86-O0-NEXT: movzbl %al, %eax356; X86-O0-NEXT: movw %ax, %cx357; X86-O0-NEXT: # implicit-def: $eax358; X86-O0-NEXT: movw %cx, (%eax)359; X86-O0-NEXT: addl $2, %esp360; X86-O0-NEXT: .cfi_def_cfa_offset 4361; X86-O0-NEXT: retl362;363; X86-LABEL: f2:364; X86: # %bb.0: # %entry365; X86-NEXT: subl $2, %esp366; X86-NEXT: .cfi_def_cfa_offset 6367; X86-NEXT: movzbl var_7, %edx368; X86-NEXT: xorl %eax, %eax369; X86-NEXT: testl %edx, %edx370; X86-NEXT: sete %al371; X86-NEXT: xorl %ecx, %ecx372; X86-NEXT: xorl %edx, %eax373; X86-NEXT: movw %ax, (%esp)374; X86-NEXT: sete %cl375; X86-NEXT: movw %cx, (%eax)376; X86-NEXT: addl $2, %esp377; X86-NEXT: .cfi_def_cfa_offset 4378; X86-NEXT: retl379entry:380 %a = alloca i16, align 2381 %0 = load i8, ptr @var_7, align 1382 %conv = zext i8 %0 to i32383 %1 = load i8, ptr @var_7, align 1384 %tobool = icmp ne i8 %1, 0385 %lnot = xor i1 %tobool, true386 %conv1 = zext i1 %lnot to i32387 %xor = xor i32 %conv, %conv1388 %conv2 = trunc i32 %xor to i16389 store i16 %conv2, ptr %a, align 2390 %2 = load i8, ptr @var_7, align 1391 %conv3 = zext i8 %2 to i16392 %tobool4 = icmp ne i16 %conv3, 0393 %lnot5 = xor i1 %tobool4, true394 %conv6 = zext i1 %lnot5 to i32395 %3 = load i8, ptr @var_7, align 1396 %conv7 = zext i8 %3 to i32397 %cmp = icmp eq i32 %conv6, %conv7398 %conv8 = zext i1 %cmp to i32399 %conv9 = trunc i32 %conv8 to i16400 store i16 %conv9, ptr undef, align 2401 ret void402}403 404 405@var_13 = external dso_local global i32, align 4406@var_16 = external dso_local global i32, align 4407@var_46 = external dso_local global i32, align 4408 409define void @f3() #0 {410; X64-O0-LABEL: f3:411; X64-O0: # %bb.0: # %entry412; X64-O0-NEXT: movl var_13, %eax413; X64-O0-NEXT: xorl $-1, %eax414; X64-O0-NEXT: movl %eax, %eax415; X64-O0-NEXT: # kill: def $rax killed $eax416; X64-O0-NEXT: cmpl $0, var_13417; X64-O0-NEXT: setne %cl418; X64-O0-NEXT: xorb $-1, %cl419; X64-O0-NEXT: andb $1, %cl420; X64-O0-NEXT: movzbl %cl, %ecx421; X64-O0-NEXT: # kill: def $rcx killed $ecx422; X64-O0-NEXT: movl var_13, %edx423; X64-O0-NEXT: xorl $-1, %edx424; X64-O0-NEXT: xorl var_16, %edx425; X64-O0-NEXT: movl %edx, %edx426; X64-O0-NEXT: # kill: def $rdx killed $edx427; X64-O0-NEXT: andq %rdx, %rcx428; X64-O0-NEXT: orq %rcx, %rax429; X64-O0-NEXT: movq %rax, -{{[0-9]+}}(%rsp)430; X64-O0-NEXT: movl var_13, %eax431; X64-O0-NEXT: xorl $-1, %eax432; X64-O0-NEXT: movl %eax, %eax433; X64-O0-NEXT: # kill: def $rax killed $eax434; X64-O0-NEXT: cmpl $0, var_13435; X64-O0-NEXT: setne %cl436; X64-O0-NEXT: xorb $-1, %cl437; X64-O0-NEXT: andb $1, %cl438; X64-O0-NEXT: movzbl %cl, %ecx439; X64-O0-NEXT: # kill: def $rcx killed $ecx440; X64-O0-NEXT: andq $0, %rcx441; X64-O0-NEXT: orq %rcx, %rax442; X64-O0-NEXT: # kill: def $eax killed $eax killed $rax443; X64-O0-NEXT: movl %eax, var_46444; X64-O0-NEXT: retq445;446; X64-LABEL: f3:447; X64: # %bb.0: # %entry448; X64-NEXT: movl var_13(%rip), %eax449; X64-NEXT: xorl %ecx, %ecx450; X64-NEXT: testl %eax, %eax451; X64-NEXT: notl %eax452; X64-NEXT: sete %cl453; X64-NEXT: movl var_16(%rip), %edx454; X64-NEXT: xorl %eax, %edx455; X64-NEXT: andl %edx, %ecx456; X64-NEXT: orl %eax, %ecx457; X64-NEXT: movq %rcx, -{{[0-9]+}}(%rsp)458; X64-NEXT: movl %eax, var_46(%rip)459; X64-NEXT: retq460;461; X86-O0-LABEL: f3:462; X86-O0: # %bb.0: # %entry463; X86-O0-NEXT: pushl %ebp464; X86-O0-NEXT: .cfi_def_cfa_offset 8465; X86-O0-NEXT: .cfi_offset %ebp, -8466; X86-O0-NEXT: movl %esp, %ebp467; X86-O0-NEXT: .cfi_def_cfa_register %ebp468; X86-O0-NEXT: pushl %esi469; X86-O0-NEXT: andl $-8, %esp470; X86-O0-NEXT: subl $16, %esp471; X86-O0-NEXT: .cfi_offset %esi, -12472; X86-O0-NEXT: movl var_13, %ecx473; X86-O0-NEXT: movl %ecx, %eax474; X86-O0-NEXT: notl %eax475; X86-O0-NEXT: testl %ecx, %ecx476; X86-O0-NEXT: sete %cl477; X86-O0-NEXT: movzbl %cl, %ecx478; X86-O0-NEXT: movl var_16, %esi479; X86-O0-NEXT: movl %eax, %edx480; X86-O0-NEXT: xorl %esi, %edx481; X86-O0-NEXT: andl %edx, %ecx482; X86-O0-NEXT: orl %ecx, %eax483; X86-O0-NEXT: movl %eax, (%esp)484; X86-O0-NEXT: movl $0, {{[0-9]+}}(%esp)485; X86-O0-NEXT: movl var_13, %eax486; X86-O0-NEXT: notl %eax487; X86-O0-NEXT: movl %eax, var_46488; X86-O0-NEXT: leal -4(%ebp), %esp489; X86-O0-NEXT: popl %esi490; X86-O0-NEXT: popl %ebp491; X86-O0-NEXT: .cfi_def_cfa %esp, 4492; X86-O0-NEXT: retl493;494; X86-LABEL: f3:495; X86: # %bb.0: # %entry496; X86-NEXT: pushl %ebp497; X86-NEXT: .cfi_def_cfa_offset 8498; X86-NEXT: .cfi_offset %ebp, -8499; X86-NEXT: movl %esp, %ebp500; X86-NEXT: .cfi_def_cfa_register %ebp501; X86-NEXT: andl $-8, %esp502; X86-NEXT: subl $8, %esp503; X86-NEXT: movl var_13, %eax504; X86-NEXT: xorl %ecx, %ecx505; X86-NEXT: testl %eax, %eax506; X86-NEXT: notl %eax507; X86-NEXT: sete %cl508; X86-NEXT: movl var_16, %edx509; X86-NEXT: xorl %eax, %edx510; X86-NEXT: andl %ecx, %edx511; X86-NEXT: orl %eax, %edx512; X86-NEXT: movl %edx, (%esp)513; X86-NEXT: movl $0, {{[0-9]+}}(%esp)514; X86-NEXT: movl %eax, var_46515; X86-NEXT: movl %ebp, %esp516; X86-NEXT: popl %ebp517; X86-NEXT: .cfi_def_cfa %esp, 4518; X86-NEXT: retl519entry:520 %a = alloca i64, align 8521 %0 = load i32, ptr @var_13, align 4522 %neg = xor i32 %0, -1523 %conv = zext i32 %neg to i64524 %1 = load i32, ptr @var_13, align 4525 %tobool = icmp ne i32 %1, 0526 %lnot = xor i1 %tobool, true527 %conv1 = zext i1 %lnot to i64528 %2 = load i32, ptr @var_13, align 4529 %neg2 = xor i32 %2, -1530 %3 = load i32, ptr @var_16, align 4531 %xor = xor i32 %neg2, %3532 %conv3 = zext i32 %xor to i64533 %and = and i64 %conv1, %conv3534 %or = or i64 %conv, %and535 store i64 %or, ptr %a, align 8536 %4 = load i32, ptr @var_13, align 4537 %neg4 = xor i32 %4, -1538 %conv5 = zext i32 %neg4 to i64539 %5 = load i32, ptr @var_13, align 4540 %tobool6 = icmp ne i32 %5, 0541 %lnot7 = xor i1 %tobool6, true542 %conv8 = zext i1 %lnot7 to i64543 %and9 = and i64 %conv8, 0544 %or10 = or i64 %conv5, %and9545 %conv11 = trunc i64 %or10 to i32546 store i32 %conv11, ptr @var_46, align 4547 ret void548}549 550