@@ -1833,10 +1833,6 @@ void CompilerInvocationBase::GenerateCodeGenArgs(const CodeGenOptions &Opts,
18331833 serializeSanitizerKinds (Opts.SanitizeAnnotateDebugInfo ))
18341834 GenerateArg (Consumer, OPT_fsanitize_annotate_debug_info_EQ, Sanitizer);
18351835
1836- if (Opts.AllocTokenMax )
1837- GenerateArg (Consumer, OPT_falloc_token_max_EQ,
1838- std::to_string (*Opts.AllocTokenMax ));
1839-
18401836 if (!Opts.EmitVersionIdentMetadata )
18411837 GenerateArg (Consumer, OPT_Qn);
18421838
@@ -2350,15 +2346,6 @@ bool CompilerInvocation::ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args,
23502346 }
23512347 }
23522348
2353- if (const auto *Arg = Args.getLastArg (options::OPT_falloc_token_max_EQ)) {
2354- StringRef S = Arg->getValue ();
2355- uint64_t Value = 0 ;
2356- if (S.getAsInteger (0 , Value))
2357- Diags.Report (diag::err_drv_invalid_value) << Arg->getAsString (Args) << S;
2358- else
2359- Opts.AllocTokenMax = Value;
2360- }
2361-
23622349 Opts.EmitVersionIdentMetadata = Args.hasFlag (OPT_Qy, OPT_Qn, true );
23632350
23642351 if (!LangOpts->CUDAIsDevice )
@@ -3966,6 +3953,29 @@ void CompilerInvocationBase::GenerateLangArgs(const LangOptions &Opts,
39663953
39673954 if (!Opts.RandstructSeed .empty ())
39683955 GenerateArg (Consumer, OPT_frandomize_layout_seed_EQ, Opts.RandstructSeed );
3956+
3957+ if (Opts.AllocTokenMax )
3958+ GenerateArg (Consumer, OPT_falloc_token_max_EQ,
3959+ std::to_string (*Opts.AllocTokenMax ));
3960+
3961+ if (Opts.AllocTokenMode ) {
3962+ StringRef S;
3963+ switch (*Opts.AllocTokenMode ) {
3964+ case llvm::AllocTokenMode::Increment:
3965+ S = " increment" ;
3966+ break ;
3967+ case llvm::AllocTokenMode::Random:
3968+ S = " random" ;
3969+ break ;
3970+ case llvm::AllocTokenMode::TypeHash:
3971+ S = " typehash" ;
3972+ break ;
3973+ case llvm::AllocTokenMode::TypeHashPointerSplit:
3974+ S = " typehashpointersplit" ;
3975+ break ;
3976+ }
3977+ GenerateArg (Consumer, OPT_falloc_token_mode_EQ, S);
3978+ }
39693979}
39703980
39713981bool CompilerInvocation::ParseLangArgs (LangOptions &Opts, ArgList &Args,
@@ -4544,6 +4554,30 @@ bool CompilerInvocation::ParseLangArgs(LangOptions &Opts, ArgList &Args,
45444554 if (const Arg *A = Args.getLastArg (OPT_frandomize_layout_seed_EQ))
45454555 Opts.RandstructSeed = A->getValue (0 );
45464556
4557+ if (const auto *Arg = Args.getLastArg (options::OPT_falloc_token_max_EQ)) {
4558+ StringRef S = Arg->getValue ();
4559+ uint64_t Value = 0 ;
4560+ if (S.getAsInteger (0 , Value))
4561+ Diags.Report (diag::err_drv_invalid_value) << Arg->getAsString (Args) << S;
4562+ else
4563+ Opts.AllocTokenMax = Value;
4564+ }
4565+
4566+ if (const auto *Arg = Args.getLastArg (options::OPT_falloc_token_mode_EQ)) {
4567+ StringRef S = Arg->getValue ();
4568+ auto Mode = llvm::StringSwitch<std::optional<llvm::AllocTokenMode>>(S)
4569+ .Case (" increment" , llvm::AllocTokenMode::Increment)
4570+ .Case (" random" , llvm::AllocTokenMode::Random)
4571+ .Case (" typehash" , llvm::AllocTokenMode::TypeHash)
4572+ .Case (" typehashpointersplit" ,
4573+ llvm::AllocTokenMode::TypeHashPointerSplit)
4574+ .Default (std::nullopt );
4575+ if (Mode)
4576+ Opts.AllocTokenMode = Mode;
4577+ else
4578+ Diags.Report (diag::err_drv_invalid_value) << Arg->getAsString (Args) << S;
4579+ }
4580+
45474581 // Validate options for HLSL
45484582 if (Opts.HLSL ) {
45494583 // TODO: Revisit restricting SPIR-V to logical once we've figured out how to
0 commit comments