diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-01-28 22:24:07 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-01-28 22:24:07 +0000 |
commit | f50e60b23a6178bb79ab3faa2e7992b29b1026c6 (patch) | |
tree | ec5ed6150dab8878fd22d0261c863ad5622fecc7 /clang/lib/CodeGen/CGExprConstant.cpp | |
parent | 42b63bc175831ed75143c593b40ded58f4446309 (diff) | |
download | bcm5719-llvm-f50e60b23a6178bb79ab3faa2e7992b29b1026c6.tar.gz bcm5719-llvm-f50e60b23a6178bb79ab3faa2e7992b29b1026c6.zip |
Implement basic _Complex integer constant folding.
- Merged into single ComplexEvaluator, these share too much logic to
be worth splitting for float/int (IMHO). Will split on request.
llvm-svn: 63248
Diffstat (limited to 'clang/lib/CodeGen/CGExprConstant.cpp')
-rw-r--r-- | clang/lib/CodeGen/CGExprConstant.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CGExprConstant.cpp b/clang/lib/CodeGen/CGExprConstant.cpp index 3b6ebb4d56f..87868ed347a 100644 --- a/clang/lib/CodeGen/CGExprConstant.cpp +++ b/clang/lib/CodeGen/CGExprConstant.cpp @@ -597,7 +597,9 @@ llvm::Constant *CodeGenModule::EmitConstantExpr(const Expr *E, assert(!Result.HasSideEffects && "Constant expr should not have any side effects!"); switch (Result.Val.getKind()) { - default: assert(0 && "unhandled value kind!"); + case APValue::Uninitialized: + assert(0 && "Constant expressions should be uninitialized."); + return llvm::UndefValue::get(getTypes().ConvertType(type)); case APValue::LValue: { llvm::Constant *Offset = llvm::ConstantInt::get(llvm::Type::Int64Ty, @@ -631,6 +633,14 @@ llvm::Constant *CodeGenModule::EmitConstantExpr(const Expr *E, } return C; } + case APValue::ComplexInt: { + llvm::Constant *Complex[2]; + + Complex[0] = llvm::ConstantInt::get(Result.Val.getComplexIntReal()); + Complex[1] = llvm::ConstantInt::get(Result.Val.getComplexIntImag()); + + return llvm::ConstantStruct::get(Complex, 2); + } case APValue::Float: return llvm::ConstantFP::get(Result.Val.getFloat()); case APValue::ComplexFloat: { |