Created
February 12, 2026 14:26
-
-
Save sueszli/4689593ba730af8be169d567578feed6 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import csv | |
| from xdsl.dialects import llvm | |
| def get_overflow_flags(): | |
| # nsw, nuw | |
| flags = [f.value for f in llvm.OverflowFlag] | |
| # "none", individual flags, and "nsw, nuw" just to show combination works basically | |
| return ["none"] + flags + ["nsw, nuw"] | |
| def get_fastmath_flags(): | |
| # nnan, ninf, nsz, arcp, contract, afn, reassoc | |
| flags = [f.value for f in llvm.FastMathFlag] | |
| # "none", individual flags, and "fast" | |
| return ["none"] + flags + ["fast"] | |
| def get_binary_ops_and_flags(): | |
| ops_flags_list = [] | |
| # Overflow: AddOp, SubOp, MulOp, ShlOp | |
| overflow_ops = [llvm.AddOp, llvm.SubOp, llvm.MulOp, llvm.ShlOp] | |
| for op in overflow_ops: | |
| for flag in get_overflow_flags(): | |
| ops_flags_list.append((op.name, "overflow", flag)) | |
| # Exact: UDivOp, SDivOp, LShrOp, AShrOp | |
| exact_ops = [llvm.UDivOp, llvm.SDivOp, llvm.LShrOp, llvm.AShrOp] | |
| for op in exact_ops: | |
| for flag in ["none", "exact"]: | |
| ops_flags_list.append((op.name, "exact", flag)) | |
| # Disjoint: OrOp | |
| disjoint_ops = [llvm.OrOp] | |
| for op in disjoint_ops: | |
| for flag in ["none", "disjoint"]: | |
| ops_flags_list.append((op.name, "disjoint", flag)) | |
| # FastMath: FAddOp, FSubOp, FMulOp, FDivOp, FRemOp | |
| fastmath_ops = [llvm.FAddOp, llvm.FSubOp, llvm.FMulOp, llvm.FDivOp, llvm.FRemOp] | |
| fastmath_combos = get_fastmath_flags() | |
| for op in fastmath_ops: | |
| for flag in fastmath_combos: | |
| ops_flags_list.append((op.name, "fastmath", flag)) | |
| return ops_flags_list | |
| data = get_binary_ops_and_flags() | |
| with open('llvm_flags.csv', 'w', newline='') as csvfile: | |
| fieldnames = ['OpName', 'FlagType', 'FlagValue'] | |
| writer = csv.DictWriter(csvfile, fieldnames=fieldnames) | |
| writer.writeheader() | |
| for op_name, flag_type, flag in data: | |
| writer.writerow({'OpName': op_name, 'FlagType': flag_type, 'FlagValue': flag}) | |
| print(f"Flags written to llvm_flags.csv. Total rows: {len(data)}") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment