brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.3 KiB · 7873ffa Raw
172 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown -mattr=+sse2 | FileCheck %s --check-prefix=X863; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx2 | FileCheck %s --check-prefix=X644 5define i32 @test1(i32 %x) {6; X86-LABEL: test1:7; X86:       # %bb.0:8; X86-NEXT:    imull $-1030792151, {{[0-9]+}}(%esp), %eax # imm = 0xC28F5C299; X86-NEXT:    retl10;11; X64-LABEL: test1:12; X64:       # %bb.0:13; X64-NEXT:    imull $-1030792151, %edi, %eax # imm = 0xC28F5C2914; X64-NEXT:    retq15  %div = sdiv exact i32 %x, 2516  ret i32 %div17}18 19define i32 @test2(i32 %x) {20; X86-LABEL: test2:21; X86:       # %bb.0:22; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax23; X86-NEXT:    sarl $3, %eax24; X86-NEXT:    imull $-1431655765, %eax, %eax # imm = 0xAAAAAAAB25; X86-NEXT:    retl26;27; X64-LABEL: test2:28; X64:       # %bb.0:29; X64-NEXT:    sarl $3, %edi30; X64-NEXT:    imull $-1431655765, %edi, %eax # imm = 0xAAAAAAAB31; X64-NEXT:    retq32  %div = sdiv exact i32 %x, 2433  ret i32 %div34}35 36define <4 x i32> @test3(<4 x i32> %x) {37; X86-LABEL: test3:38; X86:       # %bb.0:39; X86-NEXT:    psrad $3, %xmm040; X86-NEXT:    movdqa {{.*#+}} xmm1 = [2863311531,2863311531,2863311531,2863311531]41; X86-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,1,3,3]42; X86-NEXT:    pmuludq %xmm1, %xmm043; X86-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]44; X86-NEXT:    pmuludq %xmm1, %xmm245; X86-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[0,2,2,3]46; X86-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]47; X86-NEXT:    retl48;49; X64-LABEL: test3:50; X64:       # %bb.0:51; X64-NEXT:    vpsrad $3, %xmm0, %xmm052; X64-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [2863311531,2863311531,2863311531,2863311531]53; X64-NEXT:    vpmulld %xmm1, %xmm0, %xmm054; X64-NEXT:    retq55  %div = sdiv exact <4 x i32> %x, <i32 24, i32 24, i32 24, i32 24>56  ret <4 x i32> %div57}58 59define <4 x i32> @test4(<4 x i32> %x) {60; X86-LABEL: test4:61; X86:       # %bb.0:62; X86-NEXT:    movdqa {{.*#+}} xmm1 = [3264175145,3264175145,3264175145,3264175145]63; X86-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,1,3,3]64; X86-NEXT:    pmuludq %xmm1, %xmm065; X86-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]66; X86-NEXT:    pmuludq %xmm1, %xmm267; X86-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[0,2,2,3]68; X86-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]69; X86-NEXT:    retl70;71; X64-LABEL: test4:72; X64:       # %bb.0:73; X64-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [3264175145,3264175145,3264175145,3264175145]74; X64-NEXT:    vpmulld %xmm1, %xmm0, %xmm075; X64-NEXT:    retq76  %div = sdiv exact <4 x i32> %x, <i32 25, i32 25, i32 25, i32 25>77  ret <4 x i32> %div78}79 80define <4 x i32> @test5(<4 x i32> %x) {81; X86-LABEL: test5:82; X86:       # %bb.0:83; X86-NEXT:    movdqa %xmm0, %xmm184; X86-NEXT:    psrad $3, %xmm185; X86-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1],xmm0[2,3]86; X86-NEXT:    movdqa {{.*#+}} xmm0 = [2863311531,2863311531,3264175145,3264175145]87; X86-NEXT:    pmuludq %xmm1, %xmm088; X86-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]89; X86-NEXT:    shufps {{.*#+}} xmm1 = xmm1[1,1,3,3]90; X86-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1 # [2863311531,u,3264175145,u]91; X86-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]92; X86-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]93; X86-NEXT:    retl94;95; X64-LABEL: test5:96; X64:       # %bb.0:97; X64-NEXT:    vpsravd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm098; X64-NEXT:    vpmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [2863311531,2863311531,3264175145,3264175145]99; X64-NEXT:    retq100  %div = sdiv exact <4 x i32> %x, <i32 24, i32 24, i32 25, i32 25>101  ret <4 x i32> %div102}103 104define <4 x i32> @test6(<4 x i32> %x) {105; X86-LABEL: test6:106; X86:       # %bb.0:107; X86-NEXT:    movdqa %xmm0, %xmm1108; X86-NEXT:    psrad $3, %xmm1109; X86-NEXT:    psrad $1, %xmm0110; X86-NEXT:    movsd {{.*#+}} xmm0 = xmm1[0],xmm0[1]111; X86-NEXT:    movdqa {{.*#+}} xmm1 = [2863311531,2863311531,3303820997,3303820997]112; X86-NEXT:    pmuludq %xmm0, %xmm1113; X86-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]114; X86-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,3,3]115; X86-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0 # [2863311531,u,3303820997,u]116; X86-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]117; X86-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]118; X86-NEXT:    movdqa %xmm1, %xmm0119; X86-NEXT:    retl120;121; X64-LABEL: test6:122; X64:       # %bb.0:123; X64-NEXT:    vpsravd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0124; X64-NEXT:    vpmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [2863311531,2863311531,3303820997,3303820997]125; X64-NEXT:    retq126  %div = sdiv exact <4 x i32> %x, <i32 24, i32 24, i32 26, i32 26>127  ret <4 x i32> %div128}129 130define <4 x i32> @test7(<4 x i32> %x) {131; X86-LABEL: test7:132; X86:       # %bb.0:133; X86-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]134; X86-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0 # [3264175145,3264175145,1749801491,1749801491]135; X86-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]136; X86-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1 # [3264175145,u,1749801491,u]137; X86-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]138; X86-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]139; X86-NEXT:    retl140;141; X64-LABEL: test7:142; X64:       # %bb.0:143; X64-NEXT:    vpmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [3264175145,3264175145,1749801491,1749801491]144; X64-NEXT:    retq145  %div = sdiv exact <4 x i32> %x, <i32 25, i32 25, i32 27, i32 27>146  ret <4 x i32> %div147}148 149define <4 x i32> @test8(<4 x i32> %x) {150; X86-LABEL: test8:151; X86:       # %bb.0:152; X86-NEXT:    movdqa %xmm0, %xmm1153; X86-NEXT:    psrad $3, %xmm1154; X86-NEXT:    movsd {{.*#+}} xmm1 = xmm0[0],xmm1[1]155; X86-NEXT:    movdqa {{.*#+}} xmm0 = [1,1,2863311531,2863311531]156; X86-NEXT:    pmuludq %xmm1, %xmm0157; X86-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]158; X86-NEXT:    shufps {{.*#+}} xmm1 = xmm1[1,1,3,3]159; X86-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1 # [1,u,2863311531,u]160; X86-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]161; X86-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]162; X86-NEXT:    retl163;164; X64-LABEL: test8:165; X64:       # %bb.0:166; X64-NEXT:    vpsravd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0167; X64-NEXT:    vpmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [1,1,2863311531,2863311531]168; X64-NEXT:    retq169  %div = sdiv exact <4 x i32> %x, <i32 1, i32 1, i32 24, i32 24>170  ret <4 x i32> %div171}172