brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.4 KiB · 5491135 Raw
382 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-apple-darwin -mattr=+avx2 | FileCheck %s --check-prefix=X863; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=+avx2 | FileCheck %s --check-prefix=X644 5;6; 128-bit Vectors7;8 9define void @test_demanded_haddps_128(<4 x float> %a0, <4 x float> %a1, ptr%a2) nounwind {10; X86-LABEL: test_demanded_haddps_128:11; X86:       ## %bb.0:12; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax13; X86-NEXT:    vhaddps %xmm0, %xmm0, %xmm014; X86-NEXT:    vmovss %xmm0, (%eax)15; X86-NEXT:    retl16;17; X64-LABEL: test_demanded_haddps_128:18; X64:       ## %bb.0:19; X64-NEXT:    vhaddps %xmm0, %xmm0, %xmm020; X64-NEXT:    vmovss %xmm0, (%rdi)21; X64-NEXT:    retq22  %1 = shufflevector <4 x float> %a1, <4 x float> undef, <4 x i32> zeroinitializer23  %2 = call <4 x float> @llvm.x86.sse3.hadd.ps(<4 x float> %a0, <4 x float> %1)24  %3 = extractelement <4 x float> %2, i32 025  store float %3, ptr%a226  ret void27}28 29define void @test_demanded_hsubps_128(<4 x float> %a0, <4 x float> %a1, ptr%a2) nounwind {30; X86-LABEL: test_demanded_hsubps_128:31; X86:       ## %bb.0:32; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax33; X86-NEXT:    vhsubps %xmm1, %xmm0, %xmm034; X86-NEXT:    vextractps $2, %xmm0, (%eax)35; X86-NEXT:    retl36;37; X64-LABEL: test_demanded_hsubps_128:38; X64:       ## %bb.0:39; X64-NEXT:    vhsubps %xmm1, %xmm0, %xmm040; X64-NEXT:    vextractps $2, %xmm0, (%rdi)41; X64-NEXT:    retq42  %1 = shufflevector <4 x float> %a0, <4 x float> undef, <4 x i32> zeroinitializer43  %2 = call <4 x float> @llvm.x86.sse3.hsub.ps(<4 x float> %1, <4 x float> %a1)44  %3 = extractelement <4 x float> %2, i32 245  store float %3, ptr%a246  ret void47}48 49define void @test_demanded_haddpd_128(<2 x double> %a0, <2 x double> %a1, ptr%a2) nounwind {50; X86-LABEL: test_demanded_haddpd_128:51; X86:       ## %bb.0:52; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax53; X86-NEXT:    vhaddpd %xmm0, %xmm0, %xmm054; X86-NEXT:    vmovlpd %xmm0, (%eax)55; X86-NEXT:    retl56;57; X64-LABEL: test_demanded_haddpd_128:58; X64:       ## %bb.0:59; X64-NEXT:    vhaddpd %xmm0, %xmm0, %xmm060; X64-NEXT:    vmovlpd %xmm0, (%rdi)61; X64-NEXT:    retq62  %1 = shufflevector <2 x double> %a1, <2 x double> undef, <2 x i32> zeroinitializer63  %2 = call <2 x double> @llvm.x86.sse3.hadd.pd(<2 x double> %a0, <2 x double> %1)64  %3 = extractelement <2 x double> %2, i32 065  store double %3, ptr%a266  ret void67}68 69define void @test_demanded_hsubpd_128(<2 x double> %a0, <2 x double> %a1, ptr%a2) nounwind {70; X86-LABEL: test_demanded_hsubpd_128:71; X86:       ## %bb.0:72; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax73; X86-NEXT:    vhsubpd %xmm0, %xmm0, %xmm074; X86-NEXT:    vmovlpd %xmm0, (%eax)75; X86-NEXT:    retl76;77; X64-LABEL: test_demanded_hsubpd_128:78; X64:       ## %bb.0:79; X64-NEXT:    vhsubpd %xmm0, %xmm0, %xmm080; X64-NEXT:    vmovlpd %xmm0, (%rdi)81; X64-NEXT:    retq82  %1 = shufflevector <2 x double> %a1, <2 x double> undef, <2 x i32> zeroinitializer83  %2 = call <2 x double> @llvm.x86.sse3.hsub.pd(<2 x double> %a0, <2 x double> %1)84  %3 = extractelement <2 x double> %2, i32 085  store double %3, ptr%a286  ret void87}88 89define void @test_demanded_phaddd_128(<4 x i32> %a0, <4 x i32> %a1, ptr%a2) nounwind {90; X86-LABEL: test_demanded_phaddd_128:91; X86:       ## %bb.0:92; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax93; X86-NEXT:    vphaddd %xmm0, %xmm0, %xmm094; X86-NEXT:    vmovd %xmm0, (%eax)95; X86-NEXT:    retl96;97; X64-LABEL: test_demanded_phaddd_128:98; X64:       ## %bb.0:99; X64-NEXT:    vphaddd %xmm0, %xmm0, %xmm0100; X64-NEXT:    vmovd %xmm0, (%rdi)101; X64-NEXT:    retq102  %1 = shufflevector <4 x i32> %a1, <4 x i32> undef, <4 x i32> zeroinitializer103  %2 = call <4 x i32> @llvm.x86.ssse3.phadd.d.128(<4 x i32> %a0, <4 x i32> %1)104  %3 = extractelement <4 x i32> %2, i32 0105  store i32 %3, ptr%a2106  ret void107}108 109define void @test_demanded_phsubd_128(<4 x i32> %a0, <4 x i32> %a1, ptr%a2) nounwind {110; X86-LABEL: test_demanded_phsubd_128:111; X86:       ## %bb.0:112; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax113; X86-NEXT:    vphsubd %xmm0, %xmm0, %xmm0114; X86-NEXT:    vpextrd $1, %xmm0, (%eax)115; X86-NEXT:    retl116;117; X64-LABEL: test_demanded_phsubd_128:118; X64:       ## %bb.0:119; X64-NEXT:    vphsubd %xmm0, %xmm0, %xmm0120; X64-NEXT:    vpextrd $1, %xmm0, (%rdi)121; X64-NEXT:    retq122  %1 = shufflevector <4 x i32> %a1, <4 x i32> undef, <4 x i32> zeroinitializer123  %2 = call <4 x i32> @llvm.x86.ssse3.phsub.d.128(<4 x i32> %a0, <4 x i32> %1)124  %3 = extractelement <4 x i32> %2, i32 1125  store i32 %3, ptr%a2126  ret void127}128 129define void @test_demanded_phaddw_128(<8 x i16> %a0, <8 x i16> %a1, ptr%a2) nounwind {130; X86-LABEL: test_demanded_phaddw_128:131; X86:       ## %bb.0:132; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax133; X86-NEXT:    vphaddw %xmm0, %xmm0, %xmm0134; X86-NEXT:    vpextrw $0, %xmm0, (%eax)135; X86-NEXT:    retl136;137; X64-LABEL: test_demanded_phaddw_128:138; X64:       ## %bb.0:139; X64-NEXT:    vphaddw %xmm0, %xmm0, %xmm0140; X64-NEXT:    vpextrw $0, %xmm0, (%rdi)141; X64-NEXT:    retq142  %1 = shufflevector <8 x i16> %a1, <8 x i16> undef, <8 x i32> zeroinitializer143  %2 = call <8 x i16> @llvm.x86.ssse3.phadd.w.128(<8 x i16> %a0, <8 x i16> %1)144  %3 = extractelement <8 x i16> %2, i16 0145  store i16 %3, ptr%a2146  ret void147}148 149define void @test_demanded_phsubw_128(<8 x i16> %a0, <8 x i16> %a1, ptr%a2) nounwind {150; X86-LABEL: test_demanded_phsubw_128:151; X86:       ## %bb.0:152; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax153; X86-NEXT:    vphsubw %xmm0, %xmm0, %xmm0154; X86-NEXT:    vpextrw $2, %xmm0, (%eax)155; X86-NEXT:    retl156;157; X64-LABEL: test_demanded_phsubw_128:158; X64:       ## %bb.0:159; X64-NEXT:    vphsubw %xmm0, %xmm0, %xmm0160; X64-NEXT:    vpextrw $2, %xmm0, (%rdi)161; X64-NEXT:    retq162  %1 = shufflevector <8 x i16> %a1, <8 x i16> undef, <8 x i32> zeroinitializer163  %2 = call <8 x i16> @llvm.x86.ssse3.phsub.w.128(<8 x i16> %a0, <8 x i16> %1)164  %3 = extractelement <8 x i16> %2, i16 2165  store i16 %3, ptr%a2166  ret void167}168 169;170; 256-bit Vectors171;172 173define void @test_demanded_haddps_256(<8 x float> %a0, <8 x float> %a1, ptr%a2) nounwind {174; X86-LABEL: test_demanded_haddps_256:175; X86:       ## %bb.0:176; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax177; X86-NEXT:    vhaddps %ymm0, %ymm0, %ymm0178; X86-NEXT:    vextractf128 $1, %ymm0, %xmm0179; X86-NEXT:    vmovss %xmm0, (%eax)180; X86-NEXT:    vzeroupper181; X86-NEXT:    retl182;183; X64-LABEL: test_demanded_haddps_256:184; X64:       ## %bb.0:185; X64-NEXT:    vhaddps %ymm0, %ymm0, %ymm0186; X64-NEXT:    vextractf128 $1, %ymm0, %xmm0187; X64-NEXT:    vmovss %xmm0, (%rdi)188; X64-NEXT:    vzeroupper189; X64-NEXT:    retq190  %1 = shufflevector <8 x float> %a1, <8 x float> undef, <8 x i32> zeroinitializer191  %2 = call <8 x float> @llvm.x86.avx.hadd.ps.256(<8 x float> %a0, <8 x float> %1)192  %3 = extractelement <8 x float> %2, i32 4193  store float %3, ptr%a2194  ret void195}196 197define void @test_demanded_hsubps_256(<8 x float> %a0, <8 x float> %a1, ptr%a2) nounwind {198; X86-LABEL: test_demanded_hsubps_256:199; X86:       ## %bb.0:200; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax201; X86-NEXT:    vhsubps %ymm1, %ymm0, %ymm0202; X86-NEXT:    vextractf128 $1, %ymm0, %xmm0203; X86-NEXT:    vextractps $3, %xmm0, (%eax)204; X86-NEXT:    vzeroupper205; X86-NEXT:    retl206;207; X64-LABEL: test_demanded_hsubps_256:208; X64:       ## %bb.0:209; X64-NEXT:    vhsubps %ymm1, %ymm0, %ymm0210; X64-NEXT:    vextractf128 $1, %ymm0, %xmm0211; X64-NEXT:    vextractps $3, %xmm0, (%rdi)212; X64-NEXT:    vzeroupper213; X64-NEXT:    retq214  %1 = shufflevector <8 x float> %a0, <8 x float> undef, <8 x i32> zeroinitializer215  %2 = call <8 x float> @llvm.x86.avx.hsub.ps.256(<8 x float> %1, <8 x float> %a1)216  %3 = extractelement <8 x float> %2, i32 7217  store float %3, ptr%a2218  ret void219}220 221define void @test_demanded_haddpd_256(<4 x double> %a0, <4 x double> %a1, ptr%a2) nounwind {222; X86-LABEL: test_demanded_haddpd_256:223; X86:       ## %bb.0:224; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax225; X86-NEXT:    vhaddpd %ymm0, %ymm0, %ymm0226; X86-NEXT:    vextractf128 $1, %ymm0, %xmm0227; X86-NEXT:    vmovlpd %xmm0, (%eax)228; X86-NEXT:    vzeroupper229; X86-NEXT:    retl230;231; X64-LABEL: test_demanded_haddpd_256:232; X64:       ## %bb.0:233; X64-NEXT:    vhaddpd %ymm0, %ymm0, %ymm0234; X64-NEXT:    vextractf128 $1, %ymm0, %xmm0235; X64-NEXT:    vmovlpd %xmm0, (%rdi)236; X64-NEXT:    vzeroupper237; X64-NEXT:    retq238  %1 = shufflevector <4 x double> %a1, <4 x double> undef, <4 x i32> zeroinitializer239  %2 = call <4 x double> @llvm.x86.avx.hadd.pd.256(<4 x double> %a0, <4 x double> %1)240  %3 = extractelement <4 x double> %2, i32 2241  store double %3, ptr%a2242  ret void243}244 245define void @test_demanded_hsubpd_256(<4 x double> %a0, <4 x double> %a1, ptr%a2) nounwind {246; X86-LABEL: test_demanded_hsubpd_256:247; X86:       ## %bb.0:248; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax249; X86-NEXT:    vhsubpd %ymm0, %ymm0, %ymm0250; X86-NEXT:    vextractf128 $1, %ymm0, %xmm0251; X86-NEXT:    vmovlpd %xmm0, (%eax)252; X86-NEXT:    vzeroupper253; X86-NEXT:    retl254;255; X64-LABEL: test_demanded_hsubpd_256:256; X64:       ## %bb.0:257; X64-NEXT:    vhsubpd %ymm0, %ymm0, %ymm0258; X64-NEXT:    vextractf128 $1, %ymm0, %xmm0259; X64-NEXT:    vmovlpd %xmm0, (%rdi)260; X64-NEXT:    vzeroupper261; X64-NEXT:    retq262  %1 = shufflevector <4 x double> %a1, <4 x double> undef, <4 x i32> zeroinitializer263  %2 = call <4 x double> @llvm.x86.avx.hsub.pd.256(<4 x double> %a0, <4 x double> %1)264  %3 = extractelement <4 x double> %2, i32 2265  store double %3, ptr%a2266  ret void267}268 269define void @test_demanded_phaddd_256(<8 x i32> %a0, <8 x i32> %a1, ptr%a2) nounwind {270; X86-LABEL: test_demanded_phaddd_256:271; X86:       ## %bb.0:272; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax273; X86-NEXT:    vphaddd %ymm1, %ymm0, %ymm0274; X86-NEXT:    vextracti128 $1, %ymm0, %xmm0275; X86-NEXT:    vpextrd $3, %xmm0, (%eax)276; X86-NEXT:    vzeroupper277; X86-NEXT:    retl278;279; X64-LABEL: test_demanded_phaddd_256:280; X64:       ## %bb.0:281; X64-NEXT:    vphaddd %ymm1, %ymm0, %ymm0282; X64-NEXT:    vextracti128 $1, %ymm0, %xmm0283; X64-NEXT:    vpextrd $3, %xmm0, (%rdi)284; X64-NEXT:    vzeroupper285; X64-NEXT:    retq286  %1 = shufflevector <8 x i32> %a0, <8 x i32> undef, <8 x i32> zeroinitializer287  %2 = call <8 x i32> @llvm.x86.avx2.phadd.d(<8 x i32> %1, <8 x i32> %a1)288  %3 = extractelement <8 x i32> %2, i32 7289  store i32 %3, ptr%a2290  ret void291}292 293define void @test_demanded_phsubd_256(<8 x i32> %a0, <8 x i32> %a1, ptr%a2) nounwind {294; X86-LABEL: test_demanded_phsubd_256:295; X86:       ## %bb.0:296; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax297; X86-NEXT:    vphsubd %ymm0, %ymm0, %ymm0298; X86-NEXT:    vextracti128 $1, %ymm0, %xmm0299; X86-NEXT:    vpextrd $1, %xmm0, (%eax)300; X86-NEXT:    vzeroupper301; X86-NEXT:    retl302;303; X64-LABEL: test_demanded_phsubd_256:304; X64:       ## %bb.0:305; X64-NEXT:    vphsubd %ymm0, %ymm0, %ymm0306; X64-NEXT:    vextracti128 $1, %ymm0, %xmm0307; X64-NEXT:    vpextrd $1, %xmm0, (%rdi)308; X64-NEXT:    vzeroupper309; X64-NEXT:    retq310  %1 = shufflevector <8 x i32> %a1, <8 x i32> undef, <8 x i32> zeroinitializer311  %2 = call <8 x i32> @llvm.x86.avx2.phsub.d(<8 x i32> %a0, <8 x i32> %1)312  %3 = extractelement <8 x i32> %2, i32 5313  store i32 %3, ptr%a2314  ret void315}316 317define void @test_demanded_phaddw_256(<16 x i16> %a0, <16 x i16> %a1, ptr%a2) nounwind {318; X86-LABEL: test_demanded_phaddw_256:319; X86:       ## %bb.0:320; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax321; X86-NEXT:    vpbroadcastw %xmm1, %xmm0322; X86-NEXT:    vphaddw %xmm0, %xmm0, %xmm0323; X86-NEXT:    vpextrw $4, %xmm0, (%eax)324; X86-NEXT:    vzeroupper325; X86-NEXT:    retl326;327; X64-LABEL: test_demanded_phaddw_256:328; X64:       ## %bb.0:329; X64-NEXT:    vpbroadcastw %xmm1, %xmm0330; X64-NEXT:    vphaddw %xmm0, %xmm0, %xmm0331; X64-NEXT:    vpextrw $4, %xmm0, (%rdi)332; X64-NEXT:    vzeroupper333; X64-NEXT:    retq334  %1 = shufflevector <16 x i16> %a1, <16 x i16> undef, <16 x i32> zeroinitializer335  %2 = call <16 x i16> @llvm.x86.avx2.phadd.w(<16 x i16> %a0, <16 x i16> %1)336  %3 = extractelement <16 x i16> %2, i32 4337  store i16 %3, ptr%a2338  ret void339}340 341define void @test_demanded_phsubw_256(<16 x i16> %a0, <16 x i16> %a1, ptr%a2) nounwind {342; X86-LABEL: test_demanded_phsubw_256:343; X86:       ## %bb.0:344; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax345; X86-NEXT:    vphsubw %xmm1, %xmm0, %xmm0346; X86-NEXT:    vpextrw $6, %xmm0, (%eax)347; X86-NEXT:    vzeroupper348; X86-NEXT:    retl349;350; X64-LABEL: test_demanded_phsubw_256:351; X64:       ## %bb.0:352; X64-NEXT:    vphsubw %xmm1, %xmm0, %xmm0353; X64-NEXT:    vpextrw $6, %xmm0, (%rdi)354; X64-NEXT:    vzeroupper355; X64-NEXT:    retq356  %1 = shufflevector <16 x i16> %a0, <16 x i16> undef, <16 x i32> zeroinitializer357  %2 = call <16 x i16> @llvm.x86.avx2.phsub.w(<16 x i16> %1, <16 x i16> %a1)358  %3 = extractelement <16 x i16> %2, i32 6359  store i16 %3, ptr%a2360  ret void361}362 363declare <4 x float> @llvm.x86.sse3.hadd.ps(<4 x float>, <4 x float>)364declare <4 x float> @llvm.x86.sse3.hsub.ps(<4 x float>, <4 x float>)365declare <2 x double> @llvm.x86.sse3.hadd.pd(<2 x double>, <2 x double>)366declare <2 x double> @llvm.x86.sse3.hsub.pd(<2 x double>, <2 x double>)367 368declare <8 x i16> @llvm.x86.ssse3.phadd.w.128(<8 x i16>, <8 x i16>)369declare <4 x i32> @llvm.x86.ssse3.phadd.d.128(<4 x i32>, <4 x i32>)370declare <8 x i16> @llvm.x86.ssse3.phsub.w.128(<8 x i16>, <8 x i16>)371declare <4 x i32> @llvm.x86.ssse3.phsub.d.128(<4 x i32>, <4 x i32>)372 373declare <8 x float> @llvm.x86.avx.hadd.ps.256(<8 x float>, <8 x float>)374declare <8 x float> @llvm.x86.avx.hsub.ps.256(<8 x float>, <8 x float>)375declare <4 x double> @llvm.x86.avx.hadd.pd.256(<4 x double>, <4 x double>)376declare <4 x double> @llvm.x86.avx.hsub.pd.256(<4 x double>, <4 x double>)377 378declare <16 x i16> @llvm.x86.avx2.phadd.w(<16 x i16>, <16 x i16>)379declare <8 x i32> @llvm.x86.avx2.phadd.d(<8 x i32>, <8 x i32>)380declare <16 x i16> @llvm.x86.avx2.phsub.w(<16 x i16>, <16 x i16>)381declare <8 x i32> @llvm.x86.avx2.phsub.d(<8 x i32>, <8 x i32>)382