summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CGExprConstant.cpp
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-01-28 22:24:07 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-01-28 22:24:07 +0000
commitf50e60b23a6178bb79ab3faa2e7992b29b1026c6 (patch)
treeec5ed6150dab8878fd22d0261c863ad5622fecc7 /clang/lib/CodeGen/CGExprConstant.cpp
parent42b63bc175831ed75143c593b40ded58f4446309 (diff)
downloadbcm5719-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.cpp12
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: {
OpenPOWER on IntegriCloud