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

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

add tests for v128i1, ready now

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