75 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --no_x86_scrub_sp2; RUN: llc < %s -mtriple=i686-- | FileCheck %s --check-prefixes=X863; RUN: llc < %s -mtriple=x86_64-pc-linux-gnu | FileCheck %s --check-prefixes=X644 5define i32 @extract3(ptr, i32) nounwind {6; X86-LABEL: extract3:7; X86: # %bb.0: # %_L18; X86-NEXT: pushl %ebx9; X86-NEXT: pushl %esi10; X86-NEXT: subl $8, %esp11; X86-NEXT: movl 24(%esp), %esi12; X86-NEXT: andl $7, %esi13; X86-NEXT: movl 20(%esp), %eax14; X86-NEXT: movzwl (%eax), %ebx15; X86-NEXT: movl %ebx, %ecx16; X86-NEXT: shrb $3, %cl17; X86-NEXT: andb $7, %cl18; X86-NEXT: movb %bl, %ch19; X86-NEXT: andb $7, %ch20; X86-NEXT: movl %ebx, %eax21; X86-NEXT: shrl $6, %eax22; X86-NEXT: andb $7, %al23; X86-NEXT: movl %ebx, %edx24; X86-NEXT: shrl $9, %edx25; X86-NEXT: andb $7, %dl26; X86-NEXT: shrl $12, %ebx27; X86-NEXT: movb %bl, 4(%esp)28; X86-NEXT: movb %dl, 3(%esp)29; X86-NEXT: movb %al, 2(%esp)30; X86-NEXT: movb %ch, (%esp)31; X86-NEXT: movb %cl, 1(%esp)32; X86-NEXT: movzbl (%esp,%esi), %eax33; X86-NEXT: andl $7, %eax34; X86-NEXT: addl $8, %esp35; X86-NEXT: popl %esi36; X86-NEXT: popl %ebx37; X86-NEXT: retl38;39; X64-LABEL: extract3:40; X64: # %bb.0: # %_L141; X64-NEXT: # kill: def $esi killed $esi def $rsi42; X64-NEXT: movzwl (%rdi), %eax43; X64-NEXT: movl %eax, %ecx44; X64-NEXT: shrl $9, %ecx45; X64-NEXT: andl $7, %ecx46; X64-NEXT: movd %ecx, %xmm047; X64-NEXT: movl %eax, %ecx48; X64-NEXT: shrl $6, %ecx49; X64-NEXT: andl $7, %ecx50; X64-NEXT: movd %ecx, %xmm151; X64-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]52; X64-NEXT: movl %eax, %ecx53; X64-NEXT: andl $7, %ecx54; X64-NEXT: movd %ecx, %xmm055; X64-NEXT: movd %eax, %xmm256; X64-NEXT: shrl $3, %eax57; X64-NEXT: andl $7, %eax58; X64-NEXT: movd %eax, %xmm359; X64-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]60; X64-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]61; X64-NEXT: psrld $12, %xmm262; X64-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]63; X64-NEXT: movdqa %xmm0, -24(%rsp)64; X64-NEXT: andl $7, %esi65; X64-NEXT: movzwl -24(%rsp,%rsi,2), %eax66; X64-NEXT: andl $7, %eax67; X64-NEXT: retq68_L1:69 %2 = load i15, ptr %070 %3 = bitcast i15 %2 to <5 x i3>71 %4 = extractelement <5 x i3> %3, i32 %172 %5 = zext i3 %4 to i3273 ret i32 %574}75