Skip to content

Instantly share code, notes, and snippets.

@sueszli
Created February 12, 2026 14:26
Show Gist options
  • Select an option

  • Save sueszli/4689593ba730af8be169d567578feed6 to your computer and use it in GitHub Desktop.

Select an option

Save sueszli/4689593ba730af8be169d567578feed6 to your computer and use it in GitHub Desktop.
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