From a44248d3047b3e0b8ab3ea5a53382b26885821a6 Mon Sep 17 00:00:00 2001 From: linma Date: Thu, 17 Mar 2022 17:35:09 -0700 Subject: [PATCH 1/2] add bxor and handle cvt in array subscript --- src/mapleall/maple_me/src/lfo_loop_vec.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/mapleall/maple_me/src/lfo_loop_vec.cpp b/src/mapleall/maple_me/src/lfo_loop_vec.cpp index 9e6c4d8a44..3c3c2ef129 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(); -- Gitee From 49606f480ba674e23789a15de38bf7b23717cbd9 Mon Sep 17 00:00:00 2001 From: linma Date: Fri, 18 Mar 2022 16:29:02 -0700 Subject: [PATCH 2/2] lfovec: if iread expression is not invariant and used in array subscrip, skip vectorization --- src/mapleall/maple_me/src/lfo_loop_vec.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/mapleall/maple_me/src/lfo_loop_vec.cpp b/src/mapleall/maple_me/src/lfo_loop_vec.cpp index 3c3c2ef129..9015a5f359 100644 --- a/src/mapleall/maple_me/src/lfo_loop_vec.cpp +++ b/src/mapleall/maple_me/src/lfo_loop_vec.cpp @@ -1696,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()) || -- Gitee