mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-10 14:10:58 +00:00
[X86] Add LLVM version number for each intrinsic handled by auto upgrade for age tracking.
One day we'd like to remove some of this autoupgrade support and it will be easier if we know how long some of it has been around. Differential Revision: https://reviews.llvm.org/D26321 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@286933 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9de96caccf
commit
436c13969b
@ -226,155 +226,161 @@ static bool UpgradeIntrinsicFunction1(Function *F, Function *&NewFn) {
|
||||
if (IsX86)
|
||||
Name = Name.substr(4);
|
||||
|
||||
// All of the intrinsics matches below should be marked with which llvm
|
||||
// version started autoupgrading them. At some point in the future we would
|
||||
// like to use this information to remove upgrade code for some older
|
||||
// intrinsics. It is currently undecided how we will determine that future
|
||||
// point.
|
||||
if (IsX86 &&
|
||||
(Name.startswith("sse2.pcmpeq.") ||
|
||||
Name.startswith("sse2.pcmpgt.") ||
|
||||
Name.startswith("avx2.pcmpeq.") ||
|
||||
Name.startswith("avx2.pcmpgt.") ||
|
||||
Name.startswith("avx512.mask.pcmpeq.") ||
|
||||
Name.startswith("avx512.mask.pcmpgt.") ||
|
||||
Name == "sse41.pmaxsb" ||
|
||||
Name == "sse2.pmaxs.w" ||
|
||||
Name == "sse41.pmaxsd" ||
|
||||
Name == "sse2.pmaxu.b" ||
|
||||
Name == "sse41.pmaxuw" ||
|
||||
Name == "sse41.pmaxud" ||
|
||||
Name == "sse41.pminsb" ||
|
||||
Name == "sse2.pmins.w" ||
|
||||
Name == "sse41.pminsd" ||
|
||||
Name == "sse2.pminu.b" ||
|
||||
Name == "sse41.pminuw" ||
|
||||
Name == "sse41.pminud" ||
|
||||
Name == "avx512.mask.pshuf.b.128" ||
|
||||
Name == "avx512.mask.pshuf.b.256" ||
|
||||
Name.startswith("avx2.pmax") ||
|
||||
Name.startswith("avx2.pmin") ||
|
||||
Name.startswith("avx512.mask.pmax") ||
|
||||
Name.startswith("avx512.mask.pmin") ||
|
||||
Name.startswith("avx2.vbroadcast") ||
|
||||
Name.startswith("avx2.pbroadcast") ||
|
||||
Name.startswith("avx.vpermil.") ||
|
||||
Name.startswith("sse2.pshuf") ||
|
||||
Name.startswith("avx512.pbroadcast") ||
|
||||
Name.startswith("avx512.mask.broadcast.s") ||
|
||||
Name.startswith("avx512.mask.movddup") ||
|
||||
Name.startswith("avx512.mask.movshdup") ||
|
||||
Name.startswith("avx512.mask.movsldup") ||
|
||||
Name.startswith("avx512.mask.pshuf.d.") ||
|
||||
Name.startswith("avx512.mask.pshufl.w.") ||
|
||||
Name.startswith("avx512.mask.pshufh.w.") ||
|
||||
Name.startswith("avx512.mask.shuf.p") ||
|
||||
Name.startswith("avx512.mask.vpermil.p") ||
|
||||
Name.startswith("avx512.mask.perm.df.") ||
|
||||
Name.startswith("avx512.mask.perm.di.") ||
|
||||
Name.startswith("avx512.mask.punpckl") ||
|
||||
Name.startswith("avx512.mask.punpckh") ||
|
||||
Name.startswith("avx512.mask.unpckl.") ||
|
||||
Name.startswith("avx512.mask.unpckh.") ||
|
||||
Name.startswith("avx512.mask.pand.") ||
|
||||
Name.startswith("avx512.mask.pandn.") ||
|
||||
Name.startswith("avx512.mask.por.") ||
|
||||
Name.startswith("avx512.mask.pxor.") ||
|
||||
Name.startswith("avx512.mask.and.") ||
|
||||
Name.startswith("avx512.mask.andn.") ||
|
||||
Name.startswith("avx512.mask.or.") ||
|
||||
Name.startswith("avx512.mask.xor.") ||
|
||||
Name.startswith("avx512.mask.padd.") ||
|
||||
Name.startswith("avx512.mask.psub.") ||
|
||||
Name.startswith("avx512.mask.pmull.") ||
|
||||
Name == "avx512.mask.add.pd.128" ||
|
||||
Name == "avx512.mask.add.pd.256" ||
|
||||
Name == "avx512.mask.add.ps.128" ||
|
||||
Name == "avx512.mask.add.ps.256" ||
|
||||
Name == "avx512.mask.div.pd.128" ||
|
||||
Name == "avx512.mask.div.pd.256" ||
|
||||
Name == "avx512.mask.div.ps.128" ||
|
||||
Name == "avx512.mask.div.ps.256" ||
|
||||
Name == "avx512.mask.mul.pd.128" ||
|
||||
Name == "avx512.mask.mul.pd.256" ||
|
||||
Name == "avx512.mask.mul.ps.128" ||
|
||||
Name == "avx512.mask.mul.ps.256" ||
|
||||
Name == "avx512.mask.sub.pd.128" ||
|
||||
Name == "avx512.mask.sub.pd.256" ||
|
||||
Name == "avx512.mask.sub.ps.128" ||
|
||||
Name == "avx512.mask.sub.ps.256" ||
|
||||
Name.startswith("avx512.mask.psll.d") ||
|
||||
Name.startswith("avx512.mask.psll.q") ||
|
||||
Name.startswith("avx512.mask.psll.w") ||
|
||||
Name.startswith("avx512.mask.psra.d") ||
|
||||
Name.startswith("avx512.mask.psra.q") ||
|
||||
Name.startswith("avx512.mask.psra.w") ||
|
||||
Name.startswith("avx512.mask.psrl.d") ||
|
||||
Name.startswith("avx512.mask.psrl.q") ||
|
||||
Name.startswith("avx512.mask.psrl.w") ||
|
||||
Name.startswith("avx512.mask.pslli") ||
|
||||
Name.startswith("avx512.mask.psrai") ||
|
||||
Name.startswith("avx512.mask.psrli") ||
|
||||
Name == "avx512.mask.psllv2.di" ||
|
||||
Name == "avx512.mask.psllv4.di" ||
|
||||
Name == "avx512.mask.psllv4.si" ||
|
||||
Name == "avx512.mask.psllv8.si" ||
|
||||
Name == "avx512.mask.psrav4.si" ||
|
||||
Name == "avx512.mask.psrav8.si" ||
|
||||
Name == "avx512.mask.psrlv2.di" ||
|
||||
Name == "avx512.mask.psrlv4.di" ||
|
||||
Name == "avx512.mask.psrlv4.si" ||
|
||||
Name == "avx512.mask.psrlv8.si" ||
|
||||
Name.startswith("avx512.mask.psllv.") ||
|
||||
Name.startswith("avx512.mask.psrav.") ||
|
||||
Name.startswith("avx512.mask.psrlv.") ||
|
||||
Name.startswith("sse41.pmovsx") ||
|
||||
Name.startswith("sse41.pmovzx") ||
|
||||
Name.startswith("avx2.pmovsx") ||
|
||||
Name.startswith("avx2.pmovzx") ||
|
||||
Name.startswith("avx512.mask.pmovsx") ||
|
||||
Name.startswith("avx512.mask.pmovzx") ||
|
||||
Name == "sse2.cvtdq2pd" ||
|
||||
Name == "sse2.cvtps2pd" ||
|
||||
Name == "avx.cvtdq2.pd.256" ||
|
||||
Name == "avx.cvt.ps2.pd.256" ||
|
||||
Name.startswith("avx.vinsertf128.") ||
|
||||
Name == "avx2.vinserti128" ||
|
||||
Name.startswith("avx.vextractf128.") ||
|
||||
Name == "avx2.vextracti128" ||
|
||||
Name.startswith("sse4a.movnt.") ||
|
||||
Name.startswith("avx.movnt.") ||
|
||||
Name.startswith("avx512.storent.") ||
|
||||
Name == "sse2.storel.dq" ||
|
||||
Name.startswith("sse.storeu.") ||
|
||||
Name.startswith("sse2.storeu.") ||
|
||||
Name.startswith("avx.storeu.") ||
|
||||
Name.startswith("avx512.mask.storeu.") ||
|
||||
Name.startswith("avx512.mask.store.p") ||
|
||||
Name.startswith("avx512.mask.store.b.") ||
|
||||
Name.startswith("avx512.mask.store.w.") ||
|
||||
Name.startswith("avx512.mask.store.d.") ||
|
||||
Name.startswith("avx512.mask.store.q.") ||
|
||||
Name.startswith("avx512.mask.loadu.") ||
|
||||
Name.startswith("avx512.mask.load.") ||
|
||||
Name == "sse42.crc32.64.8" ||
|
||||
Name.startswith("avx.vbroadcast.s") ||
|
||||
Name.startswith("avx512.mask.palignr.") ||
|
||||
Name.startswith("sse2.psll.dq") ||
|
||||
Name.startswith("sse2.psrl.dq") ||
|
||||
Name.startswith("avx2.psll.dq") ||
|
||||
Name.startswith("avx2.psrl.dq") ||
|
||||
Name.startswith("avx512.psll.dq") ||
|
||||
Name.startswith("avx512.psrl.dq") ||
|
||||
Name == "sse41.pblendw" ||
|
||||
Name.startswith("sse41.blendp") ||
|
||||
Name.startswith("avx.blend.p") ||
|
||||
Name == "avx2.pblendw" ||
|
||||
Name.startswith("avx2.pblendd.") ||
|
||||
Name.startswith("avx.vbroadcastf128") ||
|
||||
Name == "avx2.vbroadcasti128" ||
|
||||
Name == "xop.vpcmov" ||
|
||||
(Name.startswith("xop.vpcom") && F->arg_size() == 2))) {
|
||||
(Name.startswith("sse2.pcmpeq.") || // Added in 3.1
|
||||
Name.startswith("sse2.pcmpgt.") || // Added in 3.1
|
||||
Name.startswith("avx2.pcmpeq.") || // Added in 3.1
|
||||
Name.startswith("avx2.pcmpgt.") || // Added in 3.1
|
||||
Name.startswith("avx512.mask.pcmpeq.") || // Added in 3.9
|
||||
Name.startswith("avx512.mask.pcmpgt.") || // Added in 3.9
|
||||
Name == "sse41.pmaxsb" || // Added in 3.9
|
||||
Name == "sse2.pmaxs.w" || // Added in 3.9
|
||||
Name == "sse41.pmaxsd" || // Added in 3.9
|
||||
Name == "sse2.pmaxu.b" || // Added in 3.9
|
||||
Name == "sse41.pmaxuw" || // Added in 3.9
|
||||
Name == "sse41.pmaxud" || // Added in 3.9
|
||||
Name == "sse41.pminsb" || // Added in 3.9
|
||||
Name == "sse2.pmins.w" || // Added in 3.9
|
||||
Name == "sse41.pminsd" || // Added in 3.9
|
||||
Name == "sse2.pminu.b" || // Added in 3.9
|
||||
Name == "sse41.pminuw" || // Added in 3.9
|
||||
Name == "sse41.pminud" || // Added in 3.9
|
||||
Name == "avx512.mask.pshuf.b.128" || // Added in 4.0
|
||||
Name == "avx512.mask.pshuf.b.256" || // Added in 4.0
|
||||
Name.startswith("avx2.pmax") || // Added in 3.9
|
||||
Name.startswith("avx2.pmin") || // Added in 3.9
|
||||
Name.startswith("avx512.mask.pmax") || // Added in 4.0
|
||||
Name.startswith("avx512.mask.pmin") || // Added in 4.0
|
||||
Name.startswith("avx2.vbroadcast") || // Added in 3.8
|
||||
Name.startswith("avx2.pbroadcast") || // Added in 3.8
|
||||
Name.startswith("avx.vpermil.") || // Added in 3.1
|
||||
Name.startswith("sse2.pshuf") || // Added in 3.9
|
||||
Name.startswith("avx512.pbroadcast") || // Added in 3.9
|
||||
Name.startswith("avx512.mask.broadcast.s") || // Added in 3.9
|
||||
Name.startswith("avx512.mask.movddup") || // Added in 3.9
|
||||
Name.startswith("avx512.mask.movshdup") || // Added in 3.9
|
||||
Name.startswith("avx512.mask.movsldup") || // Added in 3.9
|
||||
Name.startswith("avx512.mask.pshuf.d.") || // Added in 3.9
|
||||
Name.startswith("avx512.mask.pshufl.w.") || // Added in 3.9
|
||||
Name.startswith("avx512.mask.pshufh.w.") || // Added in 3.9
|
||||
Name.startswith("avx512.mask.shuf.p") || // Added in 4.0
|
||||
Name.startswith("avx512.mask.vpermil.p") || // Added in 3.9
|
||||
Name.startswith("avx512.mask.perm.df.") || // Added in 3.9
|
||||
Name.startswith("avx512.mask.perm.di.") || // Added in 3.9
|
||||
Name.startswith("avx512.mask.punpckl") || // Added in 3.9
|
||||
Name.startswith("avx512.mask.punpckh") || // Added in 3.9
|
||||
Name.startswith("avx512.mask.unpckl.") || // Added in 3.9
|
||||
Name.startswith("avx512.mask.unpckh.") || // Added in 3.9
|
||||
Name.startswith("avx512.mask.pand.") || // Added in 3.9
|
||||
Name.startswith("avx512.mask.pandn.") || // Added in 3.9
|
||||
Name.startswith("avx512.mask.por.") || // Added in 3.9
|
||||
Name.startswith("avx512.mask.pxor.") || // Added in 3.9
|
||||
Name.startswith("avx512.mask.and.") || // Added in 3.9
|
||||
Name.startswith("avx512.mask.andn.") || // Added in 3.9
|
||||
Name.startswith("avx512.mask.or.") || // Added in 3.9
|
||||
Name.startswith("avx512.mask.xor.") || // Added in 3.9
|
||||
Name.startswith("avx512.mask.padd.") || // Added in 4.0
|
||||
Name.startswith("avx512.mask.psub.") || // Added in 4.0
|
||||
Name.startswith("avx512.mask.pmull.") || // Added in 4.0
|
||||
Name == "avx512.mask.add.pd.128" || // Added in 4.0
|
||||
Name == "avx512.mask.add.pd.256" || // Added in 4.0
|
||||
Name == "avx512.mask.add.ps.128" || // Added in 4.0
|
||||
Name == "avx512.mask.add.ps.256" || // Added in 4.0
|
||||
Name == "avx512.mask.div.pd.128" || // Added in 4.0
|
||||
Name == "avx512.mask.div.pd.256" || // Added in 4.0
|
||||
Name == "avx512.mask.div.ps.128" || // Added in 4.0
|
||||
Name == "avx512.mask.div.ps.256" || // Added in 4.0
|
||||
Name == "avx512.mask.mul.pd.128" || // Added in 4.0
|
||||
Name == "avx512.mask.mul.pd.256" || // Added in 4.0
|
||||
Name == "avx512.mask.mul.ps.128" || // Added in 4.0
|
||||
Name == "avx512.mask.mul.ps.256" || // Added in 4.0
|
||||
Name == "avx512.mask.sub.pd.128" || // Added in 4.0
|
||||
Name == "avx512.mask.sub.pd.256" || // Added in 4.0
|
||||
Name == "avx512.mask.sub.ps.128" || // Added in 4.0
|
||||
Name == "avx512.mask.sub.ps.256" || // Added in 4.0
|
||||
Name.startswith("avx512.mask.psll.d") || // Added in 4.0
|
||||
Name.startswith("avx512.mask.psll.q") || // Added in 4.0
|
||||
Name.startswith("avx512.mask.psll.w") || // Added in 4.0
|
||||
Name.startswith("avx512.mask.psra.d") || // Added in 4.0
|
||||
Name.startswith("avx512.mask.psra.q") || // Added in 4.0
|
||||
Name.startswith("avx512.mask.psra.w") || // Added in 4.0
|
||||
Name.startswith("avx512.mask.psrl.d") || // Added in 4.0
|
||||
Name.startswith("avx512.mask.psrl.q") || // Added in 4.0
|
||||
Name.startswith("avx512.mask.psrl.w") || // Added in 4.0
|
||||
Name.startswith("avx512.mask.pslli") || // Added in 4.0
|
||||
Name.startswith("avx512.mask.psrai") || // Added in 4.0
|
||||
Name.startswith("avx512.mask.psrli") || // Added in 4.0
|
||||
Name == "avx512.mask.psllv2.di" || // Added in 4.0
|
||||
Name == "avx512.mask.psllv4.di" || // Added in 4.0
|
||||
Name == "avx512.mask.psllv4.si" || // Added in 4.0
|
||||
Name == "avx512.mask.psllv8.si" || // Added in 4.0
|
||||
Name == "avx512.mask.psrav4.si" || // Added in 4.0
|
||||
Name == "avx512.mask.psrav8.si" || // Added in 4.0
|
||||
Name == "avx512.mask.psrlv2.di" || // Added in 4.0
|
||||
Name == "avx512.mask.psrlv4.di" || // Added in 4.0
|
||||
Name == "avx512.mask.psrlv4.si" || // Added in 4.0
|
||||
Name == "avx512.mask.psrlv8.si" || // Added in 4.0
|
||||
Name.startswith("avx512.mask.psllv.") || // Added in 4.0
|
||||
Name.startswith("avx512.mask.psrav.") || // Added in 4.0
|
||||
Name.startswith("avx512.mask.psrlv.") || // Added in 4.0
|
||||
Name.startswith("sse41.pmovsx") || // Added in 3.8
|
||||
Name.startswith("sse41.pmovzx") || // Added in 3.9
|
||||
Name.startswith("avx2.pmovsx") || // Added in 3.9
|
||||
Name.startswith("avx2.pmovzx") || // Added in 3.9
|
||||
Name.startswith("avx512.mask.pmovsx") || // Added in 4.0
|
||||
Name.startswith("avx512.mask.pmovzx") || // Added in 4.0
|
||||
Name == "sse2.cvtdq2pd" || // Added in 3.9
|
||||
Name == "sse2.cvtps2pd" || // Added in 3.9
|
||||
Name == "avx.cvtdq2.pd.256" || // Added in 3.9
|
||||
Name == "avx.cvt.ps2.pd.256" || // Added in 3.9
|
||||
Name.startswith("avx.vinsertf128.") || // Added in 3.7
|
||||
Name == "avx2.vinserti128" || // Added in 3.7
|
||||
Name.startswith("avx.vextractf128.") || // Added in 3.7
|
||||
Name == "avx2.vextracti128" || // Added in 3.7
|
||||
Name.startswith("sse4a.movnt.") || // Added in 3.9
|
||||
Name.startswith("avx.movnt.") || // Added in 3.2
|
||||
Name.startswith("avx512.storent.") || // Added in 3.9
|
||||
Name == "sse2.storel.dq" || // Added in 3.9
|
||||
Name.startswith("sse.storeu.") || // Added in 3.9
|
||||
Name.startswith("sse2.storeu.") || // Added in 3.9
|
||||
Name.startswith("avx.storeu.") || // Added in 3.9
|
||||
Name.startswith("avx512.mask.storeu.") || // Added in 3.9
|
||||
Name.startswith("avx512.mask.store.p") || // Added in 3.9
|
||||
Name.startswith("avx512.mask.store.b.") || // Added in 3.9
|
||||
Name.startswith("avx512.mask.store.w.") || // Added in 3.9
|
||||
Name.startswith("avx512.mask.store.d.") || // Added in 3.9
|
||||
Name.startswith("avx512.mask.store.q.") || // Added in 3.9
|
||||
Name.startswith("avx512.mask.loadu.") || // Added in 3.9
|
||||
Name.startswith("avx512.mask.load.") || // Added in 3.9
|
||||
Name == "sse42.crc32.64.8" || // Added in 3.4
|
||||
Name.startswith("avx.vbroadcast.s") || // Added in 3.5
|
||||
Name.startswith("avx512.mask.palignr.") || // Added in 3.9
|
||||
Name.startswith("sse2.psll.dq") || // Added in 3.7
|
||||
Name.startswith("sse2.psrl.dq") || // Added in 3.7
|
||||
Name.startswith("avx2.psll.dq") || // Added in 3.7
|
||||
Name.startswith("avx2.psrl.dq") || // Added in 3.7
|
||||
Name.startswith("avx512.psll.dq") || // Added in 3.9
|
||||
Name.startswith("avx512.psrl.dq") || // Added in 3.9
|
||||
Name == "sse41.pblendw" || // Added in 3.7
|
||||
Name.startswith("sse41.blendp") || // Added in 3.7
|
||||
Name.startswith("avx.blend.p") || // Added in 3.7
|
||||
Name == "avx2.pblendw" || // Added in 3.7
|
||||
Name.startswith("avx2.pblendd.") || // Added in 3.7
|
||||
Name.startswith("avx.vbroadcastf128") || // Added in 4.0
|
||||
Name == "avx2.vbroadcasti128" || // Added in 3.7
|
||||
Name == "xop.vpcmov" || // Added in 3.8
|
||||
(Name.startswith("xop.vpcom") && // Added in 3.2
|
||||
F->arg_size() == 2))) {
|
||||
NewFn = nullptr;
|
||||
return true;
|
||||
}
|
||||
// SSE4.1 ptest functions may have an old signature.
|
||||
if (IsX86 && Name.startswith("sse41.ptest")) {
|
||||
if (IsX86 && Name.startswith("sse41.ptest")) { // Added in 3.2
|
||||
if (Name.substr(11) == "c")
|
||||
return UpgradeSSE41Function(F, Intrinsic::x86_sse41_ptestc, NewFn);
|
||||
if (Name.substr(11) == "z")
|
||||
@ -384,26 +390,26 @@ static bool UpgradeIntrinsicFunction1(Function *F, Function *&NewFn) {
|
||||
}
|
||||
// Several blend and other instructions with masks used the wrong number of
|
||||
// bits.
|
||||
if (IsX86 && Name == "sse41.insertps")
|
||||
if (IsX86 && Name == "sse41.insertps") // Added in 3.6
|
||||
return UpgradeX86IntrinsicsWith8BitMask(F, Intrinsic::x86_sse41_insertps,
|
||||
NewFn);
|
||||
if (IsX86 && Name == "sse41.dppd")
|
||||
if (IsX86 && Name == "sse41.dppd") // Added in 3.6
|
||||
return UpgradeX86IntrinsicsWith8BitMask(F, Intrinsic::x86_sse41_dppd,
|
||||
NewFn);
|
||||
if (IsX86 && Name == "sse41.dpps")
|
||||
if (IsX86 && Name == "sse41.dpps") // Added in 3.6
|
||||
return UpgradeX86IntrinsicsWith8BitMask(F, Intrinsic::x86_sse41_dpps,
|
||||
NewFn);
|
||||
if (IsX86 && Name == "sse41.mpsadbw")
|
||||
if (IsX86 && Name == "sse41.mpsadbw") // Added in 3.6
|
||||
return UpgradeX86IntrinsicsWith8BitMask(F, Intrinsic::x86_sse41_mpsadbw,
|
||||
NewFn);
|
||||
if (IsX86 && Name == "avx.dp.ps.256")
|
||||
if (IsX86 && Name == "avx.dp.ps.256") // Added in 3.6
|
||||
return UpgradeX86IntrinsicsWith8BitMask(F, Intrinsic::x86_avx_dp_ps_256,
|
||||
NewFn);
|
||||
if (IsX86 && Name == "avx2.mpsadbw")
|
||||
if (IsX86 && Name == "avx2.mpsadbw") // Added in 3.6
|
||||
return UpgradeX86IntrinsicsWith8BitMask(F, Intrinsic::x86_avx2_mpsadbw,
|
||||
NewFn);
|
||||
|
||||
// frcz.ss/sd may need to have an argument dropped
|
||||
// frcz.ss/sd may need to have an argument dropped. Added in 3.2
|
||||
if (IsX86 && Name.startswith("xop.vfrcz.ss") && F->arg_size() == 2) {
|
||||
rename(F);
|
||||
NewFn = Intrinsic::getDeclaration(F->getParent(),
|
||||
@ -417,7 +423,7 @@ static bool UpgradeIntrinsicFunction1(Function *F, Function *&NewFn) {
|
||||
return true;
|
||||
}
|
||||
// Upgrade any XOP PERMIL2 index operand still using a float/double vector.
|
||||
if (IsX86 && Name.startswith("xop.vpermil2")) {
|
||||
if (IsX86 && Name.startswith("xop.vpermil2")) { // Added in 3.9
|
||||
auto Params = F->getFunctionType()->params();
|
||||
auto Idx = Params[2];
|
||||
if (Idx->getScalarType()->isFloatingPointTy()) {
|
||||
|
Loading…
Reference in New Issue
Block a user