brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.6 KiB · a93be22 Raw
394 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-linux | FileCheck %s --check-prefix=X643; RUN: llc < %s -mtriple=i686 -mattr=cmov | FileCheck %s --check-prefix=X864 5declare  i4  @llvm.sshl.sat.i4   (i4,  i4)6declare  i8  @llvm.sshl.sat.i8   (i8,  i8)7declare  i15 @llvm.sshl.sat.i15  (i15, i15)8declare  i16 @llvm.sshl.sat.i16  (i16, i16)9declare  i18 @llvm.sshl.sat.i18  (i18, i18)10declare  i32 @llvm.sshl.sat.i32  (i32, i32)11declare  i64 @llvm.sshl.sat.i64  (i64, i64)12 13define i16 @func(i16 %x, i16 %y) nounwind {14; X64-LABEL: func:15; X64:       # %bb.0:16; X64-NEXT:    movl %esi, %ecx17; X64-NEXT:    movl %edi, %edx18; X64-NEXT:    shll %cl, %edi19; X64-NEXT:    movswl %di, %esi20; X64-NEXT:    # kill: def $cl killed $cl killed $ecx21; X64-NEXT:    sarl %cl, %esi22; X64-NEXT:    xorl %eax, %eax23; X64-NEXT:    testw %dx, %dx24; X64-NEXT:    sets %al25; X64-NEXT:    addl $32767, %eax # imm = 0x7FFF26; X64-NEXT:    cmpw %si, %dx27; X64-NEXT:    cmovel %edi, %eax28; X64-NEXT:    # kill: def $ax killed $ax killed $eax29; X64-NEXT:    retq30;31; X86-LABEL: func:32; X86:       # %bb.0:33; X86-NEXT:    pushl %edi34; X86-NEXT:    pushl %esi35; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx36; X86-NEXT:    movl %edx, %esi37; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx38; X86-NEXT:    shll %cl, %edx39; X86-NEXT:    movswl %dx, %edi40; X86-NEXT:    sarl %cl, %edi41; X86-NEXT:    xorl %eax, %eax42; X86-NEXT:    testw %si, %si43; X86-NEXT:    sets %al44; X86-NEXT:    addl $32767, %eax # imm = 0x7FFF45; X86-NEXT:    cmpw %di, %si46; X86-NEXT:    cmovel %edx, %eax47; X86-NEXT:    # kill: def $ax killed $ax killed $eax48; X86-NEXT:    popl %esi49; X86-NEXT:    popl %edi50; X86-NEXT:    retl51  %tmp = call i16 @llvm.sshl.sat.i16(i16 %x, i16 %y)52  ret i16 %tmp53}54 55define i16 @func2(i8 %x, i8 %y) nounwind {56; X64-LABEL: func2:57; X64:       # %bb.0:58; X64-NEXT:    movl %esi, %ecx59; X64-NEXT:    movsbl %dil, %eax60; X64-NEXT:    addl %eax, %eax61; X64-NEXT:    movl %eax, %edx62; X64-NEXT:    xorl %esi, %esi63; X64-NEXT:    testw %ax, %ax64; X64-NEXT:    sets %sil65; X64-NEXT:    addl $32767, %esi # imm = 0x7FFF66; X64-NEXT:    shll %cl, %eax67; X64-NEXT:    movswl %ax, %edi68; X64-NEXT:    # kill: def $cl killed $cl killed $ecx69; X64-NEXT:    sarl %cl, %edi70; X64-NEXT:    cmpw %di, %dx71; X64-NEXT:    cmovnel %esi, %eax72; X64-NEXT:    cwtl73; X64-NEXT:    shrl %eax74; X64-NEXT:    # kill: def $ax killed $ax killed $eax75; X64-NEXT:    retq76;77; X86-LABEL: func2:78; X86:       # %bb.0:79; X86-NEXT:    pushl %esi80; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx81; X86-NEXT:    movsbl {{[0-9]+}}(%esp), %eax82; X86-NEXT:    addl %eax, %eax83; X86-NEXT:    movl %eax, %edx84; X86-NEXT:    shll %cl, %edx85; X86-NEXT:    movswl %dx, %esi86; X86-NEXT:    sarl %cl, %esi87; X86-NEXT:    xorl %ecx, %ecx88; X86-NEXT:    testw %ax, %ax89; X86-NEXT:    sets %cl90; X86-NEXT:    addl $32767, %ecx # imm = 0x7FFF91; X86-NEXT:    cmpw %si, %ax92; X86-NEXT:    cmovel %edx, %ecx93; X86-NEXT:    movswl %cx, %eax94; X86-NEXT:    shrl %eax95; X86-NEXT:    # kill: def $ax killed $ax killed $eax96; X86-NEXT:    popl %esi97; X86-NEXT:    retl98  %x2 = sext i8 %x to i1599  %y2 = sext i8 %y to i15100  %tmp = call i15 @llvm.sshl.sat.i15(i15 %x2, i15 %y2)101  %tmp2 = sext i15 %tmp to i16102  ret i16 %tmp2103}104 105define i16 @func3(i15 %x, i8 %y) nounwind {106; X64-LABEL: func3:107; X64:       # %bb.0:108; X64-NEXT:    movl %esi, %ecx109; X64-NEXT:    shll $7, %ecx110; X64-NEXT:    addl %edi, %edi111; X64-NEXT:    movl %edi, %eax112; X64-NEXT:    shll %cl, %eax113; X64-NEXT:    movswl %ax, %edx114; X64-NEXT:    # kill: def $cl killed $cl killed $ecx115; X64-NEXT:    sarl %cl, %edx116; X64-NEXT:    xorl %ecx, %ecx117; X64-NEXT:    testw %di, %di118; X64-NEXT:    sets %cl119; X64-NEXT:    addl $32767, %ecx # imm = 0x7FFF120; X64-NEXT:    cmpw %dx, %di121; X64-NEXT:    cmovel %eax, %ecx122; X64-NEXT:    movswl %cx, %eax123; X64-NEXT:    shrl %eax124; X64-NEXT:    # kill: def $ax killed $ax killed $eax125; X64-NEXT:    retq126;127; X86-LABEL: func3:128; X86:       # %bb.0:129; X86-NEXT:    pushl %esi130; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax131; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx132; X86-NEXT:    shll $7, %ecx133; X86-NEXT:    addl %eax, %eax134; X86-NEXT:    movl %eax, %edx135; X86-NEXT:    shll %cl, %edx136; X86-NEXT:    movswl %dx, %esi137; X86-NEXT:    # kill: def $cl killed $cl killed $ecx138; X86-NEXT:    sarl %cl, %esi139; X86-NEXT:    xorl %ecx, %ecx140; X86-NEXT:    testw %ax, %ax141; X86-NEXT:    sets %cl142; X86-NEXT:    addl $32767, %ecx # imm = 0x7FFF143; X86-NEXT:    cmpw %si, %ax144; X86-NEXT:    cmovel %edx, %ecx145; X86-NEXT:    movswl %cx, %eax146; X86-NEXT:    shrl %eax147; X86-NEXT:    # kill: def $ax killed $ax killed $eax148; X86-NEXT:    popl %esi149; X86-NEXT:    retl150  %y2 = sext i8 %y to i15151  %y3 = shl i15 %y2, 7152  %tmp = call i15 @llvm.sshl.sat.i15(i15 %x, i15 %y3)153  %tmp2 = sext i15 %tmp to i16154  ret i16 %tmp2155}156 157define i4 @func4(i4 %x, i4 %y) nounwind {158; X64-LABEL: func4:159; X64:       # %bb.0:160; X64-NEXT:    movl %esi, %ecx161; X64-NEXT:    andb $15, %cl162; X64-NEXT:    shlb $4, %dil163; X64-NEXT:    movl %edi, %eax164; X64-NEXT:    shlb %cl, %al165; X64-NEXT:    movzbl %al, %edx166; X64-NEXT:    movl %edx, %esi167; X64-NEXT:    # kill: def $cl killed $cl killed $ecx168; X64-NEXT:    sarb %cl, %sil169; X64-NEXT:    xorl %eax, %eax170; X64-NEXT:    testb %dil, %dil171; X64-NEXT:    sets %al172; X64-NEXT:    addl $127, %eax173; X64-NEXT:    cmpb %sil, %dil174; X64-NEXT:    cmovel %edx, %eax175; X64-NEXT:    sarb $4, %al176; X64-NEXT:    # kill: def $al killed $al killed $eax177; X64-NEXT:    retq178;179; X86-LABEL: func4:180; X86:       # %bb.0:181; X86-NEXT:    pushl %esi182; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx183; X86-NEXT:    andb $15, %cl184; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %edx185; X86-NEXT:    shlb $4, %dl186; X86-NEXT:    movb %dl, %ch187; X86-NEXT:    shlb %cl, %ch188; X86-NEXT:    movzbl %ch, %esi189; X86-NEXT:    sarb %cl, %ch190; X86-NEXT:    xorl %eax, %eax191; X86-NEXT:    testb %dl, %dl192; X86-NEXT:    sets %al193; X86-NEXT:    addl $127, %eax194; X86-NEXT:    cmpb %ch, %dl195; X86-NEXT:    cmovel %esi, %eax196; X86-NEXT:    sarb $4, %al197; X86-NEXT:    # kill: def $al killed $al killed $eax198; X86-NEXT:    popl %esi199; X86-NEXT:    retl200  %tmp = call i4 @llvm.sshl.sat.i4(i4 %x, i4 %y)201  ret i4 %tmp202}203 204define i64 @func5(i64 %x, i64 %y) nounwind {205; X64-LABEL: func5:206; X64:       # %bb.0:207; X64-NEXT:    movq %rsi, %rcx208; X64-NEXT:    xorl %eax, %eax209; X64-NEXT:    testq %rdi, %rdi210; X64-NEXT:    sets %al211; X64-NEXT:    movabsq $9223372036854775807, %rdx # imm = 0x7FFFFFFFFFFFFFFF212; X64-NEXT:    addq %rax, %rdx213; X64-NEXT:    movq %rdi, %rax214; X64-NEXT:    shlq %cl, %rax215; X64-NEXT:    movq %rax, %rsi216; X64-NEXT:    # kill: def $cl killed $cl killed $rcx217; X64-NEXT:    sarq %cl, %rsi218; X64-NEXT:    cmpq %rsi, %rdi219; X64-NEXT:    cmovneq %rdx, %rax220; X64-NEXT:    retq221;222; X86-LABEL: func5:223; X86:       # %bb.0:224; X86-NEXT:    pushl %ebp225; X86-NEXT:    pushl %ebx226; X86-NEXT:    pushl %edi227; X86-NEXT:    pushl %esi228; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx229; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx230; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax231; X86-NEXT:    movl %edx, %ebx232; X86-NEXT:    shll %cl, %ebx233; X86-NEXT:    movl %eax, %esi234; X86-NEXT:    shldl %cl, %edx, %esi235; X86-NEXT:    xorl %edi, %edi236; X86-NEXT:    testb $32, %cl237; X86-NEXT:    cmovnel %ebx, %esi238; X86-NEXT:    cmovel %ebx, %edi239; X86-NEXT:    movl %esi, %edx240; X86-NEXT:    sarl %cl, %edx241; X86-NEXT:    movl %esi, %ebx242; X86-NEXT:    sarl $31, %ebx243; X86-NEXT:    testb $32, %cl244; X86-NEXT:    cmovel %edx, %ebx245; X86-NEXT:    movl %edi, %ebp246; X86-NEXT:    shrdl %cl, %esi, %ebp247; X86-NEXT:    testb $32, %cl248; X86-NEXT:    cmovnel %edx, %ebp249; X86-NEXT:    xorl %eax, %ebx250; X86-NEXT:    xorl {{[0-9]+}}(%esp), %ebp251; X86-NEXT:    sarl $31, %eax252; X86-NEXT:    movl %eax, %edx253; X86-NEXT:    xorl $2147483647, %edx # imm = 0x7FFFFFFF254; X86-NEXT:    orl %ebx, %ebp255; X86-NEXT:    notl %eax256; X86-NEXT:    cmovel %edi, %eax257; X86-NEXT:    cmovel %esi, %edx258; X86-NEXT:    popl %esi259; X86-NEXT:    popl %edi260; X86-NEXT:    popl %ebx261; X86-NEXT:    popl %ebp262; X86-NEXT:    retl263  %tmp = call i64 @llvm.sshl.sat.i64(i64 %x, i64 %y)264  ret i64 %tmp265}266 267define i18 @func6(i16 %x, i16 %y) nounwind {268; X64-LABEL: func6:269; X64:       # %bb.0:270; X64-NEXT:    movl %esi, %ecx271; X64-NEXT:    movswl %di, %edx272; X64-NEXT:    shll $14, %edx273; X64-NEXT:    movl %edx, %esi274; X64-NEXT:    shll %cl, %esi275; X64-NEXT:    movl %esi, %edi276; X64-NEXT:    # kill: def $cl killed $cl killed $ecx277; X64-NEXT:    sarl %cl, %edi278; X64-NEXT:    xorl %eax, %eax279; X64-NEXT:    testl %edx, %edx280; X64-NEXT:    sets %al281; X64-NEXT:    addl $2147483647, %eax # imm = 0x7FFFFFFF282; X64-NEXT:    cmpl %edi, %edx283; X64-NEXT:    cmovel %esi, %eax284; X64-NEXT:    sarl $14, %eax285; X64-NEXT:    retq286;287; X86-LABEL: func6:288; X86:       # %bb.0:289; X86-NEXT:    pushl %edi290; X86-NEXT:    pushl %esi291; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx292; X86-NEXT:    movswl {{[0-9]+}}(%esp), %edx293; X86-NEXT:    shll $14, %edx294; X86-NEXT:    movl %edx, %esi295; X86-NEXT:    shll %cl, %esi296; X86-NEXT:    movl %esi, %edi297; X86-NEXT:    sarl %cl, %edi298; X86-NEXT:    xorl %eax, %eax299; X86-NEXT:    testl %edx, %edx300; X86-NEXT:    sets %al301; X86-NEXT:    addl $2147483647, %eax # imm = 0x7FFFFFFF302; X86-NEXT:    cmpl %edi, %edx303; X86-NEXT:    cmovel %esi, %eax304; X86-NEXT:    sarl $14, %eax305; X86-NEXT:    popl %esi306; X86-NEXT:    popl %edi307; X86-NEXT:    retl308  %x2 = sext i16 %x to i18309  %y2 = sext i16 %y to i18310  %tmp = call i18 @llvm.sshl.sat.i18(i18 %x2, i18 %y2)311  ret i18 %tmp312}313 314define i32 @func7(i32 %x, i32 %y) nounwind {315; X64-LABEL: func7:316; X64:       # %bb.0:317; X64-NEXT:    movl %esi, %ecx318; X64-NEXT:    movl %edi, %edx319; X64-NEXT:    shll %cl, %edx320; X64-NEXT:    movl %edx, %esi321; X64-NEXT:    # kill: def $cl killed $cl killed $ecx322; X64-NEXT:    sarl %cl, %esi323; X64-NEXT:    xorl %eax, %eax324; X64-NEXT:    testl %edi, %edi325; X64-NEXT:    sets %al326; X64-NEXT:    addl $2147483647, %eax # imm = 0x7FFFFFFF327; X64-NEXT:    cmpl %esi, %edi328; X64-NEXT:    cmovel %edx, %eax329; X64-NEXT:    retq330;331; X86-LABEL: func7:332; X86:       # %bb.0:333; X86-NEXT:    pushl %edi334; X86-NEXT:    pushl %esi335; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx336; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx337; X86-NEXT:    movl %edx, %esi338; X86-NEXT:    shll %cl, %esi339; X86-NEXT:    movl %esi, %edi340; X86-NEXT:    sarl %cl, %edi341; X86-NEXT:    xorl %eax, %eax342; X86-NEXT:    testl %edx, %edx343; X86-NEXT:    sets %al344; X86-NEXT:    addl $2147483647, %eax # imm = 0x7FFFFFFF345; X86-NEXT:    cmpl %edi, %edx346; X86-NEXT:    cmovel %esi, %eax347; X86-NEXT:    popl %esi348; X86-NEXT:    popl %edi349; X86-NEXT:    retl350  %tmp = call i32 @llvm.sshl.sat.i32(i32 %x, i32 %y)351  ret i32 %tmp352}353 354define i8 @func8(i8 %x, i8 %y) nounwind {355; X64-LABEL: func8:356; X64:       # %bb.0:357; X64-NEXT:    movl %esi, %ecx358; X64-NEXT:    movl %edi, %eax359; X64-NEXT:    shlb %cl, %al360; X64-NEXT:    movzbl %al, %edx361; X64-NEXT:    movl %edx, %esi362; X64-NEXT:    # kill: def $cl killed $cl killed $ecx363; X64-NEXT:    sarb %cl, %sil364; X64-NEXT:    xorl %eax, %eax365; X64-NEXT:    testb %dil, %dil366; X64-NEXT:    sets %al367; X64-NEXT:    addl $127, %eax368; X64-NEXT:    cmpb %sil, %dil369; X64-NEXT:    cmovel %edx, %eax370; X64-NEXT:    # kill: def $al killed $al killed $eax371; X64-NEXT:    retq372;373; X86-LABEL: func8:374; X86:       # %bb.0:375; X86-NEXT:    pushl %esi376; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx377; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %edx378; X86-NEXT:    movb %dl, %ch379; X86-NEXT:    shlb %cl, %ch380; X86-NEXT:    movzbl %ch, %esi381; X86-NEXT:    sarb %cl, %ch382; X86-NEXT:    xorl %eax, %eax383; X86-NEXT:    testb %dl, %dl384; X86-NEXT:    sets %al385; X86-NEXT:    addl $127, %eax386; X86-NEXT:    cmpb %ch, %dl387; X86-NEXT:    cmovel %esi, %eax388; X86-NEXT:    # kill: def $al killed $al killed $eax389; X86-NEXT:    popl %esi390; X86-NEXT:    retl391  %tmp = call i8 @llvm.sshl.sat.i8(i8 %x, i8 %y)392  ret i8 %tmp393}394