aboutsummaryrefslogtreecommitdiffstats
path: root/qv4isel_llvm.cpp
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2012-06-05 13:15:03 +0200
committerRoberto Raggi <roberto.raggi@nokia.com>2012-06-05 13:15:03 +0200
commit437c25fe33f766844ad297fb2e4135c22af042a6 (patch)
treec7737733b382acf81116cdc237880660505fd3bb /qv4isel_llvm.cpp
parent9551c6527abb7da3ed72034b1e9eb366e334b940 (diff)
Generate LLVM code for the conditional jumps.
Diffstat (limited to 'qv4isel_llvm.cpp')
-rw-r--r--qv4isel_llvm.cpp20
1 files changed, 15 insertions, 5 deletions
diff --git a/qv4isel_llvm.cpp b/qv4isel_llvm.cpp
index 2ac0130ba2..8b72cf8239 100644
--- a/qv4isel_llvm.cpp
+++ b/qv4isel_llvm.cpp
@@ -135,14 +135,24 @@ llvm::Value *LLVMInstructionSelection::getLLVMValue(IR::Expr *expr)
llvm::Value *LLVMInstructionSelection::getLLVMCondition(IR::Expr *expr)
{
- if (llvm::Value *value = getLLVMValue(expr)) {
- if (value->getType() == getInt1Ty()) {
- return value;
+ llvm::Value *value = 0;
+ if (IR::Temp *t = expr->asTemp()) {
+ value = getLLVMTemp(t);
+ } else {
+ value = getLLVMValue(expr);
+ if (! value) {
+ Q_UNIMPLEMENTED();
+ return getInt1(false);
}
+
+ llvm::Value *tmp = CreateAlloca(_valueTy);
+ CreateStore(value, tmp);
+ value = tmp;
}
- Q_UNIMPLEMENTED();
- return getInt1(false);
+ return CreateCall2(_llvmModule->getFunction("__qmljs_llvm_to_boolean"),
+ _llvmFunction->arg_begin(),
+ value);
}
llvm::Value *LLVMInstructionSelection::getLLVMTemp(IR::Temp *temp)