diff --git a/src/mapleall/maple_me/src/lfo_loop_vec.cpp b/src/mapleall/maple_me/src/lfo_loop_vec.cpp index 9e6c4d8a44f018fa9371e79e67b3c5782c640766..9015a5f359d72cb786136ba07f6c9505212d1435 100644 --- a/src/mapleall/maple_me/src/lfo_loop_vec.cpp +++ b/src/mapleall/maple_me/src/lfo_loop_vec.cpp @@ -1214,6 +1214,7 @@ void LoopVectorization::VectorizeExpr(BaseNode *node, LoopTransPlan *tp, MapleVe case OP_shl: case OP_lshr: case OP_ashr: + case OP_bxor: // compare case OP_eq: case OP_ne: @@ -1628,6 +1629,7 @@ bool LoopVectorization::ExprVectorizable(DoloopInfo *doloopInfo, LoopVecInfo* ve case OP_mul: case OP_band: case OP_bior: + case OP_bxor: case OP_shl: case OP_lshr: case OP_ashr: @@ -1674,6 +1676,10 @@ bool LoopVectorization::ExprVectorizable(DoloopInfo *doloopInfo, LoopVecInfo* ve } return ExprVectorizable(doloopInfo, vecInfo, x->Opnd(0)); } + case OP_cvt: { + // skip cvt in array subscript + return isArraySub; + } case OP_iread: { IreadNode* ireadnode = static_cast(x); MIRType *mirType = ireadnode->GetType(); @@ -1690,6 +1696,9 @@ bool LoopVectorization::ExprVectorizable(DoloopInfo *doloopInfo, LoopVecInfo* ve } return false; } + if (isArraySub) { + return false; // iread is not constant value and used in array subscript + } bool canVec = ExprVectorizable(doloopInfo, vecInfo, x->Opnd(0)); if (canVec) { if (!vecInfo->UpdateRHSTypeSize(mirType->GetPrimType()) ||