brintos

brintos / llvm-project-archived public Read only

0
0
Text · 58.6 KiB · d92e1a1 Raw
1595 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown | FileCheck %s --check-prefixes=CHECK,X863; RUN: llc < %s -mtriple=x86_64-unknown | FileCheck %s --check-prefixes=CHECK,X644; RUN: llc < %s -mtriple=i686-unknown -mattr=+xop | FileCheck %s --check-prefixes=CHECK,X86XOP5; RUN: llc < %s -mtriple=i686-unknown -mattr=+avx512bw,+avx512vl,+gfni | FileCheck %s --check-prefixes=CHECK,GFNI,X86GFNI6; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx512bw,+avx512vl,+gfni | FileCheck %s --check-prefixes=CHECK,GFNI,X64GFNI7 8; These tests just check that the plumbing is in place for @llvm.bitreverse. The9; actual output is massive at the moment as llvm.bitreverse is not yet legal.10 11declare <2 x i16> @llvm.bitreverse.v2i16(<2 x i16>) readnone12 13define <2 x i16> @test_bitreverse_v2i16(<2 x i16> %a) nounwind {14; X86-LABEL: test_bitreverse_v2i16:15; X86:       # %bb.0:16; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx17; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax18; X86-NEXT:    rolw $8, %ax19; X86-NEXT:    movl %eax, %edx20; X86-NEXT:    andl $3855, %edx # imm = 0xF0F21; X86-NEXT:    shll $4, %edx22; X86-NEXT:    shrl $4, %eax23; X86-NEXT:    andl $3855, %eax # imm = 0xF0F24; X86-NEXT:    orl %edx, %eax25; X86-NEXT:    movl %eax, %edx26; X86-NEXT:    andl $13107, %edx # imm = 0x333327; X86-NEXT:    shrl $2, %eax28; X86-NEXT:    andl $13107, %eax # imm = 0x333329; X86-NEXT:    leal (%eax,%edx,4), %eax30; X86-NEXT:    movl %eax, %edx31; X86-NEXT:    andl $21845, %edx # imm = 0x555532; X86-NEXT:    shrl %eax33; X86-NEXT:    andl $21845, %eax # imm = 0x555534; X86-NEXT:    leal (%eax,%edx,2), %eax35; X86-NEXT:    rolw $8, %cx36; X86-NEXT:    movl %ecx, %edx37; X86-NEXT:    andl $3855, %edx # imm = 0xF0F38; X86-NEXT:    shll $4, %edx39; X86-NEXT:    shrl $4, %ecx40; X86-NEXT:    andl $3855, %ecx # imm = 0xF0F41; X86-NEXT:    orl %edx, %ecx42; X86-NEXT:    movl %ecx, %edx43; X86-NEXT:    andl $13107, %edx # imm = 0x333344; X86-NEXT:    shrl $2, %ecx45; X86-NEXT:    andl $13107, %ecx # imm = 0x333346; X86-NEXT:    leal (%ecx,%edx,4), %ecx47; X86-NEXT:    movl %ecx, %edx48; X86-NEXT:    andl $21845, %edx # imm = 0x555549; X86-NEXT:    shrl %ecx50; X86-NEXT:    andl $21845, %ecx # imm = 0x555551; X86-NEXT:    leal (%ecx,%edx,2), %edx52; X86-NEXT:    # kill: def $ax killed $ax killed $eax53; X86-NEXT:    # kill: def $dx killed $dx killed $edx54; X86-NEXT:    retl55;56; X64-LABEL: test_bitreverse_v2i16:57; X64:       # %bb.0:58; X64-NEXT:    movdqa %xmm0, %xmm159; X64-NEXT:    psrlw $8, %xmm160; X64-NEXT:    psllw $8, %xmm061; X64-NEXT:    por %xmm1, %xmm062; X64-NEXT:    movdqa %xmm0, %xmm163; X64-NEXT:    psrlw $4, %xmm164; X64-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]65; X64-NEXT:    pand %xmm2, %xmm166; X64-NEXT:    pand %xmm2, %xmm067; X64-NEXT:    psllw $4, %xmm068; X64-NEXT:    por %xmm1, %xmm069; X64-NEXT:    movdqa %xmm0, %xmm170; X64-NEXT:    psrlw $2, %xmm171; X64-NEXT:    movdqa {{.*#+}} xmm2 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]72; X64-NEXT:    pand %xmm2, %xmm173; X64-NEXT:    pand %xmm2, %xmm074; X64-NEXT:    psllw $2, %xmm075; X64-NEXT:    por %xmm1, %xmm076; X64-NEXT:    movdqa %xmm0, %xmm177; X64-NEXT:    psrlw $1, %xmm178; X64-NEXT:    movdqa {{.*#+}} xmm2 = [85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85]79; X64-NEXT:    pand %xmm2, %xmm180; X64-NEXT:    pand %xmm2, %xmm081; X64-NEXT:    paddb %xmm0, %xmm082; X64-NEXT:    por %xmm1, %xmm083; X64-NEXT:    retq84;85; X86XOP-LABEL: test_bitreverse_v2i16:86; X86XOP:       # %bb.0:87; X86XOP-NEXT:    vpperm {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm0, %xmm088; X86XOP-NEXT:    retl89;90; X86GFNI-LABEL: test_bitreverse_v2i16:91; X86GFNI:       # %bb.0:92; X86GFNI-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14]93; X86GFNI-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}{1to2}, %xmm0, %xmm094; X86GFNI-NEXT:    retl95;96; X64GFNI-LABEL: test_bitreverse_v2i16:97; X64GFNI:       # %bb.0:98; X64GFNI-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14]99; X64GFNI-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm0100; X64GFNI-NEXT:    retq101  %b = call <2 x i16> @llvm.bitreverse.v2i16(<2 x i16> %a)102  ret <2 x i16> %b103}104 105declare i64 @llvm.bitreverse.i64(i64) readnone106 107define i64 @test_bitreverse_i64(i64 %a) nounwind {108; X86-LABEL: test_bitreverse_i64:109; X86:       # %bb.0:110; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx111; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax112; X86-NEXT:    bswapl %eax113; X86-NEXT:    movl %eax, %edx114; X86-NEXT:    andl $252645135, %edx # imm = 0xF0F0F0F115; X86-NEXT:    shll $4, %edx116; X86-NEXT:    shrl $4, %eax117; X86-NEXT:    andl $252645135, %eax # imm = 0xF0F0F0F118; X86-NEXT:    orl %edx, %eax119; X86-NEXT:    movl %eax, %edx120; X86-NEXT:    andl $858993459, %edx # imm = 0x33333333121; X86-NEXT:    shrl $2, %eax122; X86-NEXT:    andl $858993459, %eax # imm = 0x33333333123; X86-NEXT:    leal (%eax,%edx,4), %eax124; X86-NEXT:    movl %eax, %edx125; X86-NEXT:    andl $1431655765, %edx # imm = 0x55555555126; X86-NEXT:    shrl %eax127; X86-NEXT:    andl $1431655765, %eax # imm = 0x55555555128; X86-NEXT:    leal (%eax,%edx,2), %eax129; X86-NEXT:    bswapl %ecx130; X86-NEXT:    movl %ecx, %edx131; X86-NEXT:    andl $252645135, %edx # imm = 0xF0F0F0F132; X86-NEXT:    shll $4, %edx133; X86-NEXT:    shrl $4, %ecx134; X86-NEXT:    andl $252645135, %ecx # imm = 0xF0F0F0F135; X86-NEXT:    orl %edx, %ecx136; X86-NEXT:    movl %ecx, %edx137; X86-NEXT:    andl $858993459, %edx # imm = 0x33333333138; X86-NEXT:    shrl $2, %ecx139; X86-NEXT:    andl $858993459, %ecx # imm = 0x33333333140; X86-NEXT:    leal (%ecx,%edx,4), %ecx141; X86-NEXT:    movl %ecx, %edx142; X86-NEXT:    andl $1431655765, %edx # imm = 0x55555555143; X86-NEXT:    shrl %ecx144; X86-NEXT:    andl $1431655765, %ecx # imm = 0x55555555145; X86-NEXT:    leal (%ecx,%edx,2), %edx146; X86-NEXT:    retl147;148; X64-LABEL: test_bitreverse_i64:149; X64:       # %bb.0:150; X64-NEXT:    bswapq %rdi151; X64-NEXT:    movq %rdi, %rax152; X64-NEXT:    shrq $4, %rax153; X64-NEXT:    movabsq $1085102592571150095, %rcx # imm = 0xF0F0F0F0F0F0F0F154; X64-NEXT:    andq %rcx, %rax155; X64-NEXT:    andq %rcx, %rdi156; X64-NEXT:    shlq $4, %rdi157; X64-NEXT:    orq %rax, %rdi158; X64-NEXT:    movabsq $3689348814741910323, %rax # imm = 0x3333333333333333159; X64-NEXT:    movq %rdi, %rcx160; X64-NEXT:    andq %rax, %rcx161; X64-NEXT:    shrq $2, %rdi162; X64-NEXT:    andq %rax, %rdi163; X64-NEXT:    leaq (%rdi,%rcx,4), %rax164; X64-NEXT:    movabsq $6148914691236517205, %rcx # imm = 0x5555555555555555165; X64-NEXT:    movq %rax, %rdx166; X64-NEXT:    andq %rcx, %rdx167; X64-NEXT:    shrq %rax168; X64-NEXT:    andq %rcx, %rax169; X64-NEXT:    leaq (%rax,%rdx,2), %rax170; X64-NEXT:    retq171;172; X86XOP-LABEL: test_bitreverse_i64:173; X86XOP:       # %bb.0:174; X86XOP-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero175; X86XOP-NEXT:    vpperm {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm0, %xmm0176; X86XOP-NEXT:    vmovd %xmm0, %eax177; X86XOP-NEXT:    vpextrd $1, %xmm0, %edx178; X86XOP-NEXT:    retl179;180; X86GFNI-LABEL: test_bitreverse_i64:181; X86GFNI:       # %bb.0:182; X86GFNI-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero183; X86GFNI-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}{1to2}, %xmm0, %xmm0184; X86GFNI-NEXT:    vpextrd $1, %xmm0, %eax185; X86GFNI-NEXT:    bswapl %eax186; X86GFNI-NEXT:    vmovd %xmm0, %edx187; X86GFNI-NEXT:    bswapl %edx188; X86GFNI-NEXT:    retl189;190; X64GFNI-LABEL: test_bitreverse_i64:191; X64GFNI:       # %bb.0:192; X64GFNI-NEXT:    vmovq %rdi, %xmm0193; X64GFNI-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm0194; X64GFNI-NEXT:    vmovq %xmm0, %rax195; X64GFNI-NEXT:    bswapq %rax196; X64GFNI-NEXT:    retq197  %b = call i64 @llvm.bitreverse.i64(i64 %a)198  ret i64 %b199}200 201declare i32 @llvm.bitreverse.i32(i32) readnone202 203define i32 @test_bitreverse_i32(i32 %a) nounwind {204; X86-LABEL: test_bitreverse_i32:205; X86:       # %bb.0:206; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax207; X86-NEXT:    bswapl %eax208; X86-NEXT:    movl %eax, %ecx209; X86-NEXT:    andl $252645135, %ecx # imm = 0xF0F0F0F210; X86-NEXT:    shll $4, %ecx211; X86-NEXT:    shrl $4, %eax212; X86-NEXT:    andl $252645135, %eax # imm = 0xF0F0F0F213; X86-NEXT:    orl %ecx, %eax214; X86-NEXT:    movl %eax, %ecx215; X86-NEXT:    andl $858993459, %ecx # imm = 0x33333333216; X86-NEXT:    shrl $2, %eax217; X86-NEXT:    andl $858993459, %eax # imm = 0x33333333218; X86-NEXT:    leal (%eax,%ecx,4), %eax219; X86-NEXT:    movl %eax, %ecx220; X86-NEXT:    andl $1431655765, %ecx # imm = 0x55555555221; X86-NEXT:    shrl %eax222; X86-NEXT:    andl $1431655765, %eax # imm = 0x55555555223; X86-NEXT:    leal (%eax,%ecx,2), %eax224; X86-NEXT:    retl225;226; X64-LABEL: test_bitreverse_i32:227; X64:       # %bb.0:228; X64-NEXT:    # kill: def $edi killed $edi def $rdi229; X64-NEXT:    bswapl %edi230; X64-NEXT:    movl %edi, %eax231; X64-NEXT:    andl $252645135, %eax # imm = 0xF0F0F0F232; X64-NEXT:    shll $4, %eax233; X64-NEXT:    shrl $4, %edi234; X64-NEXT:    andl $252645135, %edi # imm = 0xF0F0F0F235; X64-NEXT:    orl %eax, %edi236; X64-NEXT:    movl %edi, %eax237; X64-NEXT:    andl $858993459, %eax # imm = 0x33333333238; X64-NEXT:    shrl $2, %edi239; X64-NEXT:    andl $858993459, %edi # imm = 0x33333333240; X64-NEXT:    leal (%rdi,%rax,4), %eax241; X64-NEXT:    movl %eax, %ecx242; X64-NEXT:    andl $1431655765, %ecx # imm = 0x55555555243; X64-NEXT:    shrl %eax244; X64-NEXT:    andl $1431655765, %eax # imm = 0x55555555245; X64-NEXT:    leal (%rax,%rcx,2), %eax246; X64-NEXT:    retq247;248; X86XOP-LABEL: test_bitreverse_i32:249; X86XOP:       # %bb.0:250; X86XOP-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero251; X86XOP-NEXT:    vpperm {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm0, %xmm0252; X86XOP-NEXT:    vmovd %xmm0, %eax253; X86XOP-NEXT:    retl254;255; X86GFNI-LABEL: test_bitreverse_i32:256; X86GFNI:       # %bb.0:257; X86GFNI-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero258; X86GFNI-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}{1to2}, %xmm0, %xmm0259; X86GFNI-NEXT:    vmovd %xmm0, %eax260; X86GFNI-NEXT:    bswapl %eax261; X86GFNI-NEXT:    retl262;263; X64GFNI-LABEL: test_bitreverse_i32:264; X64GFNI:       # %bb.0:265; X64GFNI-NEXT:    vmovd %edi, %xmm0266; X64GFNI-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm0267; X64GFNI-NEXT:    vmovd %xmm0, %eax268; X64GFNI-NEXT:    bswapl %eax269; X64GFNI-NEXT:    retq270  %b = call i32 @llvm.bitreverse.i32(i32 %a)271  ret i32 %b272}273 274declare i24 @llvm.bitreverse.i24(i24) readnone275 276define i24 @test_bitreverse_i24(i24 %a) nounwind {277; X86-LABEL: test_bitreverse_i24:278; X86:       # %bb.0:279; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax280; X86-NEXT:    bswapl %eax281; X86-NEXT:    movl %eax, %ecx282; X86-NEXT:    andl $252645135, %ecx # imm = 0xF0F0F0F283; X86-NEXT:    shll $4, %ecx284; X86-NEXT:    shrl $4, %eax285; X86-NEXT:    andl $252645135, %eax # imm = 0xF0F0F0F286; X86-NEXT:    orl %ecx, %eax287; X86-NEXT:    movl %eax, %ecx288; X86-NEXT:    andl $858993459, %ecx # imm = 0x33333333289; X86-NEXT:    shrl $2, %eax290; X86-NEXT:    andl $858993459, %eax # imm = 0x33333333291; X86-NEXT:    leal (%eax,%ecx,4), %eax292; X86-NEXT:    movl %eax, %ecx293; X86-NEXT:    andl $1431655680, %ecx # imm = 0x55555500294; X86-NEXT:    shrl %eax295; X86-NEXT:    andl $1431655680, %eax # imm = 0x55555500296; X86-NEXT:    leal (%eax,%ecx,2), %eax297; X86-NEXT:    shrl $8, %eax298; X86-NEXT:    retl299;300; X64-LABEL: test_bitreverse_i24:301; X64:       # %bb.0:302; X64-NEXT:    # kill: def $edi killed $edi def $rdi303; X64-NEXT:    bswapl %edi304; X64-NEXT:    movl %edi, %eax305; X64-NEXT:    andl $252645135, %eax # imm = 0xF0F0F0F306; X64-NEXT:    shll $4, %eax307; X64-NEXT:    shrl $4, %edi308; X64-NEXT:    andl $252645135, %edi # imm = 0xF0F0F0F309; X64-NEXT:    orl %eax, %edi310; X64-NEXT:    movl %edi, %eax311; X64-NEXT:    andl $858993459, %eax # imm = 0x33333333312; X64-NEXT:    shrl $2, %edi313; X64-NEXT:    andl $858993459, %edi # imm = 0x33333333314; X64-NEXT:    leal (%rdi,%rax,4), %eax315; X64-NEXT:    movl %eax, %ecx316; X64-NEXT:    andl $1431655680, %ecx # imm = 0x55555500317; X64-NEXT:    shrl %eax318; X64-NEXT:    andl $1431655680, %eax # imm = 0x55555500319; X64-NEXT:    leal (%rax,%rcx,2), %eax320; X64-NEXT:    shrl $8, %eax321; X64-NEXT:    retq322;323; X86XOP-LABEL: test_bitreverse_i24:324; X86XOP:       # %bb.0:325; X86XOP-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero326; X86XOP-NEXT:    vpperm {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm0, %xmm0327; X86XOP-NEXT:    vmovd %xmm0, %eax328; X86XOP-NEXT:    shrl $8, %eax329; X86XOP-NEXT:    retl330;331; X86GFNI-LABEL: test_bitreverse_i24:332; X86GFNI:       # %bb.0:333; X86GFNI-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero334; X86GFNI-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}{1to2}, %xmm0, %xmm0335; X86GFNI-NEXT:    vmovd %xmm0, %eax336; X86GFNI-NEXT:    bswapl %eax337; X86GFNI-NEXT:    shrl $8, %eax338; X86GFNI-NEXT:    retl339;340; X64GFNI-LABEL: test_bitreverse_i24:341; X64GFNI:       # %bb.0:342; X64GFNI-NEXT:    vmovd %edi, %xmm0343; X64GFNI-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm0344; X64GFNI-NEXT:    vmovd %xmm0, %eax345; X64GFNI-NEXT:    bswapl %eax346; X64GFNI-NEXT:    shrl $8, %eax347; X64GFNI-NEXT:    retq348  %b = call i24 @llvm.bitreverse.i24(i24 %a)349  ret i24 %b350}351 352declare i16 @llvm.bitreverse.i16(i16) readnone353 354define i16 @test_bitreverse_i16(i16 %a) nounwind {355; X86-LABEL: test_bitreverse_i16:356; X86:       # %bb.0:357; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax358; X86-NEXT:    rolw $8, %ax359; X86-NEXT:    movl %eax, %ecx360; X86-NEXT:    andl $3855, %ecx # imm = 0xF0F361; X86-NEXT:    shll $4, %ecx362; X86-NEXT:    shrl $4, %eax363; X86-NEXT:    andl $3855, %eax # imm = 0xF0F364; X86-NEXT:    orl %ecx, %eax365; X86-NEXT:    movl %eax, %ecx366; X86-NEXT:    andl $13107, %ecx # imm = 0x3333367; X86-NEXT:    shrl $2, %eax368; X86-NEXT:    andl $13107, %eax # imm = 0x3333369; X86-NEXT:    leal (%eax,%ecx,4), %eax370; X86-NEXT:    movl %eax, %ecx371; X86-NEXT:    andl $21845, %ecx # imm = 0x5555372; X86-NEXT:    shrl %eax373; X86-NEXT:    andl $21845, %eax # imm = 0x5555374; X86-NEXT:    leal (%eax,%ecx,2), %eax375; X86-NEXT:    # kill: def $ax killed $ax killed $eax376; X86-NEXT:    retl377;378; X64-LABEL: test_bitreverse_i16:379; X64:       # %bb.0:380; X64-NEXT:    # kill: def $edi killed $edi def $rdi381; X64-NEXT:    rolw $8, %di382; X64-NEXT:    movl %edi, %eax383; X64-NEXT:    andl $3855, %eax # imm = 0xF0F384; X64-NEXT:    shll $4, %eax385; X64-NEXT:    shrl $4, %edi386; X64-NEXT:    andl $3855, %edi # imm = 0xF0F387; X64-NEXT:    orl %eax, %edi388; X64-NEXT:    movl %edi, %eax389; X64-NEXT:    andl $13107, %eax # imm = 0x3333390; X64-NEXT:    shrl $2, %edi391; X64-NEXT:    andl $13107, %edi # imm = 0x3333392; X64-NEXT:    leal (%rdi,%rax,4), %eax393; X64-NEXT:    movl %eax, %ecx394; X64-NEXT:    andl $21845, %ecx # imm = 0x5555395; X64-NEXT:    shrl %eax396; X64-NEXT:    andl $21845, %eax # imm = 0x5555397; X64-NEXT:    leal (%rax,%rcx,2), %eax398; X64-NEXT:    # kill: def $ax killed $ax killed $eax399; X64-NEXT:    retq400;401; X86XOP-LABEL: test_bitreverse_i16:402; X86XOP:       # %bb.0:403; X86XOP-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero404; X86XOP-NEXT:    vpperm {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm0, %xmm0405; X86XOP-NEXT:    vmovd %xmm0, %eax406; X86XOP-NEXT:    # kill: def $ax killed $ax killed $eax407; X86XOP-NEXT:    retl408;409; X86GFNI-LABEL: test_bitreverse_i16:410; X86GFNI:       # %bb.0:411; X86GFNI-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero412; X86GFNI-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}{1to2}, %xmm0, %xmm0413; X86GFNI-NEXT:    vmovd %xmm0, %eax414; X86GFNI-NEXT:    rolw $8, %ax415; X86GFNI-NEXT:    # kill: def $ax killed $ax killed $eax416; X86GFNI-NEXT:    retl417;418; X64GFNI-LABEL: test_bitreverse_i16:419; X64GFNI:       # %bb.0:420; X64GFNI-NEXT:    vmovd %edi, %xmm0421; X64GFNI-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm0422; X64GFNI-NEXT:    vmovd %xmm0, %eax423; X64GFNI-NEXT:    rolw $8, %ax424; X64GFNI-NEXT:    # kill: def $ax killed $ax killed $eax425; X64GFNI-NEXT:    retq426  %b = call i16 @llvm.bitreverse.i16(i16 %a)427  ret i16 %b428}429 430declare i8 @llvm.bitreverse.i8(i8) readnone431 432define i8 @test_bitreverse_i8(i8 %a) {433; X86-LABEL: test_bitreverse_i8:434; X86:       # %bb.0:435; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax436; X86-NEXT:    rolb $4, %al437; X86-NEXT:    movl %eax, %ecx438; X86-NEXT:    andb $51, %cl439; X86-NEXT:    shlb $2, %cl440; X86-NEXT:    shrb $2, %al441; X86-NEXT:    andb $51, %al442; X86-NEXT:    orb %cl, %al443; X86-NEXT:    movl %eax, %ecx444; X86-NEXT:    andb $85, %cl445; X86-NEXT:    addb %cl, %cl446; X86-NEXT:    shrb %al447; X86-NEXT:    andb $85, %al448; X86-NEXT:    orb %cl, %al449; X86-NEXT:    retl450;451; X64-LABEL: test_bitreverse_i8:452; X64:       # %bb.0:453; X64-NEXT:    rolb $4, %dil454; X64-NEXT:    movl %edi, %eax455; X64-NEXT:    andb $51, %al456; X64-NEXT:    shlb $2, %al457; X64-NEXT:    shrb $2, %dil458; X64-NEXT:    andb $51, %dil459; X64-NEXT:    orb %dil, %al460; X64-NEXT:    movl %eax, %ecx461; X64-NEXT:    andb $85, %cl462; X64-NEXT:    addb %cl, %cl463; X64-NEXT:    shrb %al464; X64-NEXT:    andb $85, %al465; X64-NEXT:    orb %cl, %al466; X64-NEXT:    retq467;468; X86XOP-LABEL: test_bitreverse_i8:469; X86XOP:       # %bb.0:470; X86XOP-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero471; X86XOP-NEXT:    vpperm {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm0, %xmm0472; X86XOP-NEXT:    vmovd %xmm0, %eax473; X86XOP-NEXT:    # kill: def $al killed $al killed $eax474; X86XOP-NEXT:    retl475;476; X86GFNI-LABEL: test_bitreverse_i8:477; X86GFNI:       # %bb.0:478; X86GFNI-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero479; X86GFNI-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}{1to2}, %xmm0, %xmm0480; X86GFNI-NEXT:    vmovd %xmm0, %eax481; X86GFNI-NEXT:    # kill: def $al killed $al killed $eax482; X86GFNI-NEXT:    retl483;484; X64GFNI-LABEL: test_bitreverse_i8:485; X64GFNI:       # %bb.0:486; X64GFNI-NEXT:    vmovd %edi, %xmm0487; X64GFNI-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm0488; X64GFNI-NEXT:    vmovd %xmm0, %eax489; X64GFNI-NEXT:    # kill: def $al killed $al killed $eax490; X64GFNI-NEXT:    retq491  %b = call i8 @llvm.bitreverse.i8(i8 %a)492  ret i8 %b493}494 495declare i4 @llvm.bitreverse.i4(i4) readnone496 497define i4 @test_bitreverse_i4(i4 %a) {498; X86-LABEL: test_bitreverse_i4:499; X86:       # %bb.0:500; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx501; X86-NEXT:    movl %ecx, %eax502; X86-NEXT:    andb $8, %al503; X86-NEXT:    movl %ecx, %edx504; X86-NEXT:    addb %cl, %dl505; X86-NEXT:    andb $4, %dl506; X86-NEXT:    movb %cl, %ah507; X86-NEXT:    shlb $3, %ah508; X86-NEXT:    andb $8, %ah509; X86-NEXT:    orb %dl, %ah510; X86-NEXT:    shrb %cl511; X86-NEXT:    andb $2, %cl512; X86-NEXT:    orb %ah, %cl513; X86-NEXT:    shrb $3, %al514; X86-NEXT:    orb %cl, %al515; X86-NEXT:    retl516;517; X64-LABEL: test_bitreverse_i4:518; X64:       # %bb.0:519; X64-NEXT:    # kill: def $edi killed $edi def $rdi520; X64-NEXT:    movl %edi, %eax521; X64-NEXT:    andb $8, %al522; X64-NEXT:    leal (%rdi,%rdi), %ecx523; X64-NEXT:    andb $4, %cl524; X64-NEXT:    leal (,%rdi,8), %edx525; X64-NEXT:    andb $8, %dl526; X64-NEXT:    orb %cl, %dl527; X64-NEXT:    shrb %dil528; X64-NEXT:    andb $2, %dil529; X64-NEXT:    orb %dil, %dl530; X64-NEXT:    shrb $3, %al531; X64-NEXT:    orb %dl, %al532; X64-NEXT:    retq533;534; X86XOP-LABEL: test_bitreverse_i4:535; X86XOP:       # %bb.0:536; X86XOP-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero537; X86XOP-NEXT:    vpperm {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm0, %xmm0538; X86XOP-NEXT:    vmovd %xmm0, %eax539; X86XOP-NEXT:    shrb $4, %al540; X86XOP-NEXT:    # kill: def $al killed $al killed $eax541; X86XOP-NEXT:    retl542;543; X86GFNI-LABEL: test_bitreverse_i4:544; X86GFNI:       # %bb.0:545; X86GFNI-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero546; X86GFNI-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}{1to2}, %xmm0, %xmm0547; X86GFNI-NEXT:    vmovd %xmm0, %eax548; X86GFNI-NEXT:    shrb $4, %al549; X86GFNI-NEXT:    # kill: def $al killed $al killed $eax550; X86GFNI-NEXT:    retl551;552; X64GFNI-LABEL: test_bitreverse_i4:553; X64GFNI:       # %bb.0:554; X64GFNI-NEXT:    vmovd %edi, %xmm0555; X64GFNI-NEXT:    vgf2p8affineqb $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm0556; X64GFNI-NEXT:    vmovd %xmm0, %eax557; X64GFNI-NEXT:    shrb $4, %al558; X64GFNI-NEXT:    # kill: def $al killed $al killed $eax559; X64GFNI-NEXT:    retq560  %b = call i4 @llvm.bitreverse.i4(i4 %a)561  ret i4 %b562}563 564; These tests check that bitreverse(constant) calls are folded565 566define <2 x i16> @fold_v2i16() {567; X86-LABEL: fold_v2i16:568; X86:       # %bb.0:569; X86-NEXT:    movw $-4096, %ax # imm = 0xF000570; X86-NEXT:    movw $240, %dx571; X86-NEXT:    retl572;573; X64-LABEL: fold_v2i16:574; X64:       # %bb.0:575; X64-NEXT:    movss {{.*#+}} xmm0 = [61440,240,0,0,0,0,0,0]576; X64-NEXT:    retq577;578; X86XOP-LABEL: fold_v2i16:579; X86XOP:       # %bb.0:580; X86XOP-NEXT:    vmovss {{.*#+}} xmm0 = [61440,240,0,0,0,0,0,0]581; X86XOP-NEXT:    retl582;583; GFNI-LABEL: fold_v2i16:584; GFNI:       # %bb.0:585; GFNI-NEXT:    vmovss {{.*#+}} xmm0 = [61440,240,0,0,0,0,0,0]586; GFNI-NEXT:    ret{{[l|q]}}587  %b = call <2 x i16> @llvm.bitreverse.v2i16(<2 x i16> <i16 15, i16 3840>)588  ret <2 x i16> %b589}590 591define i24 @fold_i24() {592; CHECK-LABEL: fold_i24:593; CHECK:       # %bb.0:594; CHECK-NEXT:    movl $2048, %eax # imm = 0x800595; CHECK-NEXT:    ret{{[l|q]}}596  %b = call i24 @llvm.bitreverse.i24(i24 4096)597  ret i24 %b598}599 600define i8 @fold_i8() {601; CHECK-LABEL: fold_i8:602; CHECK:       # %bb.0:603; CHECK-NEXT:    movb $-16, %al604; CHECK-NEXT:    ret{{[l|q]}}605  %b = call i8 @llvm.bitreverse.i8(i8 15)606  ret i8 %b607}608 609define i4 @fold_i4() {610; CHECK-LABEL: fold_i4:611; CHECK:       # %bb.0:612; CHECK-NEXT:    movb $1, %al613; CHECK-NEXT:    ret{{[l|q]}}614  %b = call i4 @llvm.bitreverse.i4(i4 8)615  ret i4 %b616}617 618; These tests check that bitreverse(bitreverse()) calls are removed619 620define i8 @identity_i8(i8 %a) {621; X86-LABEL: identity_i8:622; X86:       # %bb.0:623; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax624; X86-NEXT:    retl625;626; X64-LABEL: identity_i8:627; X64:       # %bb.0:628; X64-NEXT:    movl %edi, %eax629; X64-NEXT:    # kill: def $al killed $al killed $eax630; X64-NEXT:    retq631;632; X86XOP-LABEL: identity_i8:633; X86XOP:       # %bb.0:634; X86XOP-NEXT:    movzbl {{[0-9]+}}(%esp), %eax635; X86XOP-NEXT:    retl636;637; X86GFNI-LABEL: identity_i8:638; X86GFNI:       # %bb.0:639; X86GFNI-NEXT:    movzbl {{[0-9]+}}(%esp), %eax640; X86GFNI-NEXT:    retl641;642; X64GFNI-LABEL: identity_i8:643; X64GFNI:       # %bb.0:644; X64GFNI-NEXT:    movl %edi, %eax645; X64GFNI-NEXT:    # kill: def $al killed $al killed $eax646; X64GFNI-NEXT:    retq647  %b = call i8 @llvm.bitreverse.i8(i8 %a)648  %c = call i8 @llvm.bitreverse.i8(i8 %b)649  ret i8 %c650}651 652define <2 x i16> @identity_v2i16(<2 x i16> %a) {653; X86-LABEL: identity_v2i16:654; X86:       # %bb.0:655; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax656; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %edx657; X86-NEXT:    retl658;659; X64-LABEL: identity_v2i16:660; X64:       # %bb.0:661; X64-NEXT:    retq662;663; X86XOP-LABEL: identity_v2i16:664; X86XOP:       # %bb.0:665; X86XOP-NEXT:    retl666;667; GFNI-LABEL: identity_v2i16:668; GFNI:       # %bb.0:669; GFNI-NEXT:    ret{{[l|q]}}670  %b = call <2 x i16> @llvm.bitreverse.v2i16(<2 x i16> %a)671  %c = call <2 x i16> @llvm.bitreverse.v2i16(<2 x i16> %b)672  ret <2 x i16> %c673}674 675; These tests check that bitreverse(undef) calls are removed676 677define i8 @undef_i8() {678; CHECK-LABEL: undef_i8:679; CHECK:       # %bb.0:680; CHECK-NEXT:    ret{{[l|q]}}681  %b = call i8 @llvm.bitreverse.i8(i8 undef)682  ret i8 %b683}684 685define <2 x i16> @undef_v2i16() {686; CHECK-LABEL: undef_v2i16:687; CHECK:       # %bb.0:688; CHECK-NEXT:    ret{{[l|q]}}689  %b = call <2 x i16> @llvm.bitreverse.v2i16(<2 x i16> undef)690  ret <2 x i16> %b691}692 693; Make sure we don't assert during type legalization promoting a large694; bitreverse due to the need for a large shift that won't fit in the i8 returned695; from getShiftAmountTy.696define i528 @large_promotion(i528 %A) nounwind {697; X86-LABEL: large_promotion:698; X86:       # %bb.0:699; X86-NEXT:    pushl %ebp700; X86-NEXT:    pushl %ebx701; X86-NEXT:    pushl %edi702; X86-NEXT:    pushl %esi703; X86-NEXT:    subl $60, %esp704; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax705; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx706; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx707; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi708; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi709; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebx710; X86-NEXT:    bswapl %ebx711; X86-NEXT:    movl %ebx, %ebp712; X86-NEXT:    andl $252645135, %ebp # imm = 0xF0F0F0F713; X86-NEXT:    shll $4, %ebp714; X86-NEXT:    shrl $4, %ebx715; X86-NEXT:    andl $252645135, %ebx # imm = 0xF0F0F0F716; X86-NEXT:    orl %ebp, %ebx717; X86-NEXT:    movl %ebx, %ebp718; X86-NEXT:    andl $858993459, %ebp # imm = 0x33333333719; X86-NEXT:    shrl $2, %ebx720; X86-NEXT:    andl $858993459, %ebx # imm = 0x33333333721; X86-NEXT:    leal (%ebx,%ebp,4), %ebx722; X86-NEXT:    movl %ebx, %ebp723; X86-NEXT:    andl $1431633920, %ebp # imm = 0x55550000724; X86-NEXT:    shrl %ebx725; X86-NEXT:    andl $1431633920, %ebx # imm = 0x55550000726; X86-NEXT:    leal (%ebx,%ebp,2), %ebp727; X86-NEXT:    bswapl %edi728; X86-NEXT:    movl %edi, %ebx729; X86-NEXT:    andl $252645135, %ebx # imm = 0xF0F0F0F730; X86-NEXT:    shll $4, %ebx731; X86-NEXT:    shrl $4, %edi732; X86-NEXT:    andl $252645135, %edi # imm = 0xF0F0F0F733; X86-NEXT:    orl %ebx, %edi734; X86-NEXT:    movl %edi, %ebx735; X86-NEXT:    andl $858993459, %ebx # imm = 0x33333333736; X86-NEXT:    shrl $2, %edi737; X86-NEXT:    andl $858993459, %edi # imm = 0x33333333738; X86-NEXT:    leal (%edi,%ebx,4), %edi739; X86-NEXT:    movl %edi, %ebx740; X86-NEXT:    andl $1431655765, %ebx # imm = 0x55555555741; X86-NEXT:    shrl %edi742; X86-NEXT:    andl $1431655765, %edi # imm = 0x55555555743; X86-NEXT:    leal (%edi,%ebx,2), %edi744; X86-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill745; X86-NEXT:    bswapl %esi746; X86-NEXT:    movl %esi, %edi747; X86-NEXT:    andl $252645135, %edi # imm = 0xF0F0F0F748; X86-NEXT:    shll $4, %edi749; X86-NEXT:    shrl $4, %esi750; X86-NEXT:    andl $252645135, %esi # imm = 0xF0F0F0F751; X86-NEXT:    orl %edi, %esi752; X86-NEXT:    movl %esi, %edi753; X86-NEXT:    andl $858993459, %edi # imm = 0x33333333754; X86-NEXT:    shrl $2, %esi755; X86-NEXT:    andl $858993459, %esi # imm = 0x33333333756; X86-NEXT:    leal (%esi,%edi,4), %esi757; X86-NEXT:    movl %esi, %edi758; X86-NEXT:    andl $1431655765, %edi # imm = 0x55555555759; X86-NEXT:    shrl %esi760; X86-NEXT:    andl $1431655765, %esi # imm = 0x55555555761; X86-NEXT:    leal (%esi,%edi,2), %ebx762; X86-NEXT:    bswapl %edx763; X86-NEXT:    movl %edx, %esi764; X86-NEXT:    andl $252645135, %esi # imm = 0xF0F0F0F765; X86-NEXT:    shll $4, %esi766; X86-NEXT:    shrl $4, %edx767; X86-NEXT:    andl $252645135, %edx # imm = 0xF0F0F0F768; X86-NEXT:    orl %esi, %edx769; X86-NEXT:    movl %edx, %esi770; X86-NEXT:    andl $858993459, %esi # imm = 0x33333333771; X86-NEXT:    shrl $2, %edx772; X86-NEXT:    andl $858993459, %edx # imm = 0x33333333773; X86-NEXT:    leal (%edx,%esi,4), %edx774; X86-NEXT:    movl %edx, %esi775; X86-NEXT:    andl $1431655765, %esi # imm = 0x55555555776; X86-NEXT:    shrl %edx777; X86-NEXT:    andl $1431655765, %edx # imm = 0x55555555778; X86-NEXT:    leal (%edx,%esi,2), %edx779; X86-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill780; X86-NEXT:    bswapl %ecx781; X86-NEXT:    movl %ecx, %edx782; X86-NEXT:    andl $252645135, %edx # imm = 0xF0F0F0F783; X86-NEXT:    shll $4, %edx784; X86-NEXT:    shrl $4, %ecx785; X86-NEXT:    andl $252645135, %ecx # imm = 0xF0F0F0F786; X86-NEXT:    orl %edx, %ecx787; X86-NEXT:    movl %ecx, %edx788; X86-NEXT:    andl $858993459, %edx # imm = 0x33333333789; X86-NEXT:    shrl $2, %ecx790; X86-NEXT:    andl $858993459, %ecx # imm = 0x33333333791; X86-NEXT:    leal (%ecx,%edx,4), %ecx792; X86-NEXT:    movl %ecx, %edx793; X86-NEXT:    andl $1431655765, %edx # imm = 0x55555555794; X86-NEXT:    shrl %ecx795; X86-NEXT:    andl $1431655765, %ecx # imm = 0x55555555796; X86-NEXT:    leal (%ecx,%edx,2), %ecx797; X86-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill798; X86-NEXT:    bswapl %eax799; X86-NEXT:    movl %eax, %ecx800; X86-NEXT:    andl $252645135, %ecx # imm = 0xF0F0F0F801; X86-NEXT:    shll $4, %ecx802; X86-NEXT:    shrl $4, %eax803; X86-NEXT:    andl $252645135, %eax # imm = 0xF0F0F0F804; X86-NEXT:    orl %ecx, %eax805; X86-NEXT:    movl %eax, %ecx806; X86-NEXT:    andl $858993459, %ecx # imm = 0x33333333807; X86-NEXT:    shrl $2, %eax808; X86-NEXT:    andl $858993459, %eax # imm = 0x33333333809; X86-NEXT:    leal (%eax,%ecx,4), %eax810; X86-NEXT:    movl %eax, %ecx811; X86-NEXT:    andl $1431655765, %ecx # imm = 0x55555555812; X86-NEXT:    shrl %eax813; X86-NEXT:    andl $1431655765, %eax # imm = 0x55555555814; X86-NEXT:    leal (%eax,%ecx,2), %eax815; X86-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill816; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax817; X86-NEXT:    bswapl %eax818; X86-NEXT:    movl %eax, %ecx819; X86-NEXT:    andl $252645135, %ecx # imm = 0xF0F0F0F820; X86-NEXT:    shll $4, %ecx821; X86-NEXT:    shrl $4, %eax822; X86-NEXT:    andl $252645135, %eax # imm = 0xF0F0F0F823; X86-NEXT:    orl %ecx, %eax824; X86-NEXT:    movl %eax, %ecx825; X86-NEXT:    andl $858993459, %ecx # imm = 0x33333333826; X86-NEXT:    shrl $2, %eax827; X86-NEXT:    andl $858993459, %eax # imm = 0x33333333828; X86-NEXT:    leal (%eax,%ecx,4), %eax829; X86-NEXT:    movl %eax, %ecx830; X86-NEXT:    andl $1431655765, %ecx # imm = 0x55555555831; X86-NEXT:    shrl %eax832; X86-NEXT:    andl $1431655765, %eax # imm = 0x55555555833; X86-NEXT:    leal (%eax,%ecx,2), %eax834; X86-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill835; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax836; X86-NEXT:    bswapl %eax837; X86-NEXT:    movl %eax, %ecx838; X86-NEXT:    andl $252645135, %ecx # imm = 0xF0F0F0F839; X86-NEXT:    shll $4, %ecx840; X86-NEXT:    shrl $4, %eax841; X86-NEXT:    andl $252645135, %eax # imm = 0xF0F0F0F842; X86-NEXT:    orl %ecx, %eax843; X86-NEXT:    movl %eax, %ecx844; X86-NEXT:    andl $858993459, %ecx # imm = 0x33333333845; X86-NEXT:    shrl $2, %eax846; X86-NEXT:    andl $858993459, %eax # imm = 0x33333333847; X86-NEXT:    leal (%eax,%ecx,4), %eax848; X86-NEXT:    movl %eax, %ecx849; X86-NEXT:    andl $1431655765, %ecx # imm = 0x55555555850; X86-NEXT:    shrl %eax851; X86-NEXT:    andl $1431655765, %eax # imm = 0x55555555852; X86-NEXT:    leal (%eax,%ecx,2), %eax853; X86-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill854; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax855; X86-NEXT:    bswapl %eax856; X86-NEXT:    movl %eax, %ecx857; X86-NEXT:    andl $252645135, %ecx # imm = 0xF0F0F0F858; X86-NEXT:    shll $4, %ecx859; X86-NEXT:    shrl $4, %eax860; X86-NEXT:    andl $252645135, %eax # imm = 0xF0F0F0F861; X86-NEXT:    orl %ecx, %eax862; X86-NEXT:    movl %eax, %ecx863; X86-NEXT:    andl $858993459, %ecx # imm = 0x33333333864; X86-NEXT:    shrl $2, %eax865; X86-NEXT:    andl $858993459, %eax # imm = 0x33333333866; X86-NEXT:    leal (%eax,%ecx,4), %eax867; X86-NEXT:    movl %eax, %ecx868; X86-NEXT:    andl $1431655765, %ecx # imm = 0x55555555869; X86-NEXT:    shrl %eax870; X86-NEXT:    andl $1431655765, %eax # imm = 0x55555555871; X86-NEXT:    leal (%eax,%ecx,2), %eax872; X86-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill873; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax874; X86-NEXT:    bswapl %eax875; X86-NEXT:    movl %eax, %ecx876; X86-NEXT:    andl $252645135, %ecx # imm = 0xF0F0F0F877; X86-NEXT:    shll $4, %ecx878; X86-NEXT:    shrl $4, %eax879; X86-NEXT:    andl $252645135, %eax # imm = 0xF0F0F0F880; X86-NEXT:    orl %ecx, %eax881; X86-NEXT:    movl %eax, %ecx882; X86-NEXT:    andl $858993459, %ecx # imm = 0x33333333883; X86-NEXT:    shrl $2, %eax884; X86-NEXT:    andl $858993459, %eax # imm = 0x33333333885; X86-NEXT:    leal (%eax,%ecx,4), %eax886; X86-NEXT:    movl %eax, %ecx887; X86-NEXT:    andl $1431655765, %ecx # imm = 0x55555555888; X86-NEXT:    shrl %eax889; X86-NEXT:    andl $1431655765, %eax # imm = 0x55555555890; X86-NEXT:    leal (%eax,%ecx,2), %edi891; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax892; X86-NEXT:    bswapl %eax893; X86-NEXT:    movl %eax, %ecx894; X86-NEXT:    andl $252645135, %ecx # imm = 0xF0F0F0F895; X86-NEXT:    shll $4, %ecx896; X86-NEXT:    shrl $4, %eax897; X86-NEXT:    andl $252645135, %eax # imm = 0xF0F0F0F898; X86-NEXT:    orl %ecx, %eax899; X86-NEXT:    movl %eax, %ecx900; X86-NEXT:    andl $858993459, %ecx # imm = 0x33333333901; X86-NEXT:    shrl $2, %eax902; X86-NEXT:    andl $858993459, %eax # imm = 0x33333333903; X86-NEXT:    leal (%eax,%ecx,4), %eax904; X86-NEXT:    movl %eax, %ecx905; X86-NEXT:    andl $1431655765, %ecx # imm = 0x55555555906; X86-NEXT:    shrl %eax907; X86-NEXT:    andl $1431655765, %eax # imm = 0x55555555908; X86-NEXT:    leal (%eax,%ecx,2), %eax909; X86-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill910; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax911; X86-NEXT:    bswapl %eax912; X86-NEXT:    movl %eax, %ecx913; X86-NEXT:    andl $252645135, %ecx # imm = 0xF0F0F0F914; X86-NEXT:    shll $4, %ecx915; X86-NEXT:    shrl $4, %eax916; X86-NEXT:    andl $252645135, %eax # imm = 0xF0F0F0F917; X86-NEXT:    orl %ecx, %eax918; X86-NEXT:    movl %eax, %ecx919; X86-NEXT:    andl $858993459, %ecx # imm = 0x33333333920; X86-NEXT:    shrl $2, %eax921; X86-NEXT:    andl $858993459, %eax # imm = 0x33333333922; X86-NEXT:    leal (%eax,%ecx,4), %eax923; X86-NEXT:    movl %eax, %ecx924; X86-NEXT:    andl $1431655765, %ecx # imm = 0x55555555925; X86-NEXT:    shrl %eax926; X86-NEXT:    andl $1431655765, %eax # imm = 0x55555555927; X86-NEXT:    leal (%eax,%ecx,2), %eax928; X86-NEXT:    movl %eax, (%esp) # 4-byte Spill929; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax930; X86-NEXT:    bswapl %eax931; X86-NEXT:    movl %eax, %ecx932; X86-NEXT:    andl $252645135, %ecx # imm = 0xF0F0F0F933; X86-NEXT:    shll $4, %ecx934; X86-NEXT:    shrl $4, %eax935; X86-NEXT:    andl $252645135, %eax # imm = 0xF0F0F0F936; X86-NEXT:    orl %ecx, %eax937; X86-NEXT:    movl %eax, %ecx938; X86-NEXT:    andl $858993459, %ecx # imm = 0x33333333939; X86-NEXT:    shrl $2, %eax940; X86-NEXT:    andl $858993459, %eax # imm = 0x33333333941; X86-NEXT:    leal (%eax,%ecx,4), %eax942; X86-NEXT:    movl %eax, %ecx943; X86-NEXT:    andl $1431655765, %ecx # imm = 0x55555555944; X86-NEXT:    shrl %eax945; X86-NEXT:    andl $1431655765, %eax # imm = 0x55555555946; X86-NEXT:    leal (%eax,%ecx,2), %eax947; X86-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill948; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax949; X86-NEXT:    bswapl %eax950; X86-NEXT:    movl %eax, %ecx951; X86-NEXT:    andl $252645135, %ecx # imm = 0xF0F0F0F952; X86-NEXT:    shll $4, %ecx953; X86-NEXT:    shrl $4, %eax954; X86-NEXT:    andl $252645135, %eax # imm = 0xF0F0F0F955; X86-NEXT:    orl %ecx, %eax956; X86-NEXT:    movl %eax, %ecx957; X86-NEXT:    andl $858993459, %ecx # imm = 0x33333333958; X86-NEXT:    shrl $2, %eax959; X86-NEXT:    andl $858993459, %eax # imm = 0x33333333960; X86-NEXT:    leal (%eax,%ecx,4), %eax961; X86-NEXT:    movl %eax, %ecx962; X86-NEXT:    andl $1431655765, %ecx # imm = 0x55555555963; X86-NEXT:    shrl %eax964; X86-NEXT:    andl $1431655765, %eax # imm = 0x55555555965; X86-NEXT:    leal (%eax,%ecx,2), %eax966; X86-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill967; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax968; X86-NEXT:    bswapl %eax969; X86-NEXT:    movl %eax, %ecx970; X86-NEXT:    andl $252645135, %ecx # imm = 0xF0F0F0F971; X86-NEXT:    shll $4, %ecx972; X86-NEXT:    shrl $4, %eax973; X86-NEXT:    andl $252645135, %eax # imm = 0xF0F0F0F974; X86-NEXT:    orl %ecx, %eax975; X86-NEXT:    movl %eax, %ecx976; X86-NEXT:    andl $858993459, %ecx # imm = 0x33333333977; X86-NEXT:    shrl $2, %eax978; X86-NEXT:    andl $858993459, %eax # imm = 0x33333333979; X86-NEXT:    leal (%eax,%ecx,4), %eax980; X86-NEXT:    movl %eax, %ecx981; X86-NEXT:    andl $1431655765, %ecx # imm = 0x55555555982; X86-NEXT:    shrl %eax983; X86-NEXT:    andl $1431655765, %eax # imm = 0x55555555984; X86-NEXT:    leal (%eax,%ecx,2), %eax985; X86-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill986; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax987; X86-NEXT:    bswapl %eax988; X86-NEXT:    movl %eax, %ecx989; X86-NEXT:    andl $252645135, %ecx # imm = 0xF0F0F0F990; X86-NEXT:    shll $4, %ecx991; X86-NEXT:    shrl $4, %eax992; X86-NEXT:    andl $252645135, %eax # imm = 0xF0F0F0F993; X86-NEXT:    orl %ecx, %eax994; X86-NEXT:    movl %eax, %ecx995; X86-NEXT:    andl $858993459, %ecx # imm = 0x33333333996; X86-NEXT:    shrl $2, %eax997; X86-NEXT:    andl $858993459, %eax # imm = 0x33333333998; X86-NEXT:    leal (%eax,%ecx,4), %eax999; X86-NEXT:    movl %eax, %ecx1000; X86-NEXT:    andl $1431655765, %ecx # imm = 0x555555551001; X86-NEXT:    shrl %eax1002; X86-NEXT:    andl $1431655765, %eax # imm = 0x555555551003; X86-NEXT:    leal (%eax,%ecx,2), %eax1004; X86-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1005; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1006; X86-NEXT:    bswapl %eax1007; X86-NEXT:    movl %eax, %ecx1008; X86-NEXT:    andl $252645135, %ecx # imm = 0xF0F0F0F1009; X86-NEXT:    shll $4, %ecx1010; X86-NEXT:    shrl $4, %eax1011; X86-NEXT:    andl $252645135, %eax # imm = 0xF0F0F0F1012; X86-NEXT:    orl %ecx, %eax1013; X86-NEXT:    movl %eax, %ecx1014; X86-NEXT:    andl $858993459, %ecx # imm = 0x333333331015; X86-NEXT:    shrl $2, %eax1016; X86-NEXT:    andl $858993459, %eax # imm = 0x333333331017; X86-NEXT:    leal (%eax,%ecx,4), %eax1018; X86-NEXT:    movl %eax, %ecx1019; X86-NEXT:    andl $1431655765, %ecx # imm = 0x555555551020; X86-NEXT:    shrl %eax1021; X86-NEXT:    andl $1431655765, %eax # imm = 0x555555551022; X86-NEXT:    leal (%eax,%ecx,2), %edx1023; X86-NEXT:    movl %ebp, %esi1024; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1025; X86-NEXT:    shrdl $16, %ecx, %esi1026; X86-NEXT:    movl %ebx, %eax1027; X86-NEXT:    shrdl $16, %ebx, %ecx1028; X86-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1029; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1030; X86-NEXT:    shrdl $16, %ecx, %eax1031; X86-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1032; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1033; X86-NEXT:    shrdl $16, %eax, %ecx1034; X86-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1035; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1036; X86-NEXT:    shrdl $16, %ecx, %eax1037; X86-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1038; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1039; X86-NEXT:    shrdl $16, %eax, %ecx1040; X86-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1041; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1042; X86-NEXT:    shrdl $16, %ecx, %eax1043; X86-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1044; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1045; X86-NEXT:    shrdl $16, %eax, %ecx1046; X86-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1047; X86-NEXT:    shrdl $16, %edi, %eax1048; X86-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1049; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1050; X86-NEXT:    shrdl $16, %eax, %edi1051; X86-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1052; X86-NEXT:    movl (%esp), %ecx # 4-byte Reload1053; X86-NEXT:    shrdl $16, %ecx, %eax1054; X86-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1055; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload1056; X86-NEXT:    shrdl $16, %ebp, %ecx1057; X86-NEXT:    movl %ecx, (%esp) # 4-byte Spill1058; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload1059; X86-NEXT:    shrdl $16, %ebx, %ebp1060; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload1061; X86-NEXT:    shrdl $16, %edi, %ebx1062; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1063; X86-NEXT:    shrdl $16, %ecx, %edi1064; X86-NEXT:    shrdl $16, %edx, %ecx1065; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1066; X86-NEXT:    movl %ecx, 60(%eax)1067; X86-NEXT:    movl %edi, 56(%eax)1068; X86-NEXT:    movl %ebx, 52(%eax)1069; X86-NEXT:    movl %ebp, 48(%eax)1070; X86-NEXT:    movl (%esp), %ecx # 4-byte Reload1071; X86-NEXT:    movl %ecx, 44(%eax)1072; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1073; X86-NEXT:    movl %ecx, 40(%eax)1074; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1075; X86-NEXT:    movl %ecx, 36(%eax)1076; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1077; X86-NEXT:    movl %ecx, 32(%eax)1078; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1079; X86-NEXT:    movl %ecx, 28(%eax)1080; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1081; X86-NEXT:    movl %ecx, 24(%eax)1082; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1083; X86-NEXT:    movl %ecx, 20(%eax)1084; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1085; X86-NEXT:    movl %ecx, 16(%eax)1086; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1087; X86-NEXT:    movl %ecx, 12(%eax)1088; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1089; X86-NEXT:    movl %ecx, 8(%eax)1090; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1091; X86-NEXT:    movl %ecx, 4(%eax)1092; X86-NEXT:    movl %esi, (%eax)1093; X86-NEXT:    shrl $16, %edx1094; X86-NEXT:    movw %dx, 64(%eax)1095; X86-NEXT:    addl $60, %esp1096; X86-NEXT:    popl %esi1097; X86-NEXT:    popl %edi1098; X86-NEXT:    popl %ebx1099; X86-NEXT:    popl %ebp1100; X86-NEXT:    retl $41101;1102; X64-LABEL: large_promotion:1103; X64:       # %bb.0:1104; X64-NEXT:    pushq %r151105; X64-NEXT:    pushq %r141106; X64-NEXT:    pushq %r131107; X64-NEXT:    pushq %r121108; X64-NEXT:    pushq %rbx1109; X64-NEXT:    movq %rdi, %rax1110; X64-NEXT:    movq {{[0-9]+}}(%rsp), %r121111; X64-NEXT:    movq {{[0-9]+}}(%rsp), %r151112; X64-NEXT:    movq {{[0-9]+}}(%rsp), %rbx1113; X64-NEXT:    movq {{[0-9]+}}(%rsp), %rdi1114; X64-NEXT:    bswapq %rdi1115; X64-NEXT:    movq %rdi, %r101116; X64-NEXT:    shrq $4, %r101117; X64-NEXT:    movabsq $1085102592571150095, %r11 # imm = 0xF0F0F0F0F0F0F0F1118; X64-NEXT:    andq %r11, %r101119; X64-NEXT:    andq %r11, %rdi1120; X64-NEXT:    shlq $4, %rdi1121; X64-NEXT:    orq %r10, %rdi1122; X64-NEXT:    movabsq $3689348814741910323, %r10 # imm = 0x33333333333333331123; X64-NEXT:    movq %rdi, %r141124; X64-NEXT:    andq %r10, %r141125; X64-NEXT:    shrq $2, %rdi1126; X64-NEXT:    andq %r10, %rdi1127; X64-NEXT:    leaq (%rdi,%r14,4), %rdi1128; X64-NEXT:    movabsq $6148820866244280320, %r14 # imm = 0x55550000000000001129; X64-NEXT:    movq %rdi, %r131130; X64-NEXT:    andq %r14, %r131131; X64-NEXT:    shrq %rdi1132; X64-NEXT:    andq %r14, %rdi1133; X64-NEXT:    leaq (%rdi,%r13,2), %rdi1134; X64-NEXT:    bswapq %rbx1135; X64-NEXT:    movq %rbx, %r141136; X64-NEXT:    shrq $4, %r141137; X64-NEXT:    andq %r11, %r141138; X64-NEXT:    andq %r11, %rbx1139; X64-NEXT:    shlq $4, %rbx1140; X64-NEXT:    orq %r14, %rbx1141; X64-NEXT:    movq %rbx, %r141142; X64-NEXT:    andq %r10, %r141143; X64-NEXT:    shrq $2, %rbx1144; X64-NEXT:    andq %r10, %rbx1145; X64-NEXT:    leaq (%rbx,%r14,4), %rbx1146; X64-NEXT:    movabsq $6148914691236517205, %r14 # imm = 0x55555555555555551147; X64-NEXT:    movq %rbx, %r131148; X64-NEXT:    andq %r14, %r131149; X64-NEXT:    shrq %rbx1150; X64-NEXT:    andq %r14, %rbx1151; X64-NEXT:    leaq (%rbx,%r13,2), %rbx1152; X64-NEXT:    shrdq $48, %rbx, %rdi1153; X64-NEXT:    bswapq %r151154; X64-NEXT:    movq %r15, %r131155; X64-NEXT:    shrq $4, %r131156; X64-NEXT:    andq %r11, %r131157; X64-NEXT:    andq %r11, %r151158; X64-NEXT:    shlq $4, %r151159; X64-NEXT:    orq %r13, %r151160; X64-NEXT:    movq %r15, %r131161; X64-NEXT:    andq %r10, %r131162; X64-NEXT:    shrq $2, %r151163; X64-NEXT:    andq %r10, %r151164; X64-NEXT:    leaq (%r15,%r13,4), %r151165; X64-NEXT:    movq %r15, %r131166; X64-NEXT:    andq %r14, %r131167; X64-NEXT:    shrq %r151168; X64-NEXT:    andq %r14, %r151169; X64-NEXT:    leaq (%r15,%r13,2), %r151170; X64-NEXT:    shrdq $48, %r15, %rbx1171; X64-NEXT:    bswapq %r121172; X64-NEXT:    movq %r12, %r131173; X64-NEXT:    shrq $4, %r131174; X64-NEXT:    andq %r11, %r131175; X64-NEXT:    andq %r11, %r121176; X64-NEXT:    shlq $4, %r121177; X64-NEXT:    orq %r13, %r121178; X64-NEXT:    movq %r12, %r131179; X64-NEXT:    andq %r10, %r131180; X64-NEXT:    shrq $2, %r121181; X64-NEXT:    andq %r10, %r121182; X64-NEXT:    leaq (%r12,%r13,4), %r121183; X64-NEXT:    movq %r12, %r131184; X64-NEXT:    andq %r14, %r131185; X64-NEXT:    shrq %r121186; X64-NEXT:    andq %r14, %r121187; X64-NEXT:    leaq (%r12,%r13,2), %r121188; X64-NEXT:    shrdq $48, %r12, %r151189; X64-NEXT:    bswapq %r91190; X64-NEXT:    movq %r9, %r131191; X64-NEXT:    shrq $4, %r131192; X64-NEXT:    andq %r11, %r131193; X64-NEXT:    andq %r11, %r91194; X64-NEXT:    shlq $4, %r91195; X64-NEXT:    orq %r13, %r91196; X64-NEXT:    movq %r9, %r131197; X64-NEXT:    andq %r10, %r131198; X64-NEXT:    shrq $2, %r91199; X64-NEXT:    andq %r10, %r91200; X64-NEXT:    leaq (%r9,%r13,4), %r91201; X64-NEXT:    movq %r9, %r131202; X64-NEXT:    andq %r14, %r131203; X64-NEXT:    shrq %r91204; X64-NEXT:    andq %r14, %r91205; X64-NEXT:    leaq (%r9,%r13,2), %r91206; X64-NEXT:    shrdq $48, %r9, %r121207; X64-NEXT:    bswapq %r81208; X64-NEXT:    movq %r8, %r131209; X64-NEXT:    shrq $4, %r131210; X64-NEXT:    andq %r11, %r131211; X64-NEXT:    andq %r11, %r81212; X64-NEXT:    shlq $4, %r81213; X64-NEXT:    orq %r13, %r81214; X64-NEXT:    movq %r8, %r131215; X64-NEXT:    andq %r10, %r131216; X64-NEXT:    shrq $2, %r81217; X64-NEXT:    andq %r10, %r81218; X64-NEXT:    leaq (%r8,%r13,4), %r81219; X64-NEXT:    movq %r8, %r131220; X64-NEXT:    andq %r14, %r131221; X64-NEXT:    shrq %r81222; X64-NEXT:    andq %r14, %r81223; X64-NEXT:    leaq (%r8,%r13,2), %r81224; X64-NEXT:    shrdq $48, %r8, %r91225; X64-NEXT:    bswapq %rcx1226; X64-NEXT:    movq %rcx, %r131227; X64-NEXT:    shrq $4, %r131228; X64-NEXT:    andq %r11, %r131229; X64-NEXT:    andq %r11, %rcx1230; X64-NEXT:    shlq $4, %rcx1231; X64-NEXT:    orq %r13, %rcx1232; X64-NEXT:    movq %rcx, %r131233; X64-NEXT:    andq %r10, %r131234; X64-NEXT:    shrq $2, %rcx1235; X64-NEXT:    andq %r10, %rcx1236; X64-NEXT:    leaq (%rcx,%r13,4), %rcx1237; X64-NEXT:    movq %rcx, %r131238; X64-NEXT:    andq %r14, %r131239; X64-NEXT:    shrq %rcx1240; X64-NEXT:    andq %r14, %rcx1241; X64-NEXT:    leaq (%rcx,%r13,2), %rcx1242; X64-NEXT:    shrdq $48, %rcx, %r81243; X64-NEXT:    bswapq %rdx1244; X64-NEXT:    movq %rdx, %r131245; X64-NEXT:    shrq $4, %r131246; X64-NEXT:    andq %r11, %r131247; X64-NEXT:    andq %r11, %rdx1248; X64-NEXT:    shlq $4, %rdx1249; X64-NEXT:    orq %r13, %rdx1250; X64-NEXT:    movq %rdx, %r131251; X64-NEXT:    andq %r10, %r131252; X64-NEXT:    shrq $2, %rdx1253; X64-NEXT:    andq %r10, %rdx1254; X64-NEXT:    leaq (%rdx,%r13,4), %rdx1255; X64-NEXT:    movq %rdx, %r131256; X64-NEXT:    andq %r14, %r131257; X64-NEXT:    shrq %rdx1258; X64-NEXT:    andq %r14, %rdx1259; X64-NEXT:    leaq (%rdx,%r13,2), %rdx1260; X64-NEXT:    shrdq $48, %rdx, %rcx1261; X64-NEXT:    bswapq %rsi1262; X64-NEXT:    movq %rsi, %r131263; X64-NEXT:    shrq $4, %r131264; X64-NEXT:    andq %r11, %r131265; X64-NEXT:    andq %r11, %rsi1266; X64-NEXT:    shlq $4, %rsi1267; X64-NEXT:    orq %r13, %rsi1268; X64-NEXT:    movq %rsi, %r111269; X64-NEXT:    andq %r10, %r111270; X64-NEXT:    shrq $2, %rsi1271; X64-NEXT:    andq %r10, %rsi1272; X64-NEXT:    leaq (%rsi,%r11,4), %rsi1273; X64-NEXT:    movq %rsi, %r101274; X64-NEXT:    andq %r14, %r101275; X64-NEXT:    shrq %rsi1276; X64-NEXT:    andq %r14, %rsi1277; X64-NEXT:    leaq (%rsi,%r10,2), %rsi1278; X64-NEXT:    shrdq $48, %rsi, %rdx1279; X64-NEXT:    shrq $48, %rsi1280; X64-NEXT:    movq %rdx, 56(%rax)1281; X64-NEXT:    movq %rcx, 48(%rax)1282; X64-NEXT:    movq %r8, 40(%rax)1283; X64-NEXT:    movq %r9, 32(%rax)1284; X64-NEXT:    movq %r12, 24(%rax)1285; X64-NEXT:    movq %r15, 16(%rax)1286; X64-NEXT:    movq %rbx, 8(%rax)1287; X64-NEXT:    movq %rdi, (%rax)1288; X64-NEXT:    movw %si, 64(%rax)1289; X64-NEXT:    popq %rbx1290; X64-NEXT:    popq %r121291; X64-NEXT:    popq %r131292; X64-NEXT:    popq %r141293; X64-NEXT:    popq %r151294; X64-NEXT:    retq1295;1296; X86XOP-LABEL: large_promotion:1297; X86XOP:       # %bb.0:1298; X86XOP-NEXT:    pushl %ebp1299; X86XOP-NEXT:    pushl %ebx1300; X86XOP-NEXT:    pushl %edi1301; X86XOP-NEXT:    pushl %esi1302; X86XOP-NEXT:    subl $44, %esp1303; X86XOP-NEXT:    vmovdqa {{.*#+}} xmm0 = [87,86,85,84,83,82,81,80,95,94,93,92,91,90,89,88]1304; X86XOP-NEXT:    vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero1305; X86XOP-NEXT:    vpperm %xmm0, %xmm1, %xmm0, %xmm11306; X86XOP-NEXT:    vpextrd $1, %xmm1, %eax1307; X86XOP-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero1308; X86XOP-NEXT:    vpperm %xmm0, %xmm1, %xmm0, %xmm11309; X86XOP-NEXT:    vmovd %xmm1, %ecx1310; X86XOP-NEXT:    shrdl $16, %ecx, %eax1311; X86XOP-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1312; X86XOP-NEXT:    vpextrd $1, %xmm1, %eax1313; X86XOP-NEXT:    shrdl $16, %eax, %ecx1314; X86XOP-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1315; X86XOP-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero1316; X86XOP-NEXT:    vpperm %xmm0, %xmm1, %xmm0, %xmm11317; X86XOP-NEXT:    vmovd %xmm1, %ecx1318; X86XOP-NEXT:    shrdl $16, %ecx, %eax1319; X86XOP-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1320; X86XOP-NEXT:    vpextrd $1, %xmm1, %eax1321; X86XOP-NEXT:    shrdl $16, %eax, %ecx1322; X86XOP-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1323; X86XOP-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero1324; X86XOP-NEXT:    vpperm %xmm0, %xmm1, %xmm0, %xmm11325; X86XOP-NEXT:    vmovd %xmm1, %ecx1326; X86XOP-NEXT:    shrdl $16, %ecx, %eax1327; X86XOP-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1328; X86XOP-NEXT:    vpextrd $1, %xmm1, %eax1329; X86XOP-NEXT:    shrdl $16, %eax, %ecx1330; X86XOP-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1331; X86XOP-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero1332; X86XOP-NEXT:    vpperm %xmm0, %xmm1, %xmm0, %xmm11333; X86XOP-NEXT:    vmovd %xmm1, %ecx1334; X86XOP-NEXT:    shrdl $16, %ecx, %eax1335; X86XOP-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1336; X86XOP-NEXT:    vpextrd $1, %xmm1, %eax1337; X86XOP-NEXT:    shrdl $16, %eax, %ecx1338; X86XOP-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1339; X86XOP-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero1340; X86XOP-NEXT:    vpperm %xmm0, %xmm1, %xmm0, %xmm11341; X86XOP-NEXT:    vmovd %xmm1, %ecx1342; X86XOP-NEXT:    shrdl $16, %ecx, %eax1343; X86XOP-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1344; X86XOP-NEXT:    vpextrd $1, %xmm1, %eax1345; X86XOP-NEXT:    shrdl $16, %eax, %ecx1346; X86XOP-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1347; X86XOP-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero1348; X86XOP-NEXT:    vpperm %xmm0, %xmm1, %xmm0, %xmm11349; X86XOP-NEXT:    vmovd %xmm1, %ebp1350; X86XOP-NEXT:    shrdl $16, %ebp, %eax1351; X86XOP-NEXT:    movl %eax, (%esp) # 4-byte Spill1352; X86XOP-NEXT:    vpextrd $1, %xmm1, %ebx1353; X86XOP-NEXT:    shrdl $16, %ebx, %ebp1354; X86XOP-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero1355; X86XOP-NEXT:    vpperm %xmm0, %xmm1, %xmm0, %xmm11356; X86XOP-NEXT:    vmovd %xmm1, %esi1357; X86XOP-NEXT:    shrdl $16, %esi, %ebx1358; X86XOP-NEXT:    vpextrd $1, %xmm1, %edx1359; X86XOP-NEXT:    shrdl $16, %edx, %esi1360; X86XOP-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero1361; X86XOP-NEXT:    vpperm %xmm0, %xmm1, %xmm0, %xmm01362; X86XOP-NEXT:    vmovd %xmm0, %ecx1363; X86XOP-NEXT:    shrdl $16, %ecx, %edx1364; X86XOP-NEXT:    vpextrd $1, %xmm0, %edi1365; X86XOP-NEXT:    shrdl $16, %edi, %ecx1366; X86XOP-NEXT:    movl {{[0-9]+}}(%esp), %eax1367; X86XOP-NEXT:    movl %ecx, 60(%eax)1368; X86XOP-NEXT:    movl %edx, 56(%eax)1369; X86XOP-NEXT:    movl %esi, 52(%eax)1370; X86XOP-NEXT:    movl %ebx, 48(%eax)1371; X86XOP-NEXT:    movl %ebp, 44(%eax)1372; X86XOP-NEXT:    movl (%esp), %ecx # 4-byte Reload1373; X86XOP-NEXT:    movl %ecx, 40(%eax)1374; X86XOP-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1375; X86XOP-NEXT:    movl %ecx, 36(%eax)1376; X86XOP-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1377; X86XOP-NEXT:    movl %ecx, 32(%eax)1378; X86XOP-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1379; X86XOP-NEXT:    movl %ecx, 28(%eax)1380; X86XOP-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1381; X86XOP-NEXT:    movl %ecx, 24(%eax)1382; X86XOP-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1383; X86XOP-NEXT:    movl %ecx, 20(%eax)1384; X86XOP-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1385; X86XOP-NEXT:    movl %ecx, 16(%eax)1386; X86XOP-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1387; X86XOP-NEXT:    movl %ecx, 12(%eax)1388; X86XOP-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1389; X86XOP-NEXT:    movl %ecx, 8(%eax)1390; X86XOP-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1391; X86XOP-NEXT:    movl %ecx, 4(%eax)1392; X86XOP-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1393; X86XOP-NEXT:    movl %ecx, (%eax)1394; X86XOP-NEXT:    shrl $16, %edi1395; X86XOP-NEXT:    movw %di, 64(%eax)1396; X86XOP-NEXT:    addl $44, %esp1397; X86XOP-NEXT:    popl %esi1398; X86XOP-NEXT:    popl %edi1399; X86XOP-NEXT:    popl %ebx1400; X86XOP-NEXT:    popl %ebp1401; X86XOP-NEXT:    retl $41402;1403; X86GFNI-LABEL: large_promotion:1404; X86GFNI:       # %bb.0:1405; X86GFNI-NEXT:    pushl %ebp1406; X86GFNI-NEXT:    pushl %ebx1407; X86GFNI-NEXT:    pushl %edi1408; X86GFNI-NEXT:    pushl %esi1409; X86GFNI-NEXT:    subl $44, %esp1410; X86GFNI-NEXT:    vpbroadcastq {{.*#+}} xmm0 = [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]1411; X86GFNI-NEXT:    vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero1412; X86GFNI-NEXT:    vgf2p8affineqb $0, %xmm0, %xmm1, %xmm11413; X86GFNI-NEXT:    vmovd %xmm1, %eax1414; X86GFNI-NEXT:    bswapl %eax1415; X86GFNI-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero1416; X86GFNI-NEXT:    vgf2p8affineqb $0, %xmm0, %xmm1, %xmm11417; X86GFNI-NEXT:    vpextrd $1, %xmm1, %ecx1418; X86GFNI-NEXT:    bswapl %ecx1419; X86GFNI-NEXT:    shrdl $16, %ecx, %eax1420; X86GFNI-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1421; X86GFNI-NEXT:    vmovd %xmm1, %eax1422; X86GFNI-NEXT:    bswapl %eax1423; X86GFNI-NEXT:    shrdl $16, %eax, %ecx1424; X86GFNI-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1425; X86GFNI-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero1426; X86GFNI-NEXT:    vgf2p8affineqb $0, %xmm0, %xmm1, %xmm11427; X86GFNI-NEXT:    vpextrd $1, %xmm1, %ecx1428; X86GFNI-NEXT:    bswapl %ecx1429; X86GFNI-NEXT:    shrdl $16, %ecx, %eax1430; X86GFNI-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1431; X86GFNI-NEXT:    vmovd %xmm1, %eax1432; X86GFNI-NEXT:    bswapl %eax1433; X86GFNI-NEXT:    shrdl $16, %eax, %ecx1434; X86GFNI-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1435; X86GFNI-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero1436; X86GFNI-NEXT:    vgf2p8affineqb $0, %xmm0, %xmm1, %xmm11437; X86GFNI-NEXT:    vpextrd $1, %xmm1, %ecx1438; X86GFNI-NEXT:    bswapl %ecx1439; X86GFNI-NEXT:    shrdl $16, %ecx, %eax1440; X86GFNI-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1441; X86GFNI-NEXT:    vmovd %xmm1, %eax1442; X86GFNI-NEXT:    bswapl %eax1443; X86GFNI-NEXT:    shrdl $16, %eax, %ecx1444; X86GFNI-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1445; X86GFNI-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero1446; X86GFNI-NEXT:    vgf2p8affineqb $0, %xmm0, %xmm1, %xmm11447; X86GFNI-NEXT:    vpextrd $1, %xmm1, %ecx1448; X86GFNI-NEXT:    bswapl %ecx1449; X86GFNI-NEXT:    shrdl $16, %ecx, %eax1450; X86GFNI-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1451; X86GFNI-NEXT:    vmovd %xmm1, %eax1452; X86GFNI-NEXT:    bswapl %eax1453; X86GFNI-NEXT:    shrdl $16, %eax, %ecx1454; X86GFNI-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1455; X86GFNI-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero1456; X86GFNI-NEXT:    vgf2p8affineqb $0, %xmm0, %xmm1, %xmm11457; X86GFNI-NEXT:    vpextrd $1, %xmm1, %ecx1458; X86GFNI-NEXT:    bswapl %ecx1459; X86GFNI-NEXT:    shrdl $16, %ecx, %eax1460; X86GFNI-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1461; X86GFNI-NEXT:    vmovd %xmm1, %eax1462; X86GFNI-NEXT:    bswapl %eax1463; X86GFNI-NEXT:    shrdl $16, %eax, %ecx1464; X86GFNI-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1465; X86GFNI-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero1466; X86GFNI-NEXT:    vgf2p8affineqb $0, %xmm0, %xmm1, %xmm11467; X86GFNI-NEXT:    vpextrd $1, %xmm1, %ebp1468; X86GFNI-NEXT:    bswapl %ebp1469; X86GFNI-NEXT:    shrdl $16, %ebp, %eax1470; X86GFNI-NEXT:    movl %eax, (%esp) # 4-byte Spill1471; X86GFNI-NEXT:    vmovd %xmm1, %ebx1472; X86GFNI-NEXT:    bswapl %ebx1473; X86GFNI-NEXT:    shrdl $16, %ebx, %ebp1474; X86GFNI-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero1475; X86GFNI-NEXT:    vgf2p8affineqb $0, %xmm0, %xmm1, %xmm11476; X86GFNI-NEXT:    vpextrd $1, %xmm1, %edi1477; X86GFNI-NEXT:    bswapl %edi1478; X86GFNI-NEXT:    shrdl $16, %edi, %ebx1479; X86GFNI-NEXT:    vmovd %xmm1, %edx1480; X86GFNI-NEXT:    bswapl %edx1481; X86GFNI-NEXT:    shrdl $16, %edx, %edi1482; X86GFNI-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero1483; X86GFNI-NEXT:    vgf2p8affineqb $0, %xmm0, %xmm1, %xmm01484; X86GFNI-NEXT:    vpextrd $1, %xmm0, %ecx1485; X86GFNI-NEXT:    bswapl %ecx1486; X86GFNI-NEXT:    shrdl $16, %ecx, %edx1487; X86GFNI-NEXT:    vmovd %xmm0, %esi1488; X86GFNI-NEXT:    bswapl %esi1489; X86GFNI-NEXT:    shrdl $16, %esi, %ecx1490; X86GFNI-NEXT:    movl {{[0-9]+}}(%esp), %eax1491; X86GFNI-NEXT:    movl %ecx, 60(%eax)1492; X86GFNI-NEXT:    movl %edx, 56(%eax)1493; X86GFNI-NEXT:    movl %edi, 52(%eax)1494; X86GFNI-NEXT:    movl %ebx, 48(%eax)1495; X86GFNI-NEXT:    movl %ebp, 44(%eax)1496; X86GFNI-NEXT:    movl (%esp), %ecx # 4-byte Reload1497; X86GFNI-NEXT:    movl %ecx, 40(%eax)1498; X86GFNI-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1499; X86GFNI-NEXT:    movl %ecx, 36(%eax)1500; X86GFNI-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1501; X86GFNI-NEXT:    movl %ecx, 32(%eax)1502; X86GFNI-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1503; X86GFNI-NEXT:    movl %ecx, 28(%eax)1504; X86GFNI-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1505; X86GFNI-NEXT:    movl %ecx, 24(%eax)1506; X86GFNI-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1507; X86GFNI-NEXT:    movl %ecx, 20(%eax)1508; X86GFNI-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1509; X86GFNI-NEXT:    movl %ecx, 16(%eax)1510; X86GFNI-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1511; X86GFNI-NEXT:    movl %ecx, 12(%eax)1512; X86GFNI-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1513; X86GFNI-NEXT:    movl %ecx, 8(%eax)1514; X86GFNI-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1515; X86GFNI-NEXT:    movl %ecx, 4(%eax)1516; X86GFNI-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1517; X86GFNI-NEXT:    movl %ecx, (%eax)1518; X86GFNI-NEXT:    shrl $16, %esi1519; X86GFNI-NEXT:    movw %si, 64(%eax)1520; X86GFNI-NEXT:    addl $44, %esp1521; X86GFNI-NEXT:    popl %esi1522; X86GFNI-NEXT:    popl %edi1523; X86GFNI-NEXT:    popl %ebx1524; X86GFNI-NEXT:    popl %ebp1525; X86GFNI-NEXT:    retl $41526;1527; X64GFNI-LABEL: large_promotion:1528; X64GFNI:       # %bb.0:1529; X64GFNI-NEXT:    pushq %r141530; X64GFNI-NEXT:    pushq %rbx1531; X64GFNI-NEXT:    movq %rdi, %rax1532; X64GFNI-NEXT:    vpbroadcastq {{.*#+}} xmm0 = [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]1533; X64GFNI-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero1534; X64GFNI-NEXT:    vgf2p8affineqb $0, %xmm0, %xmm1, %xmm11535; X64GFNI-NEXT:    vmovq %xmm1, %r101536; X64GFNI-NEXT:    bswapq %r101537; X64GFNI-NEXT:    vmovq %r9, %xmm11538; X64GFNI-NEXT:    vgf2p8affineqb $0, %xmm0, %xmm1, %xmm11539; X64GFNI-NEXT:    vmovq %xmm1, %rdi1540; X64GFNI-NEXT:    bswapq %rdi1541; X64GFNI-NEXT:    vmovq %r8, %xmm11542; X64GFNI-NEXT:    vgf2p8affineqb $0, %xmm0, %xmm1, %xmm11543; X64GFNI-NEXT:    vmovq %xmm1, %r81544; X64GFNI-NEXT:    bswapq %r81545; X64GFNI-NEXT:    movq %r8, %r91546; X64GFNI-NEXT:    shldq $16, %rdi, %r91547; X64GFNI-NEXT:    shldq $16, %r10, %rdi1548; X64GFNI-NEXT:    vmovq %rcx, %xmm11549; X64GFNI-NEXT:    vgf2p8affineqb $0, %xmm0, %xmm1, %xmm11550; X64GFNI-NEXT:    vmovq %xmm1, %rcx1551; X64GFNI-NEXT:    bswapq %rcx1552; X64GFNI-NEXT:    shrdq $48, %rcx, %r81553; X64GFNI-NEXT:    vmovq %rdx, %xmm11554; X64GFNI-NEXT:    vgf2p8affineqb $0, %xmm0, %xmm1, %xmm11555; X64GFNI-NEXT:    vmovq %xmm1, %rdx1556; X64GFNI-NEXT:    bswapq %rdx1557; X64GFNI-NEXT:    shrdq $48, %rdx, %rcx1558; X64GFNI-NEXT:    vmovq %rsi, %xmm11559; X64GFNI-NEXT:    vgf2p8affineqb $0, %xmm0, %xmm1, %xmm11560; X64GFNI-NEXT:    vmovq %xmm1, %rsi1561; X64GFNI-NEXT:    bswapq %rsi1562; X64GFNI-NEXT:    shrdq $48, %rsi, %rdx1563; X64GFNI-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero1564; X64GFNI-NEXT:    vgf2p8affineqb $0, %xmm0, %xmm1, %xmm11565; X64GFNI-NEXT:    vmovq %xmm1, %r111566; X64GFNI-NEXT:    bswapq %r111567; X64GFNI-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero1568; X64GFNI-NEXT:    vgf2p8affineqb $0, %xmm0, %xmm1, %xmm11569; X64GFNI-NEXT:    vmovq %xmm1, %rbx1570; X64GFNI-NEXT:    bswapq %rbx1571; X64GFNI-NEXT:    shrdq $48, %rbx, %r111572; X64GFNI-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero1573; X64GFNI-NEXT:    vgf2p8affineqb $0, %xmm0, %xmm1, %xmm01574; X64GFNI-NEXT:    vmovq %xmm0, %r141575; X64GFNI-NEXT:    bswapq %r141576; X64GFNI-NEXT:    shrdq $48, %r14, %rbx1577; X64GFNI-NEXT:    shrdq $48, %r10, %r141578; X64GFNI-NEXT:    shrq $48, %rsi1579; X64GFNI-NEXT:    movq %r14, 16(%rax)1580; X64GFNI-NEXT:    movq %rbx, 8(%rax)1581; X64GFNI-NEXT:    movq %r11, (%rax)1582; X64GFNI-NEXT:    movq %rdx, 56(%rax)1583; X64GFNI-NEXT:    movq %rcx, 48(%rax)1584; X64GFNI-NEXT:    movq %r8, 40(%rax)1585; X64GFNI-NEXT:    movq %r9, 32(%rax)1586; X64GFNI-NEXT:    movq %rdi, 24(%rax)1587; X64GFNI-NEXT:    movw %si, 64(%rax)1588; X64GFNI-NEXT:    popq %rbx1589; X64GFNI-NEXT:    popq %r141590; X64GFNI-NEXT:    retq1591  %Z = call i528 @llvm.bitreverse.i528(i528 %A)1592  ret i528 %Z1593}1594declare i528 @llvm.bitreverse.i528(i528)1595