aboutsummaryrefslogtreecommitdiff
path: root/test/CodeGen/X86/x86-64-psub.ll
diff options
context:
space:
mode:
Diffstat (limited to 'test/CodeGen/X86/x86-64-psub.ll')
-rw-r--r--test/CodeGen/X86/x86-64-psub.ll171
1 files changed, 106 insertions, 65 deletions
diff --git a/test/CodeGen/X86/x86-64-psub.ll b/test/CodeGen/X86/x86-64-psub.ll
index 2e39c145919f..e1ca8680f05a 100644
--- a/test/CodeGen/X86/x86-64-psub.ll
+++ b/test/CodeGen/X86/x86-64-psub.ll
@@ -1,3 +1,4 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -mtriple=x86_64-pc-linux -mattr=mmx < %s | FileCheck %s
; MMX packed sub opcodes were wrongly marked as commutative.
@@ -8,6 +9,21 @@ declare { i64, double } @getFirstParam()
declare { i64, double } @getSecondParam()
define i64 @test_psubb() {
+; CHECK-LABEL: test_psubb:
+; CHECK: # %bb.0: # %entry
+; CHECK-NEXT: pushq %rbx
+; CHECK-NEXT: .cfi_def_cfa_offset 16
+; CHECK-NEXT: .cfi_offset %rbx, -16
+; CHECK-NEXT: callq getFirstParam
+; CHECK-NEXT: movq %rax, %rbx
+; CHECK-NEXT: callq getSecondParam
+; CHECK-NEXT: movq %rbx, %mm0
+; CHECK-NEXT: movq %rax, %mm1
+; CHECK-NEXT: psubb %mm1, %mm0
+; CHECK-NEXT: movq %mm0, %rax
+; CHECK-NEXT: popq %rbx
+; CHECK-NEXT: .cfi_def_cfa_offset 8
+; CHECK-NEXT: retq
entry:
%call = tail call { i64, double } @getFirstParam()
%0 = extractvalue { i64, double } %call, 0
@@ -26,16 +42,22 @@ entry:
ret i64 %retval.0.extract.i15
}
-; CHECK-LABEL: test_psubb:
-; CHECK: callq getFirstParam
-; CHECK: movq %rax, [[TEMP:%[a-z0-9]+]]
-; CHECK: callq getSecondParam
-; CHECK: movd [[TEMP]], [[PARAM1:%[a-z0-9]+]]
-; CHECK: movd %rax, [[PARAM2:%[a-z0-9]+]]
-; CHECK: psubb [[PARAM2]], [[PARAM1]]
-; CHECK: ret
-
define i64 @test_psubw() {
+; CHECK-LABEL: test_psubw:
+; CHECK: # %bb.0: # %entry
+; CHECK-NEXT: pushq %rbx
+; CHECK-NEXT: .cfi_def_cfa_offset 16
+; CHECK-NEXT: .cfi_offset %rbx, -16
+; CHECK-NEXT: callq getFirstParam
+; CHECK-NEXT: movq %rax, %rbx
+; CHECK-NEXT: callq getSecondParam
+; CHECK-NEXT: movq %rbx, %mm0
+; CHECK-NEXT: movq %rax, %mm1
+; CHECK-NEXT: psubw %mm1, %mm0
+; CHECK-NEXT: movq %mm0, %rax
+; CHECK-NEXT: popq %rbx
+; CHECK-NEXT: .cfi_def_cfa_offset 8
+; CHECK-NEXT: retq
entry:
%call = tail call { i64, double } @getFirstParam()
%0 = extractvalue { i64, double } %call, 0
@@ -54,17 +76,22 @@ entry:
ret i64 %retval.0.extract.i15
}
-; CHECK-LABEL: test_psubw:
-; CHECK: callq getFirstParam
-; CHECK: movq %rax, [[TEMP:%[a-z0-9]+]]
-; CHECK: callq getSecondParam
-; CHECK: movd [[TEMP]], [[PARAM1:%[a-z0-9]+]]
-; CHECK: movd %rax, [[PARAM2:%[a-z0-9]+]]
-; CHECK: psubw [[PARAM2]], [[PARAM1]]
-; CHECK: ret
-
-
define i64 @test_psubd() {
+; CHECK-LABEL: test_psubd:
+; CHECK: # %bb.0: # %entry
+; CHECK-NEXT: pushq %rbx
+; CHECK-NEXT: .cfi_def_cfa_offset 16
+; CHECK-NEXT: .cfi_offset %rbx, -16
+; CHECK-NEXT: callq getFirstParam
+; CHECK-NEXT: movq %rax, %rbx
+; CHECK-NEXT: callq getSecondParam
+; CHECK-NEXT: movq %rbx, %mm0
+; CHECK-NEXT: movq %rax, %mm1
+; CHECK-NEXT: psubd %mm1, %mm0
+; CHECK-NEXT: movq %mm0, %rax
+; CHECK-NEXT: popq %rbx
+; CHECK-NEXT: .cfi_def_cfa_offset 8
+; CHECK-NEXT: retq
entry:
%call = tail call { i64, double } @getFirstParam()
%0 = extractvalue { i64, double } %call, 0
@@ -83,16 +110,22 @@ entry:
ret i64 %retval.0.extract.i15
}
-; CHECK-LABEL: test_psubd:
-; CHECK: callq getFirstParam
-; CHECK: movq %rax, [[TEMP:%[a-z0-9]+]]
-; CHECK: callq getSecondParam
-; CHECK: movd [[TEMP]], [[PARAM1:%[a-z0-9]+]]
-; CHECK: movd %rax, [[PARAM2:%[a-z0-9]+]]
-; CHECK: psubd [[PARAM2]], [[PARAM1]]
-; CHECK: ret
-
define i64 @test_psubsb() {
+; CHECK-LABEL: test_psubsb:
+; CHECK: # %bb.0: # %entry
+; CHECK-NEXT: pushq %rbx
+; CHECK-NEXT: .cfi_def_cfa_offset 16
+; CHECK-NEXT: .cfi_offset %rbx, -16
+; CHECK-NEXT: callq getFirstParam
+; CHECK-NEXT: movq %rax, %rbx
+; CHECK-NEXT: callq getSecondParam
+; CHECK-NEXT: movq %rbx, %mm0
+; CHECK-NEXT: movq %rax, %mm1
+; CHECK-NEXT: psubsb %mm1, %mm0
+; CHECK-NEXT: movq %mm0, %rax
+; CHECK-NEXT: popq %rbx
+; CHECK-NEXT: .cfi_def_cfa_offset 8
+; CHECK-NEXT: retq
entry:
%call = tail call { i64, double } @getFirstParam()
%0 = extractvalue { i64, double } %call, 0
@@ -111,16 +144,22 @@ entry:
ret i64 %retval.0.extract.i15
}
-; CHECK-LABEL: test_psubsb:
-; CHECK: callq getFirstParam
-; CHECK: movq %rax, [[TEMP:%[a-z0-9]+]]
-; CHECK: callq getSecondParam
-; CHECK: movd [[TEMP]], [[PARAM1:%[a-z0-9]+]]
-; CHECK: movd %rax, [[PARAM2:%[a-z0-9]+]]
-; CHECK: psubsb [[PARAM2]], [[PARAM1]]
-; CHECK: ret
-
define i64 @test_psubswv() {
+; CHECK-LABEL: test_psubswv:
+; CHECK: # %bb.0: # %entry
+; CHECK-NEXT: pushq %rbx
+; CHECK-NEXT: .cfi_def_cfa_offset 16
+; CHECK-NEXT: .cfi_offset %rbx, -16
+; CHECK-NEXT: callq getFirstParam
+; CHECK-NEXT: movq %rax, %rbx
+; CHECK-NEXT: callq getSecondParam
+; CHECK-NEXT: movq %rbx, %mm0
+; CHECK-NEXT: movq %rax, %mm1
+; CHECK-NEXT: psubsw %mm1, %mm0
+; CHECK-NEXT: movq %mm0, %rax
+; CHECK-NEXT: popq %rbx
+; CHECK-NEXT: .cfi_def_cfa_offset 8
+; CHECK-NEXT: retq
entry:
%call = tail call { i64, double } @getFirstParam()
%0 = extractvalue { i64, double } %call, 0
@@ -139,16 +178,22 @@ entry:
ret i64 %retval.0.extract.i15
}
-; CHECK-LABEL: test_psubswv:
-; CHECK: callq getFirstParam
-; CHECK: movq %rax, [[TEMP:%[a-z0-9]+]]
-; CHECK: callq getSecondParam
-; CHECK: movd [[TEMP]], [[PARAM1:%[a-z0-9]+]]
-; CHECK: movd %rax, [[PARAM2:%[a-z0-9]+]]
-; CHECK: psubsw [[PARAM2]], [[PARAM1]]
-; CHECK: ret
-
define i64 @test_psubusbv() {
+; CHECK-LABEL: test_psubusbv:
+; CHECK: # %bb.0: # %entry
+; CHECK-NEXT: pushq %rbx
+; CHECK-NEXT: .cfi_def_cfa_offset 16
+; CHECK-NEXT: .cfi_offset %rbx, -16
+; CHECK-NEXT: callq getFirstParam
+; CHECK-NEXT: movq %rax, %rbx
+; CHECK-NEXT: callq getSecondParam
+; CHECK-NEXT: movq %rbx, %mm0
+; CHECK-NEXT: movq %rax, %mm1
+; CHECK-NEXT: psubusb %mm1, %mm0
+; CHECK-NEXT: movq %mm0, %rax
+; CHECK-NEXT: popq %rbx
+; CHECK-NEXT: .cfi_def_cfa_offset 8
+; CHECK-NEXT: retq
entry:
%call = tail call { i64, double } @getFirstParam()
%0 = extractvalue { i64, double } %call, 0
@@ -167,16 +212,22 @@ entry:
ret i64 %retval.0.extract.i15
}
-; CHECK-LABEL: test_psubusbv:
-; CHECK: callq getFirstParam
-; CHECK: movq %rax, [[TEMP:%[a-z0-9]+]]
-; CHECK: callq getSecondParam
-; CHECK: movd [[TEMP]], [[PARAM1:%[a-z0-9]+]]
-; CHECK: movd %rax, [[PARAM2:%[a-z0-9]+]]
-; CHECK: psubusb [[PARAM2]], [[PARAM1]]
-; CHECK: ret
-
define i64 @test_psubuswv() {
+; CHECK-LABEL: test_psubuswv:
+; CHECK: # %bb.0: # %entry
+; CHECK-NEXT: pushq %rbx
+; CHECK-NEXT: .cfi_def_cfa_offset 16
+; CHECK-NEXT: .cfi_offset %rbx, -16
+; CHECK-NEXT: callq getFirstParam
+; CHECK-NEXT: movq %rax, %rbx
+; CHECK-NEXT: callq getSecondParam
+; CHECK-NEXT: movq %rbx, %mm0
+; CHECK-NEXT: movq %rax, %mm1
+; CHECK-NEXT: psubusw %mm1, %mm0
+; CHECK-NEXT: movq %mm0, %rax
+; CHECK-NEXT: popq %rbx
+; CHECK-NEXT: .cfi_def_cfa_offset 8
+; CHECK-NEXT: retq
entry:
%call = tail call { i64, double } @getFirstParam()
%0 = extractvalue { i64, double } %call, 0
@@ -195,16 +246,6 @@ entry:
ret i64 %retval.0.extract.i15
}
-; CHECK-LABEL: test_psubuswv:
-; CHECK: callq getFirstParam
-; CHECK: movq %rax, [[TEMP:%[a-z0-9]+]]
-; CHECK: callq getSecondParam
-; CHECK: movd [[TEMP]], [[PARAM1:%[a-z0-9]+]]
-; CHECK: movd %rax, [[PARAM2:%[a-z0-9]+]]
-; CHECK: psubusw [[PARAM2]], [[PARAM1]]
-; CHECK: ret
-
-
declare x86_mmx @llvm.x86.mmx.psubus.w(x86_mmx, x86_mmx) nounwind readnone
declare x86_mmx @llvm.x86.mmx.psubus.b(x86_mmx, x86_mmx) nounwind readnone