93 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=i686-linux-gnu -global-isel -verify-machineinstrs < %s -o - | FileCheck %s --check-prefix=X864 5define i8 @test_mul_i8(i8 %arg1, i8 %arg2) nounwind {6; X64-LABEL: test_mul_i8:7; X64: # %bb.0:8; X64-NEXT: movsbl %dil, %eax9; X64-NEXT: imulb %sil10; X64-NEXT: retq11;12; X86-LABEL: test_mul_i8:13; X86: # %bb.0:14; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax15; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx16; X86-NEXT: cbtw17; X86-NEXT: imulb %cl18; X86-NEXT: retl19 %ret = mul i8 %arg1, %arg220 ret i8 %ret21}22 23define i16 @test_mul_i16(i16 %arg1, i16 %arg2) nounwind {24; X64-LABEL: test_mul_i16:25; X64: # %bb.0:26; X64-NEXT: movl %esi, %eax27; X64-NEXT: imulw %di, %ax28; X64-NEXT: # kill: def $ax killed $ax killed $eax29; X64-NEXT: retq30;31; X86-LABEL: test_mul_i16:32; X86: # %bb.0:33; X86-NEXT: movzwl {{[0-9]+}}(%esp), %ecx34; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax35; X86-NEXT: imulw %cx, %ax36; X86-NEXT: # kill: def $ax killed $ax killed $eax37; X86-NEXT: retl38 %ret = mul i16 %arg1, %arg239 ret i16 %ret40}41 42define i32 @test_mul_i32(i32 %arg1, i32 %arg2) nounwind {43; X64-LABEL: test_mul_i32:44; X64: # %bb.0:45; X64-NEXT: movl %esi, %eax46; X64-NEXT: imull %edi, %eax47; X64-NEXT: retq48;49; X86-LABEL: test_mul_i32:50; X86: # %bb.0:51; X86-NEXT: movl {{[0-9]+}}(%esp), %eax52; X86-NEXT: imull {{[0-9]+}}(%esp), %eax53; X86-NEXT: retl54 %ret = mul i32 %arg1, %arg255 ret i32 %ret56}57 58define i64 @test_mul_i64(i64 %arg1, i64 %arg2) nounwind {59; X64-LABEL: test_mul_i64:60; X64: # %bb.0:61; X64-NEXT: movq %rsi, %rax62; X64-NEXT: imulq %rdi, %rax63; X64-NEXT: retq64;65; X86-LABEL: test_mul_i64:66; X86: # %bb.0:67; X86-NEXT: pushl %edi68; X86-NEXT: pushl %esi69; X86-NEXT: movl {{[0-9]+}}(%esp), %eax70; X86-NEXT: movl {{[0-9]+}}(%esp), %edx71; X86-NEXT: movl {{[0-9]+}}(%esp), %esi72; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx73; X86-NEXT: imull %edx, %ecx74; X86-NEXT: movl {{[0-9]+}}(%esp), %edi75; X86-NEXT: imull %edx, %edi76; X86-NEXT: imull {{[0-9]+}}(%esp), %esi77; X86-NEXT: addl %edi, %esi78; X86-NEXT: mull %edx79; X86-NEXT: addl %esi, %edx80; X86-NEXT: movl %ecx, %eax81; X86-NEXT: popl %esi82; X86-NEXT: popl %edi83; X86-NEXT: retl84 %ret = mul i64 %arg1, %arg285 ret i64 %ret86}87 88;TODO: instruction selection not supported yet89;define i128 @test_mul_i128(i128 %arg1, i128 %arg2) nounwind {90; %ret = mul i128 %arg1, %arg291; ret i128 %ret92;}93