brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.6 KiB · ef9e40f Raw
374 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=corei7-avx -mattr=+avx | FileCheck %s3 4define <4 x double> @addpd256(<4 x double> %y, <4 x double> %x) nounwind uwtable readnone ssp {5; CHECK-LABEL: addpd256:6; CHECK:       ## %bb.0: ## %entry7; CHECK-NEXT:    vaddpd %ymm0, %ymm1, %ymm08; CHECK-NEXT:    retq9entry:10  %add.i = fadd <4 x double> %x, %y11  ret <4 x double> %add.i12}13 14define <4 x double> @addpd256fold(<4 x double> %y) nounwind uwtable readnone ssp {15; CHECK-LABEL: addpd256fold:16; CHECK:       ## %bb.0: ## %entry17; CHECK-NEXT:    vaddpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm018; CHECK-NEXT:    retq19entry:20  %add.i = fadd <4 x double> %y, <double 4.500000e+00, double 3.400000e+00, double 2.300000e+00, double 1.200000e+00>21  ret <4 x double> %add.i22}23 24define <8 x float> @addps256(<8 x float> %y, <8 x float> %x) nounwind uwtable readnone ssp {25; CHECK-LABEL: addps256:26; CHECK:       ## %bb.0: ## %entry27; CHECK-NEXT:    vaddps %ymm0, %ymm1, %ymm028; CHECK-NEXT:    retq29entry:30  %add.i = fadd <8 x float> %x, %y31  ret <8 x float> %add.i32}33 34define <8 x float> @addps256fold(<8 x float> %y) nounwind uwtable readnone ssp {35; CHECK-LABEL: addps256fold:36; CHECK:       ## %bb.0: ## %entry37; CHECK-NEXT:    vaddps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm038; CHECK-NEXT:    retq39entry:40  %add.i = fadd <8 x float> %y, <float 4.500000e+00, float 0x400B333340000000, float 0x4002666660000000, float 0x3FF3333340000000, float 4.500000e+00, float 0x400B333340000000, float 0x4002666660000000, float 0x3FF3333340000000>41  ret <8 x float> %add.i42}43 44define <4 x double> @subpd256(<4 x double> %y, <4 x double> %x) nounwind uwtable readnone ssp {45; CHECK-LABEL: subpd256:46; CHECK:       ## %bb.0: ## %entry47; CHECK-NEXT:    vsubpd %ymm0, %ymm1, %ymm048; CHECK-NEXT:    retq49entry:50  %sub.i = fsub <4 x double> %x, %y51  ret <4 x double> %sub.i52}53 54define <4 x double> @subpd256fold(<4 x double> %y, ptr nocapture %x) nounwind uwtable readonly ssp {55; CHECK-LABEL: subpd256fold:56; CHECK:       ## %bb.0: ## %entry57; CHECK-NEXT:    vsubpd (%rdi), %ymm0, %ymm058; CHECK-NEXT:    retq59entry:60  %tmp2 = load <4 x double>, ptr %x, align 3261  %sub.i = fsub <4 x double> %y, %tmp262  ret <4 x double> %sub.i63}64 65define <8 x float> @subps256(<8 x float> %y, <8 x float> %x) nounwind uwtable readnone ssp {66; CHECK-LABEL: subps256:67; CHECK:       ## %bb.0: ## %entry68; CHECK-NEXT:    vsubps %ymm0, %ymm1, %ymm069; CHECK-NEXT:    retq70entry:71  %sub.i = fsub <8 x float> %x, %y72  ret <8 x float> %sub.i73}74 75define <8 x float> @subps256fold(<8 x float> %y, ptr nocapture %x) nounwind uwtable readonly ssp {76; CHECK-LABEL: subps256fold:77; CHECK:       ## %bb.0: ## %entry78; CHECK-NEXT:    vsubps (%rdi), %ymm0, %ymm079; CHECK-NEXT:    retq80entry:81  %tmp2 = load <8 x float>, ptr %x, align 3282  %sub.i = fsub <8 x float> %y, %tmp283  ret <8 x float> %sub.i84}85 86define <4 x double> @mulpd256(<4 x double> %y, <4 x double> %x) nounwind uwtable readnone ssp {87; CHECK-LABEL: mulpd256:88; CHECK:       ## %bb.0: ## %entry89; CHECK-NEXT:    vmulpd %ymm0, %ymm1, %ymm090; CHECK-NEXT:    retq91entry:92  %mul.i = fmul <4 x double> %x, %y93  ret <4 x double> %mul.i94}95 96define <4 x double> @mulpd256fold(<4 x double> %y) nounwind uwtable readnone ssp {97; CHECK-LABEL: mulpd256fold:98; CHECK:       ## %bb.0: ## %entry99; CHECK-NEXT:    vmulpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0100; CHECK-NEXT:    retq101entry:102  %mul.i = fmul <4 x double> %y, <double 4.500000e+00, double 3.400000e+00, double 2.300000e+00, double 1.200000e+00>103  ret <4 x double> %mul.i104}105 106define <8 x float> @mulps256(<8 x float> %y, <8 x float> %x) nounwind uwtable readnone ssp {107; CHECK-LABEL: mulps256:108; CHECK:       ## %bb.0: ## %entry109; CHECK-NEXT:    vmulps %ymm0, %ymm1, %ymm0110; CHECK-NEXT:    retq111entry:112  %mul.i = fmul <8 x float> %x, %y113  ret <8 x float> %mul.i114}115 116define <8 x float> @mulps256fold(<8 x float> %y) nounwind uwtable readnone ssp {117; CHECK-LABEL: mulps256fold:118; CHECK:       ## %bb.0: ## %entry119; CHECK-NEXT:    vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0120; CHECK-NEXT:    retq121entry:122  %mul.i = fmul <8 x float> %y, <float 4.500000e+00, float 0x400B333340000000, float 0x4002666660000000, float 0x3FF3333340000000, float 4.500000e+00, float 0x400B333340000000, float 0x4002666660000000, float 0x3FF3333340000000>123  ret <8 x float> %mul.i124}125 126define <4 x double> @divpd256(<4 x double> %y, <4 x double> %x) nounwind uwtable readnone ssp {127; CHECK-LABEL: divpd256:128; CHECK:       ## %bb.0: ## %entry129; CHECK-NEXT:    vdivpd %ymm0, %ymm1, %ymm0130; CHECK-NEXT:    retq131entry:132  %div.i = fdiv <4 x double> %x, %y133  ret <4 x double> %div.i134}135 136define <4 x double> @divpd256fold(<4 x double> %y) nounwind uwtable readnone ssp {137; CHECK-LABEL: divpd256fold:138; CHECK:       ## %bb.0: ## %entry139; CHECK-NEXT:    vdivpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0140; CHECK-NEXT:    retq141entry:142  %div.i = fdiv <4 x double> %y, <double 4.500000e+00, double 3.400000e+00, double 2.300000e+00, double 1.200000e+00>143  ret <4 x double> %div.i144}145 146define <8 x float> @divps256(<8 x float> %y, <8 x float> %x) nounwind uwtable readnone ssp {147; CHECK-LABEL: divps256:148; CHECK:       ## %bb.0: ## %entry149; CHECK-NEXT:    vdivps %ymm0, %ymm1, %ymm0150; CHECK-NEXT:    retq151entry:152  %div.i = fdiv <8 x float> %x, %y153  ret <8 x float> %div.i154}155 156define <8 x float> @divps256fold(<8 x float> %y) nounwind uwtable readnone ssp {157; CHECK-LABEL: divps256fold:158; CHECK:       ## %bb.0: ## %entry159; CHECK-NEXT:    vdivps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0160; CHECK-NEXT:    retq161entry:162  %div.i = fdiv <8 x float> %y, <float 4.500000e+00, float 0x400B333340000000, float 0x4002666660000000, float 0x3FF3333340000000, float 4.500000e+00, float 0x400B333340000000, float 0x4002666660000000, float 0x3FF3333340000000>163  ret <8 x float> %div.i164}165 166define float @sqrtA(float %a) nounwind uwtable readnone ssp {167; CHECK-LABEL: sqrtA:168; CHECK:       ## %bb.0: ## %entry169; CHECK-NEXT:    vsqrtss %xmm0, %xmm0, %xmm0170; CHECK-NEXT:    retq171entry:172  %conv1 = tail call float @sqrtf(float %a) nounwind readnone173  ret float %conv1174}175 176declare double @sqrt(double) readnone177 178define double @sqrtB(double %a) nounwind uwtable readnone ssp {179; CHECK-LABEL: sqrtB:180; CHECK:       ## %bb.0: ## %entry181; CHECK-NEXT:    vsqrtsd %xmm0, %xmm0, %xmm0182; CHECK-NEXT:    retq183entry:184  %call = tail call double @sqrt(double %a) nounwind readnone185  ret double %call186}187 188declare float @sqrtf(float) readnone189 190 191define <4 x i64> @vpaddq(<4 x i64> %i, <4 x i64> %j) nounwind readnone {192; CHECK-LABEL: vpaddq:193; CHECK:       ## %bb.0:194; CHECK-NEXT:    vextractf128 $1, %ymm1, %xmm2195; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm3196; CHECK-NEXT:    vpaddq %xmm2, %xmm3, %xmm2197; CHECK-NEXT:    vpaddq %xmm1, %xmm0, %xmm0198; CHECK-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0199; CHECK-NEXT:    retq200  %x = add <4 x i64> %i, %j201  ret <4 x i64> %x202}203 204define <8 x i32> @vpaddd(<8 x i32> %i, <8 x i32> %j) nounwind readnone {205; CHECK-LABEL: vpaddd:206; CHECK:       ## %bb.0:207; CHECK-NEXT:    vextractf128 $1, %ymm1, %xmm2208; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm3209; CHECK-NEXT:    vpaddd %xmm2, %xmm3, %xmm2210; CHECK-NEXT:    vpaddd %xmm1, %xmm0, %xmm0211; CHECK-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0212; CHECK-NEXT:    retq213  %x = add <8 x i32> %i, %j214  ret <8 x i32> %x215}216 217define <16 x i16> @vpaddw(<16 x i16> %i, <16 x i16> %j) nounwind readnone {218; CHECK-LABEL: vpaddw:219; CHECK:       ## %bb.0:220; CHECK-NEXT:    vextractf128 $1, %ymm1, %xmm2221; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm3222; CHECK-NEXT:    vpaddw %xmm2, %xmm3, %xmm2223; CHECK-NEXT:    vpaddw %xmm1, %xmm0, %xmm0224; CHECK-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0225; CHECK-NEXT:    retq226  %x = add <16 x i16> %i, %j227  ret <16 x i16> %x228}229 230define <32 x i8> @vpaddb(<32 x i8> %i, <32 x i8> %j) nounwind readnone {231; CHECK-LABEL: vpaddb:232; CHECK:       ## %bb.0:233; CHECK-NEXT:    vextractf128 $1, %ymm1, %xmm2234; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm3235; CHECK-NEXT:    vpaddb %xmm2, %xmm3, %xmm2236; CHECK-NEXT:    vpaddb %xmm1, %xmm0, %xmm0237; CHECK-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0238; CHECK-NEXT:    retq239  %x = add <32 x i8> %i, %j240  ret <32 x i8> %x241}242 243define <4 x i64> @vpsubq(<4 x i64> %i, <4 x i64> %j) nounwind readnone {244; CHECK-LABEL: vpsubq:245; CHECK:       ## %bb.0:246; CHECK-NEXT:    vextractf128 $1, %ymm1, %xmm2247; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm3248; CHECK-NEXT:    vpsubq %xmm2, %xmm3, %xmm2249; CHECK-NEXT:    vpsubq %xmm1, %xmm0, %xmm0250; CHECK-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0251; CHECK-NEXT:    retq252  %x = sub <4 x i64> %i, %j253  ret <4 x i64> %x254}255 256define <8 x i32> @vpsubd(<8 x i32> %i, <8 x i32> %j) nounwind readnone {257; CHECK-LABEL: vpsubd:258; CHECK:       ## %bb.0:259; CHECK-NEXT:    vextractf128 $1, %ymm1, %xmm2260; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm3261; CHECK-NEXT:    vpsubd %xmm2, %xmm3, %xmm2262; CHECK-NEXT:    vpsubd %xmm1, %xmm0, %xmm0263; CHECK-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0264; CHECK-NEXT:    retq265  %x = sub <8 x i32> %i, %j266  ret <8 x i32> %x267}268 269define <16 x i16> @vpsubw(<16 x i16> %i, <16 x i16> %j) nounwind readnone {270; CHECK-LABEL: vpsubw:271; CHECK:       ## %bb.0:272; CHECK-NEXT:    vextractf128 $1, %ymm1, %xmm2273; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm3274; CHECK-NEXT:    vpsubw %xmm2, %xmm3, %xmm2275; CHECK-NEXT:    vpsubw %xmm1, %xmm0, %xmm0276; CHECK-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0277; CHECK-NEXT:    retq278  %x = sub <16 x i16> %i, %j279  ret <16 x i16> %x280}281 282define <32 x i8> @vpsubb(<32 x i8> %i, <32 x i8> %j) nounwind readnone {283; CHECK-LABEL: vpsubb:284; CHECK:       ## %bb.0:285; CHECK-NEXT:    vextractf128 $1, %ymm1, %xmm2286; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm3287; CHECK-NEXT:    vpsubb %xmm2, %xmm3, %xmm2288; CHECK-NEXT:    vpsubb %xmm1, %xmm0, %xmm0289; CHECK-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0290; CHECK-NEXT:    retq291  %x = sub <32 x i8> %i, %j292  ret <32 x i8> %x293}294 295define <8 x i32> @vpmulld(<8 x i32> %i, <8 x i32> %j) nounwind readnone {296; CHECK-LABEL: vpmulld:297; CHECK:       ## %bb.0:298; CHECK-NEXT:    vextractf128 $1, %ymm1, %xmm2299; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm3300; CHECK-NEXT:    vpmulld %xmm2, %xmm3, %xmm2301; CHECK-NEXT:    vpmulld %xmm1, %xmm0, %xmm0302; CHECK-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0303; CHECK-NEXT:    retq304  %x = mul <8 x i32> %i, %j305  ret <8 x i32> %x306}307 308define <16 x i16> @vpmullw(<16 x i16> %i, <16 x i16> %j) nounwind readnone {309; CHECK-LABEL: vpmullw:310; CHECK:       ## %bb.0:311; CHECK-NEXT:    vextractf128 $1, %ymm1, %xmm2312; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm3313; CHECK-NEXT:    vpmullw %xmm2, %xmm3, %xmm2314; CHECK-NEXT:    vpmullw %xmm1, %xmm0, %xmm0315; CHECK-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0316; CHECK-NEXT:    retq317  %x = mul <16 x i16> %i, %j318  ret <16 x i16> %x319}320 321define <4 x i64> @mul_v4i64(<4 x i64> %i, <4 x i64> %j) nounwind readnone {322; CHECK-LABEL: mul_v4i64:323; CHECK:       ## %bb.0:324; CHECK-NEXT:    vextractf128 $1, %ymm1, %xmm2325; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm3326; CHECK-NEXT:    vpsrlq $32, %xmm3, %xmm4327; CHECK-NEXT:    vpmuludq %xmm2, %xmm4, %xmm4328; CHECK-NEXT:    vpsrlq $32, %xmm2, %xmm5329; CHECK-NEXT:    vpmuludq %xmm5, %xmm3, %xmm5330; CHECK-NEXT:    vpaddq %xmm4, %xmm5, %xmm4331; CHECK-NEXT:    vpsllq $32, %xmm4, %xmm4332; CHECK-NEXT:    vpmuludq %xmm2, %xmm3, %xmm2333; CHECK-NEXT:    vpaddq %xmm4, %xmm2, %xmm2334; CHECK-NEXT:    vpsrlq $32, %xmm0, %xmm3335; CHECK-NEXT:    vpmuludq %xmm1, %xmm3, %xmm3336; CHECK-NEXT:    vpsrlq $32, %xmm1, %xmm4337; CHECK-NEXT:    vpmuludq %xmm4, %xmm0, %xmm4338; CHECK-NEXT:    vpaddq %xmm3, %xmm4, %xmm3339; CHECK-NEXT:    vpsllq $32, %xmm3, %xmm3340; CHECK-NEXT:    vpmuludq %xmm1, %xmm0, %xmm0341; CHECK-NEXT:    vpaddq %xmm3, %xmm0, %xmm0342; CHECK-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0343; CHECK-NEXT:    retq344  %x = mul <4 x i64> %i, %j345  ret <4 x i64> %x346}347 348declare <4 x float> @llvm.x86.sse.sqrt.ss(<4 x float>) nounwind readnone349 350define <4 x float> @int_sqrt_ss() {351; CHECK-LABEL: int_sqrt_ss:352; CHECK:       ## %bb.0:353; CHECK-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero354; CHECK-NEXT:    vsqrtss %xmm0, %xmm0, %xmm0355; CHECK-NEXT:    retq356 %x0 = load float, ptr addrspace(1) undef, align 8357 %x1 = insertelement <4 x float> undef, float %x0, i32 0358 %x2 = call <4 x float> @llvm.x86.sse.sqrt.ss(<4 x float> %x1) nounwind359 ret <4 x float> %x2360}361 362define <2 x double> @vector_sqrt_scalar_load(ptr %a0) optsize {363; CHECK-LABEL: vector_sqrt_scalar_load:364; CHECK:       ## %bb.0:365; CHECK-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero366; CHECK-NEXT:    vsqrtpd %xmm0, %xmm0367; CHECK-NEXT:    retq368  %a1 = load double, ptr %a0369  %a2 = insertelement <2 x double> undef, double %a1, i32 0370  %res = call <2 x double> @llvm.sqrt.v2f64(<2 x double> %a2) ; <<2 x double>> [#uses=1]371  ret <2 x double> %res372}373declare <2 x double> @llvm.sqrt.v2f64(<2 x double>) nounwind readnone374