7
7
// ===----------------------------------------------------------------------===//
8
8
9
9
#include " clang-mlir.h"
10
+ #include " ../ArgumentList.h"
10
11
#include " TypeUtils.h"
11
12
#include " mlir/Dialect/Arith/IR/Arith.h"
12
13
#include " mlir/Dialect/DLTI/DLTI.h"
@@ -5510,50 +5511,30 @@ static bool parseMLIR(const char *Argv0, std::vector<std::string> filenames,
5510
5511
const char *binary = Argv0; // CudaLower ? "clang++" : "clang";
5511
5512
const unique_ptr<Driver> driver (
5512
5513
new Driver (binary, llvm::sys::getDefaultTargetTriple (), Diags));
5513
- std::vector< const char *> Argv;
5514
+ mlirclang::ArgumentList Argv;
5514
5515
Argv.push_back (binary);
5515
- for (auto a : filenames) {
5516
- char *chars = (char *)malloc (a.length () + 1 );
5517
- memcpy (chars, a.data (), a.length ());
5518
- chars[a.length ()] = 0 ;
5519
- Argv.push_back (chars);
5516
+ for (const auto &filename : filenames) {
5517
+ Argv.push_back (filename);
5520
5518
}
5521
5519
if (FOpenMP)
5522
5520
Argv.push_back (" -fopenmp" );
5523
5521
if (TargetTripleOpt != " " ) {
5524
- char *chars = (char *)malloc (TargetTripleOpt.length () + 1 );
5525
- memcpy (chars, TargetTripleOpt.data (), TargetTripleOpt.length ());
5526
- chars[TargetTripleOpt.length ()] = 0 ;
5527
5522
Argv.push_back (" -target" );
5528
- Argv.push_back (chars );
5523
+ Argv.push_back (TargetTripleOpt );
5529
5524
}
5530
5525
if (McpuOpt != " " ) {
5531
- auto a = " -mcpu=" + McpuOpt;
5532
- char *chars = (char *)malloc (a.length () + 1 );
5533
- memcpy (chars, a.data (), a.length ());
5534
- chars[a.length ()] = 0 ;
5535
- Argv.push_back (chars);
5526
+ Argv.emplace_back (" -mcpu=" , McpuOpt);
5536
5527
}
5537
5528
if (Standard != " " ) {
5538
- auto a = " -std=" + Standard;
5539
- char *chars = (char *)malloc (a.length () + 1 );
5540
- memcpy (chars, a.data (), a.length ());
5541
- chars[a.length ()] = 0 ;
5542
- Argv.push_back (chars);
5529
+ Argv.emplace_back (" -std=" , Standard);
5543
5530
}
5544
5531
if (ResourceDir != " " ) {
5545
5532
Argv.push_back (" -resource-dir" );
5546
- char *chars = (char *)malloc (ResourceDir.length () + 1 );
5547
- memcpy (chars, ResourceDir.data (), ResourceDir.length ());
5548
- chars[ResourceDir.length ()] = 0 ;
5549
- Argv.push_back (chars);
5533
+ Argv.push_back (ResourceDir);
5550
5534
}
5551
5535
if (SysRoot != " " ) {
5552
5536
Argv.push_back (" --sysroot" );
5553
- char *chars = (char *)malloc (SysRoot.length () + 1 );
5554
- memcpy (chars, SysRoot.data (), SysRoot.length ());
5555
- chars[SysRoot.length ()] = 0 ;
5556
- Argv.push_back (chars);
5537
+ Argv.push_back (SysRoot);
5557
5538
}
5558
5539
if (Verbose) {
5559
5540
Argv.push_back (" -v" );
@@ -5565,53 +5546,30 @@ static bool parseMLIR(const char *Argv0, std::vector<std::string> filenames,
5565
5546
Argv.push_back (" -nocudalib" );
5566
5547
}
5567
5548
if (CUDAGPUArch != " " ) {
5568
- auto a = " --cuda-gpu-arch=" + CUDAGPUArch;
5569
- char *chars = (char *)malloc (a.length () + 1 );
5570
- memcpy (chars, a.data (), a.length ());
5571
- chars[a.length ()] = 0 ;
5572
- Argv.push_back (chars);
5549
+ Argv.emplace_back (" --cuda-gpu-arch=" , CUDAGPUArch);
5573
5550
}
5574
5551
if (CUDAPath != " " ) {
5575
- auto a = " --cuda-path=" + CUDAPath;
5576
- char *chars = (char *)malloc (a.length () + 1 );
5577
- memcpy (chars, a.data (), a.length ());
5578
- chars[a.length ()] = 0 ;
5579
- Argv.push_back (chars);
5552
+ Argv.emplace_back (" --cuda-path=" , CUDAPath);
5580
5553
}
5581
5554
if (MArch != " " ) {
5582
- auto a = " -march=" + MArch;
5583
- char *chars = (char *)malloc (a.length () + 1 );
5584
- memcpy (chars, a.data (), a.length ());
5585
- chars[a.length ()] = 0 ;
5586
- Argv.push_back (chars);
5555
+ Argv.emplace_back (" -march=" , MArch);
5587
5556
}
5588
- for (auto a : includeDirs) {
5557
+ for (const auto &dir : includeDirs) {
5589
5558
Argv.push_back (" -I" );
5590
- char *chars = (char *)malloc (a.length () + 1 );
5591
- memcpy (chars, a.data (), a.length ());
5592
- chars[a.length ()] = 0 ;
5593
- Argv.push_back (chars);
5594
- }
5595
- for (auto a : defines) {
5596
- char *chars = (char *)malloc (a.length () + 3 );
5597
- chars[0 ] = ' -' ;
5598
- chars[1 ] = ' D' ;
5599
- memcpy (chars + 2 , a.data (), a.length ());
5600
- chars[2 + a.length ()] = 0 ;
5601
- Argv.push_back (chars);
5602
- }
5603
- for (auto a : Includes) {
5604
- char *chars = (char *)malloc (a.length () + 1 );
5605
- memcpy (chars, a.data (), a.length ());
5606
- chars[a.length ()] = 0 ;
5559
+ Argv.push_back (dir);
5560
+ }
5561
+ for (const auto &define : defines) {
5562
+ Argv.emplace_back (" -D" , define);
5563
+ }
5564
+ for (const auto &Include : Includes) {
5607
5565
Argv.push_back (" -include" );
5608
- Argv.push_back (chars );
5566
+ Argv.push_back (Include );
5609
5567
}
5610
5568
5611
5569
Argv.push_back (" -emit-ast" );
5612
5570
5613
5571
const unique_ptr<Compilation> compilation (
5614
- driver->BuildCompilation (llvm::ArrayRef< const char *>( Argv)));
5572
+ driver->BuildCompilation (Argv. getArguments ( )));
5615
5573
JobList &Jobs = compilation->getJobs ();
5616
5574
if (Jobs.size () < 1 )
5617
5575
return false ;
0 commit comments