diff options
author | Roberto Raggi <roberto.raggi@nokia.com> | 2012-06-05 13:15:03 +0200 |
---|---|---|
committer | Roberto Raggi <roberto.raggi@nokia.com> | 2012-06-05 13:15:03 +0200 |
commit | 437c25fe33f766844ad297fb2e4135c22af042a6 (patch) | |
tree | c7737733b382acf81116cdc237880660505fd3bb /qv4isel_llvm.cpp | |
parent | 9551c6527abb7da3ed72034b1e9eb366e334b940 (diff) |
Generate LLVM code for the conditional jumps.
Diffstat (limited to 'qv4isel_llvm.cpp')
-rw-r--r-- | qv4isel_llvm.cpp | 20 |
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) |