From: Daniel Dunbar Date: Sun, 22 Feb 2009 04:17:53 +0000 (+0000) Subject: ABITestGen: Use explicit list of vector types instead of just a list X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0f1730d220cb76a90159a42acd050c4d44dc18d8;p=clang ABITestGen: Use explicit list of vector types instead of just a list of sizes. Turns out we don't care very much about vector types that don't map to the hardware. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@65263 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/utils/ABITest/ABITestGen.py b/utils/ABITest/ABITestGen.py index dfea36af3f..faa5035a94 100755 --- a/utils/ABITest/ABITestGen.py +++ b/utils/ABITest/ABITestGen.py @@ -3,6 +3,7 @@ from pprint import pprint import random, atexit, time from random import randrange +import re from Enumeration import * from TypeGen import * @@ -402,9 +403,9 @@ def main(): group.add_option("", "--no-function-return", dest="functionUseReturn", help="do not generate return types for functions", action="store_false", default=True) - group.add_option("", "--vector-sizes", dest="vectorSizes", - help="comma separated list of sizes for vectors [default %default]", - action="store", type=str, default='8,16', metavar="N") + group.add_option("", "--vector-types", dest="vectorTypes", + help="comma separated list of vector types (e.g., v2i32) [default %default]", + action="store", type=str, default='v1i64, v2i32, v4i16, v8i8, v2i64, v4i32, v8i16, v16i8, v2f64, v4f32', metavar="N") group.add_option("", "--max-args", dest="functionMaxArgs", help="maximum number of arguments per function [default %default]", @@ -446,10 +447,13 @@ def main(): if opts.useVoidPointer: builtins.append(('void*',4)) btg = FixedTypeGenerator([BuiltinType(n,s) for n,s in builtins]) - sbtg = FixedTypeGenerator([BuiltinType('char',1), - BuiltinType('int',4), - BuiltinType('float',4), - BuiltinType('double',8)]) + charType = BuiltinType('char',1) + shortType = BuiltinType('short',2) + intType = BuiltinType('int',4) + longlongType = BuiltinType('long long',8) + floatType = BuiltinType('float',4) + doubleType = BuiltinType('double',8) + sbtg = FixedTypeGenerator([charType, intType, floatType, doubleType]) atg = AnyTypeGenerator() artg = AnyTypeGenerator() @@ -466,9 +470,25 @@ def main(): assert subgen atg.addGenerator(ArrayTypeGenerator(subgen, opts.arrayMaxSize)) if opts.useVector: - atg.addGenerator(VectorTypeGenerator(sbtg, - map(int, opts.vectorSizes.split(',')))) - + vTypes = [] + for i,t in enumerate(opts.vectorTypes.split(',')): + m = re.match('v([1-9][0-9]*)([if][1-9][0-9]*)', t.strip()) + if not m: + parser.error('Invalid vector type: %r' % t) + count,kind = m.groups() + count = int(count) + type = { 'i8' : charType, + 'i16' : shortType, + 'i32' : intType, + 'i64' : longlongType, + 'f32' : floatType, + 'f64' : doubleType, + }.get(kind) + if not type: + parser.error('Invalid vector type: %r' % t) + vTypes.append(ArrayType(i, True, type, count * type.size)) + + atg.addGenerator(FixedTypeGenerator(vTypes)) if opts.recordMaxDepth is None: # Fully recursive, just avoid top-level arrays.