Skip to content

Commit 50aa70e

Browse files
committed
added flag to set word and ptr size
1 parent 02e84fc commit 50aa70e

File tree

15 files changed

+127
-84
lines changed

15 files changed

+127
-84
lines changed

include/shady/ir.h

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,18 @@ const Node* get_declaration(const Module*, String);
6464

6565
//////////////////////////////// IR Arena ////////////////////////////////
6666

67+
typedef struct {
68+
IntSizes ptr_size;
69+
/// The base type for emulated memory
70+
IntSizes word_size;
71+
} PointerModel;
72+
73+
typedef struct {
74+
PointerModel memory;
75+
} TargetConfig;
76+
77+
TargetConfig default_target_config();
78+
6779
typedef struct {
6880
bool name_bound;
6981
bool check_op_classes;
@@ -89,11 +101,7 @@ typedef struct {
89101
uint32_t workgroup_size[3];
90102
} specializations;
91103

92-
struct {
93-
IntSizes ptr_size;
94-
/// The base type for emulated memory
95-
IntSizes word_size;
96-
} memory;
104+
PointerModel memory;
97105

98106
/// 'folding' optimisations - happen in the constructors directly
99107
struct {
@@ -102,7 +110,7 @@ typedef struct {
102110
} optimisations;
103111
} ArenaConfig;
104112

105-
ArenaConfig default_arena_config();
113+
ArenaConfig default_arena_config(const TargetConfig* target);
106114

107115
IrArena* new_ir_arena(ArenaConfig);
108116
void destroy_ir_arena(IrArena*);
@@ -314,6 +322,8 @@ typedef struct CompilerConfig_ {
314322
uint32_t subgroup_size;
315323
} specialization;
316324

325+
TargetConfig target;
326+
317327
struct {
318328
struct { void* uptr; void (*fn)(void*, String, Module*); } after_pass;
319329
} hooks;

samples/checkerboard/checkerboard.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ int main(int argc, char **argv)
6565

6666
info_print("Device-side address is: %zu\n", buf_addr);
6767

68-
IrArena* a = new_ir_arena(default_arena_config());
68+
IrArena* a = new_ir_arena(default_arena_config(&compiler_config.target));
6969
Module* m;
7070
if (driver_load_source_file(&compiler_config, SrcSlim, sizeof(checkerboard_kernel_src), checkerboard_kernel_src, "checkerboard", &m) != NoError)
7171
error("Failed to load checkerboard module");

src/driver/cli.c

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,18 @@ F(config->optimisations.inline_everything, inline-everything) \
9595
F(config->hacks.restructure_everything, restructure-everything) \
9696
F(config->hacks.recover_structure, recover-structure) \
9797

98+
static IntSizes parse_int_size(String argv) {
99+
if (strcmp(argv, "8") == 0)
100+
return IntTy8;
101+
if (strcmp(argv, "16") == 0)
102+
return IntTy16;
103+
if (strcmp(argv, "32") == 0)
104+
return IntTy32;
105+
if (strcmp(argv, "64") == 0)
106+
return IntTy64;
107+
error("Valid pointer sizes are 8, 16, 32 or 64.");
108+
}
109+
98110
void cli_parse_compiler_config_args(CompilerConfig* config, int* pargc, char** argv) {
99111
int argc = *pargc;
100112

@@ -142,6 +154,14 @@ void cli_parse_compiler_config_args(CompilerConfig* config, int* pargc, char** a
142154
default: break;
143155
}
144156
config->specialization.execution_model = em;
157+
} else if (strcmp(argv[i], "--word-size") == 0) {
158+
argv[i] = NULL;
159+
i++;
160+
config->target.memory.word_size = parse_int_size(argv[i]);
161+
} else if (strcmp(argv[i], "--pointer-size") == 0) {
162+
argv[i] = NULL;
163+
i++;
164+
config->target.memory.ptr_size = parse_int_size(argv[i]);
145165
} else if (strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "-h") == 0) {
146166
help = true;
147167
continue;
@@ -157,6 +177,8 @@ void cli_parse_compiler_config_args(CompilerConfig* config, int* pargc, char** a
157177
error_print(" --no-dynamic-scheduling Disable the built-in dynamic scheduler, restricts code to only leaf functions\n");
158178
error_print(" --simt2d Emits SIMD code instead of SIMT, only effective with the C backend.\n");
159179
error_print(" --entry-point <foo> Selects an entry point for the program to be specialized on.\n");
180+
error_print(" --word-size <8|16|32|64> Sets the word size for physical memory emulation (default=32)\n");
181+
error_print(" --pointer-size <8|16|32|64> Sets the pointer size for physical pointers (default=64)\n");
160182
#define EM(name, _) #name", "
161183
error_print(" --execution-model <em> Selects an entry point for the program to be specialized on.\nPossible values: " EXECUTION_MODELS(EM));
162184
#undef EM

src/driver/driver.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ ShadyErrorCodes driver_load_source_file(const CompilerConfig* config, SourceLang
5050
}
5151
case SrcSPIRV: {
5252
#ifdef SPV_PARSER_PRESENT
53-
parse_spirv_into_shady(len, file_contents, name, mod);
53+
parse_spirv_into_shady(config, len, file_contents, name, mod);
5454
#else
5555
assert(false && "SPIR-V front-end missing in this version");
5656
#endif

src/driver/slim.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ int main(int argc, char** argv) {
2222
cli_parse_compiler_config_args(&args.config, &argc, argv);
2323
cli_parse_input_files(args.input_filenames, &argc, argv);
2424

25-
IrArena* arena = new_ir_arena(default_arena_config());
25+
IrArena* arena = new_ir_arena(default_arena_config(&args.config.target));
2626
Module* mod = new_module(arena, "my_module"); // TODO name module after first filename, or perhaps the last one
2727

2828
driver_load_source_files(&args, mod);

src/driver/vcc.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ int main(int argc, char** argv) {
6868
exit(MissingInputArg);
6969
}
7070

71-
ArenaConfig aconfig = default_arena_config();
71+
ArenaConfig aconfig = default_arena_config(&args.config.target);
7272
IrArena* arena = new_ir_arena(aconfig);
7373

7474
int clang_retval = system("clang --version");

src/frontends/llvm/l2s.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ bool parse_llvm_into_shady(const CompilerConfig* config, size_t len, const char*
248248
}
249249
info_print("LLVM IR parsed successfully\n");
250250

251-
ArenaConfig aconfig = default_arena_config();
251+
ArenaConfig aconfig = default_arena_config(&config->target);
252252
aconfig.check_types = false;
253253
aconfig.allow_fold = false;
254254

src/frontends/slim/parser.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1108,7 +1108,7 @@ static void parse_shady_ir(ParserConfig config, const char* contents, Module* mo
11081108
#include "transform/internal_constants.h"
11091109

11101110
Module* parse_slim_module(const CompilerConfig* config, ParserConfig pconfig, const char* contents, String name) {
1111-
ArenaConfig aconfig = default_arena_config();
1111+
ArenaConfig aconfig = default_arena_config(&config->target);
11121112
aconfig.name_bound = false;
11131113
aconfig.check_op_classes = false;
11141114
aconfig.check_types = false;

src/frontends/spirv/s2s.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1356,8 +1356,8 @@ bool compare_spvid(SpvId* pa, SpvId* pb) {
13561356
return *pa == *pb;
13571357
}
13581358

1359-
S2SError parse_spirv_into_shady(size_t len, const char* data, String name, Module** dst) {
1360-
IrArena* a = new_ir_arena(default_arena_config());
1359+
S2SError parse_spirv_into_shady(const CompilerConfig* config, size_t len, const char* data, String name, Module** dst) {
1360+
IrArena* a = new_ir_arena(default_arena_config(&config->target));
13611361
*dst = new_module(a, name);
13621362

13631363
SpvParser parser = {

src/frontends/spirv/s2s.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@ typedef enum {
88
S2S_FailedParsingGeneric,
99
} S2SError;
1010

11-
S2SError parse_spirv_into_shady(size_t len, const char* data, String name, Module**);
11+
S2SError parse_spirv_into_shady(const CompilerConfig* config, size_t len, const char* data, String name, Module**);
1212

1313
#endif

0 commit comments

Comments
 (0)