[llvm-commits] CVS: llvm/lib/Target/CBackend/Writer.cpp

Chris Lattner clattner at apple.com
Sun Jan 7 23:17:44 PST 2007


> +  // Emit some helper functions for dealing with FCMP instruction's
> +  // predicates
> +  Out << "static inline int llvm_fcmp_ord(double X, double Y) { ";
> +  Out << "return X == X && Y == Y; }\n";
> +  Out << "static inline int llvm_fcmp_uno(double X, double Y) { ";
> +  Out << "return X != X || Y != Y; }\n";
> +  Out << "static inline int llvm_fcmp_ueq(double X, double Y) { ";
> +  Out << "return X == Y || X != X || Y != Y; }\n";

These would be more obvious if written as:

   return X == Y || llvm_fcmp_uno(X, Y)

> +  Out << "static inline int llvm_fcmp_ult(double X, double Y) { ";
> +  Out << "return X <  Y || X != X || Y != Y; }\n";
> +  Out << "static inline int llvm_fcmp_ugt(double X, double Y) { ";
> +  Out << "return X >  Y || X != X || Y != Y; }\n";
> +  Out << "static inline int llvm_fcmp_ule(double X, double Y) { ";
> +  Out << "return X <= Y || X != X || Y != Y; }\n";
> +  Out << "static inline int llvm_fcmp_uge(double X, double Y) { ";
> +  Out << "return X >= Y || X != X || Y != Y; }\n";



> +  Out << "static inline int llvm_fcmp_une(double X, double Y) { ";
> +  Out << "return X != Y || X != X || Y != Y; }\n";
> +  Out << "static inline int llvm_fcmp_oeq(double X, double Y) { ";
> +  Out << "return X == Y && X == X && Y == Y; }\n";
> +  Out << "static inline int llvm_fcmp_olt(double X, double Y) { ";
> +  Out << "return X <  Y && X == X && Y == Y; }\n";
> +  Out << "static inline int llvm_fcmp_ogt(double X, double Y) { ";
> +  Out << "return X >  Y && X == X && Y == Y; }\n";
> +  Out << "static inline int llvm_fcmp_ole(double X, double Y) { ";
> +  Out << "return X <= Y && X == X && Y == Y; }\n";
> +  Out << "static inline int llvm_fcmp_oge(double X, double Y) { ";
> +  Out << "return X >= Y && X == X && Y == Y; }\n";

You can drop the 2nd and 3rd term of each of thse.

> +  Out << "static inline int llvm_fcmp_one(double X, double Y) { ";
> +  Out << "return X != Y && X == X && Y == Y; }\n";

This one is needed though.

-Chris





More information about the llvm-commits mailing list