Changeset 663:6aaa3d3c1183
- Timestamp:
- 10/06/08 16:46:55
(2 months ago)
- Author:
- Christian Kamm <kamm incasoftware de>
- branch:
- default
- Message:
First part of rename to LDC.
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r579 |
r663 |
|
| 12 | 12 | import |
|---|
| 13 | 13 | Makefile |
|---|
| 14 | | bin/llvmdc |
|---|
| | 14 | bin/ldc |
|---|
| 15 | 15 | idgen |
|---|
| 16 | 16 | idgen.make |
|---|
| 17 | 17 | impcnvgen |
|---|
| 18 | 18 | impcnvgen.make |
|---|
| 19 | | llvmdc.make |
|---|
| | 19 | ldc.make |
|---|
| 20 | 20 | dmd/impcnvtab.c |
|---|
| 21 | 21 | tests/runminitest |
|---|
| r450 |
r663 |
|
| 292 | 292 | } |
|---|
| 293 | 293 | |
|---|
| 294 | | import llvmdc.intrinsics; |
|---|
| | 294 | import ldc.intrinsics; |
|---|
| 295 | 295 | alias llvm_sqrt_f32 sqrt; |
|---|
| 296 | 296 | alias llvm_sqrt_f64 sqrt; |
|---|
| r82 |
r663 |
|
| 1 | | use rebuild with -dc=llvmdc-posix to build the demos |
|---|
| | 1 | use rebuild with -dc=ldc-posix to build the demos |
|---|
| r658 |
r663 |
|
| 829 | 829 | #endif |
|---|
| 830 | 830 | |
|---|
| 831 | | // LLVMDC |
|---|
| | 831 | // LDC |
|---|
| 832 | 832 | #if IN_LLVM |
|---|
| 833 | 833 | |
|---|
| … | … | |
| 922 | 922 | } |
|---|
| 923 | 923 | |
|---|
| 924 | | // pragma(llvmdc, "string") { templdecl(s) } |
|---|
| 925 | | else if (ident == Id::llvmdc) |
|---|
| | 924 | // pragma(ldc, "string") { templdecl(s) } |
|---|
| | 925 | else if (ident == Id::ldc) |
|---|
| 926 | 926 | { |
|---|
| 927 | 927 | Expression* expr = (Expression *)args->data[0]; |
|---|
| … | … | |
| 943 | 943 | } |
|---|
| 944 | 944 | |
|---|
| 945 | | #endif // LLVMDC |
|---|
| | 945 | #endif // LDC |
|---|
| 946 | 946 | |
|---|
| 947 | 947 | else if (global.params.ignoreUnsupportedPragmas) |
|---|
| … | … | |
| 983 | 983 | s->semantic(sc); |
|---|
| 984 | 984 | |
|---|
| 985 | | // LLVMDC |
|---|
| | 985 | // LDC |
|---|
| 986 | 986 | #if IN_LLVM |
|---|
| 987 | 987 | |
|---|
| … | … | |
| 990 | 990 | if (s->llvmInternal) |
|---|
| 991 | 991 | { |
|---|
| 992 | | error("multiple LLVMDC specific pragmas not allowed not affect the same declaration ('%s' at '%s')", s->toChars(), s->loc.toChars()); |
|---|
| | 992 | error("multiple LDC specific pragmas not allowed not affect the same declaration ('%s' at '%s')", s->toChars(), s->loc.toChars()); |
|---|
| 993 | 993 | fatal(); |
|---|
| 994 | 994 | } |
|---|
| … | … | |
| 1071 | 1071 | |
|---|
| 1072 | 1072 | default: |
|---|
| 1073 | | warning("the LLVMDC specific pragma '%s' is not yet implemented, ignoring", ident->toChars()); |
|---|
| | 1073 | warning("the LDC specific pragma '%s' is not yet implemented, ignoring", ident->toChars()); |
|---|
| 1074 | 1074 | } |
|---|
| 1075 | 1075 | } |
|---|
| 1076 | 1076 | |
|---|
| 1077 | | #endif // LLVMDC |
|---|
| | 1077 | #endif // LDC |
|---|
| 1078 | 1078 | |
|---|
| 1079 | 1079 | } |
|---|
| r639 |
r663 |
|
| 330 | 330 | virtual TypeInfoDeclaration* isTypeInfoDeclaration() { return this; } |
|---|
| 331 | 331 | |
|---|
| 332 | | // LLVMDC |
|---|
| | 332 | // LDC |
|---|
| 333 | 333 | virtual void llvmDeclare(); |
|---|
| 334 | 334 | virtual void llvmDefine(); |
|---|
| … | … | |
| 341 | 341 | void toDt(dt_t **pdt); |
|---|
| 342 | 342 | |
|---|
| 343 | | // LLVMDC |
|---|
| | 343 | // LDC |
|---|
| 344 | 344 | void llvmDeclare(); |
|---|
| 345 | 345 | void llvmDefine(); |
|---|
| … | … | |
| 352 | 352 | void toDt(dt_t **pdt); |
|---|
| 353 | 353 | |
|---|
| 354 | | // LLVMDC |
|---|
| | 354 | // LDC |
|---|
| 355 | 355 | void llvmDeclare(); |
|---|
| 356 | 356 | void llvmDefine(); |
|---|
| … | … | |
| 363 | 363 | void toDt(dt_t **pdt); |
|---|
| 364 | 364 | |
|---|
| 365 | | // LLVMDC |
|---|
| | 365 | // LDC |
|---|
| 366 | 366 | void llvmDeclare(); |
|---|
| 367 | 367 | void llvmDefine(); |
|---|
| … | … | |
| 374 | 374 | void toDt(dt_t **pdt); |
|---|
| 375 | 375 | |
|---|
| 376 | | // LLVMDC |
|---|
| | 376 | // LDC |
|---|
| 377 | 377 | void llvmDeclare(); |
|---|
| 378 | 378 | void llvmDefine(); |
|---|
| … | … | |
| 385 | 385 | void toDt(dt_t **pdt); |
|---|
| 386 | 386 | |
|---|
| 387 | | // LLVMDC |
|---|
| | 387 | // LDC |
|---|
| 388 | 388 | void llvmDeclare(); |
|---|
| 389 | 389 | void llvmDefine(); |
|---|
| … | … | |
| 396 | 396 | void toDt(dt_t **pdt); |
|---|
| 397 | 397 | |
|---|
| 398 | | // LLVMDC |
|---|
| | 398 | // LDC |
|---|
| 399 | 399 | void llvmDeclare(); |
|---|
| 400 | 400 | void llvmDefine(); |
|---|
| … | … | |
| 407 | 407 | void toDt(dt_t **pdt); |
|---|
| 408 | 408 | |
|---|
| 409 | | // LLVMDC |
|---|
| | 409 | // LDC |
|---|
| 410 | 410 | void llvmDeclare(); |
|---|
| 411 | 411 | void llvmDefine(); |
|---|
| … | … | |
| 418 | 418 | void toDt(dt_t **pdt); |
|---|
| 419 | 419 | |
|---|
| 420 | | // LLVMDC |
|---|
| | 420 | // LDC |
|---|
| 421 | 421 | void llvmDeclare(); |
|---|
| 422 | 422 | void llvmDefine(); |
|---|
| … | … | |
| 429 | 429 | void toDt(dt_t **pdt); |
|---|
| 430 | 430 | |
|---|
| 431 | | // LLVMDC |
|---|
| | 431 | // LDC |
|---|
| 432 | 432 | void llvmDeclare(); |
|---|
| 433 | 433 | void llvmDefine(); |
|---|
| … | … | |
| 440 | 440 | void toDt(dt_t **pdt); |
|---|
| 441 | 441 | |
|---|
| 442 | | // LLVMDC |
|---|
| | 442 | // LDC |
|---|
| 443 | 443 | void llvmDeclare(); |
|---|
| 444 | 444 | void llvmDefine(); |
|---|
| … | … | |
| 451 | 451 | void toDt(dt_t **pdt); |
|---|
| 452 | 452 | |
|---|
| 453 | | // LLVMDC |
|---|
| | 453 | // LDC |
|---|
| 454 | 454 | void llvmDeclare(); |
|---|
| 455 | 455 | void llvmDefine(); |
|---|
| … | … | |
| 462 | 462 | void toDt(dt_t **pdt); |
|---|
| 463 | 463 | |
|---|
| 464 | | // LLVMDC |
|---|
| | 464 | // LDC |
|---|
| 465 | 465 | void llvmDeclare(); |
|---|
| 466 | 466 | void llvmDefine(); |
|---|
| … | … | |
| 474 | 474 | void toDt(dt_t **pdt); |
|---|
| 475 | 475 | |
|---|
| 476 | | // LLVMDC |
|---|
| | 476 | // LDC |
|---|
| 477 | 477 | void llvmDeclare(); |
|---|
| 478 | 478 | void llvmDefine(); |
|---|
| … | … | |
| 485 | 485 | void toDt(dt_t **pdt); |
|---|
| 486 | 486 | |
|---|
| 487 | | // LLVMDC |
|---|
| | 487 | // LDC |
|---|
| 488 | 488 | void llvmDeclare(); |
|---|
| 489 | 489 | void llvmDefine(); |
|---|
| … | … | |
| 625 | 625 | void toDocBuffer(OutBuffer *buf); |
|---|
| 626 | 626 | |
|---|
| 627 | | // LLVMDC: give argument types to runtime functions |
|---|
| | 627 | // LDC: give argument types to runtime functions |
|---|
| 628 | 628 | static FuncDeclaration *genCfunc(Arguments *args, Type *treturn, char *name); |
|---|
| 629 | 629 | static FuncDeclaration *genCfunc(Arguments *args, Type *treturn, Identifier *id); |
|---|
| … | … | |
| 636 | 636 | FuncDeclaration *isFuncDeclaration() { return this; } |
|---|
| 637 | 637 | |
|---|
| 638 | | // llvmdc stuff |
|---|
| | 638 | // LDC stuff |
|---|
| 639 | 639 | |
|---|
| 640 | 640 | // vars declared in this function that nested funcs reference |
|---|
| r658 |
r663 |
|
| 177 | 177 | Identifier *Id::vaend; |
|---|
| 178 | 178 | Identifier *Id::vaarg; |
|---|
| 179 | | Identifier *Id::llvmdc; |
|---|
| | 179 | Identifier *Id::ldc; |
|---|
| 180 | 180 | Identifier *Id::tohash; |
|---|
| 181 | 181 | Identifier *Id::tostring; |
|---|
| … | … | |
| 359 | 359 | vaend = Lexer::idPool("va_end"); |
|---|
| 360 | 360 | vaarg = Lexer::idPool("va_arg"); |
|---|
| 361 | | llvmdc = Lexer::idPool("llvmdc"); |
|---|
| | 361 | ldc = Lexer::idPool("ldc"); |
|---|
| 362 | 362 | tohash = Lexer::idPool("toHash"); |
|---|
| 363 | 363 | tostring = Lexer::idPool("toString"); |
|---|
| r658 |
r663 |
|
| 179 | 179 | static Identifier *vaend; |
|---|
| 180 | 180 | static Identifier *vaarg; |
|---|
| 181 | | static Identifier *llvmdc; |
|---|
| | 181 | static Identifier *ldc; |
|---|
| 182 | 182 | static Identifier *tohash; |
|---|
| 183 | 183 | static Identifier *tostring; |
|---|
| r658 |
r663 |
|
| 214 | 214 | { "msg" }, |
|---|
| 215 | 215 | |
|---|
| 216 | | // LLVMDC pragma's |
|---|
| | 216 | // LDC pragma's |
|---|
| 217 | 217 | { "intrinsic" }, |
|---|
| 218 | 218 | { "va_intrinsic" }, |
|---|
| … | … | |
| 224 | 224 | { "vaend", "va_end" }, |
|---|
| 225 | 225 | { "vaarg", "va_arg" }, |
|---|
| 226 | | { "llvmdc" }, |
|---|
| | 226 | { "ldc" }, |
|---|
| 227 | 227 | |
|---|
| 228 | 228 | // For special functions |
|---|
| r658 |
r663 |
|
| 52 | 52 | ddoc_ext = "ddoc"; |
|---|
| 53 | 53 | |
|---|
| 54 | | // LLVMDC |
|---|
| | 54 | // LDC |
|---|
| 55 | 55 | obj_ext = "bc"; |
|---|
| 56 | 56 | ll_ext = "ll"; |
|---|
| … | … | |
| 67 | 67 | written = "written by Walter Bright and Tomas Lindquist Olsen"; |
|---|
| 68 | 68 | version = "v1.035"; |
|---|
| 69 | | llvmdc_version = "0.1"; |
|---|
| | 69 | ldc_version = "0.1"; |
|---|
| 70 | 70 | global.structalign = 8; |
|---|
| 71 | 71 | |
|---|
| … | … | |
| 155 | 155 | { |
|---|
| 156 | 156 | printf("LLVM D Compiler %s (based on DMD %s and LLVM 2.4svn)\n%s\n%s\n", |
|---|
| 157 | | global.llvmdc_version, global.version, global.copyright, global.written); |
|---|
| | 157 | global.ldc_version, global.version, global.copyright, global.written); |
|---|
| 158 | 158 | printf("\ |
|---|
| 159 | 159 | D Language Documentation: http://www.digitalmars.com/d/1.0/index.html\n\ |
|---|
| 160 | | LLVMDC Homepage: http://www.dsource.org/projects/llvmdc\n\ |
|---|
| | 160 | LDC Homepage: http://www.dsource.org/projects/llvmdc\n\ |
|---|
| 161 | 161 | Usage:\n\ |
|---|
| 162 | | llvmdc files.d ... { -switch }\n\ |
|---|
| | 162 | ldc files.d ... { -switch }\n\ |
|---|
| 163 | 163 | \n\ |
|---|
| 164 | 164 | files.d D source files\n%s\ |
|---|
| … | … | |
| 322 | 322 | #if IN_LLVM |
|---|
| 323 | 323 | VersionCondition::addPredefinedGlobalIdent("LLVM"); |
|---|
| 324 | | VersionCondition::addPredefinedGlobalIdent("LLVMDC"); |
|---|
| | 324 | VersionCondition::addPredefinedGlobalIdent("LDC"); |
|---|
| 325 | 325 | #endif |
|---|
| 326 | 326 | |
|---|
| … | … | |
| 344 | 344 | |
|---|
| 345 | 345 | #if _WIN32 |
|---|
| 346 | | inifile(global.params.argv0, "llvmdc.ini"); |
|---|
| | 346 | inifile(global.params.argv0, "ldc.ini"); |
|---|
| 347 | 347 | #elif POSIX |
|---|
| 348 | | inifile(global.params.argv0, "llvmdc.conf"); |
|---|
| | 348 | inifile(global.params.argv0, "ldc.conf"); |
|---|
| 349 | 349 | #else |
|---|
| 350 | 350 | #error |
|---|
| … | … | |
| 717 | 717 | char *arg; |
|---|
| 718 | 718 | arg = (char *)mem.malloc(64); |
|---|
| 719 | | strcpy(arg, "-lllvmdc-runtime"); |
|---|
| | 719 | strcpy(arg, "-lldc-runtime"); |
|---|
| 720 | 720 | global.params.linkswitches->push(arg); |
|---|
| 721 | 721 | arg = (char *)mem.malloc(64); |
|---|
| r651 |
r663 |
|
| 38 | 38 | struct Array; |
|---|
| 39 | 39 | |
|---|
| 40 | | // LLVMDC |
|---|
| | 40 | // LDC |
|---|
| 41 | 41 | enum ARCH |
|---|
| 42 | 42 | { |
|---|
| … | … | |
| 140 | 140 | char *exefile; |
|---|
| 141 | 141 | |
|---|
| 142 | | // LLVMDC stuff |
|---|
| | 142 | // LDC stuff |
|---|
| 143 | 143 | char *llvmArch; |
|---|
| 144 | 144 | char forceBE; |
|---|
| … | … | |
| 171 | 171 | int structalign; |
|---|
| 172 | 172 | char *version; |
|---|
| 173 | | char *llvmdc_version; |
|---|
| | 173 | char *ldc_version; |
|---|
| 174 | 174 | |
|---|
| 175 | 175 | Param params; |
|---|
| r658 |
r663 |
|
| 99 | 99 | Tslice, |
|---|
| 100 | 100 | |
|---|
| 101 | | // LLVMDC |
|---|
| | 101 | // LDC |
|---|
| 102 | 102 | Topaque, |
|---|
| 103 | 103 | |
|---|
| … | … | |
| 178 | 178 | static ClassDeclaration *typeinfotypelist; |
|---|
| 179 | 179 | |
|---|
| 180 | | // LLVMDC, for runtime function signatures that contain |
|---|
| | 180 | // LDC, for runtime function signatures that contain |
|---|
| 181 | 181 | // AAs or arrays of unknown type |
|---|
| 182 | 182 | static Type* topaque; |
|---|
| … | … | |
| 261 | 261 | virtual TypeBasic *isTypeBasic(); |
|---|
| 262 | 262 | |
|---|
| 263 | | // llvmdc |
|---|
| | 263 | // LDC |
|---|
| 264 | 264 | IrType ir; |
|---|
| 265 | 265 | }; |
|---|
| … | … | |
| 390 | 390 | MATCH implicitConvTo(Type *to); |
|---|
| 391 | 391 | int isscalar(); |
|---|
| 392 | | // LLVMDC: pointers are unsigned |
|---|
| | 392 | // LDC: pointers are unsigned |
|---|
| 393 | 393 | int isunsigned() { return TRUE; }; |
|---|
| 394 | 394 | Expression *defaultInit(Loc loc); |
|---|
| … | … | |
| 442 | 442 | unsigned totym(); |
|---|
| 443 | 443 | |
|---|
| 444 | | // LLVMDC |
|---|
| | 444 | // LDC |
|---|
| 445 | 445 | bool retInPtr; |
|---|
| 446 | 446 | bool usesThis; |
|---|
| … | … | |
| 675 | 675 | }; |
|---|
| 676 | 676 | |
|---|
| 677 | | //LLVMDC |
|---|
| | 677 | //LDC |
|---|
| 678 | 678 | struct TypeOpaque : Type |
|---|
| 679 | 679 | { |
|---|
| … | … | |
| 705 | 705 | static Argument *getNth(Arguments *arguments, size_t nth, size_t *pn = NULL); |
|---|
| 706 | 706 | |
|---|
| 707 | | // LLVMDC |
|---|
| | 707 | // LDC |
|---|
| 708 | 708 | unsigned llvmAttrs; |
|---|
| 709 | 709 | }; |
|---|
| r486 |
r663 |
|
| 10 | 10 | LLVMva_end, |
|---|
| 11 | 11 | LLVMva_arg, |
|---|
| 12 | | LLVMllvmdc |
|---|
| | 12 | LLVMldc |
|---|
| 13 | 13 | }; |
|---|
| r637 |
r663 |
|
| 22 | 22 | return; |
|---|
| 23 | 23 | |
|---|
| 24 | | llvm::Linker linker("llvmdc", dst); |
|---|
| | 24 | llvm::Linker linker("ldc", dst); |
|---|
| 25 | 25 | |
|---|
| 26 | 26 | std::string err; |
|---|
| r607 |
r663 |
|
| 11 | 11 | // optimization level given. |
|---|
| 12 | 12 | |
|---|
| 13 | | void llvmdc_optimize_module(Module* m, char lvl, bool doinline) |
|---|
| | 13 | void ldc_optimize_module(Module* m, char lvl, bool doinline) |
|---|
| 14 | 14 | { |
|---|
| 15 | 15 | if (!doinline && lvl < 0) |
|---|
| r647 |
r663 |
|
| 154 | 154 | static void LLVM_D_BuildRuntimeModule() |
|---|
| 155 | 155 | { |
|---|
| 156 | | M = new llvm::Module("llvmdc internal runtime"); |
|---|
| | 156 | M = new llvm::Module("ldc internal runtime"); |
|---|
| 157 | 157 | |
|---|
| 158 | 158 | const LLType* voidTy = LLType::VoidTy; |
|---|
| r611 |
r663 |
|
| 141 | 141 | srcpath = llvm::sys::Path::GetCurrentDirectory().toString(); |
|---|
| 142 | 142 | vals[4] = DtoConstStringPtr(srcpath.c_str(), "llvm.metadata"); |
|---|
| 143 | | vals[5] = DtoConstStringPtr("LLVMDC (http://www.dsource.org/projects/llvmdc)", "llvm.metadata"); |
|---|
| | 143 | vals[5] = DtoConstStringPtr("LDC (http://www.dsource.org/projects/llvmdc)", "llvm.metadata"); |
|---|
| 144 | 144 | |
|---|
| 145 | 145 | LLGlobalVariable* gv = emitDwarfGlobal(getDwarfCompileUnitType(), vals, "llvm.dbg.compile_unit"); |
|---|
| r650 |
r663 |
|
| 50 | 50 | |
|---|
| 51 | 51 | // in gen/optimize.cpp |
|---|
| 52 | | void llvmdc_optimize_module(llvm::Module* m, char lvl, bool doinline); |
|---|
| | 52 | void ldc_optimize_module(llvm::Module* m, char lvl, bool doinline); |
|---|
| 53 | 53 | |
|---|
| 54 | 54 | ////////////////////////////////////////////////////////////////////////////////////////// |
|---|
| … | … | |
| 153 | 153 | |
|---|
| 154 | 154 | // run optimizer |
|---|
| 155 | | llvmdc_optimize_module(ir.module, global.params.optimizeLevel, global.params.llvmInline); |
|---|
| | 155 | ldc_optimize_module(ir.module, global.params.optimizeLevel, global.params.llvmInline); |
|---|
| 156 | 156 | |
|---|
| 157 | 157 | // verify the llvm |
|---|
| r622 |
r663 |
|
| 9 | 9 | // See the included readme.txt for details. |
|---|
| 10 | 10 | |
|---|
| 11 | | // Modifications for LLVMDC: |
|---|
| | 11 | // Modifications for LDC: |
|---|
| 12 | 12 | // Copyright (c) 2007 by Tomas Lindquist Olsen |
|---|
| 13 | 13 | // tomas at famolsen dk |
|---|
| … | … | |
| 235 | 235 | Expression *createTypeInfoArray(Scope *sc, Expression *exps[], int dim) |
|---|
| 236 | 236 | { |
|---|
| 237 | | assert(0); // done elsewhere in llvmdc |
|---|
| | 237 | assert(0); // done elsewhere in LDC |
|---|
| 238 | 238 | return NULL; |
|---|
| 239 | 239 | } |
|---|
| r660 |
r663 |
|
| 1 | 1 | ignore=object |
|---|
| 2 | 2 | |
|---|
| 3 | | compiler=llvmdc |
|---|
| 4 | | inifile=llvmdc.conf |
|---|
| | 3 | compiler=ldc |
|---|
| | 4 | inifile=ldc.conf |
|---|
| 5 | 5 | |
|---|
| 6 | 6 | exeext= |
|---|
| … | … | |
| 9 | 9 | |
|---|
| 10 | 10 | version=LLVM |
|---|
| 11 | | version=LLVMDC |
|---|
| | 11 | version=LDC |
|---|
| 12 | 12 | noversion=DigitalMars |
|---|
| 13 | 13 | noversion=GNU |
|---|
| … | … | |
| 38 | 38 | |
|---|
| 39 | 39 | [compile] |
|---|
| 40 | | cmd=llvmdc -c $i |
|---|
| | 40 | cmd=ldc -c $i |
|---|
| 41 | 41 | |
|---|
| 42 | 42 | flag=$i |
|---|
| … | … | |
| 49 | 49 | [link] |
|---|
| 50 | 50 | oneatatime=yes |
|---|
| 51 | | cmd=llvmdc $i -of$o |
|---|
| | 51 | cmd=ldc $i -of$o |
|---|
| 52 | 52 | |
|---|
| 53 | 53 | libdir=-L-L=$i |
|---|
| r662 |
r663 |
|
| 6 | 6 | rm -f ../lib/*.bc |
|---|
| 7 | 7 | |
|---|
| 8 | | LLVMDCFLAGS_ASM="-c -oq -release" |
|---|
| 9 | | LLVMDCFLAGS="$LLVMDCFLAGS_ASM -noasm" |
|---|
| | 8 | LDCFLAGS_ASM="-c -oq -release" |
|---|
| | 9 | LDCFLAGS="$LDCFLAGS_ASM -noasm" |
|---|
| 10 | 10 | |
|---|
| 11 | 11 | echo "compiling contract runtime" |
|---|
| 12 | | llvmdc internal/contract.d -c -of../lib/llvmdcore.bc || exit 1 #-noruntime || exit 1 |
|---|
| | 12 | ldc internal/contract.d -c -of../lib/ldcore.bc || exit 1 #-noruntime || exit 1 |
|---|
| 13 | 13 | |
|---|
| 14 | 14 | echo "compiling common runtime" |
|---|
| 15 | | ./llvmdc-build internal/arrays.d \ |
|---|
| | 15 | ./ldc-build internal/arrays.d \ |
|---|
| 16 | 16 | internal/mem.d \ |
|---|
| 17 | 17 | internal/critical.d \ |
|---|
| 18 | 18 | internal/dmain2.d \ |
|---|
| 19 | 19 | internal/inv.d \ |
|---|
| 20 | | $LLVMDCFLAGS_ASM || exit 1 |
|---|
| | 20 | $LDCFLAGS_ASM || exit 1 |
|---|
| 21 | 21 | mv *.bc obj |
|---|
| 22 | | llvm-link -f -o=../lib/llvmdcore.bc obj/internal.*.bc ../lib/llvmdcore.bc |
|---|
| | 22 | llvm-link -f -o=../lib/ldcore.bc obj/internal.*.bc ../lib/ldcore.bc |
|---|
| 23 | 23 | |
|---|
| 24 | 24 | echo "compiling typeinfo 1" |
|---|
| 25 | | ./llvmdc-build typeinfos1.d $LLVMDCFLAGS || exit 1 |
|---|
| | 25 | ./ldc-build typeinfos1.d $LDCFLAGS || exit 1 |
|---|
| 26 | 26 | mv *.bc obj |
|---|
| 27 | | llvm-link -f -o=../lib/llvmdcore.bc `ls obj/typeinfo1.*.bc` ../lib/llvmdcore.bc || exit 1 |
|---|
| | 27 | llvm-link -f -o=../lib/ldcore.bc `ls obj/typeinfo1.*.bc` ../lib/ldcore.bc || exit 1 |
|---|
| 28 | 28 | |
|---|
| 29 | 29 | echo "compiling typeinfo 2" |
|---|
| 30 | | ./llvmdc-build typeinfos2.d $LLVMDCFLAGS || exit 1 |
|---|
| | 30 | ./ldc-build typeinfos2.d $LDCFLAGS || exit 1 |
|---|
| 31 | 31 | mv *.bc obj |
|---|
| 32 | | llvm-link -f -o=../lib/llvmdcore.bc `ls obj/typeinfo2.*.bc` ../lib/llvmdcore.bc || exit 1 |
|---|
| | 32 | llvm-link -f -o=../lib/ldcore.bc `ls obj/typeinfo2.*.bc` ../lib/ldcore.bc || exit 1 |
|---|
| 33 | 33 | |
|---|
| 34 | 34 | echo "compiling exceptions" |
|---|
| 35 | | ./llvmdc-build internal/eh.d $LLVMDCFLAGS -debug || exit 1 |
|---|
| | 35 | ./ldc-build internal/eh.d $LDCFLAGS -debug || exit 1 |
|---|
| 36 | 36 | mv *.bc obj |
|---|
| 37 | | llvm-link -f -o=../lib/llvmdcore.bc obj/*eh.bc ../lib/llvmdcore.bc || exit 1 |
|---|
| | 37 | llvm-link -f -o=../lib/ldcore.bc obj/*eh.bc ../lib/ldcore.bc || exit 1 |
|---|
| 38 | 38 | |
|---|
| 39 | 39 | echo "compiling object/interface casting runtime support" |
|---|
| 40 | | llvmdc internal/cast.d $LLVMDCFLAGS || exit 1 |
|---|
| | 40 | ldc internal/cast.d $LDCFLAGS || exit 1 |
|---|
| 41 | 41 | mv *.bc obj |
|---|
| 42 | | llvm-link -f -o=../lib/llvmdcore.bc obj/cast.bc ../lib/llvmdcore.bc || exit 1 |
|---|
| | 42 | llvm-link -f -o=../lib/ldcore.bc obj/cast.bc ../lib/ldcore.bc || exit 1 |
|---|
| 43 | 43 | |
|---|
| 44 | 44 | echo "compiling string foreach/switch runtime support" |
|---|
| 45 | | llvmdc internal/aApply.d $LLVMDCFLAGS || exit 1 |
|---|
| 46 | | llvmdc internal/aApplyR.d $LLVMDCFLAGS || exit 1 |
|---|
| 47 | | llvmdc internal/switch.d $LLVMDCFLAGS || exit 1 |
|---|
| | 45 | ldc internal/aApply.d $LDCFLAGS || exit 1 |
|---|
| | 46 | ldc internal/aApplyR.d $LDCFLAGS || exit 1 |
|---|
| | 47 | ldc internal/switch.d $LDCFLAGS || exit 1 |
|---|
| 48 | 48 | mv *.bc obj |
|---|
| 49 | | llvm-link -f -o=../lib/llvmdcore.bc obj/aApply.bc obj/aApplyR.bc obj/switch.bc ../lib/llvmdcore.bc || exit 1 |
|---|
| | 49 | llvm-link -f -o=../lib/ldcore.bc obj/aApply.bc obj/aApplyR.bc obj/switch.bc ../lib/ldcore.bc || exit 1 |
|---|
| 50 | 50 | |
|---|
| 51 | 51 | echo "compiling array runtime support" |
|---|
| 52 | | llvmdc internal/qsort2.d internal/adi.d internal/aaA.d $LLVMDCFLAGS || exit 1 |
|---|
| | 52 | ldc internal/qsort2.d internal/adi.d internal/aaA.d $LDCFLAGS || exit 1 |
|---|
| 53 | 53 | mv *.bc obj |
|---|
| 54 | | llvm-link -f -o=../lib/llvmdcore.bc obj/qsort2.bc obj/adi.bc obj/aaA.bc ../lib/llvmdcore.bc || exit 1 |
|---|
| | 54 | llvm-link -f -o=../lib/ldcore.bc obj/qsort2.bc obj/adi.bc obj/aaA.bc ../lib/ldcore.bc || exit 1 |
|---|
| 55 | 55 | |
|---|
| 56 | 56 | echo "compiling object implementation" |
|---|
| 57 | | llvmdc internal/objectimpl.d $LLVMDCFLAGS || exit 1 |
|---|
| | 57 | ldc internal/objectimpl.d $LDCFLAGS || exit 1 |
|---|
| 58 | 58 | mv object.bc objectimpl.bc |
|---|
| 59 | 59 | mv *.bc obj |
|---|
| 60 | | llvm-link -f -o=../lib/llvmdcore.bc obj/objectimpl.bc ../lib/llvmdcore.bc || exit 1 |
|---|
| | 60 | llvm-link -f -o=../lib/ldcore.bc obj/objectimpl.bc ../lib/ldcore.bc || exit 1 |
|---|
| 61 | 61 | |
|---|
| 62 | 62 | echo "compiling crc32" |
|---|
| 63 | | llvmdc crc32.d $LLVMDCFLAGS || exit 1 |
|---|
| | 63 | ldc crc32.d $LDCFLAGS || exit 1 |
|---|
| 64 | 64 | mv *.bc obj |
|---|
| 65 | | llvm-link -f -o=../lib/llvmdcore.bc ../lib/llvmdcore.bc obj/crc32.bc || exit 1 |
|---|
| | 65 | llvm-link -f -o=../lib/ldcore.bc ../lib/ldcore.bc obj/crc32.bc || exit 1 |
|---|
| 66 | 66 | |
|---|
| 67 | 67 | echo "compiling llvm runtime support" |
|---|
| 68 | | # ./llvmdc-build llvmsupport.d $LLVMDCFLAGS || exit 1 |
|---|
| 69 | | llvmdc llvmsupport.d -oq -c || exit 1 |
|---|
| | 68 | # ./ldc-build llvmsupport.d $LDCFLAGS || exit 1 |
|---|
| | 69 | ldc llvmsupport.d -oq -c || exit 1 |
|---|
| 70 | 70 | mv *.bc obj |
|---|
| 71 | | llvm-link -f -o=../lib/llvmdcore.bc `ls obj/llvm*.bc` ../lib/llvmdcore.bc || exit 1 |
|---|
| | 71 | llvm-link -f -o=../lib/ldcore.bc `ls obj/llvm*.bc` ../lib/ldcore.bc || exit 1 |
|---|
| 72 | 72 | |
|---|
| 73 | 73 | echo "compiling garbage collector" |
|---|
| 74 | 74 | cd gc |
|---|
| 75 | | llvmdc $(ls *.d |grep -v win32) $LLVMDCFLAGS_ASM -I.. ||exit 1 |
|---|
| 76 | | # llvmdc gclinux.d $LLVMDCFLAGS -I.. || exit 1 |
|---|
| 77 | | # llvmdc gcx.d $LLVMDCFLAGS -I.. || exit 1 |
|---|
| 78 | | # llvmdc gcbits.d $LLVMDCFLAGS -I.. || exit 1 |
|---|
| 79 | | # llvmdc gc.d -oq -c -I.. || exit 1 |
|---|
| | 75 | ldc $(ls *.d |grep -v win32) $LDCFLAGS_ASM -I.. ||exit 1 |
|---|
| | 76 | # ldc gclinux.d $LDCFLAGS -I.. || exit 1 |
|---|
| | 77 | # ldc gcx.d $LDCFLAGS -I.. || exit 1 |
|---|
| | 78 | # ldc gcbits.d $LDCFLAGS -I.. || exit 1 |
|---|
| | 79 | # ldc gc.d -oq -c -I.. || exit 1 |
|---|
| 80 | 80 | mv std.gc.bc std_gc.bc |
|---|
| 81 | 81 | mv *.bc ../obj |
|---|
| 82 | 82 | # mv -v obj/*.bc ../obj |
|---|
| 83 | 83 | cd .. |
|---|
| 84 | | llvm-link -f -o=../lib/llvmdcore.bc obj/gclinux.bc obj/gcx.bc obj/gcbits.bc obj/std_gc.bc ../lib/llvmdcore.bc || exit 1 |
|---|
| | 84 | llvm-link -f -o=../lib/ldcore.bc obj/gclinux.bc obj/gcx.bc obj/gcbits.bc obj/std_gc.bc ../lib/ldcore.bc || exit 1 |
|---|
| 85 | 85 | |
|---|
| 86 | 86 | echo "compiling phobos" |
|---|
| 87 | | ./llvmdc-build phobos.d $LLVMDCFLAGS || exit 1 |
|---|
| | 87 | ./ldc-build phobos.d $LDCFLAGS || exit 1 |
|---|
| 88 | 88 | mv *.bc obj |
|---|
| 89 | 89 | echo "linking phobos" |
|---|
| 90 | | # llvm-link -f -o=../lib/llvmdcore.bc `ls obj/std.*.bc` ../lib/llvmdcore.bc || exit 1 |
|---|
| | 90 | # llvm-link -f -o=../lib/ldcore.bc `ls obj/std.*.bc` ../lib/ldcore.bc || exit 1 |
|---|
| 91 | 91 | for i in $(ls obj/std.*.bc); do |
|---|
| 92 | 92 | echo $i |
|---|
| 93 | | llvm-link -f -o=../lib/llvmdcore.bc ../lib/llvmdcore.bc $i || exit 1 |
|---|
| | 93 | llvm-link -f -o=../lib/ldcore.bc ../lib/ldcore.bc $i || exit 1 |
|---|
| 94 | 94 | done |
|---|
| 95 | 95 | |
|---|
| 96 | 96 | echo "Compiling auxiliary" |
|---|
| 97 | | ./llvmdc-build etc/c/zlib.d $LLVMDCFLAGS || exit 1 |
|---|
| | 97 | ./ldc-build etc/c/zlib.d $LDCFLAGS || exit 1 |
|---|
| 98 | 98 | mv *.bc obj |
|---|
| 99 | | llvm-link -f -o=../lib/llvmdcore.bc `ls obj/etc.*.bc` ../lib/llvmdcore.bc || exit 1 |
|---|
| | 99 | llvm-link -f -o=../lib/ldcore.bc `ls obj/etc.*.bc` ../lib/ldcore.bc || exit 1 |
|---|
| 100 | 100 | |
|---|
| 101 | 101 | echo "optimizing" |
|---|
| 102 | | opt -stats -p -f -std-compile-opts -o=../lib/llvmdcore.bc ../lib/llvmdcore.bc || exit 1 |
|---|
| | 102 | opt -stats -p -f -std-compile-opts -o=../lib/ldcore.bc ../lib/ldcore.bc || exit 1 |
|---|
| 103 | 103 | |
|---|
| 104 | 104 | echo "SUCCESS" |
|---|
| r476 |
r663 |
|
| 2 | 2 | export PATH=$PATH:/opt/llvm/bin |
|---|
| 3 | 3 | export FILE=$1; shift |
|---|
| 4 | | export LLVMDC_PATH=~/llvmdc |
|---|
| 5 | | PARAM=$(for p_file in $($LLVMDC_PATH/bin/llvmdc $FILE -I~/llvmdc/lphobos -c -v -of/dev/null |grep import \ |
|---|
| | 4 | export LDC_PATH=~/ldc |
|---|
| | 5 | PARAM=$(for p_file in $($LDC_PATH/bin/ldc $FILE -I~/ldc/lphobos -c -v -of/dev/null |grep import \ |
|---|
| 6 | 6 | |sed -e "s/import *//" -e "s/\t.*//" \ |
|---|
| 7 | 7 | |sed -e "s/\./\//g" -e "s/$/\.d/"); do if [ -f $p_file ]; then echo $p_file; fi; done) |
|---|
| 8 | | echo llvmdc $FILE $@ $PARAM |
|---|
| 9 | | $LLVMDC_PATH/bin/llvmdc $FILE $@ $PARAM |
|---|
| | 8 | echo ldc $FILE $@ $PARAM |
|---|
| | 9 | $LDC_PATH/bin/ldc $FILE $@ $PARAM |
|---|
| r582 |
r663 |
|
| 1 | | project.name = llvmdc |
|---|
| | 1 | project.name = ldc |
|---|
| 2 | 2 | |
|---|
| 3 | 3 | -- options |
|---|
| … | … | |
| 45 | 45 | package.defines = { "DMDV1="..DMDV1 } |
|---|
| 46 | 46 | |
|---|
| 47 | | -- llvmdc |
|---|
| | 47 | -- ldc |
|---|
| 48 | 48 | package = newpackage() |
|---|
| 49 | 49 | package.bindir = "bin" |
|---|
| 50 | | package.name = "llvmdc" |
|---|
| | 50 | package.name = "ldc" |
|---|
| 51 | 51 | package.kind = "exe" |
|---|
| 52 | 52 | package.language = "c++" |
|---|
| r478 |
r663 |
|
| 1 | | LLVM D Compiler (LLVMDC) |
|---|
| | 1 | LLVM D Compiler (LDC) |
|---|
| 2 | 2 | |
|---|
| 3 | 3 | This compiler is based on the Digital Mars D (DMD) compiler frontend, and |
|---|
| 4 | 4 | the LLVM compiler toolkit. See LICENSE for licensing information. |
|---|
| 5 | 5 | |
|---|
| 6 | | For more information, including build instructions, visit the LLVMDC website: |
|---|
| | 6 | For more information, including build instructions, visit the LDC website: |
|---|
| 7 | 7 | |
|---|
| 8 | 8 | http://www.dsource.org/projects/llvmdc |
|---|
| r443 |
r663 |
|
| 1 | | 1) Do a checkout of tango trunk in the llvmdc root dir (along dmd, gen, runtime etc). |
|---|
| | 1 | 1) Do a checkout of tango trunk in the ldc root dir (along dmd, gen, runtime etc). |
|---|
| 2 | 2 | |
|---|
| 3 | 3 | * svn co http://svn.dsource.org/projects/tango/trunk ../tango |
|---|
| r579 |
r663 |
|
| 4 | 4 | |
|---|
| 5 | 5 | # copy imports |
|---|
| 6 | | mkdir -p ../tango/llvmdc |
|---|
| 7 | | cp internal/llvmdc/bitmanip.d ../tango/llvmdc/bitmanip.di |
|---|
| 8 | | cp internal/llvmdc/vararg.d ../tango/llvmdc/vararg.di |
|---|
| 9 | | cp import/llvmdc/* ../tango/llvmdc |
|---|
| | 6 | mkdir -p ../tango/ldc |
|---|
| | 7 | cp internal/ldc/bitmanip.d ../tango/ldc/bitmanip.di |
|---|
| | 8 | cp internal/ldc/vararg.d ../tango/ldc/vararg.di |
|---|
| | 9 | cp import/ldc/* ../tango/ldc |
|---|
| 10 | 10 | |
|---|
| 11 | 11 | # make the runtime |
|---|
| 12 | 12 | cp -R lib ../tango |
|---|
| 13 | 13 | cd ../tango/lib |
|---|
| 14 | | make -f llvmdc-posix.mak clean |
|---|
| 15 | | make -f llvmdc-posix.mak sharedlib |
|---|
| | 14 | make -f ldc-posix.mak clean |
|---|
| | 15 | make -f ldc-posix.mak sharedlib |
|---|
| 16 | 16 | cd ../.. |
|---|
| 17 | 17 | |
|---|
| 18 | 18 | # install the runtime |
|---|
| 19 | | rm -f lib/libllvmdc-runtime-shared.so |
|---|
| 20 | | cp runtime/internal/libllvmdc-runtime-shared.so lib |
|---|
| | 19 | rm -f lib/libldc-runtime-shared.so |
|---|
| | 20 | cp runtime/internal/libldc-runtime-shared.so lib |
|---|
| 21 | 21 | rm -f lib/libtango-gc-basic-shared.so |
|---|
| 22 | 22 | cp tango/lib/gc/basic/libtango-gc-basic-shared.so lib |
|---|
| r579 |
r663 |
|
| 4 | 4 | |
|---|
| 5 | 5 | # copy imports |
|---|
| 6 | | mkdir -p ../tango/llvmdc |
|---|
| 7 | | cp internal/llvmdc/bitmanip.d ../tango/llvmdc/bitmanip.di |
|---|
| 8 | | cp internal/llvmdc/vararg.d ../tango/llvmdc/vararg.di |
|---|
| 9 | | cp import/llvmdc/* ../tango/llvmdc |
|---|
| | 6 | mkdir -p ../tango/ldc |
|---|
| | 7 | cp internal/ldc/bitmanip.d ../tango/ldc/bitmanip.di |
|---|
| | 8 | cp internal/ldc/vararg.d ../tango/ldc/vararg.di |
|---|
| | 9 | cp import/ldc/* ../tango/ldc |
|---|
| 10 | 10 | |
|---|
| 11 | 11 | # make the runtime |
|---|
| 12 | 12 | cp -R lib ../tango |
|---|
| 13 | 13 | cd ../tango/lib |
|---|
| 14 | | make -f llvmdc-posix.mak clean |
|---|
| 15 | | make -f llvmdc-posix.mak lib |
|---|
| | 14 | make -f ldc-posix.mak clean |
|---|
| | 15 | make -f ldc-posix.mak lib |
|---|
| 16 | 16 | cd ../.. |
|---|
| 17 | 17 | |
|---|
| 18 | 18 | # install the runtime |
|---|
| 19 | | rm -f lib/libllvmdc-runtime*.a |
|---|
| 20 | | cp runtime/internal/libllvmdc-runtime*.a lib |
|---|
| | 19 | rm -f lib/libldc-runtime*.a |
|---|
| | 20 | cp runtime/internal/libldc-runtime*.a lib |
|---|
| 21 | 21 | rm -f lib/libtango-gc-basic*.a |
|---|
| 22 | 22 | cp tango/lib/gc/basic/libtango-gc-basic*.a lib |
|---|
| r492 |
r663 |
|
| 3 | 3 | */ |
|---|
| 4 | 4 | |
|---|
| 5 | | module llvmdc.cstdarg; |
|---|
| | 5 | module ldc.cstdarg; |
|---|
| 6 | 6 | |
|---|
| 7 | 7 | // Check for the right compiler |
|---|
| 8 | | version(LLVMDC) |
|---|
| | 8 | version(LDC) |
|---|
| 9 | 9 | { |
|---|
| 10 | 10 | // OK |
|---|
| … | … | |
| 12 | 12 | else |
|---|
| 13 | 13 | { |
|---|
| 14 | | static assert(false, "This module is only valid for LLVMDC"); |
|---|
| | 14 | static assert(false, "This module is only valid for LDC"); |
|---|
| 15 | 15 | } |
|---|
| 16 | 16 | |
|---|
| r527 |
r663 |
|
| 8 | 8 | */ |
|---|
| 9 | 9 | |
|---|
| 10 | | module llvmdc.intrinsics; |
|---|
| | 10 | module ldc.intrinsics; |
|---|
| 11 | 11 | |
|---|
| 12 | 12 | // Check for the right compiler |
|---|
| 13 | | version(LLVMDC) |
|---|
| | 13 | version(LDC) |
|---|
| 14 | 14 | { |
|---|
| 15 | 15 | // OK |
|---|
| … | … | |
| 17 | 17 | else |
|---|
| 18 | 18 | { |
|---|
| 19 | | static assert(false, "This module is only valid for LLVMDC"); |
|---|
| | 19 | static assert(false, "This module is only valid for LDC"); |
|---|
| 20 | 20 | } |
|---|
| 21 | 21 | |
|---|
| r593 |
r663 |
|
| 1 | | private import llvmdc.intrinsics; |
|---|
| | 1 | private import ldc.intrinsics; |
|---|
| 2 | 2 | |
|---|
| 3 | 3 | extern(C): |
|---|
| r557 |
r663 |
|
| 6 | 6 | |
|---|
| 7 | 7 | import util.console; |
|---|
| 8 | | import llvmdc.cstdarg; |
|---|
| | 8 | import ldc.cstdarg; |
|---|
| 9 | 9 | |
|---|
| 10 | 10 | // debug = EH_personality; |
|---|
| r591 |
r663 |
|
| 128 | 128 | |
|---|
| 129 | 129 | // initialize it |
|---|
| 130 | | // llvmdc does this inline |
|---|
| | 130 | // ldc does this inline |
|---|
| 131 | 131 | //(cast(byte*) p)[0 .. ci.init.length] = ci.init[]; |
|---|
| 132 | 132 | |
|---|
| r608 |
r663 |
|
| 1 | | # Makefile to build the LLVMDC compiler runtime D library for Linux |
|---|
| | 1 | # Makefile to build the LDC compiler runtime D library for Linux |
|---|
| 2 | 2 | # Designed to work with GNU make |
|---|
| 3 | 3 | # Targets: |
|---|
| … | … | |
| 11 | 11 | # Delete unneeded files created by build process |
|---|
| 12 | 12 | |
|---|
| 13 | | LIB_TARGET_FULL=libllvmdc-runtime.a |
|---|
| 14 | | LIB_TARGET_BC_ONLY=libllvmdc-runtime-bc-only.a |
|---|
| 15 | | LIB_TARGET_C_ONLY=libllvmdc-runtime-c-only.a |
|---|
| 16 | | LIB_TARGET_SHARED=libllvmdc-runtime-shared.so |
|---|
| 17 | | LIB_MASK=libllvmdc-runtime*.* |
|---|
| | 13 | LIB_TARGET_FULL=libldc-runtime.a |
|---|
| | 14 | LIB_TARGET_BC_ONLY=libldc-runtime-bc-only.a |
|---|
| | 15 | LIB_TARGET_C_ONLY=libldc-runtime-c-only.a |
|---|
| | 16 | LIB_TARGET_SHARED=libldc-runtime-shared.so |
|---|
| | 17 | LIB_MASK=libldc-runtime*.* |
|---|
| 18 | 18 | |
|---|
| 19 | 19 | |
|---|
| … | … | |
| 38 | 38 | LCC=llc |
|---|
| 39 | 39 | CLC=ar rsv |
|---|
| 40 | | DC=llvmdc |
|---|
| | 40 | DC=ldc |
|---|
| 41 | 41 | LLC=llvm-as |
|---|
| 42 | 42 | |
|---|
| … | … | |
| 61 | 61 | |
|---|
| 62 | 62 | .d.html: |
|---|
| 63 | | $(DC) -c -o- $(DOCFLAGS) -Df$*.html llvmdc.ddoc $< |
|---|
| | 63 | $(DC) -c -o- $(DOCFLAGS) -Df$*.html ldc.ddoc $< |
|---|
| 64 | 64 | |
|---|
| 65 | 65 | targets : lib sharedlib doc |
|---|
| 66 | 66 | all : lib sharedlib doc |
|---|
| 67 | | lib : llvmdc.lib llvmdc.bclib llvmdc.clib |
|---|
| 68 | | sharedlib : llvmdc.sharedlib |
|---|
| 69 | | doc : llvmdc.doc |
|---|
| | 67 | lib : ldc.lib ldc.bclib ldc.clib |
|---|
| | 68 | sharedlib : ldc.sharedlib |
|---|
| | 69 | doc : ldc.doc |
|---|
| 70 | 70 | |
|---|
| 71 | 71 | ###################################################### |
|---|
| … | … | |
| 96 | 96 | util/utf.bc |
|---|
| 97 | 97 | |
|---|
| 98 | | OBJ_LLVM< |
|---|