139 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -O0 -mtriple=x86_64-unknown-linux-gnu < %s | FileCheck %s -check-prefix=X64-O03; RUN: llc -O0 -mtriple=i686-unknown < %s | FileCheck %s -check-prefix=X86-O04; RUN: llc -mtriple=x86_64-unknown-linux-gnu < %s | FileCheck %s -check-prefix=X645; RUN: llc -mtriple=i686-unknown < %s | FileCheck %s -check-prefix=X866 7@var_22 = external dso_local global i16, align 28@var_27 = external dso_local global i16, align 29 10define void @foo() {11; X64-O0-LABEL: foo:12; X64-O0: # %bb.0: # %bb13; X64-O0-NEXT: movzwl var_22, %eax14; X64-O0-NEXT: movzwl var_27, %ecx15; X64-O0-NEXT: xorl %ecx, %eax16; X64-O0-NEXT: movzwl var_27, %ecx17; X64-O0-NEXT: xorl %ecx, %eax18; X64-O0-NEXT: cltq19; X64-O0-NEXT: movq %rax, -{{[0-9]+}}(%rsp)20; X64-O0-NEXT: movzwl var_22, %eax21; X64-O0-NEXT: movzwl var_27, %ecx22; X64-O0-NEXT: xorl %ecx, %eax23; X64-O0-NEXT: movzwl var_27, %ecx24; X64-O0-NEXT: xorl %ecx, %eax25; X64-O0-NEXT: cltq26; X64-O0-NEXT: movzwl var_27, %ecx27; X64-O0-NEXT: subl $16610, %ecx # imm = 0x40E228; X64-O0-NEXT: movl %ecx, %ecx29; X64-O0-NEXT: # kill: def $rcx killed $ecx30; X64-O0-NEXT: # kill: def $cl killed $rcx31; X64-O0-NEXT: sarq %cl, %rax32; X64-O0-NEXT: movb %al, %cl33; X64-O0-NEXT: # implicit-def: $rax34; X64-O0-NEXT: movb %cl, (%rax)35; X64-O0-NEXT: retq36;37; X86-O0-LABEL: foo:38; X86-O0: # %bb.0: # %bb39; X86-O0-NEXT: pushl %ebp40; X86-O0-NEXT: .cfi_def_cfa_offset 841; X86-O0-NEXT: .cfi_offset %ebp, -842; X86-O0-NEXT: movl %esp, %ebp43; X86-O0-NEXT: .cfi_def_cfa_register %ebp44; X86-O0-NEXT: andl $-8, %esp45; X86-O0-NEXT: subl $24, %esp46; X86-O0-NEXT: movzwl var_22, %eax47; X86-O0-NEXT: movl %eax, {{[0-9]+}}(%esp)48; X86-O0-NEXT: movl $0, {{[0-9]+}}(%esp)49; X86-O0-NEXT: movzwl var_22, %edx50; X86-O0-NEXT: movb var_27, %cl51; X86-O0-NEXT: addb $30, %cl52; X86-O0-NEXT: movb %cl, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill53; X86-O0-NEXT: xorl %eax, %eax54; X86-O0-NEXT: shrdl %cl, %eax, %edx55; X86-O0-NEXT: movb {{[-0-9]+}}(%e{{[sb]}}p), %cl # 1-byte Reload56; X86-O0-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill57; X86-O0-NEXT: testb $32, %cl58; X86-O0-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill59; X86-O0-NEXT: jne .LBB0_260; X86-O0-NEXT: # %bb.1: # %bb61; X86-O0-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload62; X86-O0-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill63; X86-O0-NEXT: .LBB0_2: # %bb64; X86-O0-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload65; X86-O0-NEXT: movb %al, %cl66; X86-O0-NEXT: # implicit-def: $eax67; X86-O0-NEXT: movb %cl, (%eax)68; X86-O0-NEXT: movl %ebp, %esp69; X86-O0-NEXT: popl %ebp70; X86-O0-NEXT: .cfi_def_cfa %esp, 471; X86-O0-NEXT: retl72;73; X64-LABEL: foo:74; X64: # %bb.0: # %bb75; X64-NEXT: movzbl var_27(%rip), %ecx76; X64-NEXT: movzwl var_22(%rip), %eax77; X64-NEXT: movq %rax, -{{[0-9]+}}(%rsp)78; X64-NEXT: addb $30, %cl79; X64-NEXT: shrq %cl, %rax80; X64-NEXT: movb %al, (%rax)81; X64-NEXT: retq82;83; X86-LABEL: foo:84; X86: # %bb.0: # %bb85; X86-NEXT: pushl %ebp86; X86-NEXT: .cfi_def_cfa_offset 887; X86-NEXT: .cfi_offset %ebp, -888; X86-NEXT: movl %esp, %ebp89; X86-NEXT: .cfi_def_cfa_register %ebp90; X86-NEXT: andl $-8, %esp91; X86-NEXT: subl $8, %esp92; X86-NEXT: movzbl var_27, %ecx93; X86-NEXT: movzwl var_22, %eax94; X86-NEXT: movl %eax, (%esp)95; X86-NEXT: movl $0, {{[0-9]+}}(%esp)96; X86-NEXT: addb $30, %cl97; X86-NEXT: xorl %edx, %edx98; X86-NEXT: shrdl %cl, %edx, %eax99; X86-NEXT: testb $32, %cl100; X86-NEXT: jne .LBB0_2101; X86-NEXT: # %bb.1: # %bb102; X86-NEXT: movl %eax, %edx103; X86-NEXT: .LBB0_2: # %bb104; X86-NEXT: movb %dl, (%eax)105; X86-NEXT: movl %ebp, %esp106; X86-NEXT: popl %ebp107; X86-NEXT: .cfi_def_cfa %esp, 4108; X86-NEXT: retl109bb:110 %tmp = alloca i64, align 8111 %tmp1 = load i16, ptr @var_22, align 2112 %tmp2 = zext i16 %tmp1 to i32113 %tmp3 = load i16, ptr @var_27, align 2114 %tmp4 = zext i16 %tmp3 to i32115 %tmp5 = xor i32 %tmp2, %tmp4116 %tmp6 = load i16, ptr @var_27, align 2117 %tmp7 = zext i16 %tmp6 to i32118 %tmp8 = xor i32 %tmp5, %tmp7119 %tmp9 = sext i32 %tmp8 to i64120 store i64 %tmp9, ptr %tmp, align 8121 %tmp10 = load i16, ptr @var_22, align 2122 %tmp11 = zext i16 %tmp10 to i32123 %tmp12 = load i16, ptr @var_27, align 2124 %tmp13 = zext i16 %tmp12 to i32125 %tmp14 = xor i32 %tmp11, %tmp13126 %tmp15 = load i16, ptr @var_27, align 2127 %tmp16 = zext i16 %tmp15 to i32128 %tmp17 = xor i32 %tmp14, %tmp16129 %tmp18 = sext i32 %tmp17 to i64130 %tmp19 = load i16, ptr @var_27, align 2131 %tmp20 = zext i16 %tmp19 to i32132 %tmp21 = sub nsw i32 %tmp20, 16610133 %tmp22 = zext i32 %tmp21 to i64134 %tmp23 = ashr i64 %tmp18, %tmp22135 %tmp24 = trunc i64 %tmp23 to i8136 store i8 %tmp24, ptr undef, align 1137 ret void138}139