~ubuntu-branches/ubuntu/vivid/qtdeclarative-opensource-src-gles/vivid

« back to all changes in this revision

Viewing changes to src/qml/compiler/qv4ssa.cpp

  • Committer: Package Import Robot
  • Author(s): Timo Jyrinki
  • Date: 2015-03-11 16:51:45 UTC
  • mfrom: (1.1.4)
  • Revision ID: package-import@ubuntu.com-20150311165145-7653iqap3mau92gy
Tags: 5.4.1-0ubuntu1
Sync package with qtdeclarative-opensource-src - 5.4.1-1ubuntu3

Show diffs side-by-side

added added

removed removed

Lines of Context:
2562
2562
            } else if (m->source->asConvert()) {
2563
2563
                break;
2564
2564
            } else if (Binop *b = m->source->asBinop()) {
 
2565
                bool iterateOnOperands = true;
 
2566
 
2565
2567
                switch (b->op) {
 
2568
                case OpSub:
 
2569
                case OpMul:
2566
2570
                case OpAdd:
2567
 
                    if (b->left->type & NumberType || b->right->type & NumberType)
 
2571
                    if (b->left->type == SInt32Type && b->right->type == SInt32Type) {
 
2572
                        iterateOnOperands = false;
2568
2573
                        break;
2569
 
                    else
 
2574
                    } else {
2570
2575
                        continue;
 
2576
                    }
2571
2577
                case OpBitAnd:
2572
2578
                case OpBitOr:
2573
2579
                case OpBitXor:
2574
 
                case OpSub:
2575
 
                case OpMul:
2576
2580
                case OpLShift:
2577
2581
                case OpRShift:
2578
2582
                case OpURShift:
2580
2584
                default:
2581
2585
                    continue;
2582
2586
                }
2583
 
                if (Temp *lt = b->left->asTemp())
2584
 
                    candidates.append(*lt);
2585
 
                if (Temp *rt = b->right->asTemp())
2586
 
                    candidates.append(*rt);
 
2587
 
 
2588
                if (iterateOnOperands) {
 
2589
                    if (Temp *lt = b->left->asTemp())
 
2590
                        candidates.append(*lt);
 
2591
                    if (Temp *rt = b->right->asTemp())
 
2592
                        candidates.append(*rt);
 
2593
                }
2587
2594
            } else if (Unop *u = m->source->asUnop()) {
2588
2595
                if (u->op == OpCompl || u->op == OpUPlus) {
2589
2596
                    if (Temp *t = u->expr->asTemp())
4061
4068
                        default:
4062
4069
                            break;
4063
4070
                        }
4064
 
                        if (casted) {
4065
 
                            Q_ASSERT(casted->type == SInt32Type);
 
4071
                        if (casted && casted->type == SInt32Type) {
4066
4072
                            m->source = casted;
4067
4073
                            W += m;
4068
4074
                            continue;