This patch still has to be pending to fix the wide integer issue completely. Although we have a fallback mechanism which will try to build the module again by ignore some passes to avoid the wide integer issue, it's broken now on master branch. As now all the builtin functions have been built statically, and those bitcode may already have i128/i512 etc.
On Tue, Sep 16, 2014 at 11:24:48AM +0800, xionghu....@intel.com wrote: > From: Luo Xionghu <xionghu....@intel.com> > > this patch was lost during the libocl merge. resubmit it to improve the > vector function performance. > > please refer to e2db890596eea0a6eb741e11e576a38952f1ed1e for detail. > > Signed-off-by: Luo Xionghu <xionghu....@intel.com> > --- > backend/src/libocl/script/gen_vector.py | 45 > ++++++++++++++++++++++++++----- > 1 file changed, 39 insertions(+), 6 deletions(-) > > diff --git a/backend/src/libocl/script/gen_vector.py > b/backend/src/libocl/script/gen_vector.py > index a91dfcf..de28552 100755 > --- a/backend/src/libocl/script/gen_vector.py > +++ b/backend/src/libocl/script/gen_vector.py > @@ -289,9 +289,42 @@ class builtinProto(): > formatStr += ';' > self.append(formatStr) > return formatStr > - formatStr = self.append(formatStr, '{{return > ({0}{1})('.format(vtype[0], vtype[1])) > - self.indent = len(formatStr) > - for j in range(0, vtype[1]): > + if self.functionName != 'select' and ptypeSeqs[0] == > ptypeSeqs[self.paramCount-1] and ptype[1] > 4: > + formatStr += '\n{ \n union{' > + formatStr = self.append(formatStr, ' {0} > va[{1}];'.format(vtype[0], vtype[1])) > + formatStr = self.append(formatStr, ' {0}{1} > vv{2};'.format(vtype[0], vtype[1], vtype[1])) > + formatStr += '\n }uret;' > + formatStr += '\n union{' > + formatStr = self.append(formatStr, ' {0} > pa[{1}];'.format(ptype[0], ptype[1])) > + formatStr = self.append(formatStr, ' {0}{1} > pv{2};'.format(ptype[0], ptype[1], ptype[1])) > + formatStr += '\n }' > + for n in range(0, self.paramCount): > + formatStr += 'usrc{0}'.format(n) > + if n+1 != self.paramCount: > + formatStr +=', ' > + formatStr += ';' > + > + for n in range(0, self.paramCount): > + formatStr = self.append(formatStr, ' usrc{0}.pv{1} = > param{2};'.format(n, ptype[1], n)) > + formatStr = self.append(formatStr, ' for(int i =0; i < {0}; > i++)'.format(ptype[1])) > + formatStr += '\n uret.va[i] = ' > + if self.prefix == 'relational' and self.functionName != > 'bitselect' and self.functionName != 'select': > + formatStr += '-' > + formatStr += '{0}('.format(self.functionName) > + > + for n in range(0, self.paramCount): > + formatStr += 'usrc{0}.pa[i]'.format(n) > + if n+1 != self.paramCount: > + formatStr +=', ' > + formatStr += ');' > + formatStr = self.append(formatStr, ' return > uret.vv{0};'.format(vtype[1])) > + formatStr += '\n}' > + formatStr = self.append(formatStr) > + return formatStr > + else: > + formatStr = self.append(formatStr, '{{return > ({0}{1})('.format(vtype[0], vtype[1])) > + self.indent = len(formatStr) > + for j in range(0, vtype[1]): > if (j != 0): > formatStr += ',' > if (j + 1) % 2 == 0: > @@ -326,10 +359,10 @@ class builtinProto(): > > formatStr += ')' > > - formatStr += '); }\n' > - self.append(formatStr) > + formatStr += '); }\n' > + self.append(formatStr) > > - return formatStr > + return formatStr > > def output(self): > for line in self.outputStr: > -- > 1.7.9.5 > > _______________________________________________ > Beignet mailing list > Beignet@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/beignet _______________________________________________ Beignet mailing list Beignet@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/beignet