Noticed in D150143/D150526 - we currently create scalar Constant values using the broadcast instruction width, which might be wider than the original build vector width, making it tricky to recognise the original constant bits data. If we have widened the broadcast value, its much more useful for asm comments if we create a ConstantVector with the original element data, add that to the constant-pool and load that with the same (wider) broadcast instruction.
39 lines
1.9 KiB
LLVM
39 lines
1.9 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
|
; RUN: llc < %s -mtriple=i386-unknown-linux-gnu -mattr=avx512dq | FileCheck %s
|
|
|
|
define void @undef_cond() {
|
|
; CHECK-LABEL: undef_cond:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: retl
|
|
%a_load22 = load <16 x i64>, ptr null, align 1
|
|
%bitop = or <16 x i64> %a_load22, <i64 68719476736, i64 68719476736, i64 68719476736, i64 68719476736, i64 68719476736, i64 68719476736, i64 68719476736, i64 68719476736, i64 68719476736, i64 68719476736, i64 68719476736, i64 68719476736, i64 68719476736, i64 68719476736, i64 68719476736, i64 68719476736>
|
|
%v.i = load <16 x i64>, ptr null
|
|
%v1.i41 = select <16 x i1> undef, <16 x i64> %bitop, <16 x i64> %v.i
|
|
store <16 x i64> %v1.i41, ptr null
|
|
ret void
|
|
}
|
|
|
|
define void @f_f___un_3C_unf_3E_un_3C_unf_3E_(<16 x i1> %x) {
|
|
; CHECK-LABEL: f_f___un_3C_unf_3E_un_3C_unf_3E_:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: vpmovsxbd %xmm0, %zmm0
|
|
; CHECK-NEXT: vpslld $31, %zmm0, %zmm0
|
|
; CHECK-NEXT: vpmovd2m %zmm0, %k1
|
|
; CHECK-NEXT: vmovapd 0, %zmm0
|
|
; CHECK-NEXT: vmovapd 64, %zmm1
|
|
; CHECK-NEXT: vbroadcastsd {{.*#+}} zmm2 = [0,16,0,16,0,16,0,16,0,16,0,16,0,16,0,16]
|
|
; CHECK-NEXT: kshiftrw $8, %k1, %k2
|
|
; CHECK-NEXT: vorpd %zmm2, %zmm1, %zmm1 {%k2}
|
|
; CHECK-NEXT: vorpd %zmm2, %zmm0, %zmm0 {%k1}
|
|
; CHECK-NEXT: vmovapd %zmm0, 0
|
|
; CHECK-NEXT: vmovapd %zmm1, 64
|
|
; CHECK-NEXT: vzeroupper
|
|
; CHECK-NEXT: retl
|
|
%a_load22 = load <16 x i64>, ptr null, align 1
|
|
%bitop = or <16 x i64> %a_load22, <i64 68719476736, i64 68719476736, i64 68719476736, i64 68719476736, i64 68719476736, i64 68719476736, i64 68719476736, i64 68719476736, i64 68719476736, i64 68719476736, i64 68719476736, i64 68719476736, i64 68719476736, i64 68719476736, i64 68719476736, i64 68719476736>
|
|
%v.i = load <16 x i64>, ptr null
|
|
%v1.i41 = select <16 x i1> %x, <16 x i64> %bitop, <16 x i64> %v.i
|
|
store <16 x i64> %v1.i41, ptr null
|
|
ret void
|
|
}
|