1. When update pointerOrigMap, only non-select and non-phi insn need update second[0], if update select or phi's second[0], will over write the info. 2. For legacy A64 mix pointer, tmp register is start from insn.extra.elem.
Signed-off-by: Yang Rong <[email protected]> --- backend/src/backend/gen_context.cpp | 4 ++-- backend/src/llvm/llvm_gen_backend.cpp | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/backend/src/backend/gen_context.cpp b/backend/src/backend/gen_context.cpp index 0c1f82a..bb104cf 100644 --- a/backend/src/backend/gen_context.cpp +++ b/backend/src/backend/gen_context.cpp @@ -2063,8 +2063,8 @@ namespace gbe if (bti.file == GEN_IMMEDIATE_VALUE) { p->UNTYPED_READ(dst, src, bti, elemNum); } else { - const GenRegister tmp = ra->genReg(insn.dst(elemNum)); - const GenRegister btiTmp = ra->genReg(insn.dst(elemNum + 1)); + const GenRegister tmp = ra->genReg(insn.dst(insn.extra.elem)); + const GenRegister btiTmp = ra->genReg(insn.dst(insn.extra.elem + 1)); unsigned desc = p->generateUntypedReadMessageDesc(0, elemNum); unsigned jip0 = beforeMessage(insn, bti, tmp, btiTmp, desc); diff --git a/backend/src/llvm/llvm_gen_backend.cpp b/backend/src/llvm/llvm_gen_backend.cpp index 467b1de..1e7b140 100644 --- a/backend/src/llvm/llvm_gen_backend.cpp +++ b/backend/src/llvm/llvm_gen_backend.cpp @@ -929,7 +929,8 @@ namespace gbe pointerOrigMap.insert(std::make_pair(work, pointers)); } else { // update the pointer source here, - (*ptrIter).second[0] = ptr; + if ((!isa<SelectInst>(work) && !isa<PHINode>(work))) + (*ptrIter).second[0] = ptr; } continue; @@ -975,7 +976,8 @@ namespace gbe pointerOrigMap.insert(std::make_pair(pointer, pointers)); } else { // update the pointer source here, - (*ptrIter).second[0] = ptr; + if ((!isa<SelectInst>(pointer) && !isa<PHINode>(pointer))) + (*ptrIter).second[0] = ptr; } } else { workList.push_back(theUser); -- 2.1.4 _______________________________________________ Beignet mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/beignet
