[LLVMdev] Regular Expressions
David Greene
dag at cray.com
Thu Jun 11 14:01:56 PDT 2009
On Thursday 11 June 2009 12:28, Chris Lattner wrote:
> On Jun 9, 2009, at 12:39 PM, David Greene wrote:
> > On Tuesday 09 June 2009 14:34, Dan Gohman wrote:
> >> Can you describe what problem you're trying to solve here? Does it
> >> really need Regular Expressions?
> >
> > Yes. I want TableGen to be able to infer lots of stuff
> > programmatically.
> > This helps tremendously when specifying things like, oh, AVX. :)
>
> I don't see how this relates to regex's, and really don't want to suck
> in an external regex library. Can you give an example of how this
> would help?
Sure:
[Top-level specification]
defm CVTSI2SS : sse1_avx_fp_cvt_scalar_xs_scalar64_xs_node_sintrinsic_rm<
0x2D, "cvtsi2ss", sint_to_fp, "cvtsi2ss", "f32", "i32">;
[Meanwhile, down in the guts...]
class fp_cvt_scalar_VXSnrr<
// Parent: avx_fp_cvt_scalar_xs_node_rm_DEF_V#NAME#_128rr
bits<8> opc,
string OpcodeStr,
SDNode OpNode,
string DstType,
string SrcType,
int CustomPatterns = 0,
list<dag> patterns = [],
string asm = ""
>: fp_unary_vxs_n_rm_rr<
opc,
!cast<RegisterClass>(!patsubst("^f([0-9]+)","FR$1",!patsubst("^i([0-9]+)","GR$1",DstType))),
[...]
Basically, the code keys off type strings to deduce register classes and
other such things. This makes specifying things like converts much easier
because one doesn't need to pass a bunch of additional parameters around to
specify register classes, etc. when it is entirely obvious what they should be
given other parameters.
I'm trying to reduce the number of classes/parameters to deal with so I
can eventually get rid of the Perl script that's generating most of this
stuff right now. This kind of pattern matching and substitution really
helps simplify things to a point where I can imagine manually maintaining
a smaller amount of information.
The BSD regex library is very tiny, almost ideal for what we want to do, which
is fill a functionality hole on Windows only.
-Dave
More information about the llvm-dev
mailing list