[cfe-commits] r55299 - in /cfe/trunk/lib: AST/Expr.cpp CodeGen/CGExprConstant.cpp
Anders Carlsson
andersca at mac.com
Sun Aug 24 20:27:19 PDT 2008
Author: andersca
Date: Sun Aug 24 22:27:15 2008
New Revision: 55299
URL: http://llvm.org/viewvc/llvm-project?rev=55299&view=rev
Log:
Handle emitting __builtin_huge_valf as a constant expr.
Modified:
cfe/trunk/lib/AST/Expr.cpp
cfe/trunk/lib/CodeGen/CGExprConstant.cpp
Modified: cfe/trunk/lib/AST/Expr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Expr.cpp?rev=55299&r1=55298&r2=55299&view=diff
==============================================================================
--- cfe/trunk/lib/AST/Expr.cpp (original)
+++ cfe/trunk/lib/AST/Expr.cpp Sun Aug 24 22:27:15 2008
@@ -161,7 +161,8 @@
// We have a builtin that is a constant expression
return builtinID == Builtin::BI__builtin___CFStringMakeConstantString ||
- builtinID == Builtin::BI__builtin_classify_type;
+ builtinID == Builtin::BI__builtin_classify_type ||
+ builtinID == Builtin::BI__builtin_huge_valf;
}
bool CallExpr::isBuiltinClassifyType(llvm::APSInt &Result) const {
Modified: cfe/trunk/lib/CodeGen/CGExprConstant.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprConstant.cpp?rev=55299&r1=55298&r2=55299&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGExprConstant.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGExprConstant.cpp Sun Aug 24 22:27:15 2008
@@ -606,6 +606,20 @@
return Visit(E->getRHS());
}
+
+ llvm::Constant *VisitCallExpr(const CallExpr *E) {
+ if (const ImplicitCastExpr *IcExpr =
+ dyn_cast<const ImplicitCastExpr>(E->getCallee()))
+ if (const DeclRefExpr *DRExpr =
+ dyn_cast<const DeclRefExpr>(IcExpr->getSubExpr()))
+ if (const FunctionDecl *FDecl =
+ dyn_cast<const FunctionDecl>(DRExpr->getDecl()))
+ if (unsigned builtinID = FDecl->getIdentifier()->getBuiltinID())
+ return EmitBuiltinExpr(builtinID, E);
+
+ CGM.ErrorUnsupported(E, "constant call expression");
+ return llvm::Constant::getNullValue(ConvertType(E->getType()));
+ }
// Utility methods
const llvm::Type *ConvertType(QualType T) {
@@ -805,6 +819,20 @@
return llvm::UndefValue::get(Ty);
}
+ llvm::Constant *EmitBuiltinExpr(unsigned BuiltinID, const CallExpr *E)
+ {
+ switch (BuiltinID) {
+ default:
+ CGM.ErrorUnsupported(E, "constant builtin function");
+ return 0;
+ case Builtin::BI__builtin_huge_valf: {
+ const llvm::fltSemantics &Sem =
+ CGM.getContext().getFloatTypeSemantics(E->getType());
+ return llvm::ConstantFP::get(llvm::APFloat::getInf(Sem));
+ }
+ }
+ }
+
};
} // end anonymous namespace.
More information about the cfe-commits
mailing list