Files
compiler-explorer/lib/compilers/tablegen.ts
Matt Godbolt 2ae38a0c3f Make argument parsers instances instead of static classes (#8017)
- Made parsers stateful instances instead of shared static state (for
mllvm options). Fixes #8011 as this is caused by multiple clang-based
compilers being run concurrently and stomping over each others' state.
- passes `Compiler` to the constructor, which removes some param passing
- Added some missing awaits
- Tried to get things less dependent on `examples`, only `go` needs it
- Spotted that `zig` c++ might have issues in discovery
- Fly-by fixed a broken go path in ppc64le_gl122
- removed a redundant override in coccinelle
- made the mojo parser actually use the parser it defined
- canonified tablegen's special method
- 

I changed the zig parser too but as best I can tell it was broken before
(the `1` return value from the command it runs:)

```
ubuntu@ip-172-30-0-164:/infra/.deploy$ /opt/compiler-explorer/zig-0.14.1/zig c++ -mllvm --help-list-hidden /infra/.deploy/examples/c++/default.cpp -S -o /tmp/output.s
...
  --x86-use-vzeroupper                                                       - Minimize AVX to SSE transition penalty
  --xcore-max-threads=<number>                                               - Maximum number of threads (for emulation thread-local storage)
/infra/.deploy/examples/c++/default.cpp:1:1: error: FileNotFound
```
return code 1 (means it's not cached)

---------

Co-authored-by: Partouf <partouf@gmail.com>
2025-08-11 12:14:13 -05:00

52 lines
2.0 KiB
TypeScript

import {CompilerOverrideType} from '../../types/compilation/compiler-overrides.interfaces.js';
import type {ParseFiltersAndOutputOptions} from '../../types/features/filters.interfaces.js';
import {BaseCompiler} from '../base-compiler.js';
import {TableGenParser} from './argument-parsers.js';
export class TableGenCompiler extends BaseCompiler {
static get key() {
return 'tablegen';
}
override optionsForFilter(filters: ParseFiltersAndOutputOptions, outputFilename: string) {
const options: string[] = ['-o', outputFilename];
if (this.compiler.includePath) {
options.push(`-I${this.compiler.includePath}`);
}
return options;
}
override isCfgCompiler() {
return false;
}
override getArgumentParserClass() {
return TableGenParser;
}
override async populatePossibleOverrides() {
const possibleActions = await this.argParser.getPossibleActions();
if (possibleActions.length > 0) {
this.compiler.possibleOverrides?.push({
name: CompilerOverrideType.action,
display_title: 'Action',
description:
'The action to perform, which is the backend you wish to ' +
'run. By default, the records are just printed as text. ' +
'Many backends expect to find certain classes and defnitions ' +
'in your source code. You may find details of those in the ' +
'<a href="https://llvm.org/docs/TableGen/BackEnds.html" target="_blank">documentation</a>, ' +
'but if not, refer to use of the backend in the ' +
'<a href="https://github.com/llvm/llvm-project" target="_blank">LLVM Project</a> ' +
'by searching for the command line name e.g. "gen-attrs".',
flags: ['<value>'],
values: possibleActions,
default: '--print-records',
});
}
await super.populatePossibleOverrides();
}
}