Program: 3315
Project: 3315
Buggy source:
@Override public void doTask(){
  if (x == z) {
    if (x.allocationMode() == DataBuffer.AllocationMode.HEAP) {
      Nd4j.getBlasWrapper().level1().axpy(n,-1.0,y,offsetY,incrY,z,offsetZ,incrZ);
    }
 else {
      ByteBuf nbbx=x.asNetty();
      ByteBuf nbby=y.asNetty();
      if (x.dataType() == DataBuffer.Type.FLOAT) {
        int byteOffsetX=4 * offsetX;
        int byteOffsetY=4 * offsetY;
        if (incrX == 1 && incrY == 1 && incrZ == 1) {
          for (int i=0; i < 4 * n; i+=4) {
            int ox=byteOffsetX + i;
            nbbx.setFloat(ox,nbbx.getFloat(ox) - nbby.getFloat(byteOffsetY + i));
          }
        }
 else {
          for (int i=0; i < 4 * n; i+=4) {
            int ox=byteOffsetX + i * incrX;
            nbbx.setFloat(ox,x.getFloat(ox) - y.getFloat(byteOffsetY + i * incrY));
          }
        }
      }
 else {
        int byteOffsetX=8 * offsetX;
        int byteOffsetY=8 * offsetY;
        if (incrX == 1 && incrY == 1) {
          for (int i=0; i < 8 * n; i+=8) {
            int ox=byteOffsetX + i;
            nbbx.setDouble(ox,nbbx.getDouble(ox) - nbby.getDouble(byteOffsetY + i));
          }
        }
 else {
          for (int i=0; i < 8 * n; i+=8) {
            int ox=byteOffsetX + i * incrX;
            nbbx.setDouble(ox,nbbx.getDouble(ox) - nbby.getDouble(byteOffsetY + i * incrY));
          }
        }
      }
    }
  }
 else {
    if (x.allocationMode() == DataBuffer.AllocationMode.HEAP) {
      if (x.dataType() == DataBuffer.Type.FLOAT) {
        float[] xf=(float[])x.array();
        float[] yf=(float[])y.array();
        float[] zf=(float[])z.array();
        if (incrX == 1 && incrY == 1 && incrZ == 1) {
          for (int i=0; i < n; i++) {
            zf[offsetZ + i]=xf[offsetX + i] - yf[offsetY + i];
          }
        }
 else {
          for (int i=0; i < n; i++) {
            zf[offsetZ + i * incrZ]=xf[offsetX + i * incrX] - yf[offsetY + i * incrY];
          }
        }
      }
 else {
        double[] xd=(double[])x.array();
        double[] yd=(double[])y.array();
        double[] zd=(double[])z.array();
        if (incrX == 1 && incrY == 1 && incrZ == 1) {
          for (int i=0; i < n; i++) {
            zd[offsetZ + i]=xd[offsetX + i] - yd[offsetY + i];
          }
        }
 else {
          for (int i=0; i < n; i++) {
            zd[offsetZ + i * incrZ]=xd[offsetX + i * incrX] - yd[offsetY + i * incrY];
          }
        }
      }
    }
 else {
      ByteBuf nbbx=x.asNetty();
      ByteBuf nbby=y.asNetty();
      ByteBuf nbbz=z.asNetty();
      if (x.dataType() == DataBuffer.Type.FLOAT) {
        int byteOffsetX=4 * offsetX;
        int byteOffsetY=4 * offsetY;
        int byteOffsetZ=4 * offsetZ;
        if (incrX == 1 && incrY == 1 && incrZ == 1) {
          for (int i=0; i < 4 * n; i+=4) {
            nbbz.setFloat(byteOffsetZ + i,nbbx.getFloat(byteOffsetX + i) - nbby.getFloat(byteOffsetY + i));
          }
        }
 else {
          for (int i=0; i < 4 * n; i+=4) {
            nbbz.setFloat(byteOffsetZ + i * incrZ,x.getFloat(byteOffsetX + i * incrX) - y.getFloat(byteOffsetY + i * incrY));
          }
        }
      }
 else {
        int byteOffsetX=8 * offsetX;
        int byteOffsetY=8 * offsetY;
        int byteOffsetZ=8 * offsetZ;
        if (incrX == 1 && incrY == 1 && incrZ == 1) {
          for (int i=0; i < 8 * n; i+=8) {
            nbbz.setDouble(byteOffsetZ + i,nbbx.getDouble(byteOffsetX + i) - nbby.getDouble(byteOffsetY + i));
          }
        }
 else {
          for (int i=0; i < 8 * n; i+=8) {
            nbbz.setDouble(byteOffsetZ + i * incrZ,nbbx.getDouble(byteOffsetX + i * incrX) - nbby.getDouble(byteOffsetY + i * incrY));
          }
        }
      }
    }
  }
}

Fixed version (ground truth):
@Override public void doTask(){
  if (x == z) {
    if (x.allocationMode() == DataBuffer.AllocationMode.HEAP) {
      Nd4j.getBlasWrapper().level1().axpy(n,-1.0,y,offsetY,incrY,z,offsetZ,incrZ);
    }
 else {
      ByteBuf nbbx=x.asNetty();
      ByteBuf nbby=y.asNetty();
      if (x.dataType() == DataBuffer.Type.FLOAT) {
        int byteOffsetX=4 * offsetX;
        int byteOffsetY=4 * offsetY;
        if (incrX == 1 && incrY == 1 && incrZ == 1) {
          for (int i=0; i < 4 * n; i+=4) {
            int ox=byteOffsetX + i;
            nbbx.setFloat(ox,nbbx.getFloat(ox) - nbby.getFloat(byteOffsetY + i));
          }
        }
 else {
          for (int i=0; i < 4 * n; i+=4) {
            int ox=byteOffsetX + i * incrX;
            nbbx.setFloat(ox,nbbx.getFloat(ox) - nbby.getFloat(byteOffsetY + i * incrY));
          }
        }
      }
 else {
        int byteOffsetX=8 * offsetX;
        int byteOffsetY=8 * offsetY;
        if (incrX == 1 && incrY == 1) {
          for (int i=0; i < 8 * n; i+=8) {
            int ox=byteOffsetX + i;
            nbbx.setDouble(ox,nbbx.getDouble(ox) - nbby.getDouble(byteOffsetY + i));
          }
        }
 else {
          for (int i=0; i < 8 * n; i+=8) {
            int ox=byteOffsetX + i * incrX;
            nbbx.setDouble(ox,nbbx.getDouble(ox) - nbby.getDouble(byteOffsetY + i * incrY));
          }
        }
      }
    }
  }
 else {
    if (x.allocationMode() == DataBuffer.AllocationMode.HEAP) {
      if (x.dataType() == DataBuffer.Type.FLOAT) {
        float[] xf=(float[])x.array();
        float[] yf=(float[])y.array();
        float[] zf=(float[])z.array();
        if (incrX == 1 && incrY == 1 && incrZ == 1) {
          for (int i=0; i < n; i++) {
            zf[offsetZ + i]=xf[offsetX + i] - yf[offsetY + i];
          }
        }
 else {
          for (int i=0; i < n; i++) {
            zf[offsetZ + i * incrZ]=xf[offsetX + i * incrX] - yf[offsetY + i * incrY];
          }
        }
      }
 else {
        double[] xd=(double[])x.array();
        double[] yd=(double[])y.array();
        double[] zd=(double[])z.array();
        if (incrX == 1 && incrY == 1 && incrZ == 1) {
          for (int i=0; i < n; i++) {
            zd[offsetZ + i]=xd[offsetX + i] - yd[offsetY + i];
          }
        }
 else {
          for (int i=0; i < n; i++) {
            zd[offsetZ + i * incrZ]=xd[offsetX + i * incrX] - yd[offsetY + i * incrY];
          }
        }
      }
    }
 else {
      ByteBuf nbbx=x.asNetty();
      ByteBuf nbby=y.asNetty();
      ByteBuf nbbz=z.asNetty();
      if (x.dataType() == DataBuffer.Type.FLOAT) {
        int byteOffsetX=4 * offsetX;
        int byteOffsetY=4 * offsetY;
        int byteOffsetZ=4 * offsetZ;
        if (incrX == 1 && incrY == 1 && incrZ == 1) {
          for (int i=0; i < 4 * n; i+=4) {
            nbbz.setFloat(byteOffsetZ + i,nbbx.getFloat(byteOffsetX + i) - nbby.getFloat(byteOffsetY + i));
          }
        }
 else {
          for (int i=0; i < 4 * n; i+=4) {
            nbbz.setFloat(byteOffsetZ + i * incrZ,nbbx.getFloat(byteOffsetX + i * incrX) - nbby.getFloat(byteOffsetY + i * incrY));
          }
        }
      }
 else {
        int byteOffsetX=8 * offsetX;
        int byteOffsetY=8 * offsetY;
        int byteOffsetZ=8 * offsetZ;
        if (incrX == 1 && incrY == 1 && incrZ == 1) {
          for (int i=0; i < 8 * n; i+=8) {
            nbbz.setDouble(byteOffsetZ + i,nbbx.getDouble(byteOffsetX + i) - nbby.getDouble(byteOffsetY + i));
          }
        }
 else {
          for (int i=0; i < 8 * n; i+=8) {
            nbbz.setDouble(byteOffsetZ + i * incrZ,nbbx.getDouble(byteOffsetX + i * incrX) - nbby.getDouble(byteOffsetY + i * incrY));
          }
        }
      }
    }
  }
}