brintos

brintos / llvm-project-archived public Read only

0
0
Text · 28.0 KiB · b490c3c Raw
605 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=x86_64-unknown-linux-gnu -mattr=+sse2 < %s | FileCheck %s --check-prefixes=CHECK-SSE,CHECK-SSE23; RUN: llc -mtriple=x86_64-unknown-linux-gnu -mattr=+sse4.1 < %s | FileCheck %s --check-prefixes=CHECK-SSE,CHECK-SSE414; RUN: llc -mtriple=x86_64-unknown-linux-gnu -mattr=+avx < %s | FileCheck %s --check-prefixes=CHECK-AVX,CHECK-AVX15; RUN: llc -mtriple=x86_64-unknown-linux-gnu -mattr=+avx2 < %s | FileCheck %s --check-prefixes=CHECK-AVX,CHECK-AVX26; RUN: llc -mtriple=x86_64-unknown-linux-gnu -mattr=+avx512f,+avx512vl < %s | FileCheck %s --check-prefixes=CHECK-AVX,CHECK-AVX512VL7 8; Odd divisor9define <4 x i32> @test_urem_odd_25(<4 x i32> %X) nounwind {10; CHECK-SSE2-LABEL: test_urem_odd_25:11; CHECK-SSE2:       # %bb.0:12; CHECK-SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [3264175145,3264175145,3264175145,3264175145]13; CHECK-SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,1,3,3]14; CHECK-SSE2-NEXT:    pmuludq %xmm1, %xmm015; CHECK-SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]16; CHECK-SSE2-NEXT:    pmuludq %xmm1, %xmm217; CHECK-SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[0,2,2,3]18; CHECK-SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]19; CHECK-SSE2-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm020; CHECK-SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm021; CHECK-SSE2-NEXT:    pandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm022; CHECK-SSE2-NEXT:    retq23;24; CHECK-SSE41-LABEL: test_urem_odd_25:25; CHECK-SSE41:       # %bb.0:26; CHECK-SSE41-NEXT:    pmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [3264175145,3264175145,3264175145,3264175145]27; CHECK-SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [171798691,171798691,171798691,171798691]28; CHECK-SSE41-NEXT:    pminud %xmm0, %xmm129; CHECK-SSE41-NEXT:    pcmpeqd %xmm1, %xmm030; CHECK-SSE41-NEXT:    psrld $31, %xmm031; CHECK-SSE41-NEXT:    retq32;33; CHECK-AVX1-LABEL: test_urem_odd_25:34; CHECK-AVX1:       # %bb.0:35; CHECK-AVX1-NEXT:    vpmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [3264175145,3264175145,3264175145,3264175145]36; CHECK-AVX1-NEXT:    vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm137; CHECK-AVX1-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm038; CHECK-AVX1-NEXT:    vpsrld $31, %xmm0, %xmm039; CHECK-AVX1-NEXT:    retq40;41; CHECK-AVX2-LABEL: test_urem_odd_25:42; CHECK-AVX2:       # %bb.0:43; CHECK-AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [3264175145,3264175145,3264175145,3264175145]44; CHECK-AVX2-NEXT:    vpmulld %xmm1, %xmm0, %xmm045; CHECK-AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [171798691,171798691,171798691,171798691]46; CHECK-AVX2-NEXT:    vpminud %xmm1, %xmm0, %xmm147; CHECK-AVX2-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm048; CHECK-AVX2-NEXT:    vpsrld $31, %xmm0, %xmm049; CHECK-AVX2-NEXT:    retq50;51; CHECK-AVX512VL-LABEL: test_urem_odd_25:52; CHECK-AVX512VL:       # %bb.0:53; CHECK-AVX512VL-NEXT:    vpmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm054; CHECK-AVX512VL-NEXT:    vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm155; CHECK-AVX512VL-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm056; CHECK-AVX512VL-NEXT:    vpsrld $31, %xmm0, %xmm057; CHECK-AVX512VL-NEXT:    retq58  %urem = urem <4 x i32> %X, <i32 25, i32 25, i32 25, i32 25>59  %cmp = icmp eq <4 x i32> %urem, <i32 0, i32 0, i32 0, i32 0>60  %ret = zext <4 x i1> %cmp to <4 x i32>61  ret <4 x i32> %ret62}63 64; Even divisors65define <4 x i32> @test_urem_even_100(<4 x i32> %X) nounwind {66; CHECK-SSE2-LABEL: test_urem_even_100:67; CHECK-SSE2:       # %bb.0:68; CHECK-SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [3264175145,3264175145,3264175145,3264175145]69; CHECK-SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,1,3,3]70; CHECK-SSE2-NEXT:    pmuludq %xmm1, %xmm071; CHECK-SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]72; CHECK-SSE2-NEXT:    pmuludq %xmm1, %xmm273; CHECK-SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[0,2,2,3]74; CHECK-SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]75; CHECK-SSE2-NEXT:    movdqa %xmm0, %xmm176; CHECK-SSE2-NEXT:    psrld $2, %xmm177; CHECK-SSE2-NEXT:    pslld $30, %xmm078; CHECK-SSE2-NEXT:    por %xmm1, %xmm079; CHECK-SSE2-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm080; CHECK-SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm081; CHECK-SSE2-NEXT:    pandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm082; CHECK-SSE2-NEXT:    retq83;84; CHECK-SSE41-LABEL: test_urem_even_100:85; CHECK-SSE41:       # %bb.0:86; CHECK-SSE41-NEXT:    pmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [3264175145,3264175145,3264175145,3264175145]87; CHECK-SSE41-NEXT:    movdqa %xmm0, %xmm188; CHECK-SSE41-NEXT:    psrld $2, %xmm189; CHECK-SSE41-NEXT:    pslld $30, %xmm090; CHECK-SSE41-NEXT:    por %xmm1, %xmm091; CHECK-SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [42949672,42949672,42949672,42949672]92; CHECK-SSE41-NEXT:    pminud %xmm0, %xmm193; CHECK-SSE41-NEXT:    pcmpeqd %xmm1, %xmm094; CHECK-SSE41-NEXT:    psrld $31, %xmm095; CHECK-SSE41-NEXT:    retq96;97; CHECK-AVX1-LABEL: test_urem_even_100:98; CHECK-AVX1:       # %bb.0:99; CHECK-AVX1-NEXT:    vpmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [3264175145,3264175145,3264175145,3264175145]100; CHECK-AVX1-NEXT:    vpsrld $2, %xmm0, %xmm1101; CHECK-AVX1-NEXT:    vpslld $30, %xmm0, %xmm0102; CHECK-AVX1-NEXT:    vpor %xmm1, %xmm0, %xmm0103; CHECK-AVX1-NEXT:    vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1104; CHECK-AVX1-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0105; CHECK-AVX1-NEXT:    vpsrld $31, %xmm0, %xmm0106; CHECK-AVX1-NEXT:    retq107;108; CHECK-AVX2-LABEL: test_urem_even_100:109; CHECK-AVX2:       # %bb.0:110; CHECK-AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [3264175145,3264175145,3264175145,3264175145]111; CHECK-AVX2-NEXT:    vpmulld %xmm1, %xmm0, %xmm0112; CHECK-AVX2-NEXT:    vpsrld $2, %xmm0, %xmm1113; CHECK-AVX2-NEXT:    vpslld $30, %xmm0, %xmm0114; CHECK-AVX2-NEXT:    vpor %xmm1, %xmm0, %xmm0115; CHECK-AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [42949672,42949672,42949672,42949672]116; CHECK-AVX2-NEXT:    vpminud %xmm1, %xmm0, %xmm1117; CHECK-AVX2-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0118; CHECK-AVX2-NEXT:    vpsrld $31, %xmm0, %xmm0119; CHECK-AVX2-NEXT:    retq120;121; CHECK-AVX512VL-LABEL: test_urem_even_100:122; CHECK-AVX512VL:       # %bb.0:123; CHECK-AVX512VL-NEXT:    vpmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm0124; CHECK-AVX512VL-NEXT:    vprord $2, %xmm0, %xmm0125; CHECK-AVX512VL-NEXT:    vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm1126; CHECK-AVX512VL-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0127; CHECK-AVX512VL-NEXT:    vpsrld $31, %xmm0, %xmm0128; CHECK-AVX512VL-NEXT:    retq129  %urem = urem <4 x i32> %X, <i32 100, i32 100, i32 100, i32 100>130  %cmp = icmp eq <4 x i32> %urem, <i32 0, i32 0, i32 0, i32 0>131  %ret = zext <4 x i1> %cmp to <4 x i32>132  ret <4 x i32> %ret133}134 135; Negative divisors should be negated, and thus this is still splat vectors.136 137; Odd divisor138define <4 x i32> @test_urem_odd_neg25(<4 x i32> %X) nounwind {139; CHECK-SSE2-LABEL: test_urem_odd_neg25:140; CHECK-SSE2:       # %bb.0:141; CHECK-SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]142; CHECK-SSE2-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [3264175145,1030792151,1030792151,3264175145]143; CHECK-SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]144; CHECK-SSE2-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [1030792151,u,3264175145,u]145; CHECK-SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]146; CHECK-SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]147; CHECK-SSE2-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0148; CHECK-SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0149; CHECK-SSE2-NEXT:    pandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0150; CHECK-SSE2-NEXT:    retq151;152; CHECK-SSE41-LABEL: test_urem_odd_neg25:153; CHECK-SSE41:       # %bb.0:154; CHECK-SSE41-NEXT:    pmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [3264175145,1030792151,1030792151,3264175145]155; CHECK-SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [171798691,1,1,171798691]156; CHECK-SSE41-NEXT:    pminud %xmm0, %xmm1157; CHECK-SSE41-NEXT:    pcmpeqd %xmm1, %xmm0158; CHECK-SSE41-NEXT:    psrld $31, %xmm0159; CHECK-SSE41-NEXT:    retq160;161; CHECK-AVX-LABEL: test_urem_odd_neg25:162; CHECK-AVX:       # %bb.0:163; CHECK-AVX-NEXT:    vpmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [3264175145,1030792151,1030792151,3264175145]164; CHECK-AVX-NEXT:    vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1165; CHECK-AVX-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0166; CHECK-AVX-NEXT:    vpsrld $31, %xmm0, %xmm0167; CHECK-AVX-NEXT:    retq168  %urem = urem <4 x i32> %X, <i32 25, i32 -25, i32 -25, i32 25>169  %cmp = icmp eq <4 x i32> %urem, <i32 0, i32 0, i32 0, i32 0>170  %ret = zext <4 x i1> %cmp to <4 x i32>171  ret <4 x i32> %ret172}173 174; Even divisors175define <4 x i32> @test_urem_even_neg100(<4 x i32> %X) nounwind {176; CHECK-SSE2-LABEL: test_urem_even_neg100:177; CHECK-SSE2:       # %bb.0:178; CHECK-SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]179; CHECK-SSE2-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [4252017623,3264175145,4252017623,3264175145]180; CHECK-SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]181; CHECK-SSE2-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [3264175145,3264175145,3264175145,3264175145]182; CHECK-SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]183; CHECK-SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]184; CHECK-SSE2-NEXT:    movdqa %xmm0, %xmm1185; CHECK-SSE2-NEXT:    psrld $2, %xmm1186; CHECK-SSE2-NEXT:    pslld $30, %xmm0187; CHECK-SSE2-NEXT:    por %xmm1, %xmm0188; CHECK-SSE2-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0189; CHECK-SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0190; CHECK-SSE2-NEXT:    pandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0191; CHECK-SSE2-NEXT:    retq192;193; CHECK-SSE41-LABEL: test_urem_even_neg100:194; CHECK-SSE41:       # %bb.0:195; CHECK-SSE41-NEXT:    pmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [4252017623,3264175145,4252017623,3264175145]196; CHECK-SSE41-NEXT:    movdqa %xmm0, %xmm1197; CHECK-SSE41-NEXT:    psrld $2, %xmm1198; CHECK-SSE41-NEXT:    pslld $30, %xmm0199; CHECK-SSE41-NEXT:    por %xmm1, %xmm0200; CHECK-SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [1,42949672,1,42949672]201; CHECK-SSE41-NEXT:    pminud %xmm0, %xmm1202; CHECK-SSE41-NEXT:    pcmpeqd %xmm1, %xmm0203; CHECK-SSE41-NEXT:    psrld $31, %xmm0204; CHECK-SSE41-NEXT:    retq205;206; CHECK-AVX1-LABEL: test_urem_even_neg100:207; CHECK-AVX1:       # %bb.0:208; CHECK-AVX1-NEXT:    vpmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [4252017623,3264175145,4252017623,3264175145]209; CHECK-AVX1-NEXT:    vpsrld $2, %xmm0, %xmm1210; CHECK-AVX1-NEXT:    vpslld $30, %xmm0, %xmm0211; CHECK-AVX1-NEXT:    vpor %xmm1, %xmm0, %xmm0212; CHECK-AVX1-NEXT:    vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1213; CHECK-AVX1-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0214; CHECK-AVX1-NEXT:    vpsrld $31, %xmm0, %xmm0215; CHECK-AVX1-NEXT:    retq216;217; CHECK-AVX2-LABEL: test_urem_even_neg100:218; CHECK-AVX2:       # %bb.0:219; CHECK-AVX2-NEXT:    vpmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [4252017623,3264175145,4252017623,3264175145]220; CHECK-AVX2-NEXT:    vpsrld $2, %xmm0, %xmm1221; CHECK-AVX2-NEXT:    vpslld $30, %xmm0, %xmm0222; CHECK-AVX2-NEXT:    vpor %xmm1, %xmm0, %xmm0223; CHECK-AVX2-NEXT:    vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1224; CHECK-AVX2-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0225; CHECK-AVX2-NEXT:    vpsrld $31, %xmm0, %xmm0226; CHECK-AVX2-NEXT:    retq227;228; CHECK-AVX512VL-LABEL: test_urem_even_neg100:229; CHECK-AVX512VL:       # %bb.0:230; CHECK-AVX512VL-NEXT:    vpmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [4252017623,3264175145,4252017623,3264175145]231; CHECK-AVX512VL-NEXT:    vprord $2, %xmm0, %xmm0232; CHECK-AVX512VL-NEXT:    vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1233; CHECK-AVX512VL-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0234; CHECK-AVX512VL-NEXT:    vpsrld $31, %xmm0, %xmm0235; CHECK-AVX512VL-NEXT:    retq236  %urem = urem <4 x i32> %X, <i32 -100, i32 100, i32 -100, i32 100>237  %cmp = icmp eq <4 x i32> %urem, <i32 0, i32 0, i32 0, i32 0>238  %ret = zext <4 x i1> %cmp to <4 x i32>239  ret <4 x i32> %ret240}241 242;------------------------------------------------------------------------------;243; Comparison constant has undef elements.244;------------------------------------------------------------------------------;245 246define <4 x i32> @test_urem_odd_undef1(<4 x i32> %X) nounwind {247; CHECK-SSE2-LABEL: test_urem_odd_undef1:248; CHECK-SSE2:       # %bb.0:249; CHECK-SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [1374389535,1374389535,1374389535,1374389535]250; CHECK-SSE2-NEXT:    movdqa %xmm0, %xmm2251; CHECK-SSE2-NEXT:    pmuludq %xmm1, %xmm2252; CHECK-SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,3,2,3]253; CHECK-SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm0[1,1,3,3]254; CHECK-SSE2-NEXT:    pmuludq %xmm1, %xmm3255; CHECK-SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[1,3,2,3]256; CHECK-SSE2-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]257; CHECK-SSE2-NEXT:    psrld $3, %xmm2258; CHECK-SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [25,25,25,25]259; CHECK-SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3]260; CHECK-SSE2-NEXT:    pmuludq %xmm1, %xmm2261; CHECK-SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]262; CHECK-SSE2-NEXT:    pmuludq %xmm1, %xmm3263; CHECK-SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[0,2,2,3]264; CHECK-SSE2-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]265; CHECK-SSE2-NEXT:    psubd %xmm2, %xmm0266; CHECK-SSE2-NEXT:    pxor %xmm1, %xmm1267; CHECK-SSE2-NEXT:    pcmpeqd %xmm1, %xmm0268; CHECK-SSE2-NEXT:    psrld $31, %xmm0269; CHECK-SSE2-NEXT:    retq270;271; CHECK-SSE41-LABEL: test_urem_odd_undef1:272; CHECK-SSE41:       # %bb.0:273; CHECK-SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]274; CHECK-SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [1374389535,1374389535,1374389535,1374389535]275; CHECK-SSE41-NEXT:    pmuludq %xmm2, %xmm1276; CHECK-SSE41-NEXT:    pmuludq %xmm0, %xmm2277; CHECK-SSE41-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]278; CHECK-SSE41-NEXT:    pblendw {{.*#+}} xmm2 = xmm2[0,1],xmm1[2,3],xmm2[4,5],xmm1[6,7]279; CHECK-SSE41-NEXT:    psrld $3, %xmm2280; CHECK-SSE41-NEXT:    pmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [25,25,25,25]281; CHECK-SSE41-NEXT:    psubd %xmm2, %xmm0282; CHECK-SSE41-NEXT:    pxor %xmm1, %xmm1283; CHECK-SSE41-NEXT:    pcmpeqd %xmm1, %xmm0284; CHECK-SSE41-NEXT:    psrld $31, %xmm0285; CHECK-SSE41-NEXT:    retq286;287; CHECK-AVX1-LABEL: test_urem_odd_undef1:288; CHECK-AVX1:       # %bb.0:289; CHECK-AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]290; CHECK-AVX1-NEXT:    vbroadcastss {{.*#+}} xmm2 = [1374389535,1374389535,1374389535,1374389535]291; CHECK-AVX1-NEXT:    vpmuludq %xmm2, %xmm1, %xmm1292; CHECK-AVX1-NEXT:    vpmuludq %xmm2, %xmm0, %xmm2293; CHECK-AVX1-NEXT:    vpshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]294; CHECK-AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm2[0,1],xmm1[2,3],xmm2[4,5],xmm1[6,7]295; CHECK-AVX1-NEXT:    vpsrld $3, %xmm1, %xmm1296; CHECK-AVX1-NEXT:    vpmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1 # [25,25,25,25]297; CHECK-AVX1-NEXT:    vpsubd %xmm1, %xmm0, %xmm0298; CHECK-AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1299; CHECK-AVX1-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0300; CHECK-AVX1-NEXT:    vpsrld $31, %xmm0, %xmm0301; CHECK-AVX1-NEXT:    retq302;303; CHECK-AVX2-LABEL: test_urem_odd_undef1:304; CHECK-AVX2:       # %bb.0:305; CHECK-AVX2-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]306; CHECK-AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm2 = [1374389535,1374389535,1374389535,1374389535]307; CHECK-AVX2-NEXT:    vpmuludq %xmm2, %xmm1, %xmm1308; CHECK-AVX2-NEXT:    vpmuludq %xmm2, %xmm0, %xmm2309; CHECK-AVX2-NEXT:    vpshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]310; CHECK-AVX2-NEXT:    vpblendd {{.*#+}} xmm1 = xmm2[0],xmm1[1],xmm2[2],xmm1[3]311; CHECK-AVX2-NEXT:    vpsrld $3, %xmm1, %xmm1312; CHECK-AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm2 = [25,25,25,25]313; CHECK-AVX2-NEXT:    vpmulld %xmm2, %xmm1, %xmm1314; CHECK-AVX2-NEXT:    vpsubd %xmm1, %xmm0, %xmm0315; CHECK-AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1316; CHECK-AVX2-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0317; CHECK-AVX2-NEXT:    vpsrld $31, %xmm0, %xmm0318; CHECK-AVX2-NEXT:    retq319;320; CHECK-AVX512VL-LABEL: test_urem_odd_undef1:321; CHECK-AVX512VL:       # %bb.0:322; CHECK-AVX512VL-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]323; CHECK-AVX512VL-NEXT:    vpbroadcastd {{.*#+}} xmm2 = [1374389535,1374389535,1374389535,1374389535]324; CHECK-AVX512VL-NEXT:    vpmuludq %xmm2, %xmm1, %xmm1325; CHECK-AVX512VL-NEXT:    vpmuludq %xmm2, %xmm0, %xmm2326; CHECK-AVX512VL-NEXT:    vpshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]327; CHECK-AVX512VL-NEXT:    vpblendd {{.*#+}} xmm1 = xmm2[0],xmm1[1],xmm2[2],xmm1[3]328; CHECK-AVX512VL-NEXT:    vpsrld $3, %xmm1, %xmm1329; CHECK-AVX512VL-NEXT:    vpmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm1, %xmm1330; CHECK-AVX512VL-NEXT:    vpsubd %xmm1, %xmm0, %xmm0331; CHECK-AVX512VL-NEXT:    vpxor %xmm1, %xmm1, %xmm1332; CHECK-AVX512VL-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0333; CHECK-AVX512VL-NEXT:    vpsrld $31, %xmm0, %xmm0334; CHECK-AVX512VL-NEXT:    retq335  %urem = urem <4 x i32> %X, <i32 25, i32 25, i32 25, i32 25>336  %cmp = icmp eq <4 x i32> %urem, <i32 0, i32 0, i32 undef, i32 0>337  %ret = zext <4 x i1> %cmp to <4 x i32>338  ret <4 x i32> %ret339}340 341define <4 x i32> @test_urem_even_undef1(<4 x i32> %X) nounwind {342; CHECK-SSE2-LABEL: test_urem_even_undef1:343; CHECK-SSE2:       # %bb.0:344; CHECK-SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [1374389535,1374389535,1374389535,1374389535]345; CHECK-SSE2-NEXT:    movdqa %xmm0, %xmm2346; CHECK-SSE2-NEXT:    pmuludq %xmm1, %xmm2347; CHECK-SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,3,2,3]348; CHECK-SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm0[1,1,3,3]349; CHECK-SSE2-NEXT:    pmuludq %xmm1, %xmm3350; CHECK-SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[1,3,2,3]351; CHECK-SSE2-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]352; CHECK-SSE2-NEXT:    psrld $5, %xmm2353; CHECK-SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [100,100,100,100]354; CHECK-SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3]355; CHECK-SSE2-NEXT:    pmuludq %xmm1, %xmm2356; CHECK-SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]357; CHECK-SSE2-NEXT:    pmuludq %xmm1, %xmm3358; CHECK-SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[0,2,2,3]359; CHECK-SSE2-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]360; CHECK-SSE2-NEXT:    psubd %xmm2, %xmm0361; CHECK-SSE2-NEXT:    pxor %xmm1, %xmm1362; CHECK-SSE2-NEXT:    pcmpeqd %xmm1, %xmm0363; CHECK-SSE2-NEXT:    psrld $31, %xmm0364; CHECK-SSE2-NEXT:    retq365;366; CHECK-SSE41-LABEL: test_urem_even_undef1:367; CHECK-SSE41:       # %bb.0:368; CHECK-SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]369; CHECK-SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [1374389535,1374389535,1374389535,1374389535]370; CHECK-SSE41-NEXT:    pmuludq %xmm2, %xmm1371; CHECK-SSE41-NEXT:    pmuludq %xmm0, %xmm2372; CHECK-SSE41-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]373; CHECK-SSE41-NEXT:    pblendw {{.*#+}} xmm2 = xmm2[0,1],xmm1[2,3],xmm2[4,5],xmm1[6,7]374; CHECK-SSE41-NEXT:    psrld $5, %xmm2375; CHECK-SSE41-NEXT:    pmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [100,100,100,100]376; CHECK-SSE41-NEXT:    psubd %xmm2, %xmm0377; CHECK-SSE41-NEXT:    pxor %xmm1, %xmm1378; CHECK-SSE41-NEXT:    pcmpeqd %xmm1, %xmm0379; CHECK-SSE41-NEXT:    psrld $31, %xmm0380; CHECK-SSE41-NEXT:    retq381;382; CHECK-AVX1-LABEL: test_urem_even_undef1:383; CHECK-AVX1:       # %bb.0:384; CHECK-AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]385; CHECK-AVX1-NEXT:    vbroadcastss {{.*#+}} xmm2 = [1374389535,1374389535,1374389535,1374389535]386; CHECK-AVX1-NEXT:    vpmuludq %xmm2, %xmm1, %xmm1387; CHECK-AVX1-NEXT:    vpmuludq %xmm2, %xmm0, %xmm2388; CHECK-AVX1-NEXT:    vpshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]389; CHECK-AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm2[0,1],xmm1[2,3],xmm2[4,5],xmm1[6,7]390; CHECK-AVX1-NEXT:    vpsrld $5, %xmm1, %xmm1391; CHECK-AVX1-NEXT:    vpmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1 # [100,100,100,100]392; CHECK-AVX1-NEXT:    vpsubd %xmm1, %xmm0, %xmm0393; CHECK-AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1394; CHECK-AVX1-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0395; CHECK-AVX1-NEXT:    vpsrld $31, %xmm0, %xmm0396; CHECK-AVX1-NEXT:    retq397;398; CHECK-AVX2-LABEL: test_urem_even_undef1:399; CHECK-AVX2:       # %bb.0:400; CHECK-AVX2-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]401; CHECK-AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm2 = [1374389535,1374389535,1374389535,1374389535]402; CHECK-AVX2-NEXT:    vpmuludq %xmm2, %xmm1, %xmm1403; CHECK-AVX2-NEXT:    vpmuludq %xmm2, %xmm0, %xmm2404; CHECK-AVX2-NEXT:    vpshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]405; CHECK-AVX2-NEXT:    vpblendd {{.*#+}} xmm1 = xmm2[0],xmm1[1],xmm2[2],xmm1[3]406; CHECK-AVX2-NEXT:    vpsrld $5, %xmm1, %xmm1407; CHECK-AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm2 = [100,100,100,100]408; CHECK-AVX2-NEXT:    vpmulld %xmm2, %xmm1, %xmm1409; CHECK-AVX2-NEXT:    vpsubd %xmm1, %xmm0, %xmm0410; CHECK-AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1411; CHECK-AVX2-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0412; CHECK-AVX2-NEXT:    vpsrld $31, %xmm0, %xmm0413; CHECK-AVX2-NEXT:    retq414;415; CHECK-AVX512VL-LABEL: test_urem_even_undef1:416; CHECK-AVX512VL:       # %bb.0:417; CHECK-AVX512VL-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]418; CHECK-AVX512VL-NEXT:    vpbroadcastd {{.*#+}} xmm2 = [1374389535,1374389535,1374389535,1374389535]419; CHECK-AVX512VL-NEXT:    vpmuludq %xmm2, %xmm1, %xmm1420; CHECK-AVX512VL-NEXT:    vpmuludq %xmm2, %xmm0, %xmm2421; CHECK-AVX512VL-NEXT:    vpshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]422; CHECK-AVX512VL-NEXT:    vpblendd {{.*#+}} xmm1 = xmm2[0],xmm1[1],xmm2[2],xmm1[3]423; CHECK-AVX512VL-NEXT:    vpsrld $5, %xmm1, %xmm1424; CHECK-AVX512VL-NEXT:    vpmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm1, %xmm1425; CHECK-AVX512VL-NEXT:    vpsubd %xmm1, %xmm0, %xmm0426; CHECK-AVX512VL-NEXT:    vpxor %xmm1, %xmm1, %xmm1427; CHECK-AVX512VL-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0428; CHECK-AVX512VL-NEXT:    vpsrld $31, %xmm0, %xmm0429; CHECK-AVX512VL-NEXT:    retq430  %urem = urem <4 x i32> %X, <i32 100, i32 100, i32 100, i32 100>431  %cmp = icmp eq <4 x i32> %urem, <i32 0, i32 0, i32 undef, i32 0>432  %ret = zext <4 x i1> %cmp to <4 x i32>433  ret <4 x i32> %ret434}435 436;------------------------------------------------------------------------------;437; Negative tests438;------------------------------------------------------------------------------;439 440define <4 x i32> @test_urem_one_eq(<4 x i32> %X) nounwind {441; CHECK-SSE-LABEL: test_urem_one_eq:442; CHECK-SSE:       # %bb.0:443; CHECK-SSE-NEXT:    movaps {{.*#+}} xmm0 = [1,1,1,1]444; CHECK-SSE-NEXT:    retq445;446; CHECK-AVX-LABEL: test_urem_one_eq:447; CHECK-AVX:       # %bb.0:448; CHECK-AVX-NEXT:    vbroadcastss {{.*#+}} xmm0 = [1,1,1,1]449; CHECK-AVX-NEXT:    retq450  %urem = urem <4 x i32> %X, <i32 1, i32 1, i32 1, i32 1>451  %cmp = icmp eq <4 x i32> %urem, <i32 0, i32 0, i32 0, i32 0>452  %ret = zext <4 x i1> %cmp to <4 x i32>453  ret <4 x i32> %ret454}455define <4 x i32> @test_urem_one_ne(<4 x i32> %X) nounwind {456; CHECK-SSE-LABEL: test_urem_one_ne:457; CHECK-SSE:       # %bb.0:458; CHECK-SSE-NEXT:    xorps %xmm0, %xmm0459; CHECK-SSE-NEXT:    retq460;461; CHECK-AVX-LABEL: test_urem_one_ne:462; CHECK-AVX:       # %bb.0:463; CHECK-AVX-NEXT:    vxorps %xmm0, %xmm0, %xmm0464; CHECK-AVX-NEXT:    retq465  %urem = urem <4 x i32> %X, <i32 1, i32 1, i32 1, i32 1>466  %cmp = icmp ne <4 x i32> %urem, <i32 0, i32 0, i32 0, i32 0>467  %ret = zext <4 x i1> %cmp to <4 x i32>468  ret <4 x i32> %ret469}470 471; We can lower remainder of division by powers of two much better elsewhere.472define <4 x i32> @test_urem_pow2(<4 x i32> %X) nounwind {473; CHECK-SSE-LABEL: test_urem_pow2:474; CHECK-SSE:       # %bb.0:475; CHECK-SSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0476; CHECK-SSE-NEXT:    pxor %xmm1, %xmm1477; CHECK-SSE-NEXT:    pcmpeqd %xmm1, %xmm0478; CHECK-SSE-NEXT:    psrld $31, %xmm0479; CHECK-SSE-NEXT:    retq480;481; CHECK-AVX1-LABEL: test_urem_pow2:482; CHECK-AVX1:       # %bb.0:483; CHECK-AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0484; CHECK-AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1485; CHECK-AVX1-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0486; CHECK-AVX1-NEXT:    vpsrld $31, %xmm0, %xmm0487; CHECK-AVX1-NEXT:    retq488;489; CHECK-AVX2-LABEL: test_urem_pow2:490; CHECK-AVX2:       # %bb.0:491; CHECK-AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [15,15,15,15]492; CHECK-AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0493; CHECK-AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1494; CHECK-AVX2-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0495; CHECK-AVX2-NEXT:    vpsrld $31, %xmm0, %xmm0496; CHECK-AVX2-NEXT:    retq497;498; CHECK-AVX512VL-LABEL: test_urem_pow2:499; CHECK-AVX512VL:       # %bb.0:500; CHECK-AVX512VL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm0501; CHECK-AVX512VL-NEXT:    vpxor %xmm1, %xmm1, %xmm1502; CHECK-AVX512VL-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0503; CHECK-AVX512VL-NEXT:    vpsrld $31, %xmm0, %xmm0504; CHECK-AVX512VL-NEXT:    retq505  %urem = urem <4 x i32> %X, <i32 16, i32 16, i32 16, i32 16>506  %cmp = icmp eq <4 x i32> %urem, <i32 0, i32 0, i32 0, i32 0>507  %ret = zext <4 x i1> %cmp to <4 x i32>508  ret <4 x i32> %ret509}510 511; We could lower remainder of division by INT_MIN much better elsewhere.512define <4 x i32> @test_urem_int_min(<4 x i32> %X) nounwind {513; CHECK-SSE-LABEL: test_urem_int_min:514; CHECK-SSE:       # %bb.0:515; CHECK-SSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0516; CHECK-SSE-NEXT:    pxor %xmm1, %xmm1517; CHECK-SSE-NEXT:    pcmpeqd %xmm1, %xmm0518; CHECK-SSE-NEXT:    psrld $31, %xmm0519; CHECK-SSE-NEXT:    retq520;521; CHECK-AVX1-LABEL: test_urem_int_min:522; CHECK-AVX1:       # %bb.0:523; CHECK-AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0524; CHECK-AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1525; CHECK-AVX1-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0526; CHECK-AVX1-NEXT:    vpsrld $31, %xmm0, %xmm0527; CHECK-AVX1-NEXT:    retq528;529; CHECK-AVX2-LABEL: test_urem_int_min:530; CHECK-AVX2:       # %bb.0:531; CHECK-AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [2147483647,2147483647,2147483647,2147483647]532; CHECK-AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0533; CHECK-AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1534; CHECK-AVX2-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0535; CHECK-AVX2-NEXT:    vpsrld $31, %xmm0, %xmm0536; CHECK-AVX2-NEXT:    retq537;538; CHECK-AVX512VL-LABEL: test_urem_int_min:539; CHECK-AVX512VL:       # %bb.0:540; CHECK-AVX512VL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm0541; CHECK-AVX512VL-NEXT:    vpxor %xmm1, %xmm1, %xmm1542; CHECK-AVX512VL-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0543; CHECK-AVX512VL-NEXT:    vpsrld $31, %xmm0, %xmm0544; CHECK-AVX512VL-NEXT:    retq545  %urem = urem <4 x i32> %X, <i32 2147483648, i32 2147483648, i32 2147483648, i32 2147483648>546  %cmp = icmp eq <4 x i32> %urem, <i32 0, i32 0, i32 0, i32 0>547  %ret = zext <4 x i1> %cmp to <4 x i32>548  ret <4 x i32> %ret549}550 551; We could lower remainder of division by all-ones much better elsewhere.552define <4 x i32> @test_urem_allones(<4 x i32> %X) nounwind {553; CHECK-SSE2-LABEL: test_urem_allones:554; CHECK-SSE2:       # %bb.0:555; CHECK-SSE2-NEXT:    pxor %xmm1, %xmm1556; CHECK-SSE2-NEXT:    psubd %xmm0, %xmm1557; CHECK-SSE2-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1558; CHECK-SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1559; CHECK-SSE2-NEXT:    pandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1560; CHECK-SSE2-NEXT:    movdqa %xmm1, %xmm0561; CHECK-SSE2-NEXT:    retq562;563; CHECK-SSE41-LABEL: test_urem_allones:564; CHECK-SSE41:       # %bb.0:565; CHECK-SSE41-NEXT:    pxor %xmm1, %xmm1566; CHECK-SSE41-NEXT:    psubd %xmm0, %xmm1567; CHECK-SSE41-NEXT:    pmovsxbd {{.*#+}} xmm0 = [1,1,1,1]568; CHECK-SSE41-NEXT:    pminud %xmm1, %xmm0569; CHECK-SSE41-NEXT:    pcmpeqd %xmm1, %xmm0570; CHECK-SSE41-NEXT:    psrld $31, %xmm0571; CHECK-SSE41-NEXT:    retq572;573; CHECK-AVX1-LABEL: test_urem_allones:574; CHECK-AVX1:       # %bb.0:575; CHECK-AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1576; CHECK-AVX1-NEXT:    vpsubd %xmm0, %xmm1, %xmm0577; CHECK-AVX1-NEXT:    vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1578; CHECK-AVX1-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0579; CHECK-AVX1-NEXT:    vpsrld $31, %xmm0, %xmm0580; CHECK-AVX1-NEXT:    retq581;582; CHECK-AVX2-LABEL: test_urem_allones:583; CHECK-AVX2:       # %bb.0:584; CHECK-AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1585; CHECK-AVX2-NEXT:    vpsubd %xmm0, %xmm1, %xmm0586; CHECK-AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [1,1,1,1]587; CHECK-AVX2-NEXT:    vpminud %xmm1, %xmm0, %xmm1588; CHECK-AVX2-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0589; CHECK-AVX2-NEXT:    vpsrld $31, %xmm0, %xmm0590; CHECK-AVX2-NEXT:    retq591;592; CHECK-AVX512VL-LABEL: test_urem_allones:593; CHECK-AVX512VL:       # %bb.0:594; CHECK-AVX512VL-NEXT:    vpxor %xmm1, %xmm1, %xmm1595; CHECK-AVX512VL-NEXT:    vpsubd %xmm0, %xmm1, %xmm0596; CHECK-AVX512VL-NEXT:    vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm1597; CHECK-AVX512VL-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0598; CHECK-AVX512VL-NEXT:    vpsrld $31, %xmm0, %xmm0599; CHECK-AVX512VL-NEXT:    retq600  %urem = urem <4 x i32> %X, <i32 4294967295, i32 4294967295, i32 4294967295, i32 4294967295>601  %cmp = icmp eq <4 x i32> %urem, <i32 0, i32 0, i32 0, i32 0>602  %ret = zext <4 x i1> %cmp to <4 x i32>603  ret <4 x i32> %ret604}605