From 550faa3a6bb394eaa4013fcff0582434f4e924af Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Mon, 26 Jan 2009 19:05:20 +0000 Subject: [PATCH] ABITestGen: Add generation of vector types. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@63024 91177308-0d34-0410-b5e6-96231b3b80d8 --- utils/ABITest/ABITestGen.py | 50 +++++++++++++++++++++---------------- utils/ABITest/TypeGen.py | 15 +++++++++-- 2 files changed, 41 insertions(+), 24 deletions(-) diff --git a/utils/ABITest/ABITestGen.py b/utils/ABITest/ABITestGen.py index c50abe1ea9..957ce2bb16 100755 --- a/utils/ABITest/ABITestGen.py +++ b/utils/ABITest/ABITestGen.py @@ -181,14 +181,14 @@ class TypePrinter: yield '{ %s }'%(', '.join(elements)) elif isinstance(t, ComplexType): for t in self.getTestValues(t.elementType): - yield '%s + %si'%(t,t) - elif isinstance(t, ArrayType) and not t.isVector: + yield '%s + %s * 1i'%(t,t) + elif isinstance(t, ArrayType): values = list(self.getTestValues(t.elementType)) if not values: yield '{ }' - for i in range(t.size): + for i in range(t.numElements): for v in values: - elements = [random.choice(values) for i in range(t.size)] + elements = [random.choice(values) for i in range(t.numElements)] elements[i] = v yield '{ %s }'%(', '.join(elements)) else: @@ -220,9 +220,11 @@ class TypePrinter: elif isinstance(t, ComplexType): self.printValueOfType(prefix, '(__real %s)'%name, t.elementType, output=output,indent=indent) self.printValueOfType(prefix, '(__imag %s)'%name, t.elementType, output=output,indent=indent) - elif isinstance(t, ArrayType) and not t.isVector: - for i in range(t.size): - self.printValueOfType(prefix, '(%s)[%d]'%(name,i), t.elementType, output=output,indent=indent) + elif isinstance(t, ArrayType): + for i in range(t.numElements): + # Access in this fashion as a hackish way to portably + # access vectors. + self.printValueOfType(prefix, '((%s*) &%s)[%d]'%(t.elementType,name,i), t.elementType, output=output,indent=indent) else: raise NotImplementedError,'Cannot print value of type: "%s"'%(t,) @@ -346,24 +348,28 @@ def main(): # Contruct type generator builtins = [] ints = [] - if opts.useChar: ints.append('char') - if opts.useShort: ints.append('short') - if opts.useInt: ints.append('int') - if opts.useLong: ints.append('long') - if opts.useLongLong: ints.append('long long') + if opts.useChar: ints.append(('char',1)) + if opts.useShort: ints.append(('short',2)) + if opts.useInt: ints.append(('int',4)) + # FIXME: Wrong size. + if opts.useLong: ints.append(('long',4)) + if opts.useLongLong: ints.append(('long long',8)) if opts.useUnsigned: - ints = (['unsigned %s'%i for i in ints] + - ['signed %s'%i for i in ints]) + ints = ([('unsigned %s'%i,s) for i,s in ints] + + [('signed %s'%i,s) for i,s in ints]) builtins.extend(ints) - if opts.useBool: builtins.append('_Bool') - if opts.useFloat: builtins.append('float') - if opts.useDouble: builtins.append('double') - if opts.useLongDouble: builtins.append('long double') - if opts.useVoidPointer: builtins.append('void*') - - btg = FixedTypeGenerator(map(BuiltinType,builtins)) - sbtg = FixedTypeGenerator(map(BuiltinType,['char','int','float'])) + if opts.useBool: builtins.append(('_Bool',1)) + if opts.useFloat: builtins.append(('float',4)) + if opts.useDouble: builtins.append(('double',8)) + if opts.useLongDouble: builtins.append(('long double',16)) + # FIXME: Wrong size. + 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)]) atg = AnyTypeGenerator() artg = AnyTypeGenerator() diff --git a/utils/ABITest/TypeGen.py b/utils/ABITest/TypeGen.py index 3074a56273..50dd77c618 100644 --- a/utils/ABITest/TypeGen.py +++ b/utils/ABITest/TypeGen.py @@ -15,8 +15,12 @@ from Enumeration import * # Actual type types class BuiltinType: - def __init__(self, name): + def __init__(self, name, size): self.name = name + self.size = size + + def sizeof(self): + return self.size def __str__(self): return self.name @@ -49,6 +53,12 @@ class ArrayType: self.isVector = isVector self.elementType = elementType self.size = size + if isVector: + eltSize = self.elementType.sizeof() + assert not (self.size % eltSize) + self.numElements = self.size // eltSize + else: + self.numElements = self.size def __str__(self): if self.isVector: @@ -305,7 +315,8 @@ class AnyTypeGenerator(TypeGenerator): def test(): atg = AnyTypeGenerator() - btg = FixedTypeGenerator(map(BuiltinType,['int','float'])) + btg = FixedTypeGenerator([BuiltinType('int',4), + BuiltinType('float',4)]) atg.addGenerator( btg ) atg.addGenerator( ComplexTypeGenerator(btg) ) atg.addGenerator( RecordTypeGenerator(atg, True, 2) ) -- 2.40.0