brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.2 KiB · 9bd38db Raw
194 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown-linux-gnu -mattr=+sse2,-sse4.1 | FileCheck %s --check-prefix=X863; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse2,-sse4.1 | FileCheck %s --check-prefix=X644 5define void @test1(ptr %F, ptr %f) nounwind {6; X86-LABEL: test1:7; X86:       # %bb.0: # %entry8; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax9; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx10; X86-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero11; X86-NEXT:    addss %xmm0, %xmm012; X86-NEXT:    movss %xmm0, (%eax)13; X86-NEXT:    retl14;15; X64-LABEL: test1:16; X64:       # %bb.0: # %entry17; X64-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero18; X64-NEXT:    addss %xmm0, %xmm019; X64-NEXT:    movss %xmm0, (%rsi)20; X64-NEXT:    retq21entry:22  %tmp = load <4 x float>, ptr %F23  %tmp7 = fadd <4 x float> %tmp, %tmp24  %tmp2 = extractelement <4 x float> %tmp7, i32 025  store float %tmp2, ptr %f26  ret void27}28 29define float @test2(ptr %F, ptr %f) nounwind {30; X86-LABEL: test2:31; X86:       # %bb.0: # %entry32; X86-NEXT:    pushl %eax33; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax34; X86-NEXT:    movaps (%eax), %xmm035; X86-NEXT:    addps %xmm0, %xmm036; X86-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]37; X86-NEXT:    movss %xmm0, (%esp)38; X86-NEXT:    flds (%esp)39; X86-NEXT:    popl %eax40; X86-NEXT:    retl41;42; X64-LABEL: test2:43; X64:       # %bb.0: # %entry44; X64-NEXT:    movaps (%rdi), %xmm045; X64-NEXT:    addps %xmm0, %xmm046; X64-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]47; X64-NEXT:    retq48entry:49  %tmp = load <4 x float>, ptr %F50  %tmp7 = fadd <4 x float> %tmp, %tmp51  %tmp2 = extractelement <4 x float> %tmp7, i32 252  ret float %tmp253}54 55define void @test3(ptr %R, ptr %P1) nounwind {56; X86-LABEL: test3:57; X86:       # %bb.0: # %entry58; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax59; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx60; X86-NEXT:    movaps (%ecx), %xmm061; X86-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]62; X86-NEXT:    movss %xmm0, (%eax)63; X86-NEXT:    retl64;65; X64-LABEL: test3:66; X64:       # %bb.0: # %entry67; X64-NEXT:    movaps (%rsi), %xmm068; X64-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]69; X64-NEXT:    movss %xmm0, (%rdi)70; X64-NEXT:    retq71entry:72  %X = load <4 x float>, ptr %P173  %tmp = extractelement <4 x float> %X, i32 374  store float %tmp, ptr %R75  ret void76}77 78define double @test4(double %A) nounwind {79; X86-LABEL: test4:80; X86:       # %bb.0: # %entry81; X86-NEXT:    subl $12, %esp82; X86-NEXT:    calll foo@PLT83; X86-NEXT:    unpckhpd {{.*#+}} xmm0 = xmm0[1,1]84; X86-NEXT:    addsd {{[0-9]+}}(%esp), %xmm085; X86-NEXT:    movsd %xmm0, (%esp)86; X86-NEXT:    fldl (%esp)87; X86-NEXT:    addl $12, %esp88; X86-NEXT:    retl89;90; X64-LABEL: test4:91; X64:       # %bb.0: # %entry92; X64-NEXT:    pushq %rax93; X64-NEXT:    movsd %xmm0, (%rsp) # 8-byte Spill94; X64-NEXT:    callq foo@PLT95; X64-NEXT:    unpckhpd {{.*#+}} xmm0 = xmm0[1,1]96; X64-NEXT:    addsd (%rsp), %xmm0 # 8-byte Folded Reload97; X64-NEXT:    popq %rax98; X64-NEXT:    retq99entry:100  %tmp1 = call <2 x double> @foo( )101  %tmp2 = extractelement <2 x double> %tmp1, i32 1102  %tmp3 = fadd double %tmp2, %A103  ret double %tmp3104}105declare <2 x double> @foo()106 107define i64 @pr150117(<31 x i8> %a0) nounwind {108; X86-LABEL: pr150117:109; X86:       # %bb.0:110; X86-NEXT:    pushl %ebx111; X86-NEXT:    pushl %edi112; X86-NEXT:    pushl %esi113; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax114; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx115; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %esi116; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %edi117; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ebx118; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx119; X86-NEXT:    shll $8, %edx120; X86-NEXT:    orl %ebx, %edx121; X86-NEXT:    shll $8, %edi122; X86-NEXT:    orl %esi, %edi123; X86-NEXT:    shll $16, %ecx124; X86-NEXT:    orl %edi, %ecx125; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi126; X86-NEXT:    shll $24, %esi127; X86-NEXT:    orl %ecx, %esi128; X86-NEXT:    movd %esi, %xmm0129; X86-NEXT:    pinsrw $2, %edx, %xmm0130; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx131; X86-NEXT:    shll $8, %ecx132; X86-NEXT:    orl %eax, %ecx133; X86-NEXT:    pinsrw $3, %ecx, %xmm0134; X86-NEXT:    movd %xmm0, %eax135; X86-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,1,1]136; X86-NEXT:    movd %xmm0, %edx137; X86-NEXT:    popl %esi138; X86-NEXT:    popl %edi139; X86-NEXT:    popl %ebx140; X86-NEXT:    retl141;142; X64-LABEL: pr150117:143; X64:       # %bb.0:144; X64-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax145; X64-NEXT:    movzbl {{[0-9]+}}(%rsp), %ecx146; X64-NEXT:    movzbl {{[0-9]+}}(%rsp), %edx147; X64-NEXT:    movzbl {{[0-9]+}}(%rsp), %esi148; X64-NEXT:    movzbl {{[0-9]+}}(%rsp), %edi149; X64-NEXT:    movl {{[0-9]+}}(%rsp), %r8d150; X64-NEXT:    shll $8, %r8d151; X64-NEXT:    orl %edi, %r8d152; X64-NEXT:    shll $8, %esi153; X64-NEXT:    orl %edx, %esi154; X64-NEXT:    shll $16, %ecx155; X64-NEXT:    orl %esi, %ecx156; X64-NEXT:    movl {{[0-9]+}}(%rsp), %edx157; X64-NEXT:    shll $24, %edx158; X64-NEXT:    orl %ecx, %edx159; X64-NEXT:    movd %edx, %xmm0160; X64-NEXT:    pinsrw $2, %r8d, %xmm0161; X64-NEXT:    movl {{[0-9]+}}(%rsp), %ecx162; X64-NEXT:    shll $8, %ecx163; X64-NEXT:    orl %eax, %ecx164; X64-NEXT:    pinsrw $3, %ecx, %xmm0165; X64-NEXT:    movq %xmm0, %rax166; X64-NEXT:    retq167  %shuffle = shufflevector <31 x i8> %a0, <31 x i8> zeroinitializer, <32 x i32> <i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>168  %bitcast = bitcast <32 x i8> %shuffle to <4 x i64>169  %elt = extractelement <4 x i64> %bitcast, i64 0170  ret i64 %elt171}172 173; OSS-Fuzz #15662174; https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=15662175define <4 x i32> @ossfuzz15662(ptr %in) {176; X86-LABEL: ossfuzz15662:177; X86:       # %bb.0:178; X86-NEXT:    xorps %xmm0, %xmm0179; X86-NEXT:    movaps %xmm0, (%eax)180; X86-NEXT:    retl181;182; X64-LABEL: ossfuzz15662:183; X64:       # %bb.0:184; X64-NEXT:    xorps %xmm0, %xmm0185; X64-NEXT:    movaps %xmm0, (%rax)186; X64-NEXT:    retq187   %C10 = icmp ule i1 false, false188   %C3 = icmp ule i1 true, undef189   %B = sdiv i1 %C10, %C3190   %I = insertelement <4 x i32> zeroinitializer, i32 0, i1 %B191   store <4 x i32> %I, ptr undef192   ret <4 x i32> zeroinitializer193}194