brintos

brintos / llvm-project-archived public Read only

0
0
Text · 18.6 KiB · cb8d867 Raw
442 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 | FileCheck %s --check-prefixes=CHECK-ALL,CHECK-SSE,CHECK-NOSSSE3,CHECK-SSE-X863; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu | FileCheck %s --check-prefixes=CHECK-ALL,CHECK-SSE,CHECK-SSE-X64,CHECK-NOSSSE34; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+ssse3 | FileCheck %s --check-prefixes=CHECK-ALL,CHECK-SSE,CHECK-SSE-X64,CHECK-SSSE35; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+avx2 | FileCheck %s --check-prefixes=CHECK-ALL,CHECK-AVX6 7declare <8 x i16> @llvm.bswap.v8i16(<8 x i16>)8declare <4 x i32> @llvm.bswap.v4i32(<4 x i32>)9declare <2 x i64> @llvm.bswap.v2i64(<2 x i64>)10 11define <8 x i16> @test1(<8 x i16> %v) {12; CHECK-NOSSSE3-LABEL: test1:13; CHECK-NOSSSE3:       # %bb.0: # %entry14; CHECK-NOSSSE3-NEXT:    movdqa %xmm0, %xmm115; CHECK-NOSSSE3-NEXT:    psrlw $8, %xmm116; CHECK-NOSSSE3-NEXT:    psllw $8, %xmm017; CHECK-NOSSSE3-NEXT:    por %xmm1, %xmm018; CHECK-NOSSSE3-NEXT:    ret{{[l|q]}}19;20; CHECK-SSSE3-LABEL: test1:21; CHECK-SSSE3:       # %bb.0: # %entry22; CHECK-SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14]23; CHECK-SSSE3-NEXT:    retq24;25; CHECK-AVX-LABEL: test1:26; CHECK-AVX:       # %bb.0: # %entry27; CHECK-AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14]28; CHECK-AVX-NEXT:    retq29entry:30  %r = call <8 x i16> @llvm.bswap.v8i16(<8 x i16> %v)31  ret <8 x i16> %r32}33 34define <4 x i32> @test2(<4 x i32> %v) {35; CHECK-NOSSSE3-LABEL: test2:36; CHECK-NOSSSE3:       # %bb.0:37; CHECK-NOSSSE3-NEXT:    pxor %xmm1, %xmm138; CHECK-NOSSSE3-NEXT:    movdqa %xmm0, %xmm239; CHECK-NOSSSE3-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm1[8],xmm2[9],xmm1[9],xmm2[10],xmm1[10],xmm2[11],xmm1[11],xmm2[12],xmm1[12],xmm2[13],xmm1[13],xmm2[14],xmm1[14],xmm2[15],xmm1[15]40; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[3,2,1,0,4,5,6,7]41; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,7,6,5,4]42; CHECK-NOSSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]43; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]44; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,5,4]45; CHECK-NOSSSE3-NEXT:    packuswb %xmm2, %xmm046; CHECK-NOSSSE3-NEXT:    ret{{[l|q]}}47;48; CHECK-SSSE3-LABEL: test2:49; CHECK-SSSE3:       # %bb.0:50; CHECK-SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12]51; CHECK-SSSE3-NEXT:    retq52;53; CHECK-AVX-LABEL: test2:54; CHECK-AVX:       # %bb.0:55; CHECK-AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12]56; CHECK-AVX-NEXT:    retq57  %r = call <4 x i32> @llvm.bswap.v4i32(<4 x i32> %v)58  ret <4 x i32> %r59}60 61define <4 x i32> @or_bswap(<4 x i32> %x, <4 x i32> %y, ptr %p1, ptr %p2) {62; CHECK-NOSSSE3-LABEL: or_bswap:63; CHECK-NOSSSE3:       # %bb.0:64; CHECK-NOSSSE3-NEXT:    por %xmm1, %xmm065; CHECK-NOSSSE3-NEXT:    pxor %xmm1, %xmm166; CHECK-NOSSSE3-NEXT:    movdqa %xmm0, %xmm267; CHECK-NOSSSE3-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm1[8],xmm2[9],xmm1[9],xmm2[10],xmm1[10],xmm2[11],xmm1[11],xmm2[12],xmm1[12],xmm2[13],xmm1[13],xmm2[14],xmm1[14],xmm2[15],xmm1[15]68; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[3,2,1,0,4,5,6,7]69; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,7,6,5,4]70; CHECK-NOSSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]71; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]72; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,5,4]73; CHECK-NOSSSE3-NEXT:    packuswb %xmm2, %xmm074; CHECK-NOSSSE3-NEXT:    ret{{[l|q]}}75;76; CHECK-SSSE3-LABEL: or_bswap:77; CHECK-SSSE3:       # %bb.0:78; CHECK-SSSE3-NEXT:    por %xmm1, %xmm079; CHECK-SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12]80; CHECK-SSSE3-NEXT:    retq81;82; CHECK-AVX-LABEL: or_bswap:83; CHECK-AVX:       # %bb.0:84; CHECK-AVX-NEXT:    vpor %xmm1, %xmm0, %xmm085; CHECK-AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12]86; CHECK-AVX-NEXT:    retq87  %xt = call <4 x i32> @llvm.bswap.v4i32(<4 x i32> %x)88  %yt = call <4 x i32> @llvm.bswap.v4i32(<4 x i32> %y)89  %r = or <4 x i32> %xt, %yt90  ret <4 x i32> %r91}92 93define <2 x i64> @test3(<2 x i64> %v) {94; CHECK-NOSSSE3-LABEL: test3:95; CHECK-NOSSSE3:       # %bb.0: # %entry96; CHECK-NOSSSE3-NEXT:    pxor %xmm1, %xmm197; CHECK-NOSSSE3-NEXT:    movdqa %xmm0, %xmm298; CHECK-NOSSSE3-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm1[8],xmm2[9],xmm1[9],xmm2[10],xmm1[10],xmm2[11],xmm1[11],xmm2[12],xmm1[12],xmm2[13],xmm1[13],xmm2[14],xmm1[14],xmm2[15],xmm1[15]99; CHECK-NOSSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[2,3,0,1]100; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[3,2,1,0,4,5,6,7]101; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,7,6,5,4]102; CHECK-NOSSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]103; CHECK-NOSSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]104; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]105; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,5,4]106; CHECK-NOSSSE3-NEXT:    packuswb %xmm2, %xmm0107; CHECK-NOSSSE3-NEXT:    ret{{[l|q]}}108;109; CHECK-SSSE3-LABEL: test3:110; CHECK-SSSE3:       # %bb.0: # %entry111; CHECK-SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8]112; CHECK-SSSE3-NEXT:    retq113;114; CHECK-AVX-LABEL: test3:115; CHECK-AVX:       # %bb.0: # %entry116; CHECK-AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8]117; CHECK-AVX-NEXT:    retq118entry:119  %r = call <2 x i64> @llvm.bswap.v2i64(<2 x i64> %v)120  ret <2 x i64> %r121}122 123declare <16 x i16> @llvm.bswap.v16i16(<16 x i16>)124declare <8 x i32> @llvm.bswap.v8i32(<8 x i32>)125declare <4 x i64> @llvm.bswap.v4i64(<4 x i64>)126 127define <16 x i16> @test4(<16 x i16> %v) {128; CHECK-NOSSSE3-LABEL: test4:129; CHECK-NOSSSE3:       # %bb.0: # %entry130; CHECK-NOSSSE3-NEXT:    movdqa %xmm0, %xmm2131; CHECK-NOSSSE3-NEXT:    psrlw $8, %xmm2132; CHECK-NOSSSE3-NEXT:    psllw $8, %xmm0133; CHECK-NOSSSE3-NEXT:    por %xmm2, %xmm0134; CHECK-NOSSSE3-NEXT:    movdqa %xmm1, %xmm2135; CHECK-NOSSSE3-NEXT:    psrlw $8, %xmm2136; CHECK-NOSSSE3-NEXT:    psllw $8, %xmm1137; CHECK-NOSSSE3-NEXT:    por %xmm2, %xmm1138; CHECK-NOSSSE3-NEXT:    ret{{[l|q]}}139;140; CHECK-SSSE3-LABEL: test4:141; CHECK-SSSE3:       # %bb.0: # %entry142; CHECK-SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14]143; CHECK-SSSE3-NEXT:    pshufb %xmm2, %xmm0144; CHECK-SSSE3-NEXT:    pshufb %xmm2, %xmm1145; CHECK-SSSE3-NEXT:    retq146;147; CHECK-AVX-LABEL: test4:148; CHECK-AVX:       # %bb.0: # %entry149; CHECK-AVX-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14,17,16,19,18,21,20,23,22,25,24,27,26,29,28,31,30]150; CHECK-AVX-NEXT:    retq151entry:152  %r = call <16 x i16> @llvm.bswap.v16i16(<16 x i16> %v)153  ret <16 x i16> %r154}155 156define <8 x i32> @test5(<8 x i32> %v) {157; CHECK-NOSSSE3-LABEL: test5:158; CHECK-NOSSSE3:       # %bb.0: # %entry159; CHECK-NOSSSE3-NEXT:    pxor %xmm2, %xmm2160; CHECK-NOSSSE3-NEXT:    movdqa %xmm0, %xmm3161; CHECK-NOSSSE3-NEXT:    punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm2[8],xmm3[9],xmm2[9],xmm3[10],xmm2[10],xmm3[11],xmm2[11],xmm3[12],xmm2[12],xmm3[13],xmm2[13],xmm3[14],xmm2[14],xmm3[15],xmm2[15]162; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[3,2,1,0,4,5,6,7]163; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,7,6,5,4]164; CHECK-NOSSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]165; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]166; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,5,4]167; CHECK-NOSSSE3-NEXT:    packuswb %xmm3, %xmm0168; CHECK-NOSSSE3-NEXT:    movdqa %xmm1, %xmm3169; CHECK-NOSSSE3-NEXT:    punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm2[8],xmm3[9],xmm2[9],xmm3[10],xmm2[10],xmm3[11],xmm2[11],xmm3[12],xmm2[12],xmm3[13],xmm2[13],xmm3[14],xmm2[14],xmm3[15],xmm2[15]170; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[3,2,1,0,4,5,6,7]171; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,7,6,5,4]172; CHECK-NOSSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]173; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[3,2,1,0,4,5,6,7]174; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,6,5,4]175; CHECK-NOSSSE3-NEXT:    packuswb %xmm3, %xmm1176; CHECK-NOSSSE3-NEXT:    ret{{[l|q]}}177;178; CHECK-SSSE3-LABEL: test5:179; CHECK-SSSE3:       # %bb.0: # %entry180; CHECK-SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12]181; CHECK-SSSE3-NEXT:    pshufb %xmm2, %xmm0182; CHECK-SSSE3-NEXT:    pshufb %xmm2, %xmm1183; CHECK-SSSE3-NEXT:    retq184;185; CHECK-AVX-LABEL: test5:186; CHECK-AVX:       # %bb.0: # %entry187; CHECK-AVX-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12,19,18,17,16,23,22,21,20,27,26,25,24,31,30,29,28]188; CHECK-AVX-NEXT:    retq189entry:190  %r = call <8 x i32> @llvm.bswap.v8i32(<8 x i32> %v)191  ret <8 x i32> %r192}193 194define <4 x i64> @test6(<4 x i64> %v) {195; CHECK-NOSSSE3-LABEL: test6:196; CHECK-NOSSSE3:       # %bb.0: # %entry197; CHECK-NOSSSE3-NEXT:    pxor %xmm2, %xmm2198; CHECK-NOSSSE3-NEXT:    movdqa %xmm0, %xmm3199; CHECK-NOSSSE3-NEXT:    punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm2[8],xmm3[9],xmm2[9],xmm3[10],xmm2[10],xmm3[11],xmm2[11],xmm3[12],xmm2[12],xmm3[13],xmm2[13],xmm3[14],xmm2[14],xmm3[15],xmm2[15]200; CHECK-NOSSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[2,3,0,1]201; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[3,2,1,0,4,5,6,7]202; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,7,6,5,4]203; CHECK-NOSSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]204; CHECK-NOSSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]205; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]206; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,5,4]207; CHECK-NOSSSE3-NEXT:    packuswb %xmm3, %xmm0208; CHECK-NOSSSE3-NEXT:    movdqa %xmm1, %xmm3209; CHECK-NOSSSE3-NEXT:    punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm2[8],xmm3[9],xmm2[9],xmm3[10],xmm2[10],xmm3[11],xmm2[11],xmm3[12],xmm2[12],xmm3[13],xmm2[13],xmm3[14],xmm2[14],xmm3[15],xmm2[15]210; CHECK-NOSSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[2,3,0,1]211; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[3,2,1,0,4,5,6,7]212; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,7,6,5,4]213; CHECK-NOSSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]214; CHECK-NOSSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]215; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[3,2,1,0,4,5,6,7]216; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,6,5,4]217; CHECK-NOSSSE3-NEXT:    packuswb %xmm3, %xmm1218; CHECK-NOSSSE3-NEXT:    ret{{[l|q]}}219;220; CHECK-SSSE3-LABEL: test6:221; CHECK-SSSE3:       # %bb.0: # %entry222; CHECK-SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8]223; CHECK-SSSE3-NEXT:    pshufb %xmm2, %xmm0224; CHECK-SSSE3-NEXT:    pshufb %xmm2, %xmm1225; CHECK-SSSE3-NEXT:    retq226;227; CHECK-AVX-LABEL: test6:228; CHECK-AVX:       # %bb.0: # %entry229; CHECK-AVX-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8,23,22,21,20,19,18,17,16,31,30,29,28,27,26,25,24]230; CHECK-AVX-NEXT:    retq231entry:232  %r = call <4 x i64> @llvm.bswap.v4i64(<4 x i64> %v)233  ret <4 x i64> %r234}235 236declare <4 x i16> @llvm.bswap.v4i16(<4 x i16>)237 238define <4 x i16> @test7(<4 x i16> %v) {239; CHECK-NOSSSE3-LABEL: test7:240; CHECK-NOSSSE3:       # %bb.0: # %entry241; CHECK-NOSSSE3-NEXT:    movdqa %xmm0, %xmm1242; CHECK-NOSSSE3-NEXT:    psrlw $8, %xmm1243; CHECK-NOSSSE3-NEXT:    psllw $8, %xmm0244; CHECK-NOSSSE3-NEXT:    por %xmm1, %xmm0245; CHECK-NOSSSE3-NEXT:    ret{{[l|q]}}246;247; CHECK-SSSE3-LABEL: test7:248; CHECK-SSSE3:       # %bb.0: # %entry249; CHECK-SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14]250; CHECK-SSSE3-NEXT:    retq251;252; CHECK-AVX-LABEL: test7:253; CHECK-AVX:       # %bb.0: # %entry254; CHECK-AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14]255; CHECK-AVX-NEXT:    retq256entry:257  %r = call <4 x i16> @llvm.bswap.v4i16(<4 x i16> %v)258  ret <4 x i16> %r259}260 261;262; Double BSWAP -> Identity263;264 265define <8 x i16> @identity_v8i16(<8 x i16> %v) {266; CHECK-ALL-LABEL: identity_v8i16:267; CHECK-ALL:       # %bb.0: # %entry268; CHECK-ALL-NEXT:    ret{{[l|q]}}269entry:270  %bs1 = call <8 x i16> @llvm.bswap.v8i16(<8 x i16> %v)271  %bs2 = call <8 x i16> @llvm.bswap.v8i16(<8 x i16> %bs1)272  ret <8 x i16> %bs2273}274 275define <4 x i32> @identity_v4i32(<4 x i32> %v) {276; CHECK-ALL-LABEL: identity_v4i32:277; CHECK-ALL:       # %bb.0: # %entry278; CHECK-ALL-NEXT:    ret{{[l|q]}}279entry:280  %bs1 = call <4 x i32> @llvm.bswap.v4i32(<4 x i32> %v)281  %bs2 = call <4 x i32> @llvm.bswap.v4i32(<4 x i32> %bs1)282  ret <4 x i32> %bs2283}284 285define <2 x i64> @identity_v2i64(<2 x i64> %v) {286; CHECK-ALL-LABEL: identity_v2i64:287; CHECK-ALL:       # %bb.0: # %entry288; CHECK-ALL-NEXT:    ret{{[l|q]}}289entry:290  %bs1 = call <2 x i64> @llvm.bswap.v2i64(<2 x i64> %v)291  %bs2 = call <2 x i64> @llvm.bswap.v2i64(<2 x i64> %bs1)292  ret <2 x i64> %bs2293}294 295define <16 x i16> @identity_v16i16(<16 x i16> %v) {296; CHECK-ALL-LABEL: identity_v16i16:297; CHECK-ALL:       # %bb.0: # %entry298; CHECK-ALL-NEXT:    ret{{[l|q]}}299entry:300  %bs1 = call <16 x i16> @llvm.bswap.v16i16(<16 x i16> %v)301  %bs2 = call <16 x i16> @llvm.bswap.v16i16(<16 x i16> %bs1)302  ret <16 x i16> %bs2303}304 305define <8 x i32> @identity_v8i32(<8 x i32> %v) {306; CHECK-ALL-LABEL: identity_v8i32:307; CHECK-ALL:       # %bb.0: # %entry308; CHECK-ALL-NEXT:    ret{{[l|q]}}309entry:310  %bs1 = call <8 x i32> @llvm.bswap.v8i32(<8 x i32> %v)311  %bs2 = call <8 x i32> @llvm.bswap.v8i32(<8 x i32> %bs1)312  ret <8 x i32> %bs2313}314 315define <4 x i64> @identity_v4i64(<4 x i64> %v) {316; CHECK-ALL-LABEL: identity_v4i64:317; CHECK-ALL:       # %bb.0: # %entry318; CHECK-ALL-NEXT:    ret{{[l|q]}}319entry:320  %bs1 = call <4 x i64> @llvm.bswap.v4i64(<4 x i64> %v)321  %bs2 = call <4 x i64> @llvm.bswap.v4i64(<4 x i64> %bs1)322  ret <4 x i64> %bs2323}324 325define <4 x i16> @identity_v4i16(<4 x i16> %v) {326; CHECK-ALL-LABEL: identity_v4i16:327; CHECK-ALL:       # %bb.0: # %entry328; CHECK-ALL-NEXT:    ret{{[l|q]}}329entry:330  %bs1 = call <4 x i16> @llvm.bswap.v4i16(<4 x i16> %v)331  %bs2 = call <4 x i16> @llvm.bswap.v4i16(<4 x i16> %bs1)332  ret <4 x i16> %bs2333}334 335;336; Constant Folding337;338 339define <8 x i16> @fold_v8i16() {340; CHECK-SSE-LABEL: fold_v8i16:341; CHECK-SSE:       # %bb.0: # %entry342; CHECK-SSE-NEXT:    movaps {{.*#+}} xmm0 = [0,256,65535,512,65023,1024,64511,1536]343; CHECK-SSE-NEXT:    ret{{[l|q]}}344;345; CHECK-AVX-LABEL: fold_v8i16:346; CHECK-AVX:       # %bb.0: # %entry347; CHECK-AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [0,256,65535,512,65023,1024,64511,1536]348; CHECK-AVX-NEXT:    retq349entry:350  %r = call <8 x i16> @llvm.bswap.v8i16(<8 x i16> <i16 0, i16 1, i16 -1, i16 2, i16 -3, i16 4, i16 -5, i16 6>)351  ret <8 x i16> %r352}353 354define <4 x i32> @fold_v4i32() {355; CHECK-SSE-LABEL: fold_v4i32:356; CHECK-SSE:       # %bb.0: # %entry357; CHECK-SSE-NEXT:    movaps {{.*#+}} xmm0 = [0,4294967295,33554432,4261412863]358; CHECK-SSE-NEXT:    ret{{[l|q]}}359;360; CHECK-AVX-LABEL: fold_v4i32:361; CHECK-AVX:       # %bb.0: # %entry362; CHECK-AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [0,4294967295,33554432,4261412863]363; CHECK-AVX-NEXT:    retq364entry:365  %r = call <4 x i32> @llvm.bswap.v4i32(<4 x i32> <i32 0, i32 -1, i32 2, i32 -3>)366  ret <4 x i32> %r367}368 369define <2 x i64> @fold_v2i64() {370; CHECK-SSE-X86-LABEL: fold_v2i64:371; CHECK-SSE-X86:       # %bb.0: # %entry372; CHECK-SSE-X86-NEXT:    movaps {{.*#+}} xmm0 = [0,4278190080,4294967295,4294967295]373; CHECK-SSE-X86-NEXT:    retl374;375; CHECK-SSE-X64-LABEL: fold_v2i64:376; CHECK-SSE-X64:       # %bb.0: # %entry377; CHECK-SSE-X64-NEXT:    movaps {{.*#+}} xmm0 = [18374686479671623680,18446744073709551615]378; CHECK-SSE-X64-NEXT:    retq379;380; CHECK-AVX-LABEL: fold_v2i64:381; CHECK-AVX:       # %bb.0: # %entry382; CHECK-AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [18374686479671623680,18446744073709551615]383; CHECK-AVX-NEXT:    retq384entry:385  %r = call <2 x i64> @llvm.bswap.v2i64(<2 x i64> <i64 255, i64 -1>)386  ret <2 x i64> %r387}388 389define <16 x i16> @fold_v16i16() {390; CHECK-SSE-LABEL: fold_v16i16:391; CHECK-SSE:       # %bb.0: # %entry392; CHECK-SSE-NEXT:    movaps {{.*#+}} xmm0 = [0,256,65535,512,65023,1024,64511,1536]393; CHECK-SSE-NEXT:    movaps {{.*#+}} xmm1 = [63999,2048,63487,2560,62975,3072,62463,3584]394; CHECK-SSE-NEXT:    ret{{[l|q]}}395;396; CHECK-AVX-LABEL: fold_v16i16:397; CHECK-AVX:       # %bb.0: # %entry398; CHECK-AVX-NEXT:    vmovaps {{.*#+}} ymm0 = [0,256,65535,512,65023,1024,64511,1536,63999,2048,63487,2560,62975,3072,62463,3584]399; CHECK-AVX-NEXT:    retq400entry:401  %r = call <16 x i16> @llvm.bswap.v16i16(<16 x i16> <i16 0, i16 1, i16 -1, i16 2, i16 -3, i16 4, i16 -5, i16 6, i16 -7, i16 8, i16 -9, i16 10, i16 -11, i16 12, i16 -13, i16 14>)402  ret <16 x i16> %r403}404 405define <8 x i32> @fold_v8i32() {406; CHECK-SSE-LABEL: fold_v8i32:407; CHECK-SSE:       # %bb.0: # %entry408; CHECK-SSE-NEXT:    movaps {{.*#+}} xmm0 = [0,16777216,4294967295,33554432]409; CHECK-SSE-NEXT:    movaps {{.*#+}} xmm1 = [4261412863,67108864,4227858431,100663296]410; CHECK-SSE-NEXT:    ret{{[l|q]}}411;412; CHECK-AVX-LABEL: fold_v8i32:413; CHECK-AVX:       # %bb.0: # %entry414; CHECK-AVX-NEXT:    vmovaps {{.*#+}} ymm0 = [0,16777216,4294967295,33554432,4261412863,67108864,4227858431,100663296]415; CHECK-AVX-NEXT:    retq416entry:417  %r = call <8 x i32> @llvm.bswap.v8i32(<8 x i32> <i32 0, i32 1, i32 -1, i32 2, i32 -3, i32 4, i32 -5, i32 6>)418  ret <8 x i32> %r419}420 421define <4 x i64> @fold_v4i64() {422; CHECK-SSE-X86-LABEL: fold_v4i64:423; CHECK-SSE-X86:       # %bb.0: # %entry424; CHECK-SSE-X86-NEXT:    movaps {{.*#+}} xmm0 = [0,4278190080,4294967295,4294967295]425; CHECK-SSE-X86-NEXT:    movaps {{.*#+}} xmm1 = [0,4294901760,0,16776960]426; CHECK-SSE-X86-NEXT:    retl427;428; CHECK-SSE-X64-LABEL: fold_v4i64:429; CHECK-SSE-X64:       # %bb.0: # %entry430; CHECK-SSE-X64-NEXT:    movaps {{.*#+}} xmm0 = [18374686479671623680,18446744073709551615]431; CHECK-SSE-X64-NEXT:    movaps {{.*#+}} xmm1 = [18446462598732840960,72056494526300160]432; CHECK-SSE-X64-NEXT:    retq433;434; CHECK-AVX-LABEL: fold_v4i64:435; CHECK-AVX:       # %bb.0: # %entry436; CHECK-AVX-NEXT:    vmovaps {{.*#+}} ymm0 = [18374686479671623680,18446744073709551615,18446462598732840960,72056494526300160]437; CHECK-AVX-NEXT:    retq438entry:439  %r = call <4 x i64> @llvm.bswap.v4i64(<4 x i64> <i64 255, i64 -1, i64 65535, i64 16776960>)440  ret <4 x i64> %r441}442