forked from OSchip/llvm-project
[X86][MMX] Regenerate MMX PSUB commutation test
llvm-svn: 325685
This commit is contained in:
parent
e1f3de55ac
commit
9c669e13c9
|
@ -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,20 @@ 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: retq
|
||||
entry:
|
||||
%call = tail call { i64, double } @getFirstParam()
|
||||
%0 = extractvalue { i64, double } %call, 0
|
||||
|
@ -26,16 +41,21 @@ 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: movq [[TEMP]], [[PARAM1:%[a-z0-9]+]]
|
||||
; CHECK: movq %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: retq
|
||||
entry:
|
||||
%call = tail call { i64, double } @getFirstParam()
|
||||
%0 = extractvalue { i64, double } %call, 0
|
||||
|
@ -54,17 +74,21 @@ 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: movq [[TEMP]], [[PARAM1:%[a-z0-9]+]]
|
||||
; CHECK: movq %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: retq
|
||||
entry:
|
||||
%call = tail call { i64, double } @getFirstParam()
|
||||
%0 = extractvalue { i64, double } %call, 0
|
||||
|
@ -83,16 +107,21 @@ 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: movq [[TEMP]], [[PARAM1:%[a-z0-9]+]]
|
||||
; CHECK: movq %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: retq
|
||||
entry:
|
||||
%call = tail call { i64, double } @getFirstParam()
|
||||
%0 = extractvalue { i64, double } %call, 0
|
||||
|
@ -111,16 +140,21 @@ 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: movq [[TEMP]], [[PARAM1:%[a-z0-9]+]]
|
||||
; CHECK: movq %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: retq
|
||||
entry:
|
||||
%call = tail call { i64, double } @getFirstParam()
|
||||
%0 = extractvalue { i64, double } %call, 0
|
||||
|
@ -139,16 +173,21 @@ 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: movq [[TEMP]], [[PARAM1:%[a-z0-9]+]]
|
||||
; CHECK: movq %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: retq
|
||||
entry:
|
||||
%call = tail call { i64, double } @getFirstParam()
|
||||
%0 = extractvalue { i64, double } %call, 0
|
||||
|
@ -167,16 +206,21 @@ 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: movq [[TEMP]], [[PARAM1:%[a-z0-9]+]]
|
||||
; CHECK: movq %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: retq
|
||||
entry:
|
||||
%call = tail call { i64, double } @getFirstParam()
|
||||
%0 = extractvalue { i64, double } %call, 0
|
||||
|
@ -195,16 +239,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: movq [[TEMP]], [[PARAM1:%[a-z0-9]+]]
|
||||
; CHECK: movq %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
|
||||
|
|
Loading…
Reference in New Issue