brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.8 KiB · 3efd536 Raw
135 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i386-apple-darwin -mattr=+sse2 | FileCheck %s --check-prefix=X863; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=+sse2 | FileCheck %s --check-prefix=X644 5define i32 @t(ptr %ref_frame_ptr, i32 %ref_frame_stride, i32 %idxX, i32 %idxY) nounwind  {6; X86-LABEL: t:7; X86:       ## %bb.0: ## %entry8; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax9; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx10; X86-NEXT:    imull {{[0-9]+}}(%esp), %ecx11; X86-NEXT:    addl {{[0-9]+}}(%esp), %ecx12; X86-NEXT:    movl (%eax,%ecx), %eax13; X86-NEXT:    retl14;15; X64-LABEL: t:16; X64:       ## %bb.0: ## %entry17; X64-NEXT:    imull %ecx, %esi18; X64-NEXT:    addl %edx, %esi19; X64-NEXT:    movslq %esi, %rax20; X64-NEXT:    movl (%rdi,%rax), %eax21; X64-NEXT:    retq22entry:23	%tmp7 = mul i32 %idxY, %ref_frame_stride		; <i32> [#uses=2]24	%tmp9 = add i32 %tmp7, %idxX		; <i32> [#uses=1]25	%tmp11 = getelementptr i8, ptr %ref_frame_ptr, i32 %tmp9		; <ptr> [#uses=1]26	%tmp13 = load i32, ptr %tmp11, align 4		; <i32> [#uses=1]27	%tmp18 = add i32 %idxX, 4		; <i32> [#uses=1]28	%tmp20.sum = add i32 %tmp18, %tmp7		; <i32> [#uses=1]29	%tmp21 = getelementptr i8, ptr %ref_frame_ptr, i32 %tmp20.sum		; <ptr> [#uses=1]30	%tmp23 = load i16, ptr %tmp21, align 2		; <i16> [#uses=1]31	%tmp2425 = zext i16 %tmp23 to i64		; <i64> [#uses=1]32	%tmp26 = shl i64 %tmp2425, 32		; <i64> [#uses=1]33	%tmp2728 = zext i32 %tmp13 to i64		; <i64> [#uses=1]34	%tmp29 = or i64 %tmp26, %tmp2728		; <i64> [#uses=1]35	%tmp3454 = bitcast i64 %tmp29 to double		; <double> [#uses=1]36	%tmp35 = insertelement <2 x double> undef, double %tmp3454, i32 0		; <<2 x double>> [#uses=1]37	%tmp36 = insertelement <2 x double> %tmp35, double 0.000000e+00, i32 1		; <<2 x double>> [#uses=1]38	%tmp42 = bitcast <2 x double> %tmp36 to <8 x i16>		; <<8 x i16>> [#uses=1]39	%tmp43 = shufflevector <8 x i16> %tmp42, <8 x i16> undef, <8 x i32> < i32 0, i32 1, i32 1, i32 2, i32 4, i32 5, i32 6, i32 7 >		; <<8 x i16>> [#uses=1]40	%tmp47 = bitcast <8 x i16> %tmp43 to <4 x i32>		; <<4 x i32>> [#uses=1]41	%tmp48 = extractelement <4 x i32> %tmp47, i32 0		; <i32> [#uses=1]42	ret i32 %tmp4843}44 45; Test CSE for SDAG nodes with multiple results (UMUL_LOHI).46define i96 @square_high(i96 %x) nounwind {47; X86-LABEL: square_high:48; X86:       ## %bb.0: ## %entry49; X86-NEXT:    pushl %ebp50; X86-NEXT:    pushl %ebx51; X86-NEXT:    pushl %edi52; X86-NEXT:    pushl %esi53; X86-NEXT:    pushl %eax54; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi55; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi56; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebx57; X86-NEXT:    movl %edi, %eax58; X86-NEXT:    mull %edi59; X86-NEXT:    movl %edx, %ecx60; X86-NEXT:    movl %ebx, %eax61; X86-NEXT:    mull %edi62; X86-NEXT:    addl %eax, %ecx63; X86-NEXT:    movl %edx, %ebp64; X86-NEXT:    adcl $0, %ebp65; X86-NEXT:    addl %eax, %ecx66; X86-NEXT:    adcl %edx, %ebp67; X86-NEXT:    setb %al68; X86-NEXT:    movzbl %al, %ecx69; X86-NEXT:    movl %ebx, %eax70; X86-NEXT:    mull %ebx71; X86-NEXT:    movl %eax, %ebx72; X86-NEXT:    addl %ebp, %ebx73; X86-NEXT:    adcl %edx, %ecx74; X86-NEXT:    movl %esi, %eax75; X86-NEXT:    mull %edi76; X86-NEXT:    movl %edx, (%esp) ## 4-byte Spill77; X86-NEXT:    movl %eax, %ebp78; X86-NEXT:    movl %esi, %eax79; X86-NEXT:    mull {{[0-9]+}}(%esp)80; X86-NEXT:    movl %edx, %esi81; X86-NEXT:    movl %eax, %edi82; X86-NEXT:    addl (%esp), %edi ## 4-byte Folded Reload83; X86-NEXT:    adcl $0, %esi84; X86-NEXT:    addl %ebp, %ebx85; X86-NEXT:    adcl %edi, %ecx86; X86-NEXT:    movl %esi, %eax87; X86-NEXT:    adcl $0, %eax88; X86-NEXT:    setb %dl89; X86-NEXT:    addl %ebp, %ebx90; X86-NEXT:    adcl %ecx, %edi91; X86-NEXT:    movzbl %dl, %ecx92; X86-NEXT:    adcl %eax, %esi93; X86-NEXT:    adcl $0, %ecx94; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax95; X86-NEXT:    mull %eax96; X86-NEXT:    addl %eax, %esi97; X86-NEXT:    adcl %edx, %ecx98; X86-NEXT:    movl %edi, %eax99; X86-NEXT:    movl %esi, %edx100; X86-NEXT:    addl $4, %esp101; X86-NEXT:    popl %esi102; X86-NEXT:    popl %edi103; X86-NEXT:    popl %ebx104; X86-NEXT:    popl %ebp105; X86-NEXT:    retl106;107; X64-LABEL: square_high:108; X64:       ## %bb.0: ## %entry109; X64-NEXT:    movl %esi, %ecx110; X64-NEXT:    movq %rcx, %rax111; X64-NEXT:    mulq %rdi112; X64-NEXT:    movq %rdx, %rsi113; X64-NEXT:    movq %rax, %r8114; X64-NEXT:    movq %rdi, %rax115; X64-NEXT:    mulq %rdi116; X64-NEXT:    addq %r8, %rdx117; X64-NEXT:    movq %rsi, %rax118; X64-NEXT:    adcq $0, %rax119; X64-NEXT:    addq %rdx, %r8120; X64-NEXT:    adcq %rsi, %rax121; X64-NEXT:    imulq %rcx, %rcx122; X64-NEXT:    addq %rax, %rcx123; X64-NEXT:    shrdq $32, %rcx, %r8124; X64-NEXT:    shrq $32, %rcx125; X64-NEXT:    movq %r8, %rax126; X64-NEXT:    movq %rcx, %rdx127; X64-NEXT:    retq128entry:129  %conv = zext i96 %x to i192130  %mul = mul nuw i192 %conv, %conv131  %shr = lshr i192 %mul, 96132  %conv2 = trunc i192 %shr to i96133  ret i96 %conv2134}135