Hi Sheng, > Here is the patch to make llvm-gcc/llvm-g++ emit llvm.pow.* when errno > disabled.
thanks for doing this. Yet I have to wonder whether there's any point to using the llvm.pow.* intrinsic, or for that intrinsic to exist. LLVM doesn't seem to do anything with it, so presumably the only reason for it is so that LLVM knows that it is "pure". But nowadays gcc tells LLVM that directly. Look: #include <math.h> double f(double x, double y) { return pow(x,y); } If you compile it with -fno-math-errno then pow gets declared as declare double @pow(double, double) nounwind readonly [I'm not sure why it is marked readonly rather than readnone]. [If you don't use -fno-math-errno then it is not declared readonly, which is correct because it can set errno]. Since yesterday, alias analysis knows how to deal with readonly and readnone functions. So all the benefit you would get from the intrinsic is already there! So how about removing the llvm.pow.* intrinsic and other ones like it instead? Ciao, Duncan. _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits