-; RUN: llc < %s -march=x86-64 | grep mul | count 3
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc < %s -mtriple=x86_64-unknown | FileCheck %s --check-prefix=X64
define i128 @foo(i128 %t, i128 %u) {
+; X64-LABEL: foo:
+; X64: # BB#0:
+; X64-NEXT: movq %rdx, %r8
+; X64-NEXT: imulq %rdi, %rcx
+; X64-NEXT: movq %rdi, %rax
+; X64-NEXT: mulq %r8
+; X64-NEXT: addq %rcx, %rdx
+; X64-NEXT: imulq %r8, %rsi
+; X64-NEXT: addq %rsi, %rdx
+; X64-NEXT: retq
%k = mul i128 %t, %u
ret i128 %k
}
-; RUN: llc < %s -march=x86 | grep mul | count 3
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc < %s -mtriple=i386-unknown | FileCheck %s --check-prefix=X32
+; RUN: llc < %s -mtriple=x86_64-unknown | FileCheck %s --check-prefix=X64
-define i64 @foo(i64 %t, i64 %u) {
+define i64 @foo(i64 %t, i64 %u) nounwind {
+; X32-LABEL: foo:
+; X32: # BB#0:
+; X32-NEXT: pushl %esi
+; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx
+; X32-NEXT: movl {{[0-9]+}}(%esp), %esi
+; X32-NEXT: movl %ecx, %eax
+; X32-NEXT: mull %esi
+; X32-NEXT: imull {{[0-9]+}}(%esp), %ecx
+; X32-NEXT: addl %ecx, %edx
+; X32-NEXT: imull {{[0-9]+}}(%esp), %esi
+; X32-NEXT: addl %esi, %edx
+; X32-NEXT: popl %esi
+; X32-NEXT: retl
+;
+; X64-LABEL: foo:
+; X64: # BB#0:
+; X64-NEXT: imulq %rsi, %rdi
+; X64-NEXT: movq %rdi, %rax
+; X64-NEXT: retq
%k = mul i64 %t, %u
ret i64 %k
}