mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
f9931fb11d
Changed immediate type for repl.ph from uimm10 to simm10 as per the specs. Repl.qb still accepts uimm8. Both instructions now mimic the behaviour of GNU as. Patch by Stefan Maksimovic. Differential Revision: https://reviews.llvm.org/D33594 llvm-svn: 304918
1248 lines
36 KiB
LLVM
1248 lines
36 KiB
LLVM
; RUN: llc -march=mipsel -mcpu=mips32 -mattr=+dsp -verify-machineinstrs < %s | \
|
|
; RUN: FileCheck %s
|
|
|
|
define i32 @test__builtin_mips_extr_w1(i32 %i0, i32, i64 %a0) nounwind {
|
|
entry:
|
|
; CHECK: extr.w
|
|
|
|
%1 = tail call i32 @llvm.mips.extr.w(i64 %a0, i32 15)
|
|
ret i32 %1
|
|
}
|
|
|
|
declare i32 @llvm.mips.extr.w(i64, i32) nounwind
|
|
|
|
define i32 @test__builtin_mips_extr_w2(i32 %i0, i32, i64 %a0, i32 %a1) nounwind {
|
|
entry:
|
|
; CHECK: extrv.w
|
|
|
|
%1 = tail call i32 @llvm.mips.extr.w(i64 %a0, i32 %a1)
|
|
ret i32 %1
|
|
}
|
|
|
|
define i32 @test__builtin_mips_extr_r_w1(i32 %i0, i32, i64 %a0) nounwind {
|
|
entry:
|
|
; CHECK: extr_r.w
|
|
|
|
%1 = tail call i32 @llvm.mips.extr.r.w(i64 %a0, i32 15)
|
|
ret i32 %1
|
|
}
|
|
|
|
declare i32 @llvm.mips.extr.r.w(i64, i32) nounwind
|
|
|
|
define i32 @test__builtin_mips_extr_s_h1(i32 %i0, i32, i64 %a0, i32 %a1) nounwind {
|
|
entry:
|
|
; CHECK: extrv_s.h
|
|
|
|
%1 = tail call i32 @llvm.mips.extr.s.h(i64 %a0, i32 %a1)
|
|
ret i32 %1
|
|
}
|
|
|
|
declare i32 @llvm.mips.extr.s.h(i64, i32) nounwind
|
|
|
|
define i32 @test__builtin_mips_extr_rs_w1(i32 %i0, i32, i64 %a0) nounwind {
|
|
entry:
|
|
; CHECK: extr_rs.w
|
|
|
|
%1 = tail call i32 @llvm.mips.extr.rs.w(i64 %a0, i32 15)
|
|
ret i32 %1
|
|
}
|
|
|
|
declare i32 @llvm.mips.extr.rs.w(i64, i32) nounwind
|
|
|
|
define i32 @test__builtin_mips_extr_rs_w2(i32 %i0, i32, i64 %a0, i32 %a1) nounwind {
|
|
entry:
|
|
; CHECK: extrv_rs.w
|
|
|
|
%1 = tail call i32 @llvm.mips.extr.rs.w(i64 %a0, i32 %a1)
|
|
ret i32 %1
|
|
}
|
|
|
|
define i32 @test__builtin_mips_extr_s_h2(i32 %i0, i32, i64 %a0) nounwind {
|
|
entry:
|
|
; CHECK: extr_s.h
|
|
|
|
%1 = tail call i32 @llvm.mips.extr.s.h(i64 %a0, i32 15)
|
|
ret i32 %1
|
|
}
|
|
|
|
define i32 @test__builtin_mips_extr_r_w2(i32 %i0, i32, i64 %a0, i32 %a1) nounwind {
|
|
entry:
|
|
; CHECK: extrv_r.w
|
|
|
|
%1 = tail call i32 @llvm.mips.extr.r.w(i64 %a0, i32 %a1)
|
|
ret i32 %1
|
|
}
|
|
|
|
define i32 @test__builtin_mips_extp1(i32 %i0, i32, i64 %a0) nounwind {
|
|
entry:
|
|
; CHECK: extp ${{[0-9]+}}
|
|
|
|
%1 = tail call i32 @llvm.mips.extp(i64 %a0, i32 15)
|
|
ret i32 %1
|
|
}
|
|
|
|
declare i32 @llvm.mips.extp(i64, i32) nounwind
|
|
|
|
define i32 @test__builtin_mips_extp2(i32 %i0, i32, i64 %a0, i32 %a1) nounwind {
|
|
entry:
|
|
; CHECK: extpv
|
|
|
|
%1 = tail call i32 @llvm.mips.extp(i64 %a0, i32 %a1)
|
|
ret i32 %1
|
|
}
|
|
|
|
define i32 @test__builtin_mips_extpdp1(i32 %i0, i32, i64 %a0) nounwind {
|
|
entry:
|
|
; CHECK: extpdp ${{[0-9]+}}
|
|
|
|
%1 = tail call i32 @llvm.mips.extpdp(i64 %a0, i32 15)
|
|
ret i32 %1
|
|
}
|
|
|
|
declare i32 @llvm.mips.extpdp(i64, i32) nounwind
|
|
|
|
define i32 @test__builtin_mips_extpdp2(i32 %i0, i32, i64 %a0, i32 %a1) nounwind {
|
|
entry:
|
|
; CHECK: extpdpv
|
|
|
|
%1 = tail call i32 @llvm.mips.extpdp(i64 %a0, i32 %a1)
|
|
ret i32 %1
|
|
}
|
|
|
|
define i64 @test__builtin_mips_dpau_h_qbl1(i32 %i0, i32, i64 %a0, i32 %a1.coerce, i32 %a2.coerce) nounwind readnone {
|
|
entry:
|
|
; CHECK: dpau.h.qbl
|
|
|
|
%1 = bitcast i32 %a1.coerce to <4 x i8>
|
|
%2 = bitcast i32 %a2.coerce to <4 x i8>
|
|
%3 = tail call i64 @llvm.mips.dpau.h.qbl(i64 %a0, <4 x i8> %1, <4 x i8> %2)
|
|
ret i64 %3
|
|
}
|
|
|
|
declare i64 @llvm.mips.dpau.h.qbl(i64, <4 x i8>, <4 x i8>) nounwind readnone
|
|
|
|
define i64 @test__builtin_mips_dpau_h_qbr1(i32 %i0, i32, i64 %a0, i32 %a1.coerce, i32 %a2.coerce) nounwind readnone {
|
|
entry:
|
|
; CHECK: dpau.h.qbr
|
|
|
|
%1 = bitcast i32 %a1.coerce to <4 x i8>
|
|
%2 = bitcast i32 %a2.coerce to <4 x i8>
|
|
%3 = tail call i64 @llvm.mips.dpau.h.qbr(i64 %a0, <4 x i8> %1, <4 x i8> %2)
|
|
ret i64 %3
|
|
}
|
|
|
|
declare i64 @llvm.mips.dpau.h.qbr(i64, <4 x i8>, <4 x i8>) nounwind readnone
|
|
|
|
define i64 @test__builtin_mips_dpsu_h_qbl1(i32 %i0, i32, i64 %a0, i32 %a1.coerce, i32 %a2.coerce) nounwind readnone {
|
|
entry:
|
|
; CHECK: dpsu.h.qbl
|
|
|
|
%1 = bitcast i32 %a1.coerce to <4 x i8>
|
|
%2 = bitcast i32 %a2.coerce to <4 x i8>
|
|
%3 = tail call i64 @llvm.mips.dpsu.h.qbl(i64 %a0, <4 x i8> %1, <4 x i8> %2)
|
|
ret i64 %3
|
|
}
|
|
|
|
declare i64 @llvm.mips.dpsu.h.qbl(i64, <4 x i8>, <4 x i8>) nounwind readnone
|
|
|
|
define i64 @test__builtin_mips_dpsu_h_qbr1(i32 %i0, i32, i64 %a0, i32 %a1.coerce, i32 %a2.coerce) nounwind readnone {
|
|
entry:
|
|
; CHECK: dpsu.h.qbr
|
|
|
|
%1 = bitcast i32 %a1.coerce to <4 x i8>
|
|
%2 = bitcast i32 %a2.coerce to <4 x i8>
|
|
%3 = tail call i64 @llvm.mips.dpsu.h.qbr(i64 %a0, <4 x i8> %1, <4 x i8> %2)
|
|
ret i64 %3
|
|
}
|
|
|
|
declare i64 @llvm.mips.dpsu.h.qbr(i64, <4 x i8>, <4 x i8>) nounwind readnone
|
|
|
|
define i64 @test__builtin_mips_dpaq_s_w_ph1(i32 %i0, i32, i64 %a0, i32 %a1.coerce, i32 %a2.coerce) nounwind {
|
|
entry:
|
|
; CHECK: dpaq_s.w.ph
|
|
|
|
%1 = bitcast i32 %a1.coerce to <2 x i16>
|
|
%2 = bitcast i32 %a2.coerce to <2 x i16>
|
|
%3 = tail call i64 @llvm.mips.dpaq.s.w.ph(i64 %a0, <2 x i16> %1, <2 x i16> %2)
|
|
ret i64 %3
|
|
}
|
|
|
|
declare i64 @llvm.mips.dpaq.s.w.ph(i64, <2 x i16>, <2 x i16>) nounwind
|
|
|
|
define i64 @test__builtin_mips_dpaq_sa_l_w1(i32 %i0, i32, i64 %a0, i32 %a1, i32 %a2) nounwind {
|
|
entry:
|
|
; CHECK: dpaq_sa.l.w
|
|
|
|
%1 = tail call i64 @llvm.mips.dpaq.sa.l.w(i64 %a0, i32 %a1, i32 %a2)
|
|
ret i64 %1
|
|
}
|
|
|
|
declare i64 @llvm.mips.dpaq.sa.l.w(i64, i32, i32) nounwind
|
|
|
|
define i64 @test__builtin_mips_dpsq_s_w_ph1(i32 %i0, i32, i64 %a0, i32 %a1.coerce, i32 %a2.coerce) nounwind {
|
|
entry:
|
|
; CHECK: dpsq_s.w.ph
|
|
|
|
%1 = bitcast i32 %a1.coerce to <2 x i16>
|
|
%2 = bitcast i32 %a2.coerce to <2 x i16>
|
|
%3 = tail call i64 @llvm.mips.dpsq.s.w.ph(i64 %a0, <2 x i16> %1, <2 x i16> %2)
|
|
ret i64 %3
|
|
}
|
|
|
|
declare i64 @llvm.mips.dpsq.s.w.ph(i64, <2 x i16>, <2 x i16>) nounwind
|
|
|
|
define i64 @test__builtin_mips_dpsq_sa_l_w1(i32 %i0, i32, i64 %a0, i32 %a1, i32 %a2) nounwind {
|
|
entry:
|
|
; CHECK: dpsq_sa.l.w
|
|
|
|
%1 = tail call i64 @llvm.mips.dpsq.sa.l.w(i64 %a0, i32 %a1, i32 %a2)
|
|
ret i64 %1
|
|
}
|
|
|
|
declare i64 @llvm.mips.dpsq.sa.l.w(i64, i32, i32) nounwind
|
|
|
|
define i64 @test__builtin_mips_mulsaq_s_w_ph1(i32 %i0, i32, i64 %a0, i32 %a1.coerce, i32 %a2.coerce) nounwind {
|
|
entry:
|
|
; CHECK: mulsaq_s.w.ph
|
|
|
|
%1 = bitcast i32 %a1.coerce to <2 x i16>
|
|
%2 = bitcast i32 %a2.coerce to <2 x i16>
|
|
%3 = tail call i64 @llvm.mips.mulsaq.s.w.ph(i64 %a0, <2 x i16> %1, <2 x i16> %2)
|
|
ret i64 %3
|
|
}
|
|
|
|
declare i64 @llvm.mips.mulsaq.s.w.ph(i64, <2 x i16>, <2 x i16>) nounwind
|
|
|
|
define i64 @test__builtin_mips_maq_s_w_phl1(i32 %i0, i32, i64 %a0, i32 %a1.coerce, i32 %a2.coerce) nounwind {
|
|
entry:
|
|
; CHECK: maq_s.w.phl
|
|
|
|
%1 = bitcast i32 %a1.coerce to <2 x i16>
|
|
%2 = bitcast i32 %a2.coerce to <2 x i16>
|
|
%3 = tail call i64 @llvm.mips.maq.s.w.phl(i64 %a0, <2 x i16> %1, <2 x i16> %2)
|
|
ret i64 %3
|
|
}
|
|
|
|
declare i64 @llvm.mips.maq.s.w.phl(i64, <2 x i16>, <2 x i16>) nounwind
|
|
|
|
define i64 @test__builtin_mips_maq_s_w_phr1(i32 %i0, i32, i64 %a0, i32 %a1.coerce, i32 %a2.coerce) nounwind {
|
|
entry:
|
|
; CHECK: maq_s.w.phr
|
|
|
|
%1 = bitcast i32 %a1.coerce to <2 x i16>
|
|
%2 = bitcast i32 %a2.coerce to <2 x i16>
|
|
%3 = tail call i64 @llvm.mips.maq.s.w.phr(i64 %a0, <2 x i16> %1, <2 x i16> %2)
|
|
ret i64 %3
|
|
}
|
|
|
|
declare i64 @llvm.mips.maq.s.w.phr(i64, <2 x i16>, <2 x i16>) nounwind
|
|
|
|
define i64 @test__builtin_mips_maq_sa_w_phl1(i32 %i0, i32, i64 %a0, i32 %a1.coerce, i32 %a2.coerce) nounwind {
|
|
entry:
|
|
; CHECK: maq_sa.w.phl
|
|
|
|
%1 = bitcast i32 %a1.coerce to <2 x i16>
|
|
%2 = bitcast i32 %a2.coerce to <2 x i16>
|
|
%3 = tail call i64 @llvm.mips.maq.sa.w.phl(i64 %a0, <2 x i16> %1, <2 x i16> %2)
|
|
ret i64 %3
|
|
}
|
|
|
|
declare i64 @llvm.mips.maq.sa.w.phl(i64, <2 x i16>, <2 x i16>) nounwind
|
|
|
|
define i64 @test__builtin_mips_maq_sa_w_phr1(i32 %i0, i32, i64 %a0, i32 %a1.coerce, i32 %a2.coerce) nounwind {
|
|
entry:
|
|
; CHECK: maq_sa.w.phr
|
|
|
|
%1 = bitcast i32 %a1.coerce to <2 x i16>
|
|
%2 = bitcast i32 %a2.coerce to <2 x i16>
|
|
%3 = tail call i64 @llvm.mips.maq.sa.w.phr(i64 %a0, <2 x i16> %1, <2 x i16> %2)
|
|
ret i64 %3
|
|
}
|
|
|
|
declare i64 @llvm.mips.maq.sa.w.phr(i64, <2 x i16>, <2 x i16>) nounwind
|
|
|
|
define i64 @test__builtin_mips_shilo1(i32 %i0, i32, i64 %a0) nounwind readnone {
|
|
entry:
|
|
; CHECK: shilo $ac{{[0-9]}}
|
|
|
|
%1 = tail call i64 @llvm.mips.shilo(i64 %a0, i32 0)
|
|
ret i64 %1
|
|
}
|
|
|
|
declare i64 @llvm.mips.shilo(i64, i32) nounwind readnone
|
|
|
|
define i64 @test__builtin_mips_shilo2(i32 %i0, i32, i64 %a0, i32 %a1) nounwind readnone {
|
|
entry:
|
|
; CHECK: shilov
|
|
|
|
%1 = tail call i64 @llvm.mips.shilo(i64 %a0, i32 %a1)
|
|
ret i64 %1
|
|
}
|
|
|
|
define i64 @test__builtin_mips_mthlip1(i32 %i0, i32, i64 %a0, i32 %a1) nounwind {
|
|
entry:
|
|
; CHECK: mthlip ${{[0-9]+}}
|
|
|
|
%1 = tail call i64 @llvm.mips.mthlip(i64 %a0, i32 %a1)
|
|
ret i64 %1
|
|
}
|
|
|
|
declare i64 @llvm.mips.mthlip(i64, i32) nounwind
|
|
|
|
define i32 @test__builtin_mips_bposge321(i32 %i0) nounwind readonly {
|
|
entry:
|
|
; CHECK: bposge32 $BB{{[0-9]+}}
|
|
|
|
%0 = tail call i32 @llvm.mips.bposge32()
|
|
ret i32 %0
|
|
}
|
|
|
|
declare i32 @llvm.mips.bposge32() nounwind readonly
|
|
|
|
define i64 @test__builtin_mips_madd1(i32 %i0, i32, i64 %a0, i32 %a1, i32 %a2) nounwind readnone {
|
|
entry:
|
|
; CHECK: madd $ac{{[0-9]}}
|
|
|
|
%1 = tail call i64 @llvm.mips.madd(i64 %a0, i32 %a1, i32 %a2)
|
|
ret i64 %1
|
|
}
|
|
|
|
declare i64 @llvm.mips.madd(i64, i32, i32) nounwind readnone
|
|
|
|
define i64 @test__builtin_mips_maddu1(i32 %i0, i32, i64 %a0, i32 %a1, i32 %a2) nounwind readnone {
|
|
entry:
|
|
; CHECK: maddu $ac{{[0-9]}}
|
|
|
|
%1 = tail call i64 @llvm.mips.maddu(i64 %a0, i32 %a1, i32 %a2)
|
|
ret i64 %1
|
|
}
|
|
|
|
declare i64 @llvm.mips.maddu(i64, i32, i32) nounwind readnone
|
|
|
|
define i64 @test__builtin_mips_msub1(i32 %i0, i32, i64 %a0, i32 %a1, i32 %a2) nounwind readnone {
|
|
entry:
|
|
; CHECK: msub $ac{{[0-9]}}
|
|
|
|
%1 = tail call i64 @llvm.mips.msub(i64 %a0, i32 %a1, i32 %a2)
|
|
ret i64 %1
|
|
}
|
|
|
|
declare i64 @llvm.mips.msub(i64, i32, i32) nounwind readnone
|
|
|
|
define i64 @test__builtin_mips_msubu1(i32 %i0, i32, i64 %a0, i32 %a1, i32 %a2) nounwind readnone {
|
|
entry:
|
|
; CHECK: msubu $ac{{[0-9]}}
|
|
|
|
%1 = tail call i64 @llvm.mips.msubu(i64 %a0, i32 %a1, i32 %a2)
|
|
ret i64 %1
|
|
}
|
|
|
|
declare i64 @llvm.mips.msubu(i64, i32, i32) nounwind readnone
|
|
|
|
define i64 @test__builtin_mips_mult1(i32 %i0, i32 %a0, i32 %a1) nounwind readnone {
|
|
entry:
|
|
; CHECK: mult $ac{{[0-9]}}
|
|
|
|
%0 = tail call i64 @llvm.mips.mult(i32 %a0, i32 %a1)
|
|
ret i64 %0
|
|
}
|
|
|
|
declare i64 @llvm.mips.mult(i32, i32) nounwind readnone
|
|
|
|
define i64 @test__builtin_mips_multu1(i32 %i0, i32 %a0, i32 %a1) nounwind readnone {
|
|
entry:
|
|
; CHECK: multu $ac{{[0-9]}}
|
|
|
|
%0 = tail call i64 @llvm.mips.multu(i32 %a0, i32 %a1)
|
|
ret i64 %0
|
|
}
|
|
|
|
declare i64 @llvm.mips.multu(i32, i32) nounwind readnone
|
|
|
|
define { i32 } @test__builtin_mips_addq_ph1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
|
|
entry:
|
|
; CHECK: addq.ph
|
|
|
|
%0 = bitcast i32 %a0.coerce to <2 x i16>
|
|
%1 = bitcast i32 %a1.coerce to <2 x i16>
|
|
%2 = tail call <2 x i16> @llvm.mips.addq.ph(<2 x i16> %0, <2 x i16> %1)
|
|
%3 = bitcast <2 x i16> %2 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
declare <2 x i16> @llvm.mips.addq.ph(<2 x i16>, <2 x i16>) nounwind
|
|
|
|
define { i32 } @test__builtin_mips_addq_s_ph1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
|
|
entry:
|
|
; CHECK: addq_s.ph
|
|
|
|
%0 = bitcast i32 %a0.coerce to <2 x i16>
|
|
%1 = bitcast i32 %a1.coerce to <2 x i16>
|
|
%2 = tail call <2 x i16> @llvm.mips.addq.s.ph(<2 x i16> %0, <2 x i16> %1)
|
|
%3 = bitcast <2 x i16> %2 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
declare <2 x i16> @llvm.mips.addq.s.ph(<2 x i16>, <2 x i16>) nounwind
|
|
|
|
define i32 @test__builtin_mips_addq_s_w1(i32 %i0, i32 %a0, i32 %a1) nounwind {
|
|
entry:
|
|
; CHECK: addq_s.w
|
|
|
|
%0 = tail call i32 @llvm.mips.addq.s.w(i32 %a0, i32 %a1)
|
|
ret i32 %0
|
|
}
|
|
|
|
declare i32 @llvm.mips.addq.s.w(i32, i32) nounwind
|
|
|
|
define { i32 } @test__builtin_mips_addu_qb1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
|
|
entry:
|
|
; CHECK: addu.qb
|
|
|
|
%0 = bitcast i32 %a0.coerce to <4 x i8>
|
|
%1 = bitcast i32 %a1.coerce to <4 x i8>
|
|
%2 = tail call <4 x i8> @llvm.mips.addu.qb(<4 x i8> %0, <4 x i8> %1)
|
|
%3 = bitcast <4 x i8> %2 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
declare <4 x i8> @llvm.mips.addu.qb(<4 x i8>, <4 x i8>) nounwind
|
|
|
|
define { i32 } @test__builtin_mips_addu_s_qb1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
|
|
entry:
|
|
; CHECK: addu_s.qb
|
|
|
|
%0 = bitcast i32 %a0.coerce to <4 x i8>
|
|
%1 = bitcast i32 %a1.coerce to <4 x i8>
|
|
%2 = tail call <4 x i8> @llvm.mips.addu.s.qb(<4 x i8> %0, <4 x i8> %1)
|
|
%3 = bitcast <4 x i8> %2 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
declare <4 x i8> @llvm.mips.addu.s.qb(<4 x i8>, <4 x i8>) nounwind
|
|
|
|
define { i32 } @test__builtin_mips_subq_ph1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
|
|
entry:
|
|
; CHECK: subq.ph
|
|
|
|
%0 = bitcast i32 %a0.coerce to <2 x i16>
|
|
%1 = bitcast i32 %a1.coerce to <2 x i16>
|
|
%2 = tail call <2 x i16> @llvm.mips.subq.ph(<2 x i16> %0, <2 x i16> %1)
|
|
%3 = bitcast <2 x i16> %2 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
declare <2 x i16> @llvm.mips.subq.ph(<2 x i16>, <2 x i16>) nounwind
|
|
|
|
define { i32 } @test__builtin_mips_subq_s_ph1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
|
|
entry:
|
|
; CHECK: subq_s.ph
|
|
|
|
%0 = bitcast i32 %a0.coerce to <2 x i16>
|
|
%1 = bitcast i32 %a1.coerce to <2 x i16>
|
|
%2 = tail call <2 x i16> @llvm.mips.subq.s.ph(<2 x i16> %0, <2 x i16> %1)
|
|
%3 = bitcast <2 x i16> %2 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
declare <2 x i16> @llvm.mips.subq.s.ph(<2 x i16>, <2 x i16>) nounwind
|
|
|
|
define i32 @test__builtin_mips_subq_s_w1(i32 %i0, i32 %a0, i32 %a1) nounwind {
|
|
entry:
|
|
; CHECK: subq_s.w
|
|
|
|
%0 = tail call i32 @llvm.mips.subq.s.w(i32 %a0, i32 %a1)
|
|
ret i32 %0
|
|
}
|
|
|
|
declare i32 @llvm.mips.subq.s.w(i32, i32) nounwind
|
|
|
|
define { i32 } @test__builtin_mips_subu_qb1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
|
|
entry:
|
|
; CHECK: subu.qb
|
|
|
|
%0 = bitcast i32 %a0.coerce to <4 x i8>
|
|
%1 = bitcast i32 %a1.coerce to <4 x i8>
|
|
%2 = tail call <4 x i8> @llvm.mips.subu.qb(<4 x i8> %0, <4 x i8> %1)
|
|
%3 = bitcast <4 x i8> %2 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
declare <4 x i8> @llvm.mips.subu.qb(<4 x i8>, <4 x i8>) nounwind
|
|
|
|
define { i32 } @test__builtin_mips_subu_s_qb1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
|
|
entry:
|
|
; CHECK: subu_s.qb
|
|
|
|
%0 = bitcast i32 %a0.coerce to <4 x i8>
|
|
%1 = bitcast i32 %a1.coerce to <4 x i8>
|
|
%2 = tail call <4 x i8> @llvm.mips.subu.s.qb(<4 x i8> %0, <4 x i8> %1)
|
|
%3 = bitcast <4 x i8> %2 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
declare <4 x i8> @llvm.mips.subu.s.qb(<4 x i8>, <4 x i8>) nounwind
|
|
|
|
define i32 @test__builtin_mips_addsc1(i32 %i0, i32 %a0, i32 %a1) nounwind {
|
|
entry:
|
|
; CHECK: addsc ${{[0-9]+}}
|
|
|
|
%0 = tail call i32 @llvm.mips.addsc(i32 %a0, i32 %a1)
|
|
ret i32 %0
|
|
}
|
|
|
|
declare i32 @llvm.mips.addsc(i32, i32) nounwind
|
|
|
|
define i32 @test__builtin_mips_addwc1(i32 %i0, i32 %a0, i32 %a1) nounwind {
|
|
entry:
|
|
; CHECK: addwc ${{[0-9]+}}
|
|
|
|
%0 = tail call i32 @llvm.mips.addwc(i32 %a0, i32 %a1)
|
|
ret i32 %0
|
|
}
|
|
|
|
declare i32 @llvm.mips.addwc(i32, i32) nounwind
|
|
|
|
define i32 @test__builtin_mips_modsub1(i32 %i0, i32 %a0, i32 %a1) nounwind readnone {
|
|
entry:
|
|
; CHECK: modsub ${{[0-9]+}}
|
|
|
|
%0 = tail call i32 @llvm.mips.modsub(i32 %a0, i32 %a1)
|
|
ret i32 %0
|
|
}
|
|
|
|
declare i32 @llvm.mips.modsub(i32, i32) nounwind readnone
|
|
|
|
define i32 @test__builtin_mips_raddu_w_qb1(i32 %i0, i32 %a0.coerce) nounwind readnone {
|
|
entry:
|
|
; CHECK: raddu.w.qb
|
|
|
|
%0 = bitcast i32 %a0.coerce to <4 x i8>
|
|
%1 = tail call i32 @llvm.mips.raddu.w.qb(<4 x i8> %0)
|
|
ret i32 %1
|
|
}
|
|
|
|
declare i32 @llvm.mips.raddu.w.qb(<4 x i8>) nounwind readnone
|
|
|
|
define { i32 } @test__builtin_mips_muleu_s_ph_qbl1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
|
|
entry:
|
|
; CHECK: muleu_s.ph.qbl
|
|
|
|
%0 = bitcast i32 %a0.coerce to <4 x i8>
|
|
%1 = bitcast i32 %a1.coerce to <2 x i16>
|
|
%2 = tail call <2 x i16> @llvm.mips.muleu.s.ph.qbl(<4 x i8> %0, <2 x i16> %1)
|
|
%3 = bitcast <2 x i16> %2 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
declare <2 x i16> @llvm.mips.muleu.s.ph.qbl(<4 x i8>, <2 x i16>) nounwind
|
|
|
|
define { i32 } @test__builtin_mips_muleu_s_ph_qbr1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
|
|
entry:
|
|
; CHECK: muleu_s.ph.qbr
|
|
|
|
%0 = bitcast i32 %a0.coerce to <4 x i8>
|
|
%1 = bitcast i32 %a1.coerce to <2 x i16>
|
|
%2 = tail call <2 x i16> @llvm.mips.muleu.s.ph.qbr(<4 x i8> %0, <2 x i16> %1)
|
|
%3 = bitcast <2 x i16> %2 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
declare <2 x i16> @llvm.mips.muleu.s.ph.qbr(<4 x i8>, <2 x i16>) nounwind
|
|
|
|
define { i32 } @test__builtin_mips_mulq_rs_ph1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
|
|
entry:
|
|
; CHECK: mulq_rs.ph
|
|
|
|
%0 = bitcast i32 %a0.coerce to <2 x i16>
|
|
%1 = bitcast i32 %a1.coerce to <2 x i16>
|
|
%2 = tail call <2 x i16> @llvm.mips.mulq.rs.ph(<2 x i16> %0, <2 x i16> %1)
|
|
%3 = bitcast <2 x i16> %2 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
declare <2 x i16> @llvm.mips.mulq.rs.ph(<2 x i16>, <2 x i16>) nounwind
|
|
|
|
define i32 @test__builtin_mips_muleq_s_w_phl1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
|
|
entry:
|
|
; CHECK: muleq_s.w.phl
|
|
|
|
%0 = bitcast i32 %a0.coerce to <2 x i16>
|
|
%1 = bitcast i32 %a1.coerce to <2 x i16>
|
|
%2 = tail call i32 @llvm.mips.muleq.s.w.phl(<2 x i16> %0, <2 x i16> %1)
|
|
ret i32 %2
|
|
}
|
|
|
|
declare i32 @llvm.mips.muleq.s.w.phl(<2 x i16>, <2 x i16>) nounwind
|
|
|
|
define i32 @test__builtin_mips_muleq_s_w_phr1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
|
|
entry:
|
|
; CHECK: muleq_s.w.phr
|
|
|
|
%0 = bitcast i32 %a0.coerce to <2 x i16>
|
|
%1 = bitcast i32 %a1.coerce to <2 x i16>
|
|
%2 = tail call i32 @llvm.mips.muleq.s.w.phr(<2 x i16> %0, <2 x i16> %1)
|
|
ret i32 %2
|
|
}
|
|
|
|
declare i32 @llvm.mips.muleq.s.w.phr(<2 x i16>, <2 x i16>) nounwind
|
|
|
|
define { i32 } @test__builtin_mips_precrq_qb_ph1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind readnone {
|
|
entry:
|
|
; CHECK: precrq.qb.ph
|
|
|
|
%0 = bitcast i32 %a0.coerce to <2 x i16>
|
|
%1 = bitcast i32 %a1.coerce to <2 x i16>
|
|
%2 = tail call <4 x i8> @llvm.mips.precrq.qb.ph(<2 x i16> %0, <2 x i16> %1)
|
|
%3 = bitcast <4 x i8> %2 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
declare <4 x i8> @llvm.mips.precrq.qb.ph(<2 x i16>, <2 x i16>) nounwind readnone
|
|
|
|
define { i32 } @test__builtin_mips_precrq_ph_w1(i32 %i0, i32 %a0, i32 %a1) nounwind readnone {
|
|
entry:
|
|
; CHECK: precrq.ph.w
|
|
|
|
%0 = tail call <2 x i16> @llvm.mips.precrq.ph.w(i32 %a0, i32 %a1)
|
|
%1 = bitcast <2 x i16> %0 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %1, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
declare <2 x i16> @llvm.mips.precrq.ph.w(i32, i32) nounwind readnone
|
|
|
|
define { i32 } @test__builtin_mips_precrq_rs_ph_w1(i32 %i0, i32 %a0, i32 %a1) nounwind {
|
|
entry:
|
|
; CHECK: precrq_rs.ph.w
|
|
|
|
%0 = tail call <2 x i16> @llvm.mips.precrq.rs.ph.w(i32 %a0, i32 %a1)
|
|
%1 = bitcast <2 x i16> %0 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %1, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
declare <2 x i16> @llvm.mips.precrq.rs.ph.w(i32, i32) nounwind
|
|
|
|
define { i32 } @test__builtin_mips_precrqu_s_qb_ph1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
|
|
entry:
|
|
; CHECK: precrqu_s.qb.ph
|
|
|
|
%0 = bitcast i32 %a0.coerce to <2 x i16>
|
|
%1 = bitcast i32 %a1.coerce to <2 x i16>
|
|
%2 = tail call <4 x i8> @llvm.mips.precrqu.s.qb.ph(<2 x i16> %0, <2 x i16> %1)
|
|
%3 = bitcast <4 x i8> %2 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
declare <4 x i8> @llvm.mips.precrqu.s.qb.ph(<2 x i16>, <2 x i16>) nounwind
|
|
|
|
|
|
define i32 @test__builtin_mips_cmpu_eq_qb1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
|
|
entry:
|
|
; CHECK: cmpu.eq.qb
|
|
|
|
%0 = bitcast i32 %a0.coerce to <4 x i8>
|
|
%1 = bitcast i32 %a1.coerce to <4 x i8>
|
|
tail call void @llvm.mips.cmpu.eq.qb(<4 x i8> %0, <4 x i8> %1)
|
|
%2 = tail call i32 @llvm.mips.rddsp(i32 31)
|
|
ret i32 %2
|
|
}
|
|
|
|
declare void @llvm.mips.cmpu.eq.qb(<4 x i8>, <4 x i8>) nounwind
|
|
|
|
declare i32 @llvm.mips.rddsp(i32) nounwind readonly
|
|
|
|
define i32 @test__builtin_mips_cmpu_lt_qb1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
|
|
entry:
|
|
; CHECK: cmpu.lt.qb
|
|
|
|
%0 = bitcast i32 %a0.coerce to <4 x i8>
|
|
%1 = bitcast i32 %a1.coerce to <4 x i8>
|
|
tail call void @llvm.mips.cmpu.lt.qb(<4 x i8> %0, <4 x i8> %1)
|
|
%2 = tail call i32 @llvm.mips.rddsp(i32 31)
|
|
ret i32 %2
|
|
}
|
|
|
|
declare void @llvm.mips.cmpu.lt.qb(<4 x i8>, <4 x i8>) nounwind
|
|
|
|
define i32 @test__builtin_mips_cmpu_le_qb1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
|
|
entry:
|
|
; CHECK: cmpu.le.qb
|
|
|
|
%0 = bitcast i32 %a0.coerce to <4 x i8>
|
|
%1 = bitcast i32 %a1.coerce to <4 x i8>
|
|
tail call void @llvm.mips.cmpu.le.qb(<4 x i8> %0, <4 x i8> %1)
|
|
%2 = tail call i32 @llvm.mips.rddsp(i32 31)
|
|
ret i32 %2
|
|
}
|
|
|
|
declare void @llvm.mips.cmpu.le.qb(<4 x i8>, <4 x i8>) nounwind
|
|
|
|
define i32 @test__builtin_mips_cmpgu_eq_qb1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
|
|
entry:
|
|
; CHECK: cmpgu.eq.qb
|
|
|
|
%0 = bitcast i32 %a0.coerce to <4 x i8>
|
|
%1 = bitcast i32 %a1.coerce to <4 x i8>
|
|
%2 = tail call i32 @llvm.mips.cmpgu.eq.qb(<4 x i8> %0, <4 x i8> %1)
|
|
ret i32 %2
|
|
}
|
|
|
|
declare i32 @llvm.mips.cmpgu.eq.qb(<4 x i8>, <4 x i8>) nounwind
|
|
|
|
define i32 @test__builtin_mips_cmpgu_lt_qb1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
|
|
entry:
|
|
; CHECK: cmpgu.lt.qb
|
|
|
|
%0 = bitcast i32 %a0.coerce to <4 x i8>
|
|
%1 = bitcast i32 %a1.coerce to <4 x i8>
|
|
%2 = tail call i32 @llvm.mips.cmpgu.lt.qb(<4 x i8> %0, <4 x i8> %1)
|
|
ret i32 %2
|
|
}
|
|
|
|
declare i32 @llvm.mips.cmpgu.lt.qb(<4 x i8>, <4 x i8>) nounwind
|
|
|
|
define i32 @test__builtin_mips_cmpgu_le_qb1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
|
|
entry:
|
|
; CHECK: cmpgu.le.qb
|
|
|
|
%0 = bitcast i32 %a0.coerce to <4 x i8>
|
|
%1 = bitcast i32 %a1.coerce to <4 x i8>
|
|
%2 = tail call i32 @llvm.mips.cmpgu.le.qb(<4 x i8> %0, <4 x i8> %1)
|
|
ret i32 %2
|
|
}
|
|
|
|
declare i32 @llvm.mips.cmpgu.le.qb(<4 x i8>, <4 x i8>) nounwind
|
|
|
|
define i32 @test__builtin_mips_cmp_eq_ph1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
|
|
entry:
|
|
; CHECK: cmp.eq.ph
|
|
|
|
%0 = bitcast i32 %a0.coerce to <2 x i16>
|
|
%1 = bitcast i32 %a1.coerce to <2 x i16>
|
|
tail call void @llvm.mips.cmp.eq.ph(<2 x i16> %0, <2 x i16> %1)
|
|
%2 = tail call i32 @llvm.mips.rddsp(i32 31)
|
|
ret i32 %2
|
|
}
|
|
|
|
declare void @llvm.mips.cmp.eq.ph(<2 x i16>, <2 x i16>) nounwind
|
|
|
|
define i32 @test__builtin_mips_cmp_lt_ph1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
|
|
entry:
|
|
; CHECK: cmp.lt.ph
|
|
|
|
%0 = bitcast i32 %a0.coerce to <2 x i16>
|
|
%1 = bitcast i32 %a1.coerce to <2 x i16>
|
|
tail call void @llvm.mips.cmp.lt.ph(<2 x i16> %0, <2 x i16> %1)
|
|
%2 = tail call i32 @llvm.mips.rddsp(i32 31)
|
|
ret i32 %2
|
|
}
|
|
|
|
declare void @llvm.mips.cmp.lt.ph(<2 x i16>, <2 x i16>) nounwind
|
|
|
|
define i32 @test__builtin_mips_cmp_le_ph1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
|
|
entry:
|
|
; CHECK: cmp.le.ph
|
|
|
|
%0 = bitcast i32 %a0.coerce to <2 x i16>
|
|
%1 = bitcast i32 %a1.coerce to <2 x i16>
|
|
tail call void @llvm.mips.cmp.le.ph(<2 x i16> %0, <2 x i16> %1)
|
|
%2 = tail call i32 @llvm.mips.rddsp(i32 31)
|
|
ret i32 %2
|
|
}
|
|
|
|
declare void @llvm.mips.cmp.le.ph(<2 x i16>, <2 x i16>) nounwind
|
|
|
|
define { i32 } @test__builtin_mips_pick_qb1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind readonly {
|
|
entry:
|
|
; CHECK: pick.qb
|
|
|
|
%0 = bitcast i32 %a0.coerce to <4 x i8>
|
|
%1 = bitcast i32 %a1.coerce to <4 x i8>
|
|
tail call void @llvm.mips.wrdsp(i32 %i0, i32 16)
|
|
%2 = tail call <4 x i8> @llvm.mips.pick.qb(<4 x i8> %0, <4 x i8> %1)
|
|
%3 = bitcast <4 x i8> %2 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
declare <4 x i8> @llvm.mips.pick.qb(<4 x i8>, <4 x i8>) nounwind readonly
|
|
|
|
define { i32 } @test__builtin_mips_pick_ph1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind readonly {
|
|
entry:
|
|
; CHECK: pick.ph
|
|
|
|
%0 = bitcast i32 %a0.coerce to <2 x i16>
|
|
%1 = bitcast i32 %a1.coerce to <2 x i16>
|
|
tail call void @llvm.mips.wrdsp(i32 %i0, i32 16)
|
|
%2 = tail call <2 x i16> @llvm.mips.pick.ph(<2 x i16> %0, <2 x i16> %1)
|
|
%3 = bitcast <2 x i16> %2 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
declare <2 x i16> @llvm.mips.pick.ph(<2 x i16>, <2 x i16>) nounwind readonly
|
|
|
|
define { i32 } @test__builtin_mips_packrl_ph1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind readnone {
|
|
entry:
|
|
; CHECK: packrl.ph
|
|
|
|
%0 = bitcast i32 %a0.coerce to <2 x i16>
|
|
%1 = bitcast i32 %a1.coerce to <2 x i16>
|
|
%2 = tail call <2 x i16> @llvm.mips.packrl.ph(<2 x i16> %0, <2 x i16> %1)
|
|
%3 = bitcast <2 x i16> %2 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
declare <2 x i16> @llvm.mips.packrl.ph(<2 x i16>, <2 x i16>) nounwind readnone
|
|
|
|
define { i32 } @test__builtin_mips_shll_qb1(i32 %i0, i32 %a0.coerce) nounwind {
|
|
entry:
|
|
; CHECK: shll.qb
|
|
|
|
%0 = bitcast i32 %a0.coerce to <4 x i8>
|
|
%1 = tail call <4 x i8> @llvm.mips.shll.qb(<4 x i8> %0, i32 3)
|
|
%2 = bitcast <4 x i8> %1 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
declare <4 x i8> @llvm.mips.shll.qb(<4 x i8>, i32) nounwind
|
|
|
|
define { i32 } @test__builtin_mips_shll_qb2(i32 %i0, i32 %a0.coerce, i32 %a1) nounwind {
|
|
entry:
|
|
; CHECK: shllv.qb
|
|
|
|
%0 = bitcast i32 %a0.coerce to <4 x i8>
|
|
%1 = tail call <4 x i8> @llvm.mips.shll.qb(<4 x i8> %0, i32 %a1)
|
|
%2 = bitcast <4 x i8> %1 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
define { i32 } @test__builtin_mips_shll_ph1(i32 %i0, i32 %a0.coerce) nounwind {
|
|
entry:
|
|
; CHECK: shll.ph
|
|
|
|
%0 = bitcast i32 %a0.coerce to <2 x i16>
|
|
%1 = tail call <2 x i16> @llvm.mips.shll.ph(<2 x i16> %0, i32 7)
|
|
%2 = bitcast <2 x i16> %1 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
declare <2 x i16> @llvm.mips.shll.ph(<2 x i16>, i32) nounwind
|
|
|
|
define { i32 } @test__builtin_mips_shll_ph2(i32 %i0, i32 %a0.coerce, i32 %a1) nounwind {
|
|
entry:
|
|
; CHECK: shllv.ph
|
|
|
|
%0 = bitcast i32 %a0.coerce to <2 x i16>
|
|
%1 = tail call <2 x i16> @llvm.mips.shll.ph(<2 x i16> %0, i32 %a1)
|
|
%2 = bitcast <2 x i16> %1 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
define { i32 } @test__builtin_mips_shll_s_ph1(i32 %i0, i32 %a0.coerce) nounwind {
|
|
entry:
|
|
; CHECK: shll_s.ph
|
|
|
|
%0 = bitcast i32 %a0.coerce to <2 x i16>
|
|
%1 = tail call <2 x i16> @llvm.mips.shll.s.ph(<2 x i16> %0, i32 7)
|
|
%2 = bitcast <2 x i16> %1 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
declare <2 x i16> @llvm.mips.shll.s.ph(<2 x i16>, i32) nounwind
|
|
|
|
define { i32 } @test__builtin_mips_shll_s_ph2(i32 %i0, i32 %a0.coerce, i32 %a1) nounwind {
|
|
entry:
|
|
; CHECK: shllv_s.ph
|
|
|
|
%0 = bitcast i32 %a0.coerce to <2 x i16>
|
|
%1 = tail call <2 x i16> @llvm.mips.shll.s.ph(<2 x i16> %0, i32 %a1)
|
|
%2 = bitcast <2 x i16> %1 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
define i32 @test__builtin_mips_shll_s_w1(i32 %i0, i32 %a0) nounwind {
|
|
entry:
|
|
; CHECK: shll_s.w
|
|
|
|
%0 = tail call i32 @llvm.mips.shll.s.w(i32 %a0, i32 15)
|
|
ret i32 %0
|
|
}
|
|
|
|
declare i32 @llvm.mips.shll.s.w(i32, i32) nounwind
|
|
|
|
define i32 @test__builtin_mips_shll_s_w2(i32 %i0, i32 %a0, i32 %a1) nounwind {
|
|
entry:
|
|
; CHECK: shllv_s.w
|
|
|
|
%0 = tail call i32 @llvm.mips.shll.s.w(i32 %a0, i32 %a1)
|
|
ret i32 %0
|
|
}
|
|
|
|
define { i32 } @test__builtin_mips_shrl_qb1(i32 %i0, i32 %a0.coerce) nounwind readnone {
|
|
entry:
|
|
; CHECK: shrl.qb
|
|
|
|
%0 = bitcast i32 %a0.coerce to <4 x i8>
|
|
%1 = tail call <4 x i8> @llvm.mips.shrl.qb(<4 x i8> %0, i32 3)
|
|
%2 = bitcast <4 x i8> %1 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
declare <4 x i8> @llvm.mips.shrl.qb(<4 x i8>, i32) nounwind readnone
|
|
|
|
define { i32 } @test__builtin_mips_shrl_qb2(i32 %i0, i32 %a0.coerce, i32 %a1) nounwind readnone {
|
|
entry:
|
|
; CHECK: shrlv.qb
|
|
|
|
%0 = bitcast i32 %a0.coerce to <4 x i8>
|
|
%1 = tail call <4 x i8> @llvm.mips.shrl.qb(<4 x i8> %0, i32 %a1)
|
|
%2 = bitcast <4 x i8> %1 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
define { i32 } @test__builtin_mips_shra_ph1(i32 %i0, i32 %a0.coerce) nounwind readnone {
|
|
entry:
|
|
; CHECK: shra.ph
|
|
|
|
%0 = bitcast i32 %a0.coerce to <2 x i16>
|
|
%1 = tail call <2 x i16> @llvm.mips.shra.ph(<2 x i16> %0, i32 7)
|
|
%2 = bitcast <2 x i16> %1 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
declare <2 x i16> @llvm.mips.shra.ph(<2 x i16>, i32) nounwind readnone
|
|
|
|
define { i32 } @test__builtin_mips_shra_ph2(i32 %i0, i32 %a0.coerce, i32 %a1) nounwind readnone {
|
|
entry:
|
|
; CHECK: shrav.ph
|
|
|
|
%0 = bitcast i32 %a0.coerce to <2 x i16>
|
|
%1 = tail call <2 x i16> @llvm.mips.shra.ph(<2 x i16> %0, i32 %a1)
|
|
%2 = bitcast <2 x i16> %1 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
define { i32 } @test__builtin_mips_shra_r_ph1(i32 %i0, i32 %a0.coerce) nounwind readnone {
|
|
entry:
|
|
; CHECK: shra_r.ph
|
|
|
|
%0 = bitcast i32 %a0.coerce to <2 x i16>
|
|
%1 = tail call <2 x i16> @llvm.mips.shra.r.ph(<2 x i16> %0, i32 7)
|
|
%2 = bitcast <2 x i16> %1 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
declare <2 x i16> @llvm.mips.shra.r.ph(<2 x i16>, i32) nounwind readnone
|
|
|
|
define { i32 } @test__builtin_mips_shra_r_ph2(i32 %i0, i32 %a0.coerce, i32 %a1) nounwind readnone {
|
|
entry:
|
|
; CHECK: shrav_r.ph
|
|
|
|
%0 = bitcast i32 %a0.coerce to <2 x i16>
|
|
%1 = tail call <2 x i16> @llvm.mips.shra.r.ph(<2 x i16> %0, i32 %a1)
|
|
%2 = bitcast <2 x i16> %1 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
define i32 @test__builtin_mips_shra_r_w1(i32 %i0, i32 %a0) nounwind readnone {
|
|
entry:
|
|
; CHECK: shra_r.w
|
|
|
|
%0 = tail call i32 @llvm.mips.shra.r.w(i32 %a0, i32 15)
|
|
ret i32 %0
|
|
}
|
|
|
|
declare i32 @llvm.mips.shra.r.w(i32, i32) nounwind readnone
|
|
|
|
define i32 @test__builtin_mips_shra_r_w2(i32 %i0, i32 %a0, i32 %a1) nounwind readnone {
|
|
entry:
|
|
; CHECK: shrav_r.w
|
|
|
|
%0 = tail call i32 @llvm.mips.shra.r.w(i32 %a0, i32 %a1)
|
|
ret i32 %0
|
|
}
|
|
|
|
define { i32 } @test__builtin_mips_absq_s_ph1(i32 %i0, i32 %a0.coerce) nounwind {
|
|
entry:
|
|
; CHECK: absq_s.ph
|
|
|
|
%0 = bitcast i32 %a0.coerce to <2 x i16>
|
|
%1 = tail call <2 x i16> @llvm.mips.absq.s.ph(<2 x i16> %0)
|
|
%2 = bitcast <2 x i16> %1 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
declare <2 x i16> @llvm.mips.absq.s.ph(<2 x i16>) nounwind
|
|
|
|
define i32 @test__builtin_mips_absq_s_w1(i32 %i0, i32 %a0) nounwind {
|
|
entry:
|
|
; CHECK: absq_s.w
|
|
|
|
%0 = tail call i32 @llvm.mips.absq.s.w(i32 %a0)
|
|
ret i32 %0
|
|
}
|
|
|
|
declare i32 @llvm.mips.absq.s.w(i32) nounwind
|
|
|
|
define i32 @test__builtin_mips_preceq_w_phl1(i32 %i0, i32 %a0.coerce) nounwind readnone {
|
|
entry:
|
|
; CHECK: preceq.w.phl
|
|
|
|
%0 = bitcast i32 %a0.coerce to <2 x i16>
|
|
%1 = tail call i32 @llvm.mips.preceq.w.phl(<2 x i16> %0)
|
|
ret i32 %1
|
|
}
|
|
|
|
declare i32 @llvm.mips.preceq.w.phl(<2 x i16>) nounwind readnone
|
|
|
|
define i32 @test__builtin_mips_preceq_w_phr1(i32 %i0, i32 %a0.coerce) nounwind readnone {
|
|
entry:
|
|
; CHECK: preceq.w.phr
|
|
|
|
%0 = bitcast i32 %a0.coerce to <2 x i16>
|
|
%1 = tail call i32 @llvm.mips.preceq.w.phr(<2 x i16> %0)
|
|
ret i32 %1
|
|
}
|
|
|
|
declare i32 @llvm.mips.preceq.w.phr(<2 x i16>) nounwind readnone
|
|
|
|
define { i32 } @test__builtin_mips_precequ_ph_qbl1(i32 %i0, i32 %a0.coerce) nounwind readnone {
|
|
entry:
|
|
; CHECK: precequ.ph.qbl
|
|
|
|
%0 = bitcast i32 %a0.coerce to <4 x i8>
|
|
%1 = tail call <2 x i16> @llvm.mips.precequ.ph.qbl(<4 x i8> %0)
|
|
%2 = bitcast <2 x i16> %1 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
declare <2 x i16> @llvm.mips.precequ.ph.qbl(<4 x i8>) nounwind readnone
|
|
|
|
define { i32 } @test__builtin_mips_precequ_ph_qbr1(i32 %i0, i32 %a0.coerce) nounwind readnone {
|
|
entry:
|
|
; CHECK: precequ.ph.qbr
|
|
|
|
%0 = bitcast i32 %a0.coerce to <4 x i8>
|
|
%1 = tail call <2 x i16> @llvm.mips.precequ.ph.qbr(<4 x i8> %0)
|
|
%2 = bitcast <2 x i16> %1 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
declare <2 x i16> @llvm.mips.precequ.ph.qbr(<4 x i8>) nounwind readnone
|
|
|
|
define { i32 } @test__builtin_mips_precequ_ph_qbla1(i32 %i0, i32 %a0.coerce) nounwind readnone {
|
|
entry:
|
|
; CHECK: precequ.ph.qbla
|
|
|
|
%0 = bitcast i32 %a0.coerce to <4 x i8>
|
|
%1 = tail call <2 x i16> @llvm.mips.precequ.ph.qbla(<4 x i8> %0)
|
|
%2 = bitcast <2 x i16> %1 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
declare <2 x i16> @llvm.mips.precequ.ph.qbla(<4 x i8>) nounwind readnone
|
|
|
|
define { i32 } @test__builtin_mips_precequ_ph_qbra1(i32 %i0, i32 %a0.coerce) nounwind readnone {
|
|
entry:
|
|
; CHECK: precequ.ph.qbra
|
|
|
|
%0 = bitcast i32 %a0.coerce to <4 x i8>
|
|
%1 = tail call <2 x i16> @llvm.mips.precequ.ph.qbra(<4 x i8> %0)
|
|
%2 = bitcast <2 x i16> %1 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
declare <2 x i16> @llvm.mips.precequ.ph.qbra(<4 x i8>) nounwind readnone
|
|
|
|
define { i32 } @test__builtin_mips_preceu_ph_qbl1(i32 %i0, i32 %a0.coerce) nounwind readnone {
|
|
entry:
|
|
; CHECK: preceu.ph.qbl
|
|
|
|
%0 = bitcast i32 %a0.coerce to <4 x i8>
|
|
%1 = tail call <2 x i16> @llvm.mips.preceu.ph.qbl(<4 x i8> %0)
|
|
%2 = bitcast <2 x i16> %1 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
declare <2 x i16> @llvm.mips.preceu.ph.qbl(<4 x i8>) nounwind readnone
|
|
|
|
define { i32 } @test__builtin_mips_preceu_ph_qbr1(i32 %i0, i32 %a0.coerce) nounwind readnone {
|
|
entry:
|
|
; CHECK: preceu.ph.qbr
|
|
|
|
%0 = bitcast i32 %a0.coerce to <4 x i8>
|
|
%1 = tail call <2 x i16> @llvm.mips.preceu.ph.qbr(<4 x i8> %0)
|
|
%2 = bitcast <2 x i16> %1 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
declare <2 x i16> @llvm.mips.preceu.ph.qbr(<4 x i8>) nounwind readnone
|
|
|
|
define { i32 } @test__builtin_mips_preceu_ph_qbla1(i32 %i0, i32 %a0.coerce) nounwind readnone {
|
|
entry:
|
|
; CHECK: preceu.ph.qbla
|
|
|
|
%0 = bitcast i32 %a0.coerce to <4 x i8>
|
|
%1 = tail call <2 x i16> @llvm.mips.preceu.ph.qbla(<4 x i8> %0)
|
|
%2 = bitcast <2 x i16> %1 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
declare <2 x i16> @llvm.mips.preceu.ph.qbla(<4 x i8>) nounwind readnone
|
|
|
|
define { i32 } @test__builtin_mips_preceu_ph_qbra1(i32 %i0, i32 %a0.coerce) nounwind readnone {
|
|
entry:
|
|
; CHECK: preceu.ph.qbra
|
|
|
|
%0 = bitcast i32 %a0.coerce to <4 x i8>
|
|
%1 = tail call <2 x i16> @llvm.mips.preceu.ph.qbra(<4 x i8> %0)
|
|
%2 = bitcast <2 x i16> %1 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
declare <2 x i16> @llvm.mips.preceu.ph.qbra(<4 x i8>) nounwind readnone
|
|
|
|
define { i32 } @test__builtin_mips_repl_qb1(i32 %i0) nounwind readnone {
|
|
entry:
|
|
; CHECK: repl.qb
|
|
|
|
%0 = tail call <4 x i8> @llvm.mips.repl.qb(i32 127)
|
|
%1 = bitcast <4 x i8> %0 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %1, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
declare <4 x i8> @llvm.mips.repl.qb(i32) nounwind readnone
|
|
|
|
define { i32 } @test__builtin_mips_repl_qb2(i32 %i0, i32 %a0) nounwind readnone {
|
|
entry:
|
|
; CHECK: replv.qb
|
|
|
|
%0 = tail call <4 x i8> @llvm.mips.repl.qb(i32 %a0)
|
|
%1 = bitcast <4 x i8> %0 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %1, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
define { i32 } @test__builtin_mips_repl_ph1(i32 %i0) nounwind readnone {
|
|
entry:
|
|
; CHECK: repl.ph
|
|
|
|
%0 = tail call <2 x i16> @llvm.mips.repl.ph(i32 0)
|
|
%1 = bitcast <2 x i16> %0 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %1, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
define { i32 } @test__builtin_mips_repl_ph2(i32 %i0) nounwind readnone {
|
|
entry:
|
|
; CHECK: repl.ph
|
|
|
|
%0 = tail call <2 x i16> @llvm.mips.repl.ph(i32 -2)
|
|
%1 = bitcast <2 x i16> %0 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %1, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
declare <2 x i16> @llvm.mips.repl.ph(i32) nounwind readnone
|
|
|
|
define { i32 } @test__builtin_mips_repl_ph3(i32 %i0, i32 %a0) nounwind readnone {
|
|
entry:
|
|
; CHECK: replv.ph
|
|
|
|
%0 = tail call <2 x i16> @llvm.mips.repl.ph(i32 %a0)
|
|
%1 = bitcast <2 x i16> %0 to i32
|
|
%.fca.0.insert = insertvalue { i32 } undef, i32 %1, 0
|
|
ret { i32 } %.fca.0.insert
|
|
}
|
|
|
|
define i32 @test__builtin_mips_bitrev1(i32 %i0, i32 %a0) nounwind readnone {
|
|
entry:
|
|
; CHECK: bitrev ${{[0-9]+}}
|
|
|
|
%0 = tail call i32 @llvm.mips.bitrev(i32 %a0)
|
|
ret i32 %0
|
|
}
|
|
|
|
declare i32 @llvm.mips.bitrev(i32) nounwind readnone
|
|
|
|
define i32 @test__builtin_mips_lbux1(i32 %i0, i8* %a0, i32 %a1) nounwind readonly {
|
|
entry:
|
|
; CHECK: lbux ${{[0-9]+}}
|
|
|
|
%0 = tail call i32 @llvm.mips.lbux(i8* %a0, i32 %a1)
|
|
ret i32 %0
|
|
}
|
|
|
|
declare i32 @llvm.mips.lbux(i8*, i32) nounwind readonly
|
|
|
|
define i32 @test__builtin_mips_lhx1(i32 %i0, i8* %a0, i32 %a1) nounwind readonly {
|
|
entry:
|
|
; CHECK: lhx ${{[0-9]+}}
|
|
|
|
%0 = tail call i32 @llvm.mips.lhx(i8* %a0, i32 %a1)
|
|
ret i32 %0
|
|
}
|
|
|
|
declare i32 @llvm.mips.lhx(i8*, i32) nounwind readonly
|
|
|
|
define i32 @test__builtin_mips_lwx1(i32 %i0, i8* %a0, i32 %a1) nounwind readonly {
|
|
entry:
|
|
; CHECK: lwx ${{[0-9]+}}
|
|
|
|
%0 = tail call i32 @llvm.mips.lwx(i8* %a0, i32 %a1)
|
|
ret i32 %0
|
|
}
|
|
|
|
declare i32 @llvm.mips.lwx(i8*, i32) nounwind readonly
|
|
|
|
define i32 @test__builtin_mips_wrdsp1(i32 %i0, i32 %a0) nounwind {
|
|
entry:
|
|
; CHECK: wrdsp ${{[0-9]+}}
|
|
; CHECK: rddsp ${{[0-9]+}}
|
|
|
|
tail call void @llvm.mips.wrdsp(i32 %a0, i32 31)
|
|
%0 = tail call i32 @llvm.mips.rddsp(i32 31)
|
|
ret i32 %0
|
|
}
|
|
|
|
declare void @llvm.mips.wrdsp(i32, i32) nounwind
|