mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
[X86] Allow more cmpps/pd immediate encodings to be commuted during isel.
The code that checks the immediate wasn't masking to the lower 3-bits like the code in X86InstrInfo.cpp that's used by the peephole pass does. llvm-svn: 322060
This commit is contained in:
parent
d58a989008
commit
922dfb8775
@ -2398,8 +2398,8 @@ let Constraints = "$src1 = $dst" in {
|
|||||||
}
|
}
|
||||||
|
|
||||||
def CommutableCMPCC : PatLeaf<(imm), [{
|
def CommutableCMPCC : PatLeaf<(imm), [{
|
||||||
return (N->getZExtValue() == 0x00 || N->getZExtValue() == 0x03 ||
|
uint64_t Imm = N->getZExtValue() & 0x7;
|
||||||
N->getZExtValue() == 0x04 || N->getZExtValue() == 0x07);
|
return (Imm == 0x00 || Imm == 0x03 || Imm == 0x04 || Imm == 0x07);
|
||||||
}]>;
|
}]>;
|
||||||
|
|
||||||
// Patterns to select compares with loads in first operand.
|
// Patterns to select compares with loads in first operand.
|
||||||
|
@ -112,14 +112,12 @@ define <4 x i32> @commute_cmpps_ueq(<4 x float>* %a0, <4 x float> %a1) {
|
|||||||
;
|
;
|
||||||
; AVX-LABEL: commute_cmpps_ueq:
|
; AVX-LABEL: commute_cmpps_ueq:
|
||||||
; AVX: # %bb.0:
|
; AVX: # %bb.0:
|
||||||
; AVX-NEXT: vmovaps (%rdi), %xmm1
|
; AVX-NEXT: vcmpeq_uqps (%rdi), %xmm0, %xmm0
|
||||||
; AVX-NEXT: vcmpeq_uqps %xmm0, %xmm1, %xmm0
|
|
||||||
; AVX-NEXT: retq
|
; AVX-NEXT: retq
|
||||||
;
|
;
|
||||||
; AVX512-LABEL: commute_cmpps_ueq:
|
; AVX512-LABEL: commute_cmpps_ueq:
|
||||||
; AVX512: # %bb.0:
|
; AVX512: # %bb.0:
|
||||||
; AVX512-NEXT: vmovaps (%rdi), %xmm1
|
; AVX512-NEXT: vcmpeq_uqps (%rdi), %xmm0, %k1
|
||||||
; AVX512-NEXT: vcmpeq_uqps %xmm0, %xmm1, %k1
|
|
||||||
; AVX512-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0
|
; AVX512-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0
|
||||||
; AVX512-NEXT: vmovdqa32 %xmm0, %xmm0 {%k1} {z}
|
; AVX512-NEXT: vmovdqa32 %xmm0, %xmm0 {%k1} {z}
|
||||||
; AVX512-NEXT: retq
|
; AVX512-NEXT: retq
|
||||||
@ -141,14 +139,12 @@ define <4 x i32> @commute_cmpps_one(<4 x float>* %a0, <4 x float> %a1) {
|
|||||||
;
|
;
|
||||||
; AVX-LABEL: commute_cmpps_one:
|
; AVX-LABEL: commute_cmpps_one:
|
||||||
; AVX: # %bb.0:
|
; AVX: # %bb.0:
|
||||||
; AVX-NEXT: vmovaps (%rdi), %xmm1
|
; AVX-NEXT: vcmpneq_oqps (%rdi), %xmm0, %xmm0
|
||||||
; AVX-NEXT: vcmpneq_oqps %xmm0, %xmm1, %xmm0
|
|
||||||
; AVX-NEXT: retq
|
; AVX-NEXT: retq
|
||||||
;
|
;
|
||||||
; AVX512-LABEL: commute_cmpps_one:
|
; AVX512-LABEL: commute_cmpps_one:
|
||||||
; AVX512: # %bb.0:
|
; AVX512: # %bb.0:
|
||||||
; AVX512-NEXT: vmovaps (%rdi), %xmm1
|
; AVX512-NEXT: vcmpneq_oqps (%rdi), %xmm0, %k1
|
||||||
; AVX512-NEXT: vcmpneq_oqps %xmm0, %xmm1, %k1
|
|
||||||
; AVX512-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0
|
; AVX512-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0
|
||||||
; AVX512-NEXT: vmovdqa32 %xmm0, %xmm0 {%k1} {z}
|
; AVX512-NEXT: vmovdqa32 %xmm0, %xmm0 {%k1} {z}
|
||||||
; AVX512-NEXT: retq
|
; AVX512-NEXT: retq
|
||||||
@ -325,14 +321,12 @@ define <8 x i32> @commute_cmpps_ueq_ymm(<8 x float>* %a0, <8 x float> %a1) {
|
|||||||
;
|
;
|
||||||
; AVX-LABEL: commute_cmpps_ueq_ymm:
|
; AVX-LABEL: commute_cmpps_ueq_ymm:
|
||||||
; AVX: # %bb.0:
|
; AVX: # %bb.0:
|
||||||
; AVX-NEXT: vmovaps (%rdi), %ymm1
|
; AVX-NEXT: vcmpeq_uqps (%rdi), %ymm0, %ymm0
|
||||||
; AVX-NEXT: vcmpeq_uqps %ymm0, %ymm1, %ymm0
|
|
||||||
; AVX-NEXT: retq
|
; AVX-NEXT: retq
|
||||||
;
|
;
|
||||||
; AVX512-LABEL: commute_cmpps_ueq_ymm:
|
; AVX512-LABEL: commute_cmpps_ueq_ymm:
|
||||||
; AVX512: # %bb.0:
|
; AVX512: # %bb.0:
|
||||||
; AVX512-NEXT: vmovaps (%rdi), %ymm1
|
; AVX512-NEXT: vcmpeq_uqps (%rdi), %ymm0, %k1
|
||||||
; AVX512-NEXT: vcmpeq_uqps %ymm0, %ymm1, %k1
|
|
||||||
; AVX512-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
|
; AVX512-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
|
||||||
; AVX512-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z}
|
; AVX512-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z}
|
||||||
; AVX512-NEXT: retq
|
; AVX512-NEXT: retq
|
||||||
@ -359,14 +353,12 @@ define <8 x i32> @commute_cmpps_one_ymm(<8 x float>* %a0, <8 x float> %a1) {
|
|||||||
;
|
;
|
||||||
; AVX-LABEL: commute_cmpps_one_ymm:
|
; AVX-LABEL: commute_cmpps_one_ymm:
|
||||||
; AVX: # %bb.0:
|
; AVX: # %bb.0:
|
||||||
; AVX-NEXT: vmovaps (%rdi), %ymm1
|
; AVX-NEXT: vcmpneq_oqps (%rdi), %ymm0, %ymm0
|
||||||
; AVX-NEXT: vcmpneq_oqps %ymm0, %ymm1, %ymm0
|
|
||||||
; AVX-NEXT: retq
|
; AVX-NEXT: retq
|
||||||
;
|
;
|
||||||
; AVX512-LABEL: commute_cmpps_one_ymm:
|
; AVX512-LABEL: commute_cmpps_one_ymm:
|
||||||
; AVX512: # %bb.0:
|
; AVX512: # %bb.0:
|
||||||
; AVX512-NEXT: vmovaps (%rdi), %ymm1
|
; AVX512-NEXT: vcmpneq_oqps (%rdi), %ymm0, %k1
|
||||||
; AVX512-NEXT: vcmpneq_oqps %ymm0, %ymm1, %k1
|
|
||||||
; AVX512-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
|
; AVX512-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
|
||||||
; AVX512-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z}
|
; AVX512-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z}
|
||||||
; AVX512-NEXT: retq
|
; AVX512-NEXT: retq
|
||||||
@ -522,14 +514,12 @@ define <2 x i64> @commute_cmppd_ueq(<2 x double>* %a0, <2 x double> %a1) {
|
|||||||
;
|
;
|
||||||
; AVX-LABEL: commute_cmppd_ueq:
|
; AVX-LABEL: commute_cmppd_ueq:
|
||||||
; AVX: # %bb.0:
|
; AVX: # %bb.0:
|
||||||
; AVX-NEXT: vmovapd (%rdi), %xmm1
|
; AVX-NEXT: vcmpeq_uqpd (%rdi), %xmm0, %xmm0
|
||||||
; AVX-NEXT: vcmpeq_uqpd %xmm0, %xmm1, %xmm0
|
|
||||||
; AVX-NEXT: retq
|
; AVX-NEXT: retq
|
||||||
;
|
;
|
||||||
; AVX512-LABEL: commute_cmppd_ueq:
|
; AVX512-LABEL: commute_cmppd_ueq:
|
||||||
; AVX512: # %bb.0:
|
; AVX512: # %bb.0:
|
||||||
; AVX512-NEXT: vmovapd (%rdi), %xmm1
|
; AVX512-NEXT: vcmpeq_uqpd (%rdi), %xmm0, %k1
|
||||||
; AVX512-NEXT: vcmpeq_uqpd %xmm0, %xmm1, %k1
|
|
||||||
; AVX512-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0
|
; AVX512-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0
|
||||||
; AVX512-NEXT: vmovdqa64 %xmm0, %xmm0 {%k1} {z}
|
; AVX512-NEXT: vmovdqa64 %xmm0, %xmm0 {%k1} {z}
|
||||||
; AVX512-NEXT: retq
|
; AVX512-NEXT: retq
|
||||||
@ -551,14 +541,12 @@ define <2 x i64> @commute_cmppd_one(<2 x double>* %a0, <2 x double> %a1) {
|
|||||||
;
|
;
|
||||||
; AVX-LABEL: commute_cmppd_one:
|
; AVX-LABEL: commute_cmppd_one:
|
||||||
; AVX: # %bb.0:
|
; AVX: # %bb.0:
|
||||||
; AVX-NEXT: vmovapd (%rdi), %xmm1
|
; AVX-NEXT: vcmpneq_oqpd (%rdi), %xmm0, %xmm0
|
||||||
; AVX-NEXT: vcmpneq_oqpd %xmm0, %xmm1, %xmm0
|
|
||||||
; AVX-NEXT: retq
|
; AVX-NEXT: retq
|
||||||
;
|
;
|
||||||
; AVX512-LABEL: commute_cmppd_one:
|
; AVX512-LABEL: commute_cmppd_one:
|
||||||
; AVX512: # %bb.0:
|
; AVX512: # %bb.0:
|
||||||
; AVX512-NEXT: vmovapd (%rdi), %xmm1
|
; AVX512-NEXT: vcmpneq_oqpd (%rdi), %xmm0, %k1
|
||||||
; AVX512-NEXT: vcmpneq_oqpd %xmm0, %xmm1, %k1
|
|
||||||
; AVX512-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0
|
; AVX512-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0
|
||||||
; AVX512-NEXT: vmovdqa64 %xmm0, %xmm0 {%k1} {z}
|
; AVX512-NEXT: vmovdqa64 %xmm0, %xmm0 {%k1} {z}
|
||||||
; AVX512-NEXT: retq
|
; AVX512-NEXT: retq
|
||||||
@ -758,14 +746,12 @@ define <4 x i64> @commute_cmppd_ueq_ymmm(<4 x double>* %a0, <4 x double> %a1) {
|
|||||||
;
|
;
|
||||||
; AVX-LABEL: commute_cmppd_ueq_ymmm:
|
; AVX-LABEL: commute_cmppd_ueq_ymmm:
|
||||||
; AVX: # %bb.0:
|
; AVX: # %bb.0:
|
||||||
; AVX-NEXT: vmovapd (%rdi), %ymm1
|
; AVX-NEXT: vcmpeq_uqpd (%rdi), %ymm0, %ymm0
|
||||||
; AVX-NEXT: vcmpeq_uqpd %ymm0, %ymm1, %ymm0
|
|
||||||
; AVX-NEXT: retq
|
; AVX-NEXT: retq
|
||||||
;
|
;
|
||||||
; AVX512-LABEL: commute_cmppd_ueq_ymmm:
|
; AVX512-LABEL: commute_cmppd_ueq_ymmm:
|
||||||
; AVX512: # %bb.0:
|
; AVX512: # %bb.0:
|
||||||
; AVX512-NEXT: vmovapd (%rdi), %ymm1
|
; AVX512-NEXT: vcmpeq_uqpd (%rdi), %ymm0, %k1
|
||||||
; AVX512-NEXT: vcmpeq_uqpd %ymm0, %ymm1, %k1
|
|
||||||
; AVX512-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
|
; AVX512-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
|
||||||
; AVX512-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z}
|
; AVX512-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z}
|
||||||
; AVX512-NEXT: retq
|
; AVX512-NEXT: retq
|
||||||
@ -792,14 +778,12 @@ define <4 x i64> @commute_cmppd_one_ymmm(<4 x double>* %a0, <4 x double> %a1) {
|
|||||||
;
|
;
|
||||||
; AVX-LABEL: commute_cmppd_one_ymmm:
|
; AVX-LABEL: commute_cmppd_one_ymmm:
|
||||||
; AVX: # %bb.0:
|
; AVX: # %bb.0:
|
||||||
; AVX-NEXT: vmovapd (%rdi), %ymm1
|
; AVX-NEXT: vcmpneq_oqpd (%rdi), %ymm0, %ymm0
|
||||||
; AVX-NEXT: vcmpneq_oqpd %ymm0, %ymm1, %ymm0
|
|
||||||
; AVX-NEXT: retq
|
; AVX-NEXT: retq
|
||||||
;
|
;
|
||||||
; AVX512-LABEL: commute_cmppd_one_ymmm:
|
; AVX512-LABEL: commute_cmppd_one_ymmm:
|
||||||
; AVX512: # %bb.0:
|
; AVX512: # %bb.0:
|
||||||
; AVX512-NEXT: vmovapd (%rdi), %ymm1
|
; AVX512-NEXT: vcmpneq_oqpd (%rdi), %ymm0, %k1
|
||||||
; AVX512-NEXT: vcmpneq_oqpd %ymm0, %ymm1, %k1
|
|
||||||
; AVX512-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
|
; AVX512-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
|
||||||
; AVX512-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z}
|
; AVX512-NEXT: vmovdqa64 %ymm0, %ymm0 {%k1} {z}
|
||||||
; AVX512-NEXT: retq
|
; AVX512-NEXT: retq
|
||||||
|
Loading…
Reference in New Issue
Block a user