Files
clang-p2996/llvm/test/CodeGen/Mips/msa/immediates-bad.ll
Simon Dardis 548a53f5ee [mips] Fix Mips MSA instrinsics
The usage of some MIPS MSA instrinsics that took immediates could crash LLVM
during lowering. This patch addresses that behaviour. Crucially this patch
also makes the use of intrinsics with out of range immediates as producing an
internal error.

The ld,st instrinsics would trigger an assertion failure for MIPS64 as their
lowering would attempt to add an i32 offset to a i64 pointer.

Reviewers: vkalintiris, slthakur

Differential Revision: https://reviews.llvm.org/D25438

llvm-svn: 291571
2017-01-10 16:40:57 +00:00

1682 lines
49 KiB
LLVM

; RUN: not llc -march=mips -mattr=+msa,+fp64 -relocation-model=pic < %s 2> %t1
; RUN: FileCheck %s < %t1
; Test that the immediate intrinsics with out of range values trigger an error.
define void @binsli_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.binsli.b(<16 x i8> %a, <16 x i8> %a, i32 65)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
; CHECK: LLVM ERROR: Immediate out of range
define void @binsri_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.binsri.b(<16 x i8> %a, <16 x i8> %a, i32 5)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @bmnzi_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.bmnzi.b(<16 x i8> %a, <16 x i8> %a, i32 63)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @bmzi_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.bmzi.b(<16 x i8> %a, <16 x i8> %a, i32 63)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @bnegi_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.bnegi.b(<16 x i8> %a, i32 6)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @bseli_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.bseli.b(<16 x i8> %a, <16 x i8> %a, i32 63)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @bseti_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.bseti.b(<16 x i8> %a, i32 9)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @clei_s_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.clei.s.b(<16 x i8> %a, i32 152)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @clei_u_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.clei.u.b(<16 x i8> %a, i32 163)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @clti_s_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.clti.s.b(<16 x i8> %a, i32 129)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @clti_u_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.clti.u.b(<16 x i8> %a, i32 163)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @ldi_b(<16 x i8> * %ptr) {
entry:
%r = call <16 x i8> @llvm.mips.ldi.b(i32 1025)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @maxi_s_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.maxi.s.b(<16 x i8> %a, i32 163)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @maxi_u_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.maxi.u.b(<16 x i8> %a, i32 163)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @mini_s_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.mini.s.b(<16 x i8> %a, i32 163)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @mini_u_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.mini.u.b(<16 x i8> %a, i32 163)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @nori_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.nori.b(<16 x i8> %a, i32 63)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @ori_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.ori.b(<16 x i8> %a, i32 63)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @sldi_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.sldi.b(<16 x i8> %a, <16 x i8> %a, i32 7)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @slli_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.slli.b(<16 x i8> %a, i32 65)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @splati_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.splati.b(<16 x i8> %a, i32 65)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @srai_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.srai.b(<16 x i8> %a, i32 65)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @srari_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.srari.b(<16 x i8> %a, i32 65)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @srli_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.srli.b(<16 x i8> %a, i32 65)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @srlri_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.srlri.b(<16 x i8> %a, i32 65)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @addvi_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.addvi.w(<4 x i32> %a, i32 63)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @bclri_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.bclri.w(<4 x i32> %a, i32 63)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @binsli_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.binsli.w(<4 x i32> %a, <4 x i32> %a, i32 63)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @binsri_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.binsri.w(<4 x i32> %a, <4 x i32> %a, i32 63)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @bnegi_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.bnegi.w(<4 x i32> %a, i32 63)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @bseti_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.bseti.w(<4 x i32> %a, i32 63)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @clei_s_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.clei.s.w(<4 x i32> %a, i32 63)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @clei_u_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.clei.u.w(<4 x i32> %a, i32 63)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @clti_s_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.clti.s.w(<4 x i32> %a, i32 63)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @clti_u_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.clti.u.w(<4 x i32> %a, i32 63)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @maxi_s_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.maxi.s.w(<4 x i32> %a, i32 63)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @maxi_u_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.maxi.u.w(<4 x i32> %a, i32 63)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @mini_s_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.mini.s.w(<4 x i32> %a, i32 63)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @mini_u_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.mini.u.w(<4 x i32> %a, i32 63)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @ldi_w(<4 x i32> * %ptr) {
entry:
%r = call <4 x i32> @llvm.mips.ldi.w(i32 1024)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @sldi_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.sldi.w(<4 x i32> %a, <4 x i32> %a, i32 63)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @slli_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.slli.w(<4 x i32> %a, i32 65)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @splati_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.splati.w(<4 x i32> %a, i32 65)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @srai_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.srai.w(<4 x i32> %a, i32 65)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @srari_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.srari.w(<4 x i32> %a, i32 65)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @srli_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.srli.w(<4 x i32> %a, i32 65)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @srlri_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.srlri.w(<4 x i32> %a, i32 65)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @addvi_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.addvi.h(<8 x i16> %a, i32 65)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @bclri_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.bclri.h(<8 x i16> %a, i32 16)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @binsli_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.binsli.h(<8 x i16> %a, <8 x i16> %a, i32 17)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @binsri_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.binsri.h(<8 x i16> %a, <8 x i16> %a, i32 19)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @bnegi_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.bnegi.h(<8 x i16> %a, i32 19)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @bseti_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.bseti.h(<8 x i16> %a, i32 19)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @clei_s_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.clei.s.h(<8 x i16> %a, i32 63)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @clei_u_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.clei.u.h(<8 x i16> %a, i32 130)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @clti_s_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.clti.s.h(<8 x i16> %a, i32 63)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @clti_u_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.clti.u.h(<8 x i16> %a, i32 63)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @maxi_s_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.maxi.s.h(<8 x i16> %a, i32 63)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @maxi_u_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.maxi.u.h(<8 x i16> %a, i32 130)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @mini_s_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.mini.s.h(<8 x i16> %a, i32 63)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @mini_u_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.mini.u.h(<8 x i16> %a, i32 130)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @ldi_h(<8 x i16> * %ptr) {
entry:
%r = call <8 x i16> @llvm.mips.ldi.h(i32 1024)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @sldi_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.sldi.h(<8 x i16> %a, <8 x i16> %a, i32 65)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @slli_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.slli.h(<8 x i16> %a, i32 65)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @splati_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.splati.h(<8 x i16> %a, i32 65)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @srai_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.srai.h(<8 x i16> %a, i32 65)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @srari_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.srari.h(<8 x i16> %a, i32 65)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @srli_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.srli.h(<8 x i16> %a, i32 65)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @srlri_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.srlri.h(<8 x i16> %a, i32 65)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define i32 @copy_s_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call i32 @llvm.mips.copy.s.b(<16 x i8> %a, i32 17)
ret i32 %r
}
define i32 @copy_s_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call i32 @llvm.mips.copy.s.h(<8 x i16> %a, i32 9)
ret i32 %r
}
define i32 @copy_s_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call i32 @llvm.mips.copy.s.w(<4 x i32> %a, i32 5)
ret i32 %r
}
define i32 @copy_u_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call i32 @llvm.mips.copy.u.b(<16 x i8> %a, i32 16)
ret i32 %r
}
define i32 @copy_u_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call i32 @llvm.mips.copy.u.h(<8 x i16> %a, i32 9)
ret i32 %r
}
define i32 @copy_u_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call i32 @llvm.mips.copy.u.w(<4 x i32> %a, i32 5)
ret i32 %r
}
define i64 @copy_s_d(<2 x i64> * %ptr) {
entry: %a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call i64 @llvm.mips.copy.s.d(<2 x i64> %a, i32 3)
ret i64 %r
}
define i64 @copy_u_d(<2 x i64> * %ptr) {
entry: %a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call i64 @llvm.mips.copy.u.d(<2 x i64> %a, i32 3)
ret i64 %r
}
define void @addvi_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.addvi.d(<2 x i64> %a, i32 65)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @bclri_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.bclri.d(<2 x i64> %a, i32 64)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @binsli_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.binsli.d(<2 x i64> %a, <2 x i64> %a, i32 65)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @binsri_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.binsri.d(<2 x i64> %a, <2 x i64> %a, i32 65)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @bnegi_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.bnegi.d(<2 x i64> %a, i32 65)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @bseti_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.bseti.d(<2 x i64> %a, i32 65)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @clei_s_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.clei.s.d(<2 x i64> %a, i32 63)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @clei_u_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.clei.u.d(<2 x i64> %a, i32 63)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @clti_s_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.clti.s.d(<2 x i64> %a, i32 63)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @clti_u_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.clti.u.d(<2 x i64> %a, i32 63)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @ldi_d(<2 x i64> * %ptr) {
entry:
%r = call <2 x i64> @llvm.mips.ldi.d(i32 1024)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @maxi_s_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.maxi.s.d(<2 x i64> %a, i32 63)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @maxi_u_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.maxi.u.d(<2 x i64> %a, i32 63)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @mini_s_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.mini.s.d(<2 x i64> %a, i32 63)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @mini_u_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.mini.u.d(<2 x i64> %a, i32 63)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @sldi_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.sldi.d(<2 x i64> %a, <2 x i64> %a, i32 1)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @slli_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.slli.d(<2 x i64> %a, i32 65)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @srai_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.srai.d(<2 x i64> %a, i32 65)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @srari_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.srari.d(<2 x i64> %a, i32 65)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @srli_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.srli.d(<2 x i64> %a, i32 65)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @srlri_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.srlri.d(<2 x i64> %a, i32 65)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}; Negative numbers
define void @neg_addvi_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.addvi.b(<16 x i8> %a, i32 -25)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @neg_andi_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.andi.b(<16 x i8> %a, i32 -25)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @neg_bclri_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.bclri.b(<16 x i8> %a, i32 -3)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @neg_binsli_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.binsli.b(<16 x i8> %a, <16 x i8> %a, i32 -3)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @neg_binsri_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.binsri.b(<16 x i8> %a, <16 x i8> %a, i32 5)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @neg_bmnzi_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.bmnzi.b(<16 x i8> %a, <16 x i8> %a, i32 -25)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @neg_bmzi_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.bmzi.b(<16 x i8> %a, <16 x i8> %a, i32 -25)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @neg_bnegi_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.bnegi.b(<16 x i8> %a, i32 6)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @neg_bseli_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.bseli.b(<16 x i8> %a, <16 x i8> %a, i32 -25)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @neg_bseti_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.bseti.b(<16 x i8> %a, i32 -5)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @neg_clei_s_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.clei.s.b(<16 x i8> %a, i32 -120)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @neg_clei_u_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.clei.u.b(<16 x i8> %a, i32 -25)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @neg_clti_s_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.clti.s.b(<16 x i8> %a, i32 -35)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @neg_clti_u_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.clti.u.b(<16 x i8> %a, i32 -25)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @neg_ldi_b(<16 x i8> * %ptr) {
entry:
%r = call <16 x i8> @llvm.mips.ldi.b(i32 -3)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @neg_maxi_s_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.maxi.s.b(<16 x i8> %a, i32 2)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @neg_maxi_u_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.maxi.u.b(<16 x i8> %a, i32 2)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @neg_mini_s_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.mini.s.b(<16 x i8> %a, i32 2)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @neg_mini_u_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.mini.u.b(<16 x i8> %a, i32 2)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @neg_nori_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.nori.b(<16 x i8> %a, i32 -25)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @neg_ori_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.ori.b(<16 x i8> %a, i32 -25)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @neg_sldi_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.sldi.b(<16 x i8> %a, <16 x i8> %a, i32 -7)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @neg_slli_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.slli.b(<16 x i8> %a, i32 -3)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @neg_splati_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.splati.b(<16 x i8> %a, i32 -3)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @neg_srai_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.srai.b(<16 x i8> %a, i32 -3)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @neg_srari_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.srari.b(<16 x i8> %a, i32 -3)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @neg_srli_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.srli.b(<16 x i8> %a, i32 -3)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @neg_srlri_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call <16 x i8> @llvm.mips.srlri.b(<16 x i8> %a, i32 -3)
store <16 x i8> %r, <16 x i8> * %ptr, align 16
ret void
}
define void @neg_addvi_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.addvi.w(<4 x i32> %a, i32 -25)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @neg_bclri_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.bclri.w(<4 x i32> %a, i32 -25)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @neg_binsli_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.binsli.w(<4 x i32> %a, <4 x i32> %a, i32 -25)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @neg_binsri_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.binsri.w(<4 x i32> %a, <4 x i32> %a, i32 -25)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @neg_bnegi_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.bnegi.w(<4 x i32> %a, i32 -25)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @neg_bseti_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.bseti.w(<4 x i32> %a, i32 -25)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @neg_clei_s_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.clei.s.w(<4 x i32> %a, i32 -140)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @neg_clei_u_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.clei.u.w(<4 x i32> %a, i32 -25)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @neg_clti_s_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.clti.s.w(<4 x i32> %a, i32 -150)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @neg_clti_u_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.clti.u.w(<4 x i32> %a, i32 -25)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @neg_maxi_s_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.maxi.s.w(<4 x i32> %a, i32 -200)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @neg_maxi_u_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.maxi.u.w(<4 x i32> %a, i32 -200)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @neg_mini_s_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.mini.s.w(<4 x i32> %a, i32 -200)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @neg_mini_u_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.mini.u.w(<4 x i32> %a, i32 -200)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @neg_ldi_w(<4 x i32> * %ptr) {
entry:
%r = call <4 x i32> @llvm.mips.ldi.w(i32 -300)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @neg_sldi_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.sldi.w(<4 x i32> %a, <4 x i32> %a, i32 -20)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @neg_slli_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.slli.w(<4 x i32> %a, i32 -3)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @neg_splati_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.splati.w(<4 x i32> %a, i32 -3)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @neg_srai_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.srai.w(<4 x i32> %a, i32 -3)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @neg_srari_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.srari.w(<4 x i32> %a, i32 -3)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @neg_srli_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.srli.w(<4 x i32> %a, i32 -3)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @neg_srlri_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call <4 x i32> @llvm.mips.srlri.w(<4 x i32> %a, i32 -3)
store <4 x i32> %r, <4 x i32> * %ptr, align 16
ret void
}
define void @neg_addvi_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.addvi.h(<8 x i16> %a, i32 -25)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @neg_bclri_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.bclri.h(<8 x i16> %a, i32 -8)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @neg_binsli_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.binsli.h(<8 x i16> %a, <8 x i16> %a, i32 -8)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @neg_binsri_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.binsri.h(<8 x i16> %a, <8 x i16> %a, i32 -15)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @neg_bnegi_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.bnegi.h(<8 x i16> %a, i32 -14)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @neg_bseti_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.bseti.h(<8 x i16> %a, i32 -15)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @neg_clei_s_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.clei.s.h(<8 x i16> %a, i32 -25)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @neg_clei_u_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.clei.u.h(<8 x i16> %a, i32 -25)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @neg_clti_s_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.clti.s.h(<8 x i16> %a, i32 -150)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @neg_clti_u_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.clti.u.h(<8 x i16> %a, i32 -25)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @neg_maxi_s_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.maxi.s.h(<8 x i16> %a, i32 -200)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @neg_maxi_u_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.maxi.u.h(<8 x i16> %a, i32 -200)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @neg_mini_s_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.mini.s.h(<8 x i16> %a, i32 -200)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @neg_mini_u_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.mini.u.h(<8 x i16> %a, i32 -2)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @neg_ldi_h(<8 x i16> * %ptr) {
entry:
%r = call <8 x i16> @llvm.mips.ldi.h(i32 -300)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @neg_sldi_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.sldi.h(<8 x i16> %a, <8 x i16> %a, i32 -3)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @neg_slli_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.slli.h(<8 x i16> %a, i32 -3)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @neg_splati_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.splati.h(<8 x i16> %a, i32 -3)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @neg_srai_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.srai.h(<8 x i16> %a, i32 -3)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @neg_srari_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.srari.h(<8 x i16> %a, i32 -3)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @neg_srli_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.srli.h(<8 x i16> %a, i32 -3)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define void @neg_srlri_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call <8 x i16> @llvm.mips.srlri.h(<8 x i16> %a, i32 -3)
store <8 x i16> %r, <8 x i16> * %ptr, align 16
ret void
}
define i32 @neg_copy_s_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call i32 @llvm.mips.copy.s.b(<16 x i8> %a, i32 -1)
ret i32 %r
}
define i32 @neg_copy_s_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call i32 @llvm.mips.copy.s.h(<8 x i16> %a, i32 -1)
ret i32 %r
}
define i32 @neg_copy_s_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call i32 @llvm.mips.copy.s.w(<4 x i32> %a, i32 -1)
ret i32 %r
}
define i32 @neg_copy_u_b(<16 x i8> * %ptr) {
entry:
%a = load <16 x i8>, <16 x i8> * %ptr, align 16
%r = call i32 @llvm.mips.copy.u.b(<16 x i8> %a, i32 -1)
ret i32 %r
}
define i32 @neg_copy_u_h(<8 x i16> * %ptr) {
entry:
%a = load <8 x i16>, <8 x i16> * %ptr, align 16
%r = call i32 @llvm.mips.copy.u.h(<8 x i16> %a, i32 -1)
ret i32 %r
}
define i32 @neg_copy_u_w(<4 x i32> * %ptr) {
entry:
%a = load <4 x i32>, <4 x i32> * %ptr, align 16
%r = call i32 @llvm.mips.copy.u.w(<4 x i32> %a, i32 -1)
ret i32 %r
}
define i64 @neg_copy_s_d(<2 x i64> * %ptr) {
entry: %a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call i64 @llvm.mips.copy.s.d(<2 x i64> %a, i32 -1)
ret i64 %r
}
define i64 @neg_copy_u_d(<2 x i64> * %ptr) {
entry: %a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call i64 @llvm.mips.copy.u.d(<2 x i64> %a, i32 -1)
ret i64 %r
}
define void @neg_addvi_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.addvi.d(<2 x i64> %a, i32 -25)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @neg_bclri_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.bclri.d(<2 x i64> %a, i32 -25)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @neg_binsli_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.binsli.d(<2 x i64> %a, <2 x i64> %a, i32 -25)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @neg_binsri_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.binsri.d(<2 x i64> %a, <2 x i64> %a, i32 -25)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @neg_bnegi_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.bnegi.d(<2 x i64> %a, i32 -25)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @neg_bseti_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.bseti.d(<2 x i64> %a, i32 -25)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @neg_clei_s_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.clei.s.d(<2 x i64> %a, i32 -45)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @neg_clei_u_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.clei.u.d(<2 x i64> %a, i32 -25)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @neg_clti_s_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.clti.s.d(<2 x i64> %a, i32 -32)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @neg_clti_u_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.clti.u.d(<2 x i64> %a, i32 -25)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @neg_ldi_d(<2 x i64> * %ptr) {
entry:
%r = call <2 x i64> @llvm.mips.ldi.d(i32 -3)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @neg_maxi_s_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.maxi.s.d(<2 x i64> %a, i32 -202)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @neg_maxi_u_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.maxi.u.d(<2 x i64> %a, i32 -2)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @neg_mini_s_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.mini.s.d(<2 x i64> %a, i32 -202)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @neg_mini_u_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.mini.u.d(<2 x i64> %a, i32 -2)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @neg_sldi_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.sldi.d(<2 x i64> %a, <2 x i64> %a, i32 -1)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @neg_slli_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.slli.d(<2 x i64> %a, i32 -3)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @neg_srai_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.srai.d(<2 x i64> %a, i32 -3)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @neg_srari_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.srari.d(<2 x i64> %a, i32 -3)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @neg_srli_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.srli.d(<2 x i64> %a, i32 -3)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
define void @neg_srlri_d(<2 x i64> * %ptr) {
entry:
%a = load <2 x i64>, <2 x i64> * %ptr, align 16
%r = call <2 x i64> @llvm.mips.srlri.d(<2 x i64> %a, i32 -3)
store <2 x i64> %r, <2 x i64> * %ptr, align 16
ret void
}
declare <8 x i16> @llvm.mips.ldi.h(i32)
declare <8 x i16> @llvm.mips.addvi.h(<8 x i16>, i32)
declare <8 x i16> @llvm.mips.bclri.h(<8 x i16>, i32)
declare <8 x i16> @llvm.mips.binsli.h(<8 x i16>, <8 x i16>, i32)
declare <8 x i16> @llvm.mips.binsri.h(<8 x i16>, <8 x i16>, i32)
declare <8 x i16> @llvm.mips.bnegi.h(<8 x i16>, i32)
declare <8 x i16> @llvm.mips.bseti.h(<8 x i16>, i32)
declare <8 x i16> @llvm.mips.clei.s.h(<8 x i16>, i32)
declare <8 x i16> @llvm.mips.clei.u.h(<8 x i16>, i32)
declare <8 x i16> @llvm.mips.clti.s.h(<8 x i16>, i32)
declare <8 x i16> @llvm.mips.clti.u.h(<8 x i16>, i32)
declare <8 x i16> @llvm.mips.maxi.s.h(<8 x i16>, i32)
declare <8 x i16> @llvm.mips.maxi.u.h(<8 x i16>, i32)
declare <8 x i16> @llvm.mips.mini.s.h(<8 x i16>, i32)
declare <8 x i16> @llvm.mips.mini.u.h(<8 x i16>, i32)
declare <8 x i16> @llvm.mips.sldi.h(<8 x i16>, <8 x i16>, i32)
declare <8 x i16> @llvm.mips.slli.h(<8 x i16>, i32)
declare <8 x i16> @llvm.mips.splati.h(<8 x i16>, i32)
declare <8 x i16> @llvm.mips.srai.h(<8 x i16>, i32)
declare <8 x i16> @llvm.mips.srari.h(<8 x i16>, i32)
declare <8 x i16> @llvm.mips.srli.h(<8 x i16>, i32)
declare <8 x i16> @llvm.mips.srlri.h(<8 x i16>, i32)
declare <4 x i32> @llvm.mips.addvi.w(<4 x i32>, i32)
declare <4 x i32> @llvm.mips.bclri.w(<4 x i32>, i32)
declare <4 x i32> @llvm.mips.binsli.w(<4 x i32>, <4 x i32>, i32)
declare <4 x i32> @llvm.mips.binsri.w(<4 x i32>, <4 x i32>, i32)
declare <4 x i32> @llvm.mips.bnegi.w(<4 x i32>, i32)
declare <4 x i32> @llvm.mips.bseti.w(<4 x i32>, i32)
declare <4 x i32> @llvm.mips.ldi.w(i32)
declare <4 x i32> @llvm.mips.clei.s.w(<4 x i32>, i32)
declare <4 x i32> @llvm.mips.clei.u.w(<4 x i32>, i32)
declare <4 x i32> @llvm.mips.clti.s.w(<4 x i32>, i32)
declare <4 x i32> @llvm.mips.clti.u.w(<4 x i32>, i32)
declare <4 x i32> @llvm.mips.maxi.s.w(<4 x i32>, i32)
declare <4 x i32> @llvm.mips.maxi.u.w(<4 x i32>, i32)
declare <4 x i32> @llvm.mips.mini.s.w(<4 x i32>, i32)
declare <4 x i32> @llvm.mips.mini.u.w(<4 x i32>, i32)
declare <4 x i32> @llvm.mips.sldi.w(<4 x i32>, <4 x i32>, i32)
declare <4 x i32> @llvm.mips.slli.w(<4 x i32>, i32)
declare <4 x i32> @llvm.mips.splati.w(<4 x i32>, i32)
declare <4 x i32> @llvm.mips.srai.w(<4 x i32>, i32)
declare <4 x i32> @llvm.mips.srari.w(<4 x i32>, i32)
declare <4 x i32> @llvm.mips.srli.w(<4 x i32>, i32)
declare <4 x i32> @llvm.mips.srlri.w(<4 x i32>, i32)
declare <2 x i64> @llvm.mips.ldi.d(i32)
declare <2 x i64> @llvm.mips.addvi.d(<2 x i64>, i32)
declare <2 x i64> @llvm.mips.bclri.d(<2 x i64>, i32)
declare <2 x i64> @llvm.mips.binsli.d(<2 x i64>, <2 x i64>, i32)
declare <2 x i64> @llvm.mips.binsri.d(<2 x i64>, <2 x i64>, i32)
declare <2 x i64> @llvm.mips.bnegi.d(<2 x i64>, i32)
declare <2 x i64> @llvm.mips.bseti.d(<2 x i64>, i32)
declare <2 x i64> @llvm.mips.clei.s.d(<2 x i64>, i32)
declare <2 x i64> @llvm.mips.clei.u.d(<2 x i64>, i32)
declare <2 x i64> @llvm.mips.clti.s.d(<2 x i64>, i32)
declare <2 x i64> @llvm.mips.clti.u.d(<2 x i64>, i32)
declare <2 x i64> @llvm.mips.maxi.s.d(<2 x i64>, i32)
declare <2 x i64> @llvm.mips.maxi.u.d(<2 x i64>, i32)
declare <2 x i64> @llvm.mips.mini.s.d(<2 x i64>, i32)
declare <2 x i64> @llvm.mips.mini.u.d(<2 x i64>, i32)
declare <2 x i64> @llvm.mips.sldi.d(<2 x i64>, <2 x i64>, i32)
declare <2 x i64> @llvm.mips.slli.d(<2 x i64>, i32)
declare <2 x i64> @llvm.mips.splati.d(<2 x i64>, i32)
declare <2 x i64> @llvm.mips.srai.d(<2 x i64>, i32)
declare <2 x i64> @llvm.mips.srari.d(<2 x i64>, i32)
declare <2 x i64> @llvm.mips.srli.d(<2 x i64>, i32)
declare <2 x i64> @llvm.mips.srlri.d(<2 x i64>, i32)
declare <16 x i8> @llvm.mips.ldi.b(i32)
declare <16 x i8> @llvm.mips.addvi.b(<16 x i8>, i32)
declare <16 x i8> @llvm.mips.andi.b(<16 x i8>, i32)
declare <16 x i8> @llvm.mips.bclri.b(<16 x i8>, i32)
declare <16 x i8> @llvm.mips.binsli.b(<16 x i8>, <16 x i8>, i32)
declare <16 x i8> @llvm.mips.binsri.b(<16 x i8>, <16 x i8>, i32)
declare <16 x i8> @llvm.mips.bmnzi.b(<16 x i8>, <16 x i8>, i32)
declare <16 x i8> @llvm.mips.bnegi.b(<16 x i8>, i32)
declare <16 x i8> @llvm.mips.bseli.b(<16 x i8>, <16 x i8>, i32)
declare <16 x i8> @llvm.mips.bseti.b(<16 x i8>, i32)
declare <16 x i8> @llvm.mips.clei.s.b(<16 x i8>, i32)
declare <16 x i8> @llvm.mips.clei.u.b(<16 x i8>, i32)
declare <16 x i8> @llvm.mips.clti.s.b(<16 x i8>, i32)
declare <16 x i8> @llvm.mips.clti.u.b(<16 x i8>, i32)
declare <16 x i8> @llvm.mips.maxi.s.b(<16 x i8>, i32)
declare <16 x i8> @llvm.mips.maxi.u.b(<16 x i8>, i32)
declare <16 x i8> @llvm.mips.mini.s.b(<16 x i8>, i32)
declare <16 x i8> @llvm.mips.mini.u.b(<16 x i8>, i32)
declare <16 x i8> @llvm.mips.nori.b(<16 x i8>, i32)
declare <16 x i8> @llvm.mips.ori.b(<16 x i8>, i32)
declare <16 x i8> @llvm.mips.sldi.b(<16 x i8>, <16 x i8>, i32)
declare <16 x i8> @llvm.mips.slli.b(<16 x i8>, i32)
declare <16 x i8> @llvm.mips.splati.b(<16 x i8>, i32)
declare <16 x i8> @llvm.mips.srai.b(<16 x i8>, i32)
declare <16 x i8> @llvm.mips.srari.b(<16 x i8>, i32)
declare <16 x i8> @llvm.mips.srli.b(<16 x i8>, i32)
declare <16 x i8> @llvm.mips.srlri.b(<16 x i8>, i32)
declare i32 @llvm.mips.copy.s.h(<8 x i16>, i32)
declare i32 @llvm.mips.copy.u.h(<8 x i16>, i32)
declare i32 @llvm.mips.copy.s.w(<4 x i32>, i32)
declare i32 @llvm.mips.copy.u.w(<4 x i32>, i32)
declare i64 @llvm.mips.copy.s.d(<2 x i64>, i32)
declare i64 @llvm.mips.copy.u.d(<2 x i64>, i32)
declare i32 @llvm.mips.copy.s.b(<16 x i8>, i32)
declare i32 @llvm.mips.copy.u.b(<16 x i8>, i32)
declare <16 x i8> @llvm.mips.bmzi.b(<16 x i8>, <16 x i8>, i32)