Xuan Tang via llvm-dev
2020-Sep-03 06:46 UTC
[llvm-dev] using experimental intrinsics failed
Hi: Sorry I need to send email directly. I am new to llvm and trying to write interval arithmetic, which requires changing rounding mode during computation. The document I found https://llvm.org/docs/LangRef.html#constrained-floating-point-intrinsics, seems to be doing the trick. Here is the piece of code that I did: %5 = call double @llvm.experimental.constrained.fadd(double %0, double %2, metadata !"round.downward", metadata !"fpexcept.ignore") It is taking the first and third argument and adding them together with the downward rounding mode. However, when I try to convert it to bit code, I got the error: error: use of undefined value '@llvm.experimental.constrained.fadd' Is there any flags I need to add in order to use this intrinsic? Or this is just a wrong function call. I am using the llvm version 10.0.1. Thank you Xuan Tang -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200903/c44436db/attachment-0001.html>
Craig Topper via llvm-dev
2020-Sep-04 00:40 UTC
[llvm-dev] using experimental intrinsics failed
I think you need a declaration like this at module scope in your IR file. Everything that's called either needs to be defined or declared even if it is an intrinsic. It doesn't matter if the declaration is before or after the use. *declare double* *@llvm.experimental.constrained.fadd*(*double,* *double*, *metadata*", *metadata*) ~Craig On Thu, Sep 3, 2020 at 5:36 PM Xuan Tang via llvm-dev < llvm-dev at lists.llvm.org> wrote:> Hi: > > Sorry I need to send email directly. I am new to llvm and trying to write > interval arithmetic, which requires changing rounding mode during > computation. > > The document I found > https://llvm.org/docs/LangRef.html#constrained-floating-point-intrinsics, > seems to be doing the trick. Here is the piece of code that I did: > > *%5* = *call* *double* *@llvm.experimental.constrained.fadd*(*double* *%0* > , *double* *%2*, *metadata* !"round.downward", *metadata* !"fpexcept.i > gnore") > > It is taking the first and third argument and adding them together with > the downward rounding mode. However, when I try to convert it to bit code, > I got the error: > > error: use of undefined value '@llvm.experimental.constrained.fadd' > > Is there any flags I need to add in order to use this intrinsic? Or this > is just a wrong function call. I am using the llvm version 10.0.1. > > Thank you > Xuan Tang > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200903/21f85daf/attachment.html>
Xuan Tang via llvm-dev
2020-Sep-04 00:53 UTC
[llvm-dev] using experimental intrinsics failed
Hi Craig: I tried that, now the function is like this: ; Function Attrs: norecurse nounwind readnone ssp uwtable define { double, double } @add(double, double, double, double) local_unnamed_addr #0 { %5 = call double @llvm.experimental.constrained.fadd(double %0, double %2, metadata !"round.downward", metadata !"fpexcept.ignore") %6 = fadd double %1, %3 %7 = insertvalue { double, double } undef, double %5, 0 %8 = insertvalue { double, double } %7, double %6, 1 ret { double, double } %8 } declare double @llvm.experimental.constrained.fadd(double, double, metadata, metadata) But now I get the error at the line of declaration: error: expected function name I tried the example at https://llvm.org/docs/LangRef.html#variable-argument-handling-intrinsics and that compiles fine, which means the declaration code should work as well. Thank you Xuan Tang On Sep 3, 2020, 19:41 -0500, Craig Topper <craig.topper at gmail.com>, wrote:> I think you need a declaration like this at module scope in your IR file. Everything that's called either needs to be defined or declared even if it is an intrinsic. It doesn't matter if the declaration is before or after the use. > > declare double @llvm.experimental.constrained.fadd(double, double, metadata", metadata) > > ~Craig > > > > On Thu, Sep 3, 2020 at 5:36 PM Xuan Tang via llvm-dev <llvm-dev at lists.llvm.org> wrote: > > > Hi: > > > > > > Sorry I need to send email directly. I am new to llvm and trying to write interval arithmetic, which requires changing rounding mode during computation. > > > > > > The document I found https://llvm.org/docs/LangRef.html#constrained-floating-point-intrinsics, seems to be doing the trick. Here is the piece of code that I did: > > > > > > %5 = call double @llvm.experimental.constrained.fadd(double %0, double %2, metadata !"round.downward", metadata !"fpexcept.ignore") > > > > > > It is taking the first and third argument and adding them together with the downward rounding mode. However, when I try to convert it to bit code, I got the error: > > > > > > error: use of undefined value '@llvm.experimental.constrained.fadd' > > > > > > Is there any flags I need to add in order to use this intrinsic? Or this is just a wrong function call. I am using the llvm version 10.0.1. > > > > > > Thank you > > > Xuan Tang > > > _______________________________________________ > > > LLVM Developers mailing list > > > llvm-dev at lists.llvm.org > > > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200903/f92f529b/attachment-0001.html>
Kevin Neal via llvm-dev
2020-Sep-16 22:19 UTC
[llvm-dev] using experimental intrinsics failed
Note that the intrinsics don’t affect the rounding mode at run time. What they do is the tell llvm what rounding mode llvm should expect the code to be using when it does eventually get run. You’ll need to change the rounding mode in your fp environment yourself by calling fpsetround() or whatever your system uses. Also, note that the work to implement the constrained intrinsics is ongoing. Some hosts support it (X86, SystemZ, and recently PowerPC), but roughly no optimizations are enabled yet. So don’t expect performance yet. I apologize for being behind in my email. -- Kevin P. Neal SAS/C and SAS/C++ Compiler Compute Services SAS Institute, Inc. From: llvm-dev <llvm-dev-bounces at lists.llvm.org> On Behalf Of Xuan Tang via llvm-dev Sent: Thursday, September 03, 2020 2:46 AM To: llvm-dev at lists.llvm.org Subject: [llvm-dev] using experimental intrinsics failed EXTERNAL Hi: Sorry I need to send email directly. I am new to llvm and trying to write interval arithmetic, which requires changing rounding mode during computation. The document I found https://llvm.org/docs/LangRef.html#constrained-floating-point-intrinsics<https://nam02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fllvm.org%2Fdocs%2FLangRef.html%23constrained-floating-point-intrinsics&data=02%7C01%7Ckevin.neal%40sas.com%7C56cf4859d8c74a71fee008d8506a9f99%7Cb1c14d5c362545b3a4309552373a0c2f%7C0%7C0%7C637347766165256247&sdata=1L%2FOWIXGU%2BLZZwCr5T1SaoPFEY%2FBwF10V6azvtyHs2I%3D&reserved=0>, seems to be doing the trick. Here is the piece of code that I did: %5 = call double @llvm.experimental.constrained.fadd(double %0, double %2, metadata !"round.downward", metadata !"fpexcept.ignore") It is taking the first and third argument and adding them together with the downward rounding mode. However, when I try to convert it to bit code, I got the error: error: use of undefined value '@llvm.experimental.constrained.fadd' Is there any flags I need to add in order to use this intrinsic? Or this is just a wrong function call. I am using the llvm version 10.0.1. Thank you Xuan Tang -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200916/cdc2709a/attachment.html>