blob: be1da6877b38eea197d9b63880caa02f8dd59dfd [file] [edit]
; RUN: llc -mtriple=hexagon < %s | FileCheck %s
; Add S2_pstorerft_io and S2_pstorerff_io to isValidOffset.
; Ensure that llc compiles this test cleanly and emits the predicated .h stores.
; CHECK-LABEL: pr196966:
; CHECK: if (!{{p[0-9]+(\.new)?}}) memh({{r[0-9]+}}+#{{[0-9]+}}) = {{r[0-9]+}}.h
declare <16 x i16> @helper()
declare void @llvm.masked.scatter.v16i16.v16p0(<16 x i16>, <16 x ptr>, <16 x i1>)
define void @pr196966(ptr %base) {
entry:
%mb = icmp ne ptr %base, null
br i1 %mb, label %then, label %common.ret
common.ret:
ret void
then:
%p4 = getelementptr i8, ptr %base, i64 20
%call = call <16 x i16> @helper()
%pv4 = insertelement <16 x ptr> poison, ptr %p4, i64 4
%ptrs.raw = freeze <16 x ptr> %pv4
%p2 = getelementptr i8, ptr %base, i64 6
%pv2 = insertelement <16 x ptr> poison, ptr %p2, i64 2
%ptrs = shufflevector <16 x ptr> %ptrs.raw, <16 x ptr> %pv2, <16 x i32> <i32 poison, i32 21, i32 12, i32 poison, i32 29, i32 4, i32 poison, i32 poison, i32 27, i32 25, i32 poison, i32 poison, i32 20, i32 18, i32 poison, i32 8>
%mask = freeze <16 x i1> poison
call void @llvm.masked.scatter.v16i16.v16p0(<16 x i16> %call, <16 x ptr> align 2 %ptrs, <16 x i1> %mask)
br label %common.ret
}