brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.8 KiB · ea0dba8 Raw
105 lines · plain
1; RUN: llc < %s -mtriple=i386-pc-linux-gnu -mattr=+sse22; RUN: llc < %s -mtriple=i386-pc-linux-gnu -mattr=+sse2 -relocation-model=pic -frame-pointer=all3; PR31544 5define void @ff_flac_compute_autocorr_sse2(ptr %data, i32 %len, i32 %lag, ptr %autoc) nounwind {6entry:7	%c = alloca double, align 8		; <ptr> [#uses=2]8	%0 = add i32 %len, 2		; <i32> [#uses=1]9	%1 = add i32 %0, %lag		; <i32> [#uses=1]10	%2 = alloca double, i32 %1		; <ptr> [#uses=2]11	%3 = getelementptr double, ptr %2, i32 %lag		; <ptr> [#uses=2]12	%4 = ptrtoint ptr %3 to i32		; <i32> [#uses=1]13	%5 = and i32 %4, 8		; <i32> [#uses=1]14	%6 = icmp eq i32 %5, 0		; <i1> [#uses=1]15	br i1 %6, label %bb19, label %bb16 17bb:		; preds = %entry18	%.sum = add i32 %lag, 1		; <i32> [#uses=1]19	%7 = getelementptr double, ptr %2, i32 %.sum		; <ptr> [#uses=1]20	br label %bb1921 22bb19:		; preds = %bb, %entry23	%data15.0 = phi ptr [ %7, %bb ], [ %3, %entry ]		; <ptr> [#uses=5]24	%8 = sitofp i32 %len to double		; <double> [#uses=1]25	%9 = fsub double %8, 1.000000e+00		; <double> [#uses=1]26	%10 = fdiv double 2.000000e+00, %9		; <double> [#uses=1]27	store double %10, ptr %c, align 828	%11 = ashr i32 %len, 1		; <i32> [#uses=3]29	%12 = mul i32 %11, -4		; <i32> [#uses=2]30	%13 = shl i32 %len, 1		; <i32> [#uses=1]31	%14 = and i32 %13, -4		; <i32> [#uses=2]32	call void asm sideeffect "movsd   $0,     %xmm7                \0A\09movapd  ff_pd_1, %xmm6     \0A\09movapd  ff_pd_2, %xmm5     \0A\09movlhps %xmm7, %xmm7                \0A\09subpd   %xmm5, %xmm7                \0A\09addsd   %xmm6, %xmm7                \0A\09", "*m,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(double) %c) nounwind33	%15 = and i32 %len, 1		; <i32> [#uses=1]34	%toBool = icmp eq i32 %15, 0		; <i1> [#uses=1]35	%16 = getelementptr double, ptr %data15.0, i32 %11		; <ptr> [#uses=2]36	%17 = getelementptr i32, ptr %data, i32 %11		; <ptr> [#uses=2]37	br i1 %toBool, label %bb22, label %bb2038 39bb20:		; preds = %bb1940	%asmtmp = call { i32, i32 } asm sideeffect "1:                                    \0A\09movapd   %xmm7,  %xmm1              \0A\09mulpd    %xmm1,  %xmm1              \0A\09movapd   %xmm6,  %xmm0              \0A\09subpd    %xmm1,  %xmm0              \0A\09pshufd   $$0x4e,   %xmm0, %xmm1      \0A\09cvtpi2pd ($3,$0), %xmm2              \0A\09cvtpi2pd -1*4($3,$1), %xmm3   \0A\09mulpd    %xmm0,  %xmm2              \0A\09mulpd    %xmm1,  %xmm3              \0A\09movapd   %xmm2, ($2,$0,2)            \0A\09movupd    %xmm3, -1*8($2,$1,2) \0A\09subpd    %xmm5,  %xmm7              \0A\09sub      $$8,      $1                  \0A\09add      $$8,      $0                  \0A\09jl 1b                                 \0A\09", "=&r,=&r,r,r,0,1,~{dirflag},~{fpsr},~{flags}"(ptr %16, ptr %17, i32 %12, i32 %14) nounwind		; <{ i32, i32 }> [#uses=0]41	br label %bb28.preheader42 43bb22:		; preds = %bb1944	%asmtmp23 = call { i32, i32 } asm sideeffect "1:                                    \0A\09movapd   %xmm7,  %xmm1              \0A\09mulpd    %xmm1,  %xmm1              \0A\09movapd   %xmm6,  %xmm0              \0A\09subpd    %xmm1,  %xmm0              \0A\09pshufd   $$0x4e,   %xmm0, %xmm1      \0A\09cvtpi2pd ($3,$0), %xmm2              \0A\09cvtpi2pd -2*4($3,$1), %xmm3   \0A\09mulpd    %xmm0,  %xmm2              \0A\09mulpd    %xmm1,  %xmm3              \0A\09movapd   %xmm2, ($2,$0,2)            \0A\09movapd    %xmm3, -2*8($2,$1,2) \0A\09subpd    %xmm5,  %xmm7              \0A\09sub      $$8,      $1                  \0A\09add      $$8,      $0                  \0A\09jl 1b                                 \0A\09", "=&r,=&r,r,r,0,1,~{dirflag},~{fpsr},~{flags}"(ptr %16, ptr %17, i32 %12, i32 %14) nounwind		; <{ i32, i32 }> [#uses=0]45	br label %bb28.preheader46 47bb28.preheader:		; preds = %bb22, %bb2048	%18 = icmp sgt i32 %lag, 0		; <i1> [#uses=2]49	br i1 %18, label %bb27, label %bb2950 51bb27:		; preds = %bb27, %bb28.preheader52	%j4.042 = phi i32 [ 0, %bb28.preheader ], [ %indvar.next45, %bb27 ]		; <i32> [#uses=2]53	%19 = sub i32 %j4.042, %lag		; <i32> [#uses=1]54	%20 = getelementptr double, ptr %data15.0, i32 %19		; <ptr> [#uses=1]55	store double 0.000000e+00, ptr %20, align 856	%indvar.next45 = add i32 %j4.042, 1		; <i32> [#uses=2]57	%exitcond = icmp eq i32 %indvar.next45, %lag		; <i1> [#uses=1]58	br i1 %exitcond, label %bb29, label %bb2759 60bb29:		; preds = %bb27, %bb28.preheader61	%21 = getelementptr double, ptr %data15.0, i32 %len		; <ptr> [#uses=3]62	store double 0.000000e+00, ptr %21, align 863	br i1 %18, label %bb.nph, label %bb3764 65bb.nph:		; preds = %bb2966	%22 = mul i32 %len, -8		; <i32> [#uses=2]67	%23 = add i32 %lag, -2		; <i32> [#uses=1]68	br label %bb3069 70bb30:		; preds = %bb35, %bb.nph71	%indvar = phi i32 [ 0, %bb.nph ], [ %indvar.next, %bb35 ]		; <i32> [#uses=2]72	%j4.141 = shl i32 %indvar, 1		; <i32> [#uses=8]73	%24 = icmp eq i32 %23, %j4.141		; <i1> [#uses=1]74	%25 = or i32 %j4.141, 1		; <i32> [#uses=2]75	br i1 %24, label %bb31, label %bb3376 77bb31:		; preds = %bb3078	%26 = add i32 %j4.141, 2		; <i32> [#uses=2]79	%.sum38 = sub i32 %len, %j4.141		; <i32> [#uses=1]80	%27 = getelementptr double, ptr %data15.0, i32 %.sum38		; <ptr> [#uses=1]81	%28 = getelementptr double, ptr %autoc, i32 %j4.141		; <ptr> [#uses=1]82	%29 = getelementptr double, ptr %autoc, i32 %25		; <ptr> [#uses=1]83	%30 = getelementptr double, ptr %autoc, i32 %26		; <ptr> [#uses=1]84	%asmtmp32 = call i32 asm sideeffect "movsd    ff_pd_1, %xmm0 \0A\09movsd    ff_pd_1, %xmm1 \0A\09movsd    ff_pd_1, %xmm2 \0A\091:                                 \0A\09movapd   ($4,$0), %xmm3           \0A\09movupd -8($5,$0), %xmm4           \0A\09movapd   ($5,$0), %xmm5           \0A\09mulpd     %xmm3, %xmm4           \0A\09mulpd     %xmm3, %xmm5           \0A\09mulpd -16($5,$0), %xmm3           \0A\09addpd     %xmm4, %xmm1           \0A\09addpd     %xmm5, %xmm0           \0A\09addpd     %xmm3, %xmm2           \0A\09add       $$16,    $0               \0A\09jl 1b                              \0A\09movhlps   %xmm0, %xmm3           \0A\09movhlps   %xmm1, %xmm4           \0A\09movhlps   %xmm2, %xmm5           \0A\09addsd     %xmm3, %xmm0           \0A\09addsd     %xmm4, %xmm1           \0A\09addsd     %xmm5, %xmm2           \0A\09movsd     %xmm0, $1               \0A\09movsd     %xmm1, $2               \0A\09movsd     %xmm2, $3               \0A\09", "=&r,=*m,=*m,=*m,r,r,0,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(double) %28, ptr elementtype(double) %29, ptr elementtype(double) %30, ptr %21, ptr %27, i32 %22) nounwind		; <i32> [#uses=0]85	br label %bb3586 87bb33:		; preds = %bb3088	%.sum39 = sub i32 %len, %j4.141		; <i32> [#uses=1]89	%31 = getelementptr double, ptr %data15.0, i32 %.sum39		; <ptr> [#uses=1]90	%32 = getelementptr double, ptr %autoc, i32 %j4.141		; <ptr> [#uses=1]91	%33 = getelementptr double, ptr %autoc, i32 %25		; <ptr> [#uses=1]92	%asmtmp34 = call i32 asm sideeffect "movsd    ff_pd_1, %xmm0 \0A\09movsd    ff_pd_1, %xmm1 \0A\091:                                 \0A\09movapd   ($3,$0), %xmm3           \0A\09movupd -8($4,$0), %xmm4           \0A\09mulpd     %xmm3, %xmm4           \0A\09mulpd    ($4,$0), %xmm3           \0A\09addpd     %xmm4, %xmm1           \0A\09addpd     %xmm3, %xmm0           \0A\09add       $$16,    $0               \0A\09jl 1b                              \0A\09movhlps   %xmm0, %xmm3           \0A\09movhlps   %xmm1, %xmm4           \0A\09addsd     %xmm3, %xmm0           \0A\09addsd     %xmm4, %xmm1           \0A\09movsd     %xmm0, $1               \0A\09movsd     %xmm1, $2               \0A\09", "=&r,=*m,=*m,r,r,0,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(double) %32, ptr elementtype(double) %33, ptr %21, ptr %31, i32 %22) nounwind		; <i32> [#uses=0]93	%.pre = add i32 %j4.141, 2		; <i32> [#uses=1]94	br label %bb3595 96bb35:		; preds = %bb33, %bb3197	%.pre-phi = phi i32 [ %.pre, %bb33 ], [ %26, %bb31 ]		; <i32> [#uses=1]98	%34 = icmp slt i32 %.pre-phi, %lag		; <i1> [#uses=1]99	%indvar.next = add i32 %indvar, 1		; <i32> [#uses=1]100	br i1 %34, label %bb30, label %bb37101 102bb37:		; preds = %bb35, %bb29103	ret void104}105