[Beignet] [PATCH] Fix utest compiler_function_argument3 error after move -O2 to backend.

Zhigang Gong zhigang.gong at linux.intel.com
Mon Dec 30 23:48:48 PST 2013


LGTM, pushed with the llvm opt patch. Thanks.

On Tue, Dec 31, 2013 at 03:20:52PM +0800, Yang Rong wrote:
> After move optimize from clang to backend, some pass is removed, and some pass using diff parameters,
> will trigger the bug in build pushmap, cause compiler_function_argument3 fail.
> 
> There maybe one loadImm/add instruction used by different loads, in set seq. So should not add to pushmap
> if the same argID/offset already added, also can't delete loadImm/add instruction again if have been deleted.
> 
> Signed-off-by: Yang Rong <rong.r.yang at intel.com>
> ---
>  backend/src/ir/lowering.cpp | 13 +++++++------
>  1 file changed, 7 insertions(+), 6 deletions(-)
> 
> diff --git a/backend/src/ir/lowering.cpp b/backend/src/ir/lowering.cpp
> index 23dd120..49b6e06 100644
> --- a/backend/src/ir/lowering.cpp
> +++ b/backend/src/ir/lowering.cpp
> @@ -1,4 +1,4 @@
> -/* 
> +/*
>   * Copyright © 2012 Intel Corporation
>   *
>   * This library is free software; you can redistribute it and/or
> @@ -205,7 +205,7 @@ namespace ir {
>          break; \
>        } \
>      } \
> -    if (isDead) { \
> +    if (isDead && !dead.contains(WHICH)) { \
>        dead.insert(WHICH); \
>        WHICH->remove(); \
>      } \
> @@ -231,16 +231,18 @@ namespace ir {
>          const uint32_t size = getFamilySize(family);
>          const uint32_t offset = loadAddImm.offset + valueID * size;
>          const PushLocation argLocation(*fn, loadAddImm.argID, offset);
> -        if (inserted.contains(argLocation))
> -          continue;
>          Register pushed;
>          const Register reg = load->getValue(valueID);
>          if (offset != 0) {
> +          if(inserted.contains(argLocation)) {
> +            pushed = argLocation.getRegister();
> +          } else {
>              pushed = fn->newRegister(family);
>              this->appendPushedConstant(pushed, argLocation);
>              inserted.insert(argLocation);
> +          }
>          } else {
> -            pushed = fn->getArg(loadAddImm.argID).reg;
> +          pushed = fn->getArg(loadAddImm.argID).reg;
>          }
>  
>          // TODO the MOV instruction can be most of the time avoided if the
> @@ -253,7 +255,6 @@ namespace ir {
>        }
>      }
>  
> -    // Remove all unused adds and load immediates
>      REMOVE_INSN(add)
>      REMOVE_INSN(loadImm)
>    }
> -- 
> 1.8.1.2
> 
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet


More information about the Beignet mailing list