146 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=x86_64-linux-gnu -global-isel -verify-machineinstrs < %s -o - | FileCheck %s --check-prefix=X643; RUN: llc -mtriple=i386-linux-gnu -global-isel -verify-machineinstrs < %s -o - | FileCheck %s --check-prefix=X864 5define i128 @test_sub_i128(i128 %arg1, i128 %arg2) nounwind {6; X64-LABEL: test_sub_i128:7; X64: # %bb.0:8; X64-NEXT: movq %rdi, %rax9; X64-NEXT: subq %rdx, %rax10; X64-NEXT: setb %dl11; X64-NEXT: cmpb $1, %dl12; X64-NEXT: sbbq %rcx, %rsi13; X64-NEXT: movq %rsi, %rdx14; X64-NEXT: retq15;16; X86-LABEL: test_sub_i128:17; X86: # %bb.0:18; X86-NEXT: pushl %ebx19; X86-NEXT: pushl %edi20; X86-NEXT: pushl %esi21; X86-NEXT: movl {{[0-9]+}}(%esp), %eax22; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx23; X86-NEXT: movl {{[0-9]+}}(%esp), %edx24; X86-NEXT: movl {{[0-9]+}}(%esp), %esi25; X86-NEXT: movl {{[0-9]+}}(%esp), %edi26; X86-NEXT: subl {{[0-9]+}}(%esp), %ecx27; X86-NEXT: setb %bl28; X86-NEXT: cmpb $1, %bl29; X86-NEXT: sbbl {{[0-9]+}}(%esp), %edx30; X86-NEXT: setb %bl31; X86-NEXT: cmpb $1, %bl32; X86-NEXT: sbbl {{[0-9]+}}(%esp), %esi33; X86-NEXT: setb %bl34; X86-NEXT: cmpb $1, %bl35; X86-NEXT: sbbl {{[0-9]+}}(%esp), %edi36; X86-NEXT: movl %ecx, (%eax)37; X86-NEXT: movl %edx, 4(%eax)38; X86-NEXT: movl %esi, 8(%eax)39; X86-NEXT: movl %edi, 12(%eax)40; X86-NEXT: popl %esi41; X86-NEXT: popl %edi42; X86-NEXT: popl %ebx43; X86-NEXT: retl44 %ret = sub i128 %arg1, %arg245 ret i128 %ret46}47 48define i64 @test_sub_i64(i64 %arg1, i64 %arg2) {49; X64-LABEL: test_sub_i64:50; X64: # %bb.0:51; X64-NEXT: movq %rdi, %rax52; X64-NEXT: subq %rsi, %rax53; X64-NEXT: retq54;55; X86-LABEL: test_sub_i64:56; X86: # %bb.0:57; X86-NEXT: movl {{[0-9]+}}(%esp), %eax58; X86-NEXT: movl {{[0-9]+}}(%esp), %edx59; X86-NEXT: subl {{[0-9]+}}(%esp), %eax60; X86-NEXT: setb %cl61; X86-NEXT: cmpb $1, %cl62; X86-NEXT: sbbl {{[0-9]+}}(%esp), %edx63; X86-NEXT: retl64 %ret = sub i64 %arg1, %arg265 ret i64 %ret66}67 68define i32 @test_sub_i32(i32 %arg1, i32 %arg2) {69; X64-LABEL: test_sub_i32:70; X64: # %bb.0:71; X64-NEXT: movl %edi, %eax72; X64-NEXT: subl %esi, %eax73; X64-NEXT: retq74;75; X86-LABEL: test_sub_i32:76; X86: # %bb.0:77; X86-NEXT: movl {{[0-9]+}}(%esp), %eax78; X86-NEXT: subl {{[0-9]+}}(%esp), %eax79; X86-NEXT: retl80 %ret = sub i32 %arg1, %arg281 ret i32 %ret82}83 84define i16 @test_sub_i16(i16 %arg1, i16 %arg2) {85; X64-LABEL: test_sub_i16:86; X64: # %bb.0:87; X64-NEXT: movl %edi, %eax88; X64-NEXT: subw %si, %ax89; X64-NEXT: # kill: def $ax killed $ax killed $eax90; X64-NEXT: retq91;92; X86-LABEL: test_sub_i16:93; X86: # %bb.0:94; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax95; X86-NEXT: movzwl {{[0-9]+}}(%esp), %ecx96; X86-NEXT: subw %cx, %ax97; X86-NEXT: # kill: def $ax killed $ax killed $eax98; X86-NEXT: retl99 %ret = sub i16 %arg1, %arg2100 ret i16 %ret101}102 103define i8 @test_sub_i8(i8 %arg1, i8 %arg2) {104; X64-LABEL: test_sub_i8:105; X64: # %bb.0:106; X64-NEXT: movl %edi, %eax107; X64-NEXT: subb %sil, %al108; X64-NEXT: # kill: def $al killed $al killed $eax109; X64-NEXT: retq110;111; X86-LABEL: test_sub_i8:112; X86: # %bb.0:113; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax114; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx115; X86-NEXT: subb %cl, %al116; X86-NEXT: # kill: def $al killed $al killed $eax117; X86-NEXT: retl118 %ret = sub i8 %arg1, %arg2119 ret i8 %ret120}121 122define i32 @test_sub_i1(i32 %arg1, i32 %arg2) {123; X64-LABEL: test_sub_i1:124; X64: # %bb.0:125; X64-NEXT: cmpl %esi, %edi126; X64-NEXT: sete %al127; X64-NEXT: subb %al, %al128; X64-NEXT: movzbl %al, %eax129; X64-NEXT: andl $1, %eax130; X64-NEXT: retq131;132; X86-LABEL: test_sub_i1:133; X86: # %bb.0:134; X86-NEXT: movl {{[0-9]+}}(%esp), %eax135; X86-NEXT: cmpl %eax, {{[0-9]+}}(%esp)136; X86-NEXT: sete %al137; X86-NEXT: subb %al, %al138; X86-NEXT: movzbl %al, %eax139; X86-NEXT: andl $1, %eax140; X86-NEXT: retl141 %c = icmp eq i32 %arg1, %arg2142 %x = sub i1 %c , %c143 %ret = zext i1 %x to i32144 ret i32 %ret145}146