@Override
    protected void doExecute() {
        if(!useByOther){
            throw new RuntimeException("this array value not use by other operator");
        }
        
        if(allocateDims != null){
            if(LOG.isPrintEnabled()) { 
                LOG.print("start new a array!");
            }
            Instructions instructions = getInstructions();
            if(allocateDims == null || allocateDims.length == 0){
                instructions.push(arrayCls.getType());
                instructions.checkCast(arrayCls.getType());
                return;
            }
            
            if(allocateDims.length == 1){
                allocateDims[0].loadToStack(block);
                instructions.unbox(allocateDims[0].getResultType().getType());
                instructions.newArray(arrayCls.getNextDimType().getType());
            }else{
                for(KernelParam allocate : allocateDims){
                    allocate.loadToStack(block);
                    instructions.unbox(allocate.getResultType().getType());
                }
                instructions.multiANewArrayInsn(arrayCls.getType(), allocateDims.length);
            }
        }else{
            loopArray(arrayCls, values);
        }
    }