aboutsummaryrefslogtreecommitdiffstats
path: root/qv4isel_llvm.cpp
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@digia.com>2012-11-14 12:51:54 +0100
committerLars Knoll <lars.knoll@digia.com>2012-11-14 13:41:42 +0100
commit399eff6704fe5645cea4fa0c3baa9f255282e9d6 (patch)
tree480579cf82d0362dbea5c57226d71ca21d1618af /qv4isel_llvm.cpp
parent4ebd6f29822f33da30e055daebb287d23404167e (diff)
Changed the interpreter and compiler backends to move consts.
See https://codereview.qt-project.org/39510 for details. Change-Id: I308364cd7d66ad2fd12e6ab7e185882fe8d1795e Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'qv4isel_llvm.cpp')
-rw-r--r--qv4isel_llvm.cpp24
1 files changed, 12 insertions, 12 deletions
diff --git a/qv4isel_llvm.cpp b/qv4isel_llvm.cpp
index d7643ef167..80c55d201a 100644
--- a/qv4isel_llvm.cpp
+++ b/qv4isel_llvm.cpp
@@ -482,7 +482,7 @@ void LLVMInstructionSelection::genMoveSubscript(IR::Move *s)
IR::Subscript *subscript = s->target->asSubscript();
llvm::Value *base = getLLVMTempReference(subscript->base);
llvm::Value *index = getLLVMTempReference(subscript->index);
- llvm::Value *source = getLLVMTempReference(s->source);
+ llvm::Value *source = toValuePtr(s->source);
CreateCall4(_llvmModule->getFunction("__qmljs_llvm_set_element"),
_llvmFunction->arg_begin(), base, index, source);
}
@@ -492,7 +492,7 @@ void LLVMInstructionSelection::genMoveMember(IR::Move *s)
IR::Member *m = s->target->asMember();
llvm::Value *base = getLLVMTempReference(m->base);
llvm::Value *name = getIdentifier(*m->name);
- llvm::Value *source = getLLVMTempReference(s->source);
+ llvm::Value *source = toValuePtr(s->source);
CreateCall4(_llvmModule->getFunction("__qmljs_llvm_set_property"),
_llvmFunction->arg_begin(), base, name, source);
}
@@ -508,7 +508,7 @@ void LLVMInstructionSelection::visitMove(IR::Move *s)
return;
} else if (IR::Name *n = s->target->asName()) {
llvm::Value *name = getIdentifier(*n->id);
- llvm::Value *source = getLLVMTempReference(s->source);
+ llvm::Value *source = toValuePtr(s->source);
CreateCall3(_llvmModule->getFunction("__qmljs_llvm_set_activation_property"),
_llvmFunction->arg_begin(), name, source);
return;
@@ -520,7 +520,7 @@ void LLVMInstructionSelection::visitMove(IR::Move *s)
}
} else {
if (IR::Temp *t = s->target->asTemp()) {
- if (IR::Temp *t2 = s->source->asTemp()) {
+ if (s->source->asTemp() || s->source->asConst()) {
const char *opName = 0;
switch (s->op) {
case IR::OpBitAnd: opName = "__qmljs_llvm_bit_and"; break;
@@ -541,8 +541,8 @@ void LLVMInstructionSelection::visitMove(IR::Move *s)
if (opName) {
llvm::Value *target = getLLVMTemp(t);
- llvm::Value *s1 = getLLVMTemp(t);
- llvm::Value *s2 = getLLVMTemp(t2);
+ llvm::Value *s1 = toValuePtr(s->target);
+ llvm::Value *s2 = toValuePtr(s->source);
CreateCall4(_llvmModule->getFunction(opName),
_llvmFunction->arg_begin(), target, s1, s2);
return;
@@ -550,7 +550,7 @@ void LLVMInstructionSelection::visitMove(IR::Move *s)
}
} else if (IR::Name *n = s->target->asName()) {
// inplace assignment, e.g. x += 1, ++x, ...
- if (IR::Temp *t = s->source->asTemp()) {
+ if (s->source->asTemp() || s->source->asConst()) {
const char *opName = 0;
switch (s->op) {
case IR::OpBitAnd: opName = "__qmljs_llvm_inplace_bit_and_name"; break;
@@ -571,14 +571,14 @@ void LLVMInstructionSelection::visitMove(IR::Move *s)
if (opName) {
llvm::Value *dst = getIdentifier(*n->id);
- llvm::Value *src = getLLVMTemp(t);
+ llvm::Value *src = toValuePtr(s->source);
CreateCall3(_llvmModule->getFunction(opName),
_llvmFunction->arg_begin(), dst, src);
return;
}
}
} else if (IR::Subscript *ss = s->target->asSubscript()) {
- if (IR::Temp *t = s->source->asTemp()) {
+ if (s->source->asTemp() || s->source->asConst()) {
const char *opName = 0;
switch (s->op) {
case IR::OpBitAnd: opName = "__qmljs_llvm_inplace_bit_and_element"; break;
@@ -600,7 +600,7 @@ void LLVMInstructionSelection::visitMove(IR::Move *s)
if (opName) {
llvm::Value *base = getLLVMTemp(ss->base->asTemp());
llvm::Value *index = getLLVMTemp(ss->index->asTemp());
- llvm::Value *value = getLLVMTemp(t);
+ llvm::Value *value = toValuePtr(s->source);
CreateCall4(_llvmModule->getFunction(opName),
_llvmFunction->arg_begin(), base, index, value);
// TODO: checkExceptions();
@@ -608,7 +608,7 @@ void LLVMInstructionSelection::visitMove(IR::Move *s)
return;
}
} else if (IR::Member *m = s->target->asMember()) {
- if (IR::Temp *t = s->source->asTemp()) {
+ if (s->source->asTemp() || s->source->asConst()) {
const char *opName = 0;
switch (s->op) {
case IR::OpBitAnd: opName = "__qmljs_llvm_inplace_bit_and_member"; break;
@@ -630,7 +630,7 @@ void LLVMInstructionSelection::visitMove(IR::Move *s)
if (opName) {
llvm::Value *base = getLLVMTemp(m->base->asTemp());
llvm::Value *member = getIdentifier(*m->name);
- llvm::Value *value = getLLVMTemp(t);
+ llvm::Value *value = toValuePtr(s->source);
CreateCall4(_llvmModule->getFunction(opName),
_llvmFunction->arg_begin(), value, base, member);
// TODO: checkExceptions();