brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.5 KiB · bfc982d Raw
211 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown | FileCheck %s --check-prefix=X863; RUN: llc < %s -mtriple=x86_64-unknown | FileCheck %s --check-prefix=X644 5define zeroext i8 @test_udivrem_zext_ah(i8 %x, i8 %y) {6; X86-LABEL: test_udivrem_zext_ah:7; X86:       # %bb.0:8; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax9; X86-NEXT:    divb {{[0-9]+}}(%esp)10; X86-NEXT:    movzbl %ah, %ecx11; X86-NEXT:    movb %al, z12; X86-NEXT:    movl %ecx, %eax13; X86-NEXT:    retl14;15; X64-LABEL: test_udivrem_zext_ah:16; X64:       # %bb.0:17; X64-NEXT:    movzbl %dil, %eax18; X64-NEXT:    divb %sil19; X64-NEXT:    movzbl %ah, %ecx20; X64-NEXT:    movb %al, z(%rip)21; X64-NEXT:    movl %ecx, %eax22; X64-NEXT:    retq23  %div = udiv i8 %x, %y24  store i8 %div, ptr @z25  %1 = urem i8 %x, %y26  ret i8 %127}28 29define zeroext i8 @test_urem_zext_ah(i8 %x, i8 %y) {30; X86-LABEL: test_urem_zext_ah:31; X86:       # %bb.0:32; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax33; X86-NEXT:    divb {{[0-9]+}}(%esp)34; X86-NEXT:    movzbl %ah, %eax35; X86-NEXT:    # kill: def $al killed $al killed $eax36; X86-NEXT:    retl37;38; X64-LABEL: test_urem_zext_ah:39; X64:       # %bb.0:40; X64-NEXT:    movzbl %dil, %eax41; X64-NEXT:    divb %sil42; X64-NEXT:    movzbl %ah, %eax43; X64-NEXT:    # kill: def $al killed $al killed $eax44; X64-NEXT:    retq45  %1 = urem i8 %x, %y46  ret i8 %147}48 49define i8 @test_urem_noext_ah(i8 %x, i8 %y) {50; X86-LABEL: test_urem_noext_ah:51; X86:       # %bb.0:52; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx53; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax54; X86-NEXT:    divb %cl55; X86-NEXT:    movzbl %ah, %eax56; X86-NEXT:    addb %cl, %al57; X86-NEXT:    # kill: def $al killed $al killed $eax58; X86-NEXT:    retl59;60; X64-LABEL: test_urem_noext_ah:61; X64:       # %bb.0:62; X64-NEXT:    movzbl %dil, %eax63; X64-NEXT:    divb %sil64; X64-NEXT:    movzbl %ah, %eax65; X64-NEXT:    addb %sil, %al66; X64-NEXT:    # kill: def $al killed $al killed $eax67; X64-NEXT:    retq68  %1 = urem i8 %x, %y69  %2 = add i8 %1, %y70  ret i8 %271}72 73define i64 @test_urem_zext64_ah(i8 %x, i8 %y) {74; X86-LABEL: test_urem_zext64_ah:75; X86:       # %bb.0:76; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax77; X86-NEXT:    divb {{[0-9]+}}(%esp)78; X86-NEXT:    movzbl %ah, %eax79; X86-NEXT:    xorl %edx, %edx80; X86-NEXT:    retl81;82; X64-LABEL: test_urem_zext64_ah:83; X64:       # %bb.0:84; X64-NEXT:    movzbl %dil, %eax85; X64-NEXT:    divb %sil86; X64-NEXT:    movzbl %ah, %eax87; X64-NEXT:    retq88  %1 = urem i8 %x, %y89  %2 = zext i8 %1 to i6490  ret i64 %291}92 93define signext i8 @test_sdivrem_sext_ah(i8 %x, i8 %y) {94; X86-LABEL: test_sdivrem_sext_ah:95; X86:       # %bb.0:96; X86-NEXT:    movsbl {{[0-9]+}}(%esp), %eax97; X86-NEXT:    idivb {{[0-9]+}}(%esp)98; X86-NEXT:    movsbl %ah, %ecx99; X86-NEXT:    movb %al, z100; X86-NEXT:    movl %ecx, %eax101; X86-NEXT:    retl102;103; X64-LABEL: test_sdivrem_sext_ah:104; X64:       # %bb.0:105; X64-NEXT:    movsbl %dil, %eax106; X64-NEXT:    idivb %sil107; X64-NEXT:    movsbl %ah, %ecx108; X64-NEXT:    movb %al, z(%rip)109; X64-NEXT:    movl %ecx, %eax110; X64-NEXT:    retq111  %div = sdiv i8 %x, %y112  store i8 %div, ptr @z113  %1 = srem i8 %x, %y114  ret i8 %1115}116 117define signext i8 @test_srem_sext_ah(i8 %x, i8 %y) {118; X86-LABEL: test_srem_sext_ah:119; X86:       # %bb.0:120; X86-NEXT:    movsbl {{[0-9]+}}(%esp), %eax121; X86-NEXT:    idivb {{[0-9]+}}(%esp)122; X86-NEXT:    movsbl %ah, %eax123; X86-NEXT:    # kill: def $al killed $al killed $eax124; X86-NEXT:    retl125;126; X64-LABEL: test_srem_sext_ah:127; X64:       # %bb.0:128; X64-NEXT:    movsbl %dil, %eax129; X64-NEXT:    idivb %sil130; X64-NEXT:    movsbl %ah, %eax131; X64-NEXT:    # kill: def $al killed $al killed $eax132; X64-NEXT:    retq133  %1 = srem i8 %x, %y134  ret i8 %1135}136 137define i8 @test_srem_noext_ah(i8 %x, i8 %y) {138; X86-LABEL: test_srem_noext_ah:139; X86:       # %bb.0:140; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx141; X86-NEXT:    movsbl {{[0-9]+}}(%esp), %eax142; X86-NEXT:    idivb %cl143; X86-NEXT:    movsbl %ah, %eax144; X86-NEXT:    addb %cl, %al145; X86-NEXT:    # kill: def $al killed $al killed $eax146; X86-NEXT:    retl147;148; X64-LABEL: test_srem_noext_ah:149; X64:       # %bb.0:150; X64-NEXT:    movsbl %dil, %eax151; X64-NEXT:    idivb %sil152; X64-NEXT:    movsbl %ah, %eax153; X64-NEXT:    addb %sil, %al154; X64-NEXT:    # kill: def $al killed $al killed $eax155; X64-NEXT:    retq156  %1 = srem i8 %x, %y157  %2 = add i8 %1, %y158  ret i8 %2159}160 161define i64 @test_srem_sext64_ah(i8 %x, i8 %y) {162; X86-LABEL: test_srem_sext64_ah:163; X86:       # %bb.0:164; X86-NEXT:    movsbl {{[0-9]+}}(%esp), %eax165; X86-NEXT:    idivb {{[0-9]+}}(%esp)166; X86-NEXT:    movsbl %ah, %eax167; X86-NEXT:    movl %eax, %edx168; X86-NEXT:    sarl $31, %edx169; X86-NEXT:    retl170;171; X64-LABEL: test_srem_sext64_ah:172; X64:       # %bb.0:173; X64-NEXT:    movsbl %dil, %eax174; X64-NEXT:    idivb %sil175; X64-NEXT:    movsbl %ah, %eax176; X64-NEXT:    cltq177; X64-NEXT:    retq178  %1 = srem i8 %x, %y179  %2 = sext i8 %1 to i64180  ret i64 %2181}182 183define i64 @pr25754(i8 %a, i8 %c) {184; X86-LABEL: pr25754:185; X86:       # %bb.0:186; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax187; X86-NEXT:    divb {{[0-9]+}}(%esp)188; X86-NEXT:    movzbl %ah, %ecx189; X86-NEXT:    movzbl %al, %eax190; X86-NEXT:    addl %ecx, %eax191; X86-NEXT:    xorl %edx, %edx192; X86-NEXT:    retl193;194; X64-LABEL: pr25754:195; X64:       # %bb.0:196; X64-NEXT:    movzbl %dil, %eax197; X64-NEXT:    divb %sil198; X64-NEXT:    movzbl %ah, %ecx199; X64-NEXT:    movzbl %al, %eax200; X64-NEXT:    addq %rcx, %rax201; X64-NEXT:    retq202  %r1 = urem i8 %a, %c203  %d1 = udiv i8 %a, %c204  %r2 = zext i8 %r1 to i64205  %d2 = zext i8 %d1 to i64206  %ret = add i64 %r2, %d2207  ret i64 %ret208}209 210@z = external dso_local global i8211