source: trunk/lib_ir/gen/gen.py @ 4001

Last change on this file since 4001 was 4001, checked in by linmengl, 5 years ago

do exhaust test on insert/extract vector elt on both i2/i4

File size: 3.2 KB
Line 
1# Use Jinja2 template to avoid tiny template strings in this file
2# Jinja2 allows enbedded python logic in template file.
3
4from jinja2 import Template, Environment, FileSystemLoader
5import impl_data
6
7TestTemplate    = "test_llc.pytemplate.cpp"
8TestOutput      = "test_llc.cpp"
9LLTemplate      = "llc_func.pytemplate.ll"
10LLOutput        = "llc_func.ll"
11FuncTemplate    = "ParabixGeneratedFuncs.pytemplate.h"
12FuncOutput      = "ParabixGeneratedFuncs.h"
13
14FunctionListI2 = ["add", "sub", "mult", "eq", "lt", "gt", "ult", "ugt", "vsll", "vsrl", "vsra"]
15FunctionListI4 = ["add", "sub", "mult", "eq", "lt", "gt", "ult", "ugt"]
16FunctionListI8 = ["add", "sub", "mult", "eq", "lt", "gt", "ult", "ugt", "vsll", "vsrl", "vsra"]
17
18FW = 2
19
20def C(name):
21    return "{name}_{fw}".format(name=name, fw=FW)
22
23def CXX(name):
24    if name in ["vsll", "vsrl", "vsra"]:
25        return "simd<{fw}>::{name}i".format(fw=FW, name=name[1:])
26    return "simd<{fw}>::{name}".format(fw=FW, name=name)
27
28def OP(name):
29    if name == "mult":
30        return "mul"
31    if name in ["eq", "ult", "ugt"]:
32        return "icmp " + name
33    if name in ["lt", "gt"]:
34        return "icmp s" + name
35    if name == "vsll":
36        return "shl"
37    if name in ["vsrl", "vsra"]:
38        return name[-1:] + "shr"
39
40    return name
41
42def FLAG(name):
43    if name in ["vsll", "vsrl", "vsra"]:
44        return "shifting"
45    return ""
46
47#Get all v64i2 names
48FunctionNamesI2 = [{"c": C(name), "cxx": CXX(name), "op": OP(name),
49                  "flag": FLAG(name), "fw": FW} for name in FunctionListI2]
50FW = 4
51FunctionNamesI4 = [{"c": C(name), "cxx": CXX(name), "op": OP(name),
52                    "flag": FLAG(name), "fw": FW} for name in FunctionListI4]
53FW = 8
54FunctionNamesI8 = [{"c": C(name), "cxx": CXX(name), "op": OP(name),
55                    "flag": FLAG(name), "fw": FW} for name in FunctionListI8]
56
57#configuring Jinja2
58env = Environment(loader=FileSystemLoader(['.', 'gen/', '../../gen']),
59                  trim_blocks=True,
60                  lstrip_blocks=True)
61
62def fillTemplate(template, output, params):
63    content = env.get_template(template).render(params)
64    with open(output, 'w') as f:
65        f.write(content)
66
67def genTestFile():
68    fillTemplate(template=TestTemplate, output=TestOutput,
69                 params=dict(HeaderComment = "AUTO GENERATED FILE",
70                             FunctionNamesI2 = FunctionNamesI2,
71                             FunctionNamesI4 = FunctionNamesI4,
72                             FunctionNamesI8 = FunctionNamesI8,
73                             ))
74
75def genLLFile():
76    fillTemplate(template=LLTemplate, output=LLOutput,
77                 params=dict(FunctionNamesI2 = FunctionNamesI2,
78                             FunctionNamesI4 = FunctionNamesI4,
79                             FunctionNamesI8 = FunctionNamesI8,
80                             ))
81
82def genFuncFile():
83    fillTemplate(template=FuncTemplate, output=FuncOutput,
84                 params=dict(HeaderComment = "AUTO GENERATED FILE",
85                             FunctionNames = FunctionNamesI2,
86                             Implement = impl_data.getImplements()))
87    # NEED to copy manually.
88    # mv ParabixGeneratedFuncs.h ~/llvm_suit/llvm_git/lib/Target/X86/
89
90if __name__ == '__main__':
91    genTestFile()
92    genLLFile()
93    genFuncFile()
94
Note: See TracBrowser for help on using the repository browser.