1*515bc8c1Sserge-sans-paille#!/usr/bin/env python 2b6a7c8d7STobias Grosserimport argparse, isl, os 3b6a7c8d7STobias Grosserimport json 4b6a7c8d7STobias Grosser 5b6a7c8d7STobias Grosserdef printDomain(scop): 6b6a7c8d7STobias Grosser 7b6a7c8d7STobias Grosser domain = isl.USet('{}') 8b6a7c8d7STobias Grosser 9b6a7c8d7STobias Grosser for statement in scop['statements']: 10b6a7c8d7STobias Grosser domain = domain.union(isl.USet(statement['domain'])) 11b6a7c8d7STobias Grosser 12b6a7c8d7STobias Grosser print "D :=", 13b6a7c8d7STobias Grosser print str(domain) + ";" 14b6a7c8d7STobias Grosser 15b6a7c8d7STobias Grosserdef printAccesses(scop): 16b6a7c8d7STobias Grosser 17b6a7c8d7STobias Grosser read = isl.UMap('{}') 18b6a7c8d7STobias Grosser 19b6a7c8d7STobias Grosser for statement in scop['statements']: 20b6a7c8d7STobias Grosser for access in statement['accesses']: 21b6a7c8d7STobias Grosser if access['kind'] == 'read': 22b6a7c8d7STobias Grosser read = read.union(isl.UMap(access['relation'])) 23b6a7c8d7STobias Grosser 24b6a7c8d7STobias Grosser print "R :=", 25b6a7c8d7STobias Grosser print str(read) + ";" 26b6a7c8d7STobias Grosser 27b6a7c8d7STobias Grosser write = isl.UMap('{}') 28b6a7c8d7STobias Grosser 29b6a7c8d7STobias Grosser for statement in scop['statements']: 30b6a7c8d7STobias Grosser for access in statement['accesses']: 31b6a7c8d7STobias Grosser if access['kind'] == 'write': 32b6a7c8d7STobias Grosser write = write.union(isl.UMap(access['relation'])) 33b6a7c8d7STobias Grosser 34b6a7c8d7STobias Grosser print "W :=", 35b6a7c8d7STobias Grosser print str(write) + ";" 36b6a7c8d7STobias Grosser 37b6a7c8d7STobias Grosserdef printSchedule(scop): 38b6a7c8d7STobias Grosser 39b6a7c8d7STobias Grosser schedule = isl.UMap('{}') 40b6a7c8d7STobias Grosser 41b6a7c8d7STobias Grosser for statement in scop['statements']: 42b6a7c8d7STobias Grosser schedule = schedule.union(isl.UMap(statement['schedule'])) 43b6a7c8d7STobias Grosser 44b6a7c8d7STobias Grosser print "S :=", 45b6a7c8d7STobias Grosser print str(schedule) + ";" 46b6a7c8d7STobias Grosser 47b6a7c8d7STobias Grosserdef __main__(): 48b6a7c8d7STobias Grosser description = 'Translate JSCoP into iscc input' 49b6a7c8d7STobias Grosser parser = argparse.ArgumentParser(description) 50b6a7c8d7STobias Grosser parser.add_argument('inputFile', metavar='N', type=file, 51b6a7c8d7STobias Grosser help='The JSCoP file') 52b6a7c8d7STobias Grosser 53b6a7c8d7STobias Grosser args = parser.parse_args() 54b6a7c8d7STobias Grosser inputFile = args.inputFile 55b6a7c8d7STobias Grosser scop = json.load(inputFile) 56b6a7c8d7STobias Grosser 57b6a7c8d7STobias Grosser printDomain(scop) 58b6a7c8d7STobias Grosser printAccesses(scop) 59b6a7c8d7STobias Grosser printSchedule(scop) 60b6a7c8d7STobias Grosser 61b6a7c8d7STobias Grosser print 'R := R * D;' 62b6a7c8d7STobias Grosser print 'W := W * D;' 63b6a7c8d7STobias Grosser print 'Dep := (last W before R under S)[0];' 64b6a7c8d7STobias Grosser print 'schedule D respecting Dep minimizing Dep;' 65b6a7c8d7STobias Grosser 66b6a7c8d7STobias Grosser 67b6a7c8d7STobias Grosser__main__() 68b6a7c8d7STobias Grosser 69