Previously SelectionDAGBuilder used ABI alignment for compressstore/expandload. This patch allows SelectionDAGBuilder to use parameter alignment like vp intrinsics. This does not follow the original code to default use vector type alignment, since it is possible implemented to unaligned vector alignment.
43 lines
2.2 KiB
LLVM
43 lines
2.2 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 4
|
|
; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -start-after=codegenprepare -stop-before finalize-isel | FileCheck %s
|
|
|
|
define <8 x i16> @_Z3fooiPiPs(<8 x i16> %src, <8 x i1> %mask) #0 {
|
|
; CHECK-LABEL: name: _Z3fooiPiPs
|
|
; CHECK: bb.0.entry:
|
|
; CHECK-NEXT: liveins: $xmm0, $xmm1
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: [[COPY:%[0-9]+]]:vr128x = COPY $xmm1
|
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:vr128x = COPY $xmm0
|
|
; CHECK-NEXT: [[VPSLLWZ128ri:%[0-9]+]]:vr128x = VPSLLWZ128ri [[COPY]], 15
|
|
; CHECK-NEXT: [[VPMOVW2MZ128rr:%[0-9]+]]:vk16wm = VPMOVW2MZ128rr killed [[VPSLLWZ128ri]]
|
|
; CHECK-NEXT: [[VPEXPANDWZ128rmk:%[0-9]+]]:vr128x = VPEXPANDWZ128rmk [[COPY1]], killed [[VPMOVW2MZ128rr]], $noreg, 1, $noreg, 0, $noreg :: (load unknown-size from `ptr null`, align 1)
|
|
; CHECK-NEXT: $xmm0 = COPY [[VPEXPANDWZ128rmk]]
|
|
; CHECK-NEXT: RET 0, $xmm0
|
|
entry:
|
|
%res = call <8 x i16> @llvm.masked.expandload.v8i16(ptr null, <8 x i1> %mask, <8 x i16> %src)
|
|
ret <8 x i16> %res
|
|
}
|
|
|
|
define <8 x i16> @_Z3foo2iPiPs(<8 x i16> %src, <8 x i1> %mask) #0 {
|
|
; CHECK-LABEL: name: _Z3foo2iPiPs
|
|
; CHECK: bb.0.entry:
|
|
; CHECK-NEXT: liveins: $xmm0, $xmm1
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: [[COPY:%[0-9]+]]:vr128x = COPY $xmm1
|
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:vr128x = COPY $xmm0
|
|
; CHECK-NEXT: [[VPSLLWZ128ri:%[0-9]+]]:vr128x = VPSLLWZ128ri [[COPY]], 15
|
|
; CHECK-NEXT: [[VPMOVW2MZ128rr:%[0-9]+]]:vk16wm = VPMOVW2MZ128rr killed [[VPSLLWZ128ri]]
|
|
; CHECK-NEXT: [[VPEXPANDWZ128rmk:%[0-9]+]]:vr128x = VPEXPANDWZ128rmk [[COPY1]], killed [[VPMOVW2MZ128rr]], $noreg, 1, $noreg, 0, $noreg :: (load unknown-size from `ptr null`, align 16)
|
|
; CHECK-NEXT: $xmm0 = COPY [[VPEXPANDWZ128rmk]]
|
|
; CHECK-NEXT: RET 0, $xmm0
|
|
entry:
|
|
%res = call <8 x i16> @llvm.masked.expandload.v8i16(ptr align 16 null, <8 x i1> %mask, <8 x i16> %src)
|
|
ret <8 x i16> %res
|
|
}
|
|
|
|
; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: write)
|
|
declare <8 x i16> @llvm.masked.expandload.v8i16(ptr, <8 x i1>, <8 x i16>)
|
|
|
|
attributes #0 = { "target-cpu"="icelake-server" }
|
|
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: write) }
|