forked from OSchip/llvm-project
[X86][AVX] Don't scrub pointer math in avx-vperm2x128.ll
This will make it easier to track address offsets in folded loads/broadcasts of subvectors
This commit is contained in:
parent
1595994b28
commit
10e88972ee
llvm/test/CodeGen/X86
|
@ -1,4 +1,4 @@
|
|||
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
||||
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --no_x86_scrub_mem_shuffle
|
||||
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx -disable-peephole | FileCheck %s --check-prefix=ALL --check-prefix=AVX1
|
||||
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 -disable-peephole | FileCheck %s --check-prefix=ALL --check-prefix=AVX2
|
||||
|
||||
|
@ -20,12 +20,12 @@ entry:
|
|||
define <8 x float> @shuffle_v8f32_45670123_mem(<8 x float>* %pa, <8 x float>* %pb) nounwind uwtable readnone ssp {
|
||||
; AVX1-LABEL: shuffle_v8f32_45670123_mem:
|
||||
; AVX1: # %bb.0: # %entry
|
||||
; AVX1-NEXT: vperm2f128 {{.*#+}} ymm0 = mem[2,3,0,1]
|
||||
; AVX1-NEXT: vperm2f128 $35, (%rdi), %ymm0, %ymm0 # ymm0 = mem[2,3,0,1]
|
||||
; AVX1-NEXT: retq
|
||||
;
|
||||
; AVX2-LABEL: shuffle_v8f32_45670123_mem:
|
||||
; AVX2: # %bb.0: # %entry
|
||||
; AVX2-NEXT: vpermpd {{.*#+}} ymm0 = mem[2,3,0,1]
|
||||
; AVX2-NEXT: vpermpd $78, (%rdi), %ymm0 # ymm0 = mem[2,3,0,1]
|
||||
; AVX2-NEXT: retq
|
||||
entry:
|
||||
%a = load <8 x float>, <8 x float>* %pa
|
||||
|
@ -62,12 +62,12 @@ entry:
|
|||
define <8 x float> @shuffle_v8f32_01230123_mem(<8 x float>* %pa, <8 x float>* %pb) nounwind uwtable readnone ssp {
|
||||
; AVX1-LABEL: shuffle_v8f32_01230123_mem:
|
||||
; AVX1: # %bb.0: # %entry
|
||||
; AVX1-NEXT: vperm2f128 {{.*#+}} ymm0 = mem[0,1,0,1]
|
||||
; AVX1-NEXT: vperm2f128 $34, (%rdi), %ymm0, %ymm0 # ymm0 = mem[0,1,0,1]
|
||||
; AVX1-NEXT: retq
|
||||
;
|
||||
; AVX2-LABEL: shuffle_v8f32_01230123_mem:
|
||||
; AVX2: # %bb.0: # %entry
|
||||
; AVX2-NEXT: vpermpd {{.*#+}} ymm0 = mem[0,1,0,1]
|
||||
; AVX2-NEXT: vpermpd $68, (%rdi), %ymm0 # ymm0 = mem[0,1,0,1]
|
||||
; AVX2-NEXT: retq
|
||||
entry:
|
||||
%a = load <8 x float>, <8 x float>* %pa
|
||||
|
@ -94,12 +94,12 @@ entry:
|
|||
define <8 x float> @shuffle_v8f32_45674567_mem(<8 x float>* %pa, <8 x float>* %pb) nounwind uwtable readnone ssp {
|
||||
; AVX1-LABEL: shuffle_v8f32_45674567_mem:
|
||||
; AVX1: # %bb.0: # %entry
|
||||
; AVX1-NEXT: vperm2f128 {{.*#+}} ymm0 = mem[2,3,2,3]
|
||||
; AVX1-NEXT: vperm2f128 $51, (%rdi), %ymm0, %ymm0 # ymm0 = mem[2,3,2,3]
|
||||
; AVX1-NEXT: retq
|
||||
;
|
||||
; AVX2-LABEL: shuffle_v8f32_45674567_mem:
|
||||
; AVX2: # %bb.0: # %entry
|
||||
; AVX2-NEXT: vpermpd {{.*#+}} ymm0 = mem[2,3,2,3]
|
||||
; AVX2-NEXT: vpermpd $238, (%rdi), %ymm0 # ymm0 = mem[2,3,2,3]
|
||||
; AVX2-NEXT: retq
|
||||
entry:
|
||||
%a = load <8 x float>, <8 x float>* %pa
|
||||
|
@ -226,7 +226,7 @@ define <16 x i16> @shuffle_v16i16_4501_mem(<16 x i16>* %a, <16 x i16>* %b) nounw
|
|||
; AVX1-NEXT: vmovdqa (%rdi), %xmm0
|
||||
; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
|
||||
; AVX1-NEXT: vpsubw %xmm1, %xmm0, %xmm0
|
||||
; AVX1-NEXT: vperm2f128 {{.*#+}} ymm0 = mem[0,1],ymm0[0,1]
|
||||
; AVX1-NEXT: vperm2f128 $2, (%rsi), %ymm0, %ymm0 # ymm0 = mem[0,1],ymm0[0,1]
|
||||
; AVX1-NEXT: retq
|
||||
;
|
||||
; AVX2-LABEL: shuffle_v16i16_4501_mem:
|
||||
|
@ -234,7 +234,7 @@ define <16 x i16> @shuffle_v16i16_4501_mem(<16 x i16>* %a, <16 x i16>* %b) nounw
|
|||
; AVX2-NEXT: vmovdqa (%rdi), %ymm0
|
||||
; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
|
||||
; AVX2-NEXT: vpsubw %ymm1, %ymm0, %ymm0
|
||||
; AVX2-NEXT: vperm2i128 {{.*#+}} ymm0 = mem[0,1],ymm0[0,1]
|
||||
; AVX2-NEXT: vperm2i128 $2, (%rsi), %ymm0, %ymm0 # ymm0 = mem[0,1],ymm0[0,1]
|
||||
; AVX2-NEXT: retq
|
||||
entry:
|
||||
%c = load <16 x i16>, <16 x i16>* %a
|
||||
|
@ -538,13 +538,13 @@ define <4 x i64> @shuffle_v4i64_67zz(<4 x i64> %a, <4 x i64> %b) {
|
|||
define <4 x double> @ld0_hi0_lo1_4f64(<4 x double> * %pa, <4 x double> %b) nounwind uwtable readnone ssp {
|
||||
; AVX1-LABEL: ld0_hi0_lo1_4f64:
|
||||
; AVX1: # %bb.0: # %entry
|
||||
; AVX1-NEXT: vperm2f128 {{.*#+}} ymm0 = mem[2,3],ymm0[0,1]
|
||||
; AVX1-NEXT: vperm2f128 $3, (%rdi), %ymm0, %ymm0 # ymm0 = mem[2,3],ymm0[0,1]
|
||||
; AVX1-NEXT: vaddpd {{.*}}(%rip), %ymm0, %ymm0
|
||||
; AVX1-NEXT: retq
|
||||
;
|
||||
; AVX2-LABEL: ld0_hi0_lo1_4f64:
|
||||
; AVX2: # %bb.0: # %entry
|
||||
; AVX2-NEXT: vperm2f128 {{.*#+}} ymm0 = mem[2,3],ymm0[0,1]
|
||||
; AVX2-NEXT: vperm2f128 $3, (%rdi), %ymm0, %ymm0 # ymm0 = mem[2,3],ymm0[0,1]
|
||||
; AVX2-NEXT: vbroadcastsd {{.*#+}} ymm1 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]
|
||||
; AVX2-NEXT: vaddpd %ymm1, %ymm0, %ymm0
|
||||
; AVX2-NEXT: retq
|
||||
|
@ -558,13 +558,13 @@ entry:
|
|||
define <4 x double> @ld1_hi0_hi1_4f64(<4 x double> %a, <4 x double> * %pb) nounwind uwtable readnone ssp {
|
||||
; AVX1-LABEL: ld1_hi0_hi1_4f64:
|
||||
; AVX1: # %bb.0: # %entry
|
||||
; AVX1-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],mem[2,3]
|
||||
; AVX1-NEXT: vperm2f128 $49, (%rdi), %ymm0, %ymm0 # ymm0 = ymm0[2,3],mem[2,3]
|
||||
; AVX1-NEXT: vaddpd {{.*}}(%rip), %ymm0, %ymm0
|
||||
; AVX1-NEXT: retq
|
||||
;
|
||||
; AVX2-LABEL: ld1_hi0_hi1_4f64:
|
||||
; AVX2: # %bb.0: # %entry
|
||||
; AVX2-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],mem[2,3]
|
||||
; AVX2-NEXT: vperm2f128 $49, (%rdi), %ymm0, %ymm0 # ymm0 = ymm0[2,3],mem[2,3]
|
||||
; AVX2-NEXT: vbroadcastsd {{.*#+}} ymm1 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]
|
||||
; AVX2-NEXT: vaddpd %ymm1, %ymm0, %ymm0
|
||||
; AVX2-NEXT: retq
|
||||
|
@ -578,13 +578,13 @@ entry:
|
|||
define <8 x float> @ld0_hi0_lo1_8f32(<8 x float> * %pa, <8 x float> %b) nounwind uwtable readnone ssp {
|
||||
; AVX1-LABEL: ld0_hi0_lo1_8f32:
|
||||
; AVX1: # %bb.0: # %entry
|
||||
; AVX1-NEXT: vperm2f128 {{.*#+}} ymm0 = mem[2,3],ymm0[0,1]
|
||||
; AVX1-NEXT: vperm2f128 $3, (%rdi), %ymm0, %ymm0 # ymm0 = mem[2,3],ymm0[0,1]
|
||||
; AVX1-NEXT: vaddps {{.*}}(%rip), %ymm0, %ymm0
|
||||
; AVX1-NEXT: retq
|
||||
;
|
||||
; AVX2-LABEL: ld0_hi0_lo1_8f32:
|
||||
; AVX2: # %bb.0: # %entry
|
||||
; AVX2-NEXT: vperm2f128 {{.*#+}} ymm0 = mem[2,3],ymm0[0,1]
|
||||
; AVX2-NEXT: vperm2f128 $3, (%rdi), %ymm0, %ymm0 # ymm0 = mem[2,3],ymm0[0,1]
|
||||
; AVX2-NEXT: vbroadcastss {{.*#+}} ymm1 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]
|
||||
; AVX2-NEXT: vaddps %ymm1, %ymm0, %ymm0
|
||||
; AVX2-NEXT: retq
|
||||
|
@ -598,13 +598,13 @@ entry:
|
|||
define <8 x float> @ld1_hi0_hi1_8f32(<8 x float> %a, <8 x float> * %pb) nounwind uwtable readnone ssp {
|
||||
; AVX1-LABEL: ld1_hi0_hi1_8f32:
|
||||
; AVX1: # %bb.0: # %entry
|
||||
; AVX1-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],mem[2,3]
|
||||
; AVX1-NEXT: vperm2f128 $49, (%rdi), %ymm0, %ymm0 # ymm0 = ymm0[2,3],mem[2,3]
|
||||
; AVX1-NEXT: vaddps {{.*}}(%rip), %ymm0, %ymm0
|
||||
; AVX1-NEXT: retq
|
||||
;
|
||||
; AVX2-LABEL: ld1_hi0_hi1_8f32:
|
||||
; AVX2: # %bb.0: # %entry
|
||||
; AVX2-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],mem[2,3]
|
||||
; AVX2-NEXT: vperm2f128 $49, (%rdi), %ymm0, %ymm0 # ymm0 = ymm0[2,3],mem[2,3]
|
||||
; AVX2-NEXT: vbroadcastss {{.*#+}} ymm1 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]
|
||||
; AVX2-NEXT: vaddps %ymm1, %ymm0, %ymm0
|
||||
; AVX2-NEXT: retq
|
||||
|
@ -626,7 +626,7 @@ define <4 x i64> @ld0_hi0_lo1_4i64(<4 x i64> * %pa, <4 x i64> %b) nounwind uwtab
|
|||
;
|
||||
; AVX2-LABEL: ld0_hi0_lo1_4i64:
|
||||
; AVX2: # %bb.0: # %entry
|
||||
; AVX2-NEXT: vperm2i128 {{.*#+}} ymm0 = mem[2,3],ymm0[0,1]
|
||||
; AVX2-NEXT: vperm2i128 $3, (%rdi), %ymm0, %ymm0 # ymm0 = mem[2,3],ymm0[0,1]
|
||||
; AVX2-NEXT: vpaddq {{.*}}(%rip), %ymm0, %ymm0
|
||||
; AVX2-NEXT: retq
|
||||
entry:
|
||||
|
@ -648,7 +648,7 @@ define <4 x i64> @ld1_hi0_hi1_4i64(<4 x i64> %a, <4 x i64> * %pb) nounwind uwtab
|
|||
;
|
||||
; AVX2-LABEL: ld1_hi0_hi1_4i64:
|
||||
; AVX2: # %bb.0: # %entry
|
||||
; AVX2-NEXT: vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],mem[2,3]
|
||||
; AVX2-NEXT: vperm2i128 $49, (%rdi), %ymm0, %ymm0 # ymm0 = ymm0[2,3],mem[2,3]
|
||||
; AVX2-NEXT: vpaddq {{.*}}(%rip), %ymm0, %ymm0
|
||||
; AVX2-NEXT: retq
|
||||
entry:
|
||||
|
@ -669,7 +669,7 @@ define <8 x i32> @ld0_hi0_lo1_8i32(<8 x i32> * %pa, <8 x i32> %b) nounwind uwtab
|
|||
;
|
||||
; AVX2-LABEL: ld0_hi0_lo1_8i32:
|
||||
; AVX2: # %bb.0: # %entry
|
||||
; AVX2-NEXT: vperm2i128 {{.*#+}} ymm0 = mem[2,3],ymm0[0,1]
|
||||
; AVX2-NEXT: vperm2i128 $3, (%rdi), %ymm0, %ymm0 # ymm0 = mem[2,3],ymm0[0,1]
|
||||
; AVX2-NEXT: vpaddd {{.*}}(%rip), %ymm0, %ymm0
|
||||
; AVX2-NEXT: retq
|
||||
entry:
|
||||
|
@ -691,7 +691,7 @@ define <8 x i32> @ld1_hi0_hi1_8i32(<8 x i32> %a, <8 x i32> * %pb) nounwind uwtab
|
|||
;
|
||||
; AVX2-LABEL: ld1_hi0_hi1_8i32:
|
||||
; AVX2: # %bb.0: # %entry
|
||||
; AVX2-NEXT: vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],mem[2,3]
|
||||
; AVX2-NEXT: vperm2i128 $49, (%rdi), %ymm0, %ymm0 # ymm0 = ymm0[2,3],mem[2,3]
|
||||
; AVX2-NEXT: vpaddd {{.*}}(%rip), %ymm0, %ymm0
|
||||
; AVX2-NEXT: retq
|
||||
entry:
|
||||
|
|
Loading…
Reference in New Issue